3 <ENTRY TERM-MOVE? NORMAL-OUT IMAGE-OUT SET-IMAGE-MODE SET-ECHO-MODE
4 CLEAR-SCREEN CLEAR-EOL CLEAR-EOS KILL-CHAR ERASE-CHAR
5 HOME-CURSOR BOTTOM-CURSOR HOR-POS-CURSOR VER-POS-CURSOR MOVE-CURSOR
6 BACK-CURSOR DOWN-CURSOR UP-CURSOR FORWARD-CURSOR SAVE-CURSOR
7 RESTORE-CURSOR INSERT-LINE INSERT-CHAR GET-TYPE PAD TYPE-AHEAD?
8 TYPE-CHAR SET-CURSOR-POSITION>
12 %<FLOAD "PS:<TAA.IO-DEFS>TTYDEFS.MUD">
14 <NEW-CHANNEL-TYPE TTY (TWAY DEFAULT)
18 TYPE-AHEAD? TTY-TYPE-AHEAD?
19 READ-BYTE-IMMEDIATE TTY-READ-IMMEDIATE
20 READ-BYTE TTY-READ-BYTE
21 READ-BUFFER TTY-READ-BUFFER
22 FILL-READ-BUFFER TTY-FILL-READ
24 GET-READ-BUFFER TTY-GET-READ
25 PRINT-DATA TTY-PRINT-DATA
26 TERM-MOVE? TTY-TERM-MOVE?
27 NORMAL-OUT TTY-NORMAL-OUT
28 IMAGE-OUT TTY-IMAGE-OUT
29 SET-IMAGE-MODE TTY-SET-IMAGE
30 SET-ECHO-MODE TTY-SET-ECHO
36 SET-CURSOR-POSITION TTY-SET-CURS
37 CLEAR-SCREEN CLEAR-SCREEN
43 HOME-CURSOR HOME-CURSOR
44 BOTTOM-CURSOR BOTTOM-CURSOR
45 HOR-POS-CURSOR HOR-POS-CURSOR
46 VER-POS-CURSOR VER-POS-CURSOR
47 MOVE-CURSOR MOVE-CURSOR
48 BACK-CURSOR BACK-CURSOR
49 DOWN-CURSOR DOWN-CURSOR
51 FORWARD-CURSOR FORWARD-CURSOR
52 SAVE-CURSOR SAVE-CURSOR
53 RESTORE-CURSOR RESTORE-CURSOR
54 INSERT-LINE INSERT-LINE
55 INSERT-CHAR INSERT-CHAR
57 TYPE-CHAR TTY-TYPE-CHAR>
59 "This must be patterned according to the definition of TWAY-CHANNEL, so the
60 TWAY code will work when it's wanted."
62 <NEWSTRUC TTY-CHANNEL VECTOR
66 TT-RBUF <OR FALSE STRING>
69 TT-WBUF <OR FALSE STRING>
71 TT-RFSAV FIX ;"Saved RFMOD"
72 TT-RFCUR FIX ;"Current setting of RFMOD"
73 TT-QUEUE <OR STRING CHARACTER FALSE>
76 <DEFMAC UPDATE-MC ('CH 'X "OPTIONAL" 'Y "AUX" (L ()))
77 <COND (<AND <ASSIGNED? X> .X <OR <NOT <STRUCTURED? .X>>
79 <SET L (<COND (<TYPE? .X LIST>
80 <FORM MC-HPOS '.SU <FORM + <FORM MC-HPOS '.SU>
82 (<FORM MC-HPOS '.SU .X>)>)>)>
83 <COND (<AND <ASSIGNED? Y> .Y <OR <NOT <STRUCTURED? .Y>>
85 <SET L (<COND (<TYPE? .Y LIST>
86 <FORM MC-VPOS '.SU <FORM + <FORM MC-VPOS '.SU>
88 (<FORM MC-VPOS '.SU .Y>)> !.L)>)>
89 <COND (<NOT <EMPTY? .L>>
90 <FORM BIND ((SU <FORM CHANNEL-USER .CH>))
91 <FORM COND (<FORM TYPE? '.SU MUD-CHAN> !.L)>>)>>
93 <DEFMAC DPYOP ('TTY 'OPR
94 "OPTIONAL" 'ARG1 'ARG2)
96 <FORM COND (<FORM AND <FORM TT-WBUF .TTY>
97 <FORM NOT <FORM 0? <FORM TT-WBC .TTY>>>>
98 <FORM DUMP-WRITE-BUFFER .TTY>)>
99 <COND (<NOT <ASSIGNED? ARG1>>
100 <FORM CALL SYSOP VTSOP <FORM TT-WJFN .TTY> .OPR>)
101 (<NOT <ASSIGNED? ARG2>>
102 <FORM CALL SYSOP VTSOP <FORM TT-WJFN .TTY>
103 <FORM ORB .OPR ,DP-AG1> .ARG1>)
105 <FORM CALL SYSOP VTSOP <FORM TT-WJFN .TTY>
106 <FORM ORB .OPR <ORB ,DP-AG1 ,DP-AG2>> .ARG1 .ARG2>)>>>
108 <DEFMAC GET-TTY-PARM ('DATA OPER "OPT" 'NEW
109 "AUX" (JFN <FORM TT-RJFN .DATA>))
110 <COND (<==? .OPER PAGE-WIDTH>
111 <COND (<ASSIGNED? NEW>
112 <FORM CALL SYSOP MTOPR .JFN ,/MOSLW .NEW ''(RETURN 3)>)
114 <FORM CALL SYSOP MTOPR .JFN ,/MORLW ''(RETURN 3)>)>)
115 (<==? .OPER PAGE-HEIGHT>
116 <COND (<ASSIGNED? NEW>
117 <FORM CALL SYSOP MTOPR .JFN ,/MOSLL .NEW ''(RETURN 3)>)
119 <FORM CALL SYSOP MTOPR .JFN ,/MORLL ''(RETURN 3)>)>)
120 (<OR <==? .OPER PAGE-X> <==? .OPER PAGE-Y>>
121 <COND (<NOT <ASSIGNED? NEW>>
122 <COND (<==? .OPER PAGE-X>
123 <FORM RHW <FORM CALL SYSOP RFPOS .JFN ''(RETURN 2)>>)
125 <FORM LHW <FORM CALL SYSOP RFPOS .JFN ''(RETURN 2)>>)>)
127 <FORM BIND ((NJ .JFN)
128 (CPTR <FORM CALL SYSOP RFPOS '.NJ ''(RETURN 2)>)
130 <COND (<==? .OPER PAGE-X>
131 <FORM UPDATE-MC .DATA '.RN>
132 <FORM CALL SYSOP SFPOS '.NJ
133 <FORM PUTRHW '.CPTR '.RN>
136 <FORM UPDATE-MC .DATA <> '.RN>
137 <FORM CALL SYSOP SFPOS '.NJ
138 <FORM PUTLHW '.CPTR '.RN>
139 ''(RETURN 2)>)>>)>)>>
143 ["35" "37" "TI" "IMLAC" "DM2500" "HP2645"
144 "NVT" "SYSTEM" "TVT" "VT05" "VT50" "LA30"
145 "LINEPROCESSOR?" "LA36" "VT52" "GLASS" "FOX" "VT100V"
146 "T1061" "H19" "C100" "VT100" "LA38" "LA120"
147 "PTV" "SUPDUP" "HP2640" "AAA" "BBN"]>
149 <DEFINE TTY-GET-TYPE (CHANNEL OPER "AUX" (DATA <CHANNEL-DATA .CHANNEL>)
150 (VEC ,TYPE-NAMES) NUM)
151 #DECL ((CHANNEL) CHANNEL (DATA) TTY-CHANNEL (VEC) <VECTOR [REST STRING]>
153 <COND (<SET NUM <CALL SYSOP GTTYP <TT-RJFN .DATA> '(RETURN 2)>>
154 <COND (<G? .NUM <LENGTH .VEC>>
156 (<NTH .VEC .NUM>)>)>>
158 <DEFINE TTY-TYPE-AHEAD? (CHANNEL OPER
159 "AUX" (DATA <CHANNEL-DATA .CHANNEL>) VAL
161 #DECL ((CHANNEL) CHANNEL (DATA) TTY-CHANNEL (VAL) <OR FIX FALSE>)
162 <COND (<AND <SET VAL <CALL SYSOP SIBE <TT-RJFN .DATA> '(RETURN 2)>>
167 <DEFINE TTY-READ-IMMEDIATE (CHANNEL:CHANNEL OPER
168 "OPTIONAL" (NOWAIT?:<OR ATOM FALSE> <>)
169 "AUX" (DATA:TTY-CHANNEL <CHANNEL-DATA .CHANNEL>)
171 (ECHO?:<OR ATOM !<FALSE>>
172 <NOT <0? <ANDB <TT-RFCUR .DATA>
174 (IMAGE?:<OR ATOM !<FALSE>>
175 <0? <ANDB <TT-RFCUR .DATA>
178 "VALUE" <OR CHARACTER FALSE>)
181 <DUMP-WRITE-BUFFER .DATA>
182 <COND (<SET CHR <GET-QUEUE-CHAR .DATA>>
183 <COND (<AND <NOT .IMAGE?> .ECHO?>
184 <CALL SYSOP BOUT <TT-WJFN .DATA> <CHTYPE .CHR FIX>>)>
187 <AND <SET VAL <CALL SYSOP SIBE <TT-RJFN .DATA> '(RETURN 2)>>
190 <TTY-SET-IMAGE .CHANNEL .OPER T <>>)>
191 <COND (<SET TC <ISYSOP BIN <TT-RJFN .DATA> '(RETURN 2)>>
192 <SET CHR <CHTYPE .TC CHARACTER>>)
193 (<==? <1 .TC> *600220*> ; "IOX4"
194 ; "Come here when interrupted during the BIN. We'll
195 just try again, but maybe the interrupt handler
201 <TTY-SET-IMAGE .CHANNEL .OPER <>>
202 <COND (<AND .ECHO? <TYPE? .CHR CHARACTER>>
203 <CALL SYSOP BOUT <TT-WJFN .DATA>
204 <CHTYPE .CHR FIX>>)>)>
205 <COND (<TYPE? .CHR ATOM>
212 <TTY-SET-IMAGE .CHANNEL .OPER <>>)>>>
214 <DEFINE TTY-READ-BYTE (CHANNEL OPER "AUX" (DATA <CHANNEL-DATA .CHANNEL>))
215 #DECL ((CHANNEL) CHANNEL (DATA) TTY-CHANNEL)
216 <COND (<AND <TT-RBUF .DATA>
219 (<TWAY-READ-BYTE .CHANNEL .OPER>)>>
221 <DEFINE TTY-READ-BUFFER (TTY OPER BUF "OPTIONAL" (LEN <LENGTH .BUF>)
222 (CONT 0) "AUX" (DATA <CHANNEL-DATA .TTY>))
223 #DECL ((TTY) CHANNEL (BUF) STRING (LEN CONT) FIX (DATA) TTY-CHANNEL)
224 <COND (<TT-RBUF .DATA>
225 <TWAY-READ-BUFFER .TTY .OPER .BUF .LEN .CONT>)
227 <CALL READ <TT-RJFN .DATA> .BUF <MIN .LEN <LENGTH .BUF>> .CONT>)>>
229 <DEFINE TTY-GET-READ (TTY OPER "OPTIONAL" NEW
230 "AUX" (DATA <CHANNEL-DATA .TTY>))
231 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (NEW) STRING)
232 <COND (<ASSIGNED? NEW>
238 <DEFINE TTY-BUFLEN (TTY OPER "OPTIONAL" NEW "AUX" (DATA <CHANNEL-DATA .TTY>))
239 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (NEW) FIX)
240 <COND (<ASSIGNED? NEW>
246 <DEFINE TTY-FILL-READ (TTY OPER "OPTIONAL" (CONT 0) (RBUF <>) (END <>)
248 "AUX" (DATA <CHANNEL-DATA .TTY>)
249 (OB <TT-RBUF .DATA>) (BUF <CALL TOPU .OB>) CT
251 (SPROMPT <COND (<AND <ASSIGNED? READ-PROMPT>
252 <TYPE? <SET TS .READ-PROMPT>
256 <STACK <STRING <OR .SPROMPT ""> <ASCII 0>>>)
258 #DECL ((DATA) TTY-CHANNEL (TTY) CHANNEL (BUF OB) STRING (CONT) FIX
259 (RBUF END) <OR STRING FALSE> (NOMORE) <OR ATOM FALSE>
260 (SPROMPT PROMPT) <OR STRING FALSE>)
261 <COND (<NOT .SPROMPT> <SET PROMPT <>>)>
263 <SET END <COND (<AND <ASSIGNED? READ-BREAKS>
264 <TYPE? <SET TS .READ-BREAKS> STRING>>
266 <COND (.RBUF <SET BUF <SET OB .RBUF>>)
268 <COND (<NOT <0? .CONT>>
269 <SET OB <CALL BACKU .OB .CONT>>
270 <COND (<N==? .OB .BUF>
273 #DECL ((OLD NEW) STRING)
277 <COND (<AND <0? .CONT>
279 <TWAY-WRITE-BUFFER .TTY .OPER .PROMPT
280 <- <LENGTH .PROMPT> 1>>)>
281 ; "Eat and echo queued chars"
282 <REPEAT (CHR (TB <REST .BUF .CONT>))
283 <COND (<SET CHR <GET-QUEUE-CHAR .DATA>>
286 <SET CONT <+ .CONT 1>>
287 <TWAY-WRITE-BYTE .TTY .OPER .CHR>)
290 <DUMP-WRITE-BUFFER .DATA>
292 <SET CT <CALL READ <TT-RJFN .DATA> .BUF <LENGTH .BUF> .CONT
293 <OR .END 0> <OR .PROMPT 0>>>
294 <COND (<AND <NOT .NOMORE> <==? .CT <LENGTH .BUF>>>
295 <TT-RBUF .DATA <ISTRING <+ <LENGTH .BUF> 320>>>
299 .BUF <TT-RBUF .DATA>>
300 <SET BUF <TT-RBUF .DATA>>
309 <DEFINE TTY-TERM-MOVE? (TTY OPER "AUX" (DATA <CHANNEL-DATA .TTY>))
310 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL)
311 <NOT <0? <ANDB <CALL SYSOP RTCHR <TT-WJFN .DATA> '(RETURN 2)>
314 <DEFINE TTY-NORMAL-OUT (TTY OPER CHRS
315 "OPTIONAL" (LENGTH <>)
316 "AUX" (DATA <CHANNEL-DATA .TTY>))
317 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL
318 (CHRS) <OR BYTES STRING CHARACTER>)
319 <TTY-SET-IMAGE .TTY SET-IMAGE-MODE <>>
320 <COND (<TYPE? .CHRS STRING>
321 <TWAY-WRITE-BUFFER .TTY
324 <COND (.LENGTH .LENGTH) (<LENGTH .CHRS>)>>)
325 (T <TWAY-WRITE-BYTE .TTY .OPER .CHRS>)>>
327 <DEFINE TTY-IMAGE-OUT (TTY OPER CHRS
328 "OPTIONAL" (LENGTH <>) "TUPLE" MORE
329 "AUX" (DATA <CHANNEL-DATA .TTY>))
330 #DECL ((LENGTH) <OR FIX FALSE> (TTY) CHANNEL (DATA) TTY-CHANNEL
331 (CHRS) <OR FIX CHARACTER STRING BYTES>
332 (MORE) <TUPLE [REST <OR FIX BYTES STRING CHARACTER>]>)
333 <TTY-SET-IMAGE .TTY SET-IMAGE-MODE T>
334 <+ <WRITE-STUFF .TTY .OPER .CHRS .LENGTH>
337 <WRITE-STUFF .TTY .OPER .X <>>>
340 <SETG BUFSTR <ISTRING 12>>
342 <DEFINE WRITE-STUFF (TTY OPER CHRS LENGTH "AUX" (BS ,BUFSTR) (NEG? <>))
343 #DECL ((TTY) CHANNEL (CHRS) <OR STRING FIX CHARACTER>
344 (LENGTH) <OR FIX FALSE> (BS) STRING (VALUE) <OR FIX FALSE>)
345 <COND (<TYPE? .CHRS STRING BYTES>
346 <TWAY-WRITE-BUFFER .TTY .OPER .CHRS
347 <COND (.LENGTH .LENGTH)
349 (<TYPE? .CHRS CHARACTER>
350 <TWAY-WRITE-BYTE .TTY .OPER .CHRS>
353 <SET BS <REST .BS <LENGTH .BS>>>
356 <SET CHRS <- .CHRS>>)>
357 <REPEAT (REM (ANY? <>))
358 #DECL ((REM) FIX (ANY?) <OR ATOM FALSE>)
361 <SET BS <CALL BACKU .BS 1>>
364 <SET BS <CALL BACKU .BS 1>>
366 <TWAY-WRITE-BUFFER .TTY .OPER .BS <LENGTH .BS>>
367 <RETURN <LENGTH .BS>>)>
368 <SET REM <MOD .CHRS 10>>
369 <SET CHRS </ .CHRS 10>>
370 <1 <SET BS <CALL BACKU .BS 1>> <ASCII <+ .REM <ASCII !\0>>>>
373 <DEFINE TTY-OPEN TO (STYPE OPR
374 "OPTIONAL" (NAME <>) (MODE "") (BSZ "")
376 "AUX" OJFN IJFN ERR VAL)
377 #DECL ((OJFN IJFN ERR) <OR FALSE FIX>)
378 <COND (<NOT <ASSIGNED? IBUF?>>
379 <COND (<TYPE? .BSZ STRING>
381 (<SET IBUF? .BSZ>)>)>
382 <COND (<NOT <ASSIGNED? OBUF?>>
383 <COND (<TYPE? .MODE STRING>
385 (<SET OBUF? .MODE>)>)>
389 (<SET OJFN <GET-JFN .NAME
390 %<CHTYPE <ORB ,OF-RD ,OF-WR ,OF-APP> FIX>
393 (T <RETURN .OJFN .TO>)>
394 <SET VAL <CALL SYSOP RFMOD .OJFN '(RETURN 2)>>
398 <COND (.IBUF? <ISTRING 320>)>
401 <COND (.OBUF? <ISTRING 320>)>
411 <DEFINE TTY-SET-ECHO (TTY OPER ON?
412 "AUX" (DATA <CHANNEL-DATA .TTY>)
414 <NOT <0? <ANDB <TT-RFCUR .DATA> ,TT-ECO>>>))
415 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (ON? CURMOD) <OR ATOM FALSE>)
416 <COND (<N==? .CURMOD .ON?>
417 <TT-RFCUR .DATA <XORB <TT-RFCUR .DATA> ,TT-ECO>>
418 <CALL SYSOP SFMOD <TT-RJFN .DATA> <TT-RFCUR .DATA>>)>
421 <DEFINE TTY-SET-IMAGE (TTY OPER ON? "OPTIONAL" (SCREW? T)
422 "AUX" (DATA <CHANNEL-DATA .TTY>)
424 <0? <ANDB <TT-RFCUR .DATA> ,TT-DAM>>))
425 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (ON? CURMOD) <OR ATOM FALSE>)
426 <COND (<N==? .CURMOD .ON?>
427 <TWAY-BUFOUT .TTY BUFOUT <>>
428 <COND (<AND .ON? .SCREW?>
429 <CALL SYSOP SFPOS <TT-RJFN .DATA> -1>)>
432 <ANDB <TT-RFCUR .DATA> %<CHTYPE <XORB ,TT-DAM -1>
435 <ORB <TT-RFCUR .DATA>
436 <ANDB ,TT-DAM <TT-RFSAV .DATA>>>)>>
437 <CALL SYSOP SFMOD <TT-RJFN .DATA> <TT-RFCUR .DATA>>)>
442 <DEFINE TTY-RESET (TTY OPER "OPTIONAL" (NEW? <>) (FLUSH? T)
443 "AUX" (DATA <CHANNEL-DATA .TTY>))
444 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (FLUSH?) <OR ATOM FALSE>)
446 ; "Get the current setting"
447 <TT-RFCUR .DATA <CALL SYSOP RFMOD <TT-RJFN .DATA>
449 ; "Make sure not in image mode"
450 <TTY-SET-IMAGE .TTY .OPER <>>
451 ; "Make sure echoing on"
452 <TTY-SET-ECHO .TTY .OPER T>
453 ; "Save this for future resets"
454 <TT-RFSAV .DATA <TT-RFCUR .DATA>>)
456 <COND (<N==? <TT-RFCUR .DATA> <TT-RFSAV .DATA>>
457 <CALL SYSOP SFMOD <TT-RJFN .DATA> <TT-RFSAV .DATA>>
458 <TT-RFCUR .DATA <TT-RFSAV .DATA>>)>
459 ; "Throw away typeahead"
460 <COND (.FLUSH? <CALL SYSOP CFIBF <TT-RJFN .DATA>>)>)>
461 <COND (<TT-RBUF .DATA>
463 <TT-RBUF .DATA <CALL TOPU <TT-RBUF .DATA>>>)>
464 <COND (<TT-WBUF .DATA>
466 <TT-WBUF .DATA <CALL TOPU <TT-WBUF .DATA>>>)>
470 <DEFINE TTY-QUERY (CHANNEL OPER BIT "AUX" (DATA <CHANNEL-DATA .CHANNEL>))
471 #DECL ((CHANNEL) CHANNEL (BIT) FIX (DATA) TTY-CHANNEL)
472 <COND (<==? .BIT ,BIT-INTELLIGENT>
473 <COND (<TT-RBUF .DATA> T)>)>>
477 <DEFINE TTY-SET-CURS (TTY OPER X Y "AUX" (DATA <CHANNEL-DATA .TTY>))
478 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (X Y) FIX)
479 <UPDATE-MC .TTY .X .Y>
480 <CALL SYSOP SFPOS <TT-RJFN .DATA> <PUTLHW .X .Y>>
483 <DEFINE TTY-PARM (TTY OPER
485 "AUX" (DATA <CHANNEL-DATA .TTY>))
486 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (OPER) ATOM (NEW) FIX)
488 (<==? .OPER PAGE-WIDTH>
489 <COND (<ASSIGNED? NEW>
490 <GET-TTY-PARM .DATA PAGE-WIDTH .NEW>)
492 <GET-TTY-PARM .DATA PAGE-WIDTH>)>)
493 (<==? .OPER PAGE-HEIGHT>
494 <COND (<ASSIGNED? NEW>
495 <GET-TTY-PARM .DATA PAGE-HEIGHT .NEW>)
497 <GET-TTY-PARM .DATA PAGE-HEIGHT>)>)
499 <COND (<ASSIGNED? NEW>
500 <GET-TTY-PARM .DATA PAGE-X .NEW>)
502 <GET-TTY-PARM .DATA PAGE-X>)>)
504 <COND (<ASSIGNED? NEW>
505 <GET-TTY-PARM .DATA PAGE-Y .NEW>)
507 <GET-TTY-PARM .DATA PAGE-Y>)>)>>
511 <DEFINE INSERT-LINE (TTY OPER
512 "OPTIONAL" (N 1) (TOP <>) (BOT <>)
513 "AUX" (DATA <CHANNEL-DATA .TTY>))
514 #DECL ((TTY) CHANNEL (N) FIX (TOP BOT) <OR FIX FALSE>
517 (<NOT <OR .TOP .BOT>> <DPYOP .DATA ,/VTLID .N>)
519 <COND (<NOT .TOP> <SET TOP <GET-TTY-PARM .DATA PAGE-Y>>)>
520 <COND (<NOT .BOT> <SET BOT <- <GET-TTY-PARM .DATA PAGE-HEIGHT>
525 <ORB <LSH .TOP 18> <ANDB .BOT *777777*>>>)>>
527 <DEFINE INSERT-CHAR (TTY OPER
528 "OPTIONAL" (N 1) (LEFT <>) (RIGHT <>)
529 "AUX" (DATA <CHANNEL-DATA .TTY>))
530 #DECL ((TTY) CHANNEL (N) FIX (LEFT RIGHT) <OR FIX FALSE>)
531 <COND (<NOT <OR .LEFT .RIGHT>> <DPYOP .DATA ,/VTCID .N>)
533 <COND (<NOT .LEFT> <SET LEFT <GET-TTY-PARM .DATA PAGE-X>>)>
535 <SET RIGHT <- <GET-TTY-PARM .DATA PAGE-WIDTH> 1>>)>
539 <ORB <ANDB .RIGHT *777777000000*> .LEFT>>)>>
543 <DEFINE CLEAR-SCREEN (TTY OPER "AUX" SU)
544 #DECL ((TTY) CHANNEL)
546 <DPYOP <CHANNEL-DATA .TTY> ,/VTCLR>>
548 <DEFINE CLEAR-EOL (TTY OPER)
549 #DECL ((TTY) CHANNEL)
550 <DPYOP <CHANNEL-DATA .TTY> ,/VTCEL>>
552 <DEFINE CLEAR-EOS (TTY OPER)
553 #DECL ((TTY) CHANNEL)
554 <DPYOP <CHANNEL-DATA .TTY> ,/VTCEW>>
556 <DEFINE FRESH-LINE (TTY OPER "OPTIONAL" (N 1))
557 #DECL ((TTY) CHANNEL (N) FIX)
559 <DPYOP <CHANNEL-DATA .TTY> ,/VTADV .N>>
561 <DEFINE KILL-CHAR (TTY OPER)
562 #DECL ((TTY) CHANNEL)
563 <DPYOP <CHANNEL-DATA .TTY> ,/VTERA>>
565 <DEFINE ERASE-CHAR (TTY OPER "OPTIONAL" (N 1) "AUX" (SU <CHANNEL-USER .TTY>))
566 #DECL ((TTY) CHANNEL (N) FIX)
567 <UPDATE-MC .TTY (<- .N>)>
568 <DPYOP <CHANNEL-DATA .TTY> ,/VTBEC .N>>
572 "SUBTITLE Cursor movement of various sorts"
574 <DEFINE HOME-CURSOR (TTY OPER)
575 #DECL ((TTY) CHANNEL)
577 <DPYOP <CHANNEL-DATA .TTY> ,/VTHOM>>
579 <DEFINE BOTTOM-CURSOR (TTY OPER)
580 #DECL ((TTY) CHANNEL)
582 <DPYOP <CHANNEL-DATA .TTY> ,/VTHMD>>
584 <DEFINE HOR-POS-CURSOR (TTY OPER X)
585 #DECL ((TTY) CHANNEL)
587 <DPYOP <CHANNEL-DATA .TTY> ,/VTHRZ .X>>
589 <DEFINE VER-POS-CURSOR (TTY OPER Y)
590 #DECL ((TTY) CHANNEL)
591 <UPDATE-MC .TTY <> .Y>
592 <DPYOP <CHANNEL-DATA .TTY> ,/VTVRT .Y>>
594 <DEFINE MOVE-CURSOR (TTY OPER X Y "AUX" (CD <CHANNEL-DATA .TTY>))
595 #DECL ((TTY) CHANNEL (CD) TTY-CHANNEL)
596 <UPDATE-MC .TTY .X .Y>
597 ; "Caused by tops-20 bug with binary output"
598 <CALL SYSOP SFPOS <TT-WJFN .CD> -1>
601 <ORB <LSH .Y 18> <ANDB .X *777777*>>>>
603 <DEFINE BACK-CURSOR (TTY OPER "OPTIONAL" (N 1))
604 #DECL ((TTY) CHANNEL (N) FIX)
605 <UPDATE-MC .TTY (<- .N>)>
606 <DPYOP <CHANNEL-DATA .TTY> ,/VTBCK .N>>
608 <DEFINE DOWN-CURSOR (TTY OPER "OPTIONAL" (N 1))
609 #DECL ((TTY) CHANNEL (N) FIX)
610 <UPDATE-MC .TTY <> (.N)>
611 <DPYOP <CHANNEL-DATA .TTY> ,/VTDWN .N>>
613 <DEFINE UP-CURSOR (TTY OPER "OPTIONAL" (N 1))
614 #DECL ((TTY) CHANNEL (N) FIX)
615 <UPDATE-MC .TTY <> (<- .N>)>
616 <DPYOP <CHANNEL-DATA .TTY> ,/VTUP .N>>
618 <DEFINE FORWARD-CURSOR (TTY OPER "OPTIONAL" (N 1))
619 #DECL ((TTY) CHANNEL (N) FIX)
620 <UPDATE-MC .TTY (.N)>
621 <DPYOP <CHANNEL-DATA .TTY> ,/VTFWD .N>>
625 <DEFINE SAVE-CURSOR (TTY OPER)
626 #DECL ((TTY) CHANNEL)
627 <DPYOP <CHANNEL-DATA .TTY> ,/VTSAV>>
629 <DEFINE RESTORE-CURSOR (TTY OPER)
630 #DECL ((TTY) CHANNEL)
631 <DPYOP <CHANNEL-DATA .TTY> ,/VTRES>>
633 <DEFINE TTY-PAD (TTY OPER AMT "AUX" (DATA <CHANNEL-DATA .TTY>)
635 #DECL ((TTY) CHANNEL (AMT) FIX (DATA) TTY-CHANNEL (SPD) <OR FALSE FIX>)
636 <COND (<OR <NOT <SET SPD
637 <CALL SYSOP MTOPR <TT-WJFN .DATA> *27* '(RETURN 3)>>>
640 <SET SPD <ANDB .SPD *777777*>>
641 <SET AMT <FIX </ <FLOAT <* .SPD .AMT>> 7000.0>>>
642 <TTY-SET-IMAGE .TTY PAD T>
643 <REPEAT ((BS ,BUFSTR) (TB .BS))
644 #DECL ((TB BS) STRING)
646 <COND (<N==? .TB .BS>
647 <TWAY-WRITE-BUFFER .TTY .OPER .TB
648 <- <LENGTH .TB> <LENGTH .BS>>>)>
651 <TWAY-WRITE-BUFFER .TTY .OPER .TB>
655 <SET AMT <- .AMT 1>>>>
657 <DEFINE TTY-TYPE-CHAR (CHANNEL OPER CHAR "AUX" (DATA <CHANNEL-DATA .CHANNEL>)
658 (Q <TT-QUEUE .DATA>) (QC <TT-QCT .DATA>))
659 #DECL ((CHANNEL) CHANNEL (CHAR) CHARACTER (DATA) TTY-CHANNEL)
661 <TT-QUEUE .DATA .CHAR>
663 (<TYPE? .Q CHARACTER>
664 <TT-QUEUE .DATA <SET Q <STRING .Q .CHAR " ">>>
666 (<==? .QC <LENGTH .Q>>
667 <TT-QUEUE .DATA <STRING .Q .CHAR " ">>
668 <TT-QCT .DATA <+ .QC 1>>)
670 <PUT .Q <SET QC <+ .QC 1>> .CHAR>
674 <DEFINE GET-QUEUE-CHAR (DATA "AUX" CHR CT)
675 #DECL ((DATA) TTY-CHANNEL)
676 <COND (<G? <SET CT <TT-QCT .DATA>> 0>
677 <TT-QCT .DATA <SET CT <- .CT 1>>>
678 <COND (<TYPE? <SET CHR <TT-QUEUE .DATA>> CHARACTER>
682 <COND (<0? .CT> <TT-QUEUE .DATA <CALL TOPU <TT-QUEUE .DATA>>>)
683 (<TT-QUEUE .DATA <REST <TT-QUEUE .DATA>>>)>)>
688 <DEFINE TTY-PRINT-DATA (TTY OPER OUTCHAN "AUX" (DATA <CHANNEL-DATA .TTY>)
690 #DECL ((TTY) CHANNEL (DATA) TTY-CHANNEL (TS) <OR FALSE STRING>)
691 <PRINC "#TTY-CHANNEL [">
693 <COND (<==? <TT-RJFN .DATA> ,/PRIIN> <PRINC "PRIMARY">)
694 (T <PRIN1 <TT-RJFN .DATA>>)>
695 <COND (<SET TS <TT-RBUF .DATA>>
697 <PRIN1 <LENGTH <CALL TOPU .TS>>>
701 <PRIN1 <TT-RBC .DATA>>)>
702 <COND (<SET TS <TT-WBUF .DATA>>
704 <PRIN1 <LENGTH <CALL TOPU .TS>>>
708 <PRIN1 <TT-WBC .DATA>>)>
710 <PRIN1 <TT-RFCUR .DATA>>