|
|
1.1 root 1: .TH REQUEST 9.2
2: .CT 2 comm_term time_man proc_man
3: .SH NAME
4: request, own, wait, alarm, sleep, nap, kbdchar, rcvchar, realtime, sendchar, sendnchars, kill, exit \- 5620 input/output requests
5: .SH SYNOPSIS
6: .B #include <jerq.h>
7: .PP
8: .B void request(r) int r;
9: .PP
10: .B int own(r) int r;
11: .PP
12: .B int wait(r) int r;
13: .PP
14: .B void alarm(t) unsigned t;
15: .PP
16: .B void sleep(t) unsigned t;
17: .PP
18: .B void nap(t) unsigned t;
19: .PP
20: .B long realtime();
21: .PP
22: .B int kbdchar();
23: .PP
24: .B int rcvchar();
25: .PP
26: .B void sendchar(c) int c;
27: .PP
28: .B "void sendnchars(n, cp) int n; char *cp;"
29: .PP
30: .B void kill(s)
31: .B int s;
32: .PP
33: .B void exit();
34: .SH DESCRIPTION
35: .I Request
36: announces a program's intent to use I/O devices and resources,
37: and is usually called once early in a program.
38: The bit vector
39: .I r
40: indicates which resources are to be used by
41: OR'ing together one or more of the elements
42: .B KBD
43: (keyboard),
44: .BR MOUSE ,
45: .B RCV
46: (characters received by terminal from Unix),
47: .B SEND
48: (characters sent from terminal to Unix)
49: and
50: .BR ALARM .
51: For example,
52: .B request(MOUSE|KBD)
53: indicates that the process
54: wants to use the mouse and keyboard.
55: If the keyboard is not requested,
56: characters typed will be sent to the standard input of the Unix process.
57: If the mouse is not requested,
58: mouse events in the process's layer will be interpreted by the
59: system rather than passed to the process.
60: .B SEND
61: and
62: .B CPU
63: (see
64: .B wait
65: below) are always implicitly
66: requested.
67: .I Request
68: sleeps for one clock tick to synchronize mouse control with the kernel.
69: .PP
70: .I Own
71: returns a bit vector
72: of which I/O resources have data available.
73: For example,
74: .BR own()&KBD
75: indicates
76: whether a character is available to be read by
77: .I kbdchar
78: (see below),
79: .B own()&MOUSE
80: tells if the process's
81: .B mouse
82: structure (see
83: .IR button (9.2))
84: is current, and
85: .B own()&ALARM
86: indicates whether the alarm timer has fired.
87: .PP
88: .IR Wait 's
89: argument
90: .I r
91: is a bit vector composed as for
92: .IR request .
93: .I Wait
94: suspends the process,
95: enabling others,
96: until at least one of the requested resources is available.
97: The return value is a bit vector indicating which of the requested resources
98: are available \(em the same as
99: .BR own()&r .
100: .PP
101: Processes wishing to give up the processor to enable other processes to run
102: may call
103: .BR wait(CPU) ;
104: it will return as soon as all other active processes have had a chance to run.
105: .B CPU
106: is a fake resource which is always
107: requested.
108: The
109: .B SEND
110: pseudo-resource is unused;
111: .B wait(SEND)
112: always succeeds.
113: .PP
114: .I Alarm
115: starts a timer which will fire
116: .I t
117: ticks (60ths of a second) into the future.
118: A pseudo-resource
119: .B ALARM
120: can be used to check the status of the timer with
121: .I own
122: or
123: .IR wait .
124: Calling
125: .I alarm
126: implicitly requests the
127: .B ALARM
128: pseudo-resource.
129: .PP
130: .I Nap
131: busy loops for
132: .I t
133: ticks of the 60Hz internal clock.
134: To avoid beating with the display, programs drawing rapidly changing scenes
135: should
136: .I nap
137: for two ticks
138: between updates, to synchronize the display and memory.
139: .I Nap
140: busy loops until the time is up;
141: .I sleep
142: is identical except that it
143: gives up the processor for the interval.
144: Except when unwilling to give up
145: the mouse, a program should call
146: .I sleep
147: in preference to
148: .IR nap .
149: .I Sleep
150: does not interfere with
151: .IR alarm ,
152: and vice versa.
153: .PP
154: .I Realtime
155: returns the number of 60Hz clock ticks since
156: .I mux
157: started.
158: .PP
159: .I Kbdchar
160: returns the next keyboard character typed to the process.
161: If no characters have been typed, or
162: .B KBD
163: has not been
164: .IR request ed,
165: .I kbdchar
166: returns
167: \-1.
168: .PP
169: .I Rcvchar
170: returns the next character received from the host,
171: typically written on the standard output of a Unix process.
172: If there are no characters available, or
173: .B RCV
174: has not been
175: .IR request ed,
176: .I rcvchar
177: returns
178: \-1.
179: .PP
180: .I Sendchar
181: sends a single byte to the host,
182: which will normally be read on the standard input of the Unix process.
183: .I Sendnchars
184: sends to the host
185: .I n
186: characters pointed to by
187: .IR p .
188: .PP
189: .I Kill
190: sends the associated Unix process the signal
191: .IR s ;
192: see
193: .IR signal (2).
194: .PP
195: .I Exit
196: terminates the process.
197: Unlike on Unix,
198: .I exit
199: does not return an exit status to a parent.
200: Calling
201: .I exit
202: replaces the running process by the default terminal program.
203: Any associated Unix process must arrange for its own demise;
204: .I exit
205: is a purely local function.
206: When a process calls
207: .IR exit ,
208: all local resources: keyboard, mouse, storage, etc.,
209: are deallocated automatically.
210: .PP
211: .I Realtime
212: returns the number of sixtieths of a second elapsed since
213: .IR mux (9.1)
214: was started.
215: .SH EXAMPLES
216: .EX
217: request(KBD|RCV);
218: for(;;){
219: r=wait(KBD|RCV);
220: if(r&KBD)
221: keyboard(kbdchar());
222: if(r&RCV)
223: receive(rcvchar());
224: }
225: .EE
226: .PD0
227: .IP
228: Take input from either the keyboard or the host.
229: .PD
230: .SH SEE ALSO
231: .IR button (9.2)
232: .SH BUGS
233: .B own()&MOUSE
234: does not guarantee that you own the mouse.
235: The correct test is
236: .EX
237: (own()&MOUSE) && ptinrect(mouse.xy, Drect)
238: .EE
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.