5 BLACK WHITE GRAY WINDOW-BITS
7 CHANGE-COLOR CURRENT-FONT LINE-HEIGHT CHAR-WIDTH SET-FONT
9 HOR-POS-ABS VER-POS-ABS
10 TEXT-CURSOR MOUSE-CURSOR
77 <USE "NETBASE" "NEWSTRUC" "HOSTS" "VSBASE">
81 <INCLUDE "VSTYPES" "VSUTYPES">
83 <INCLUDE-WHEN <COMPILING? "VS100"> "NETDEFS" "VSDEFS" "VSOPS" "VSUDEFS">
85 <NEW-CHANNEL-TYPE VS100 <>
88 READ-BYTE-IMMEDIATE VS-READ-IMMEDIATE
89 WRITE-BUFFER VS-NORMAL-OUT
90 IMAGE-OUT VS-IMAGE-OUT
91 CHANGE-COLOR VS-CHANGE-COLOR
92 CLEAR-EOL VS-CLEAR-EOL
98 CURRENT-FONT VS-SET-FONT
99 CLEAR-EOS VS-CLEAR-EOS
100 CLEAR-SCREEN VS-CLEAR-SCREEN
101 DOWN-CURSOR VS-DOWN-CURSOR
102 UP-CURSOR VS-UP-CURSOR
103 FORWARD-CURSOR VS-FORWARD-CURSOR
104 BACK-CURSOR VS-BACK-CURSOR
105 MOVE-CURSOR VS-MOVE-CURSOR
106 MOVE-CURSOR-ABS VS-MOVE-CURSOR-ABS
107 HOME-CURSOR VS-HOME-CURSOR
108 BOTTOM-CURSOR VS-BOTTOM-CURSOR
109 HOR-POS-CURSOR VS-HOR-POS
110 VER-POS-CURSOR VS-VER-POS
111 HOR-POS-ABS VS-HOR-POS-ABS
112 VER-POS-ABS VS-VER-POS-ABS
113 TEXT-CURSOR VS-TEXT-CURSOR
114 MOUSE-CURSOR VS-MOUSE-CURSOR
115 FRESH-LINE VS-FRESH-LINE
116 MAKE-MENU-WINDOW VS-MENU-WINDOW
117 WRITE-TO-MENU-WINDOW VS-WRITE-TO-MENU
118 INVERT-MENU-WINDOW VS-INVERT-MENU
119 CLEAR-MENU-WINDOW VS-CLEAR-MENU-WINDOW
120 SELECT-MENU-WINDOW VS-SELECT-MENU-WINDOW
122 INSERT-LINE VS-INSERT-LINE
123 INSERT-CHAR VS-INSERT-CHAR
124 ERASE-CHAR VS-ERASE-CHAR
125 KILL-CHAR VS-KILL-CHAR
126 DEFINE-PATTERN DEFINE-PATTERN
127 SET-HIGHLIGHT VS-SET-HIGHLIGHT
128 LOAD-KEYMAPS VS-LOAD-KEYMAPS
129 MOUSE-MOVE? VS-MOUSE-MOVE?
130 WARP-MOUSE VS-WARP-MOUSE
132 DRAW-DASHED VS-DRAW-DASHED
133 DRAW-FILLED VS-DRAW-FILLED
134 DRAW-LINE VS-DRAW-LINE
135 MOUSE-MOVE-WINDOW MOUSE-MOVE-WINDOW
136 MOUSE-RESIZE-WINDOW MOUSE-RESIZE-WINDOW
137 MOUSE-OPEN-WINDOW MOUSE-OPEN-WINDOW
138 MAKE-TEMP-WINDOW MAKE-TEMP-WINDOW
140 PAGE-X-ABS VS-HOR-POS-ABS
142 PAGE-Y-ABS VS-VER-POS-ABS
143 PAGE-HEIGHT VS-PAGE-HEIGHT
144 PAGE-WIDTH VS-PAGE-WIDTH
147 PAGE-HEIGHT-ABS VS-PAGE-HEIGHT-ABS
148 PAGE-WIDTH-ABS VS-PAGE-WIDTH-ABS
150 MOVE-WINDOW VS-MOVE-WINDOW
151 WINDOW-NAME VS-WINDOW-NAME
152 CLEAR-REGION VS-CLEAR-REGION
153 FILL-REGION VS-FILL-REGION
154 FREE-PATTERN FREE-PATTERN
155 LINE-HEIGHT VS-LINE-HEIGHT
156 CHAR-WIDTH VS-CHAR-WIDTH
157 CUT-BUFFER VS-CUT-BUFFER
158 WINDOW-PARENT WINDOW-PARENT
159 WINDOW-CHILDREN WINDOW-CHILDREN
160 TYPE-AHEAD? VS100-TYPE-AHEAD?
161 WINDOW-FUNCTION VS-WINDOW-FUNCTION
166 INTERPRET-LOCATOR INTERPRET-LOCATOR
167 DISPLAY-CURSOR VS-DISPLAY-CURSOR
168 QUERY-MOUSE VS-QUERY-MOUSE
169 RAISE-WINDOW RAISE-WINDOW
170 LOWER-WINDOW LOWER-WINDOW
171 CIRC-WINDOW CIRC-WINDOW
172 SCALED-TO-ABSOLUTE SCALED-TO-ABSOLUTE
173 ABSOLUTE-TO-SCALED ABSOLUTE-TO-SCALED
175 ICONIFIED? ICONIFIED?
177 DE-ICONIFY DE-ICONIFY
178 MOUSE-LOWER-WINDOW MOUSE-LOWER-WINDOW
179 KILL-SUBWINDOWS KILL-SUBWINDOWS
180 REDISPLAY-ICON REDISPLAY-ICON
181 INVERT-ICON INVERT-ICON
182 SET-RESIZE-HINT SET-RESIZE-HINT
183 WINDOW-BITS WINDOW-BITS
184 INVERSE-VIDEO INVERSE-VIDEO
191 (INITIAL-BORDER INITIAL-BACKGROUND)
193 (INITIAL-TEXT-CURSOR)
194 <OR ATOM FALSE VECTOR CURSOR>
195 (VS100-DIRECTORY) <OR STRING FALSE>
196 (INITIAL-MOUSE-CURSOR)
197 <OR ATOM FALSE VECTOR CURSOR>>
199 <SETG INITIAL-BORDER BLACK>
201 <SETG INITIAL-BACKGROUND WHITE>
203 <SETG INITIAL-FONT "8X13">
205 <SETG INITIAL-TEXT-CURSOR T>
207 <SETG VS100-DIRECTORY <>>
209 <DEFINE RAISE-WINDOW (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
210 <VSOP <VW-VS100 .VW> X-RAISE-WINDOW <VW-ID .VW>>>
212 <DEFINE LOWER-WINDOW (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
213 <VSOP <VW-VS100 .VW> X-LOWER-WINDOW <VW-ID .VW>>>
215 <DEFINE CIRC-WINDOW (CHN:VSCHAN OPER
216 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
217 <VSOP <VW-VS100 .VW> X-CIRC-WINDOW <VW-ID .VW>>>
219 <DEFINE VS100-TYPE-AHEAD? (CHN:VSCHAN OPER)
220 <ANY-INPUT? <VW-VS100 <CHANNEL-DATA .CHN>:VSW>>>
222 <DEFINE SCALED-TO-ABSOLUTE (CHN:VSCHAN OPER:ATOM FIRST:<OR FIX FLOAT VECTOR>
223 "OPT" (SECOND:<OR FIX FLOAT FALSE> <>)
224 (REL?:<OR ATOM FALSE> <>)
225 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
226 (SC:<OR SCALE FALSE> <VW-SCALE .VW>))
227 <COND (<NOT <TYPE? .FIRST VECTOR>>
231 <CHANNEL-OP .CHN DRAW-TOP>)
233 <SCALE-POINT .FIRST .VW .REL?>
236 <DEFINE ABSOLUTE-TO-SCALED (CHN:VSCHAN OPER:ATOM FIRST:<OR FIX VECTOR>
237 "OPT" (SECOND:<OR FIX FALSE> <>)
238 (REL?:<OR ATOM FALSE> <>)
239 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
240 (SC:<OR SCALE FALSE> <VW-SCALE .VW>)
242 <COND (<NOT <TYPE? .FIRST VECTOR>>
245 <COND (<ASSIGNED? SECOND> .SECOND) (T 0)>>>)>
246 <COND (<NOT .SC> .FIRST)
249 <+ </ <SET NUM <FLOAT <1 .FIRST>>> <S-WSCALE .SC>>
250 <COND (<NOT .REL?> <S-LEFT .SC>) (T 0.0)>>>
252 <+ </ <SET NUM <FLOAT <2 .FIRST>>> <S-HSCALE .SC>>
253 <COND (.REL? 0.0)(T <S-TOP .SC>)>>>)>
256 <DEFINE VS-SCALE (CHN:VSCHAN OPER:ATOM
257 "OPT" FROB:<OR FIX FLOAT FALSE>
258 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
259 (SC:<OR SCALE FALSE> <VW-SCALE .VW>) (OLD <>)
260 TEMP:<OR FLOAT FALSE>)
263 <COND (<==? .OPER DRAW-LEFT>
264 <COND (<==? <SET OLD <S-LEFT .SC>> 0.0> <>) (T .OLD)>)
265 (<==? .OPER DRAW-TOP>
266 <COND (<==? <SET OLD <S-TOP .SC>> 0.0> <>) (T .OLD)>)
267 (<==? .OPER DRAW-HEIGHT> <S-HEIGHT .SC>)
268 (<==? .OPER DRAW-WIDTH> <S-WIDTH .SC>)>>)>
269 <COND (<ASSIGNED? FROB>
271 <SET SC <CHTYPE [0.0 0.0 <> <> 1.0 1.0] SCALE>>
273 <COND (<TYPE? .FROB FIX> <SET FROB <FLOAT .FROB>>)>
274 <COND (<==? .OPER DRAW-LEFT>
275 <COND (<NOT .FROB> <S-LEFT .SC 0.0>) (T <S-LEFT .SC .FROB>)>)
276 (<==? .OPER DRAW-TOP>
277 <COND (<NOT .FROB> <S-TOP .SC 0.0>) (T <S-TOP .SC .FROB>)>)
278 (<==? .OPER DRAW-WIDTH> <S-WIDTH .SC .FROB>)
279 (<==? .OPER DRAW-HEIGHT> <S-HEIGHT .SC .FROB>)>
280 <COND (<AND <NOT <S-HEIGHT .SC>>
282 <==? <S-TOP .SC> 0.0>
283 <==? <S-LEFT .SC> 0.0>>
286 <COND (<NOT <SET TEMP <S-WIDTH .SC>>> <S-WSCALE .SC 1.0>)
287 (T <S-WSCALE .SC </ <FLOAT <VW-WIDTH .VW>> .TEMP>>)>
288 <COND (<NOT <SET TEMP <S-HEIGHT .SC>>> <S-HSCALE .SC 1.0>)
290 <S-HSCALE .SC </ <FLOAT <VW-HEIGHT .VW>> .TEMP>>)>)>)>
293 <DEFINE VS-QUERY-MOUSE (CHN:VSCHAN OPER UV:<UVECTOR [2 FIX]>
294 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) P)
295 <COND (<SET P <VSOP <VW-VS100 .VW> X-QUERY-MOUSE <VW-ID .VW>>>
297 <2 .UV <I-SPAR3 .P>>)>>
299 <DEFINE INTERPRET-LOCATOR (CHN:VSCHAN OPER LOC:FIX UV:<UVECTOR [2 FIX]>
300 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) P)
302 <VSOP <VW-VS100 .VW> X-INTERPRET-LOCATOR <VW-ID .VW> .LOC>>
307 <DEFINE VS-WINDOW-FUNCTION (CHN:VSCHAN OPER
308 "OPT" FROB:<OR ATOM APPLICABLE FALSE>
309 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
310 <COND (<NOT <ASSIGNED? FROB>> <VW-FUNCTION .VW>)
311 (T <VW-FUNCTION .VW .FROB> .FROB)>>
313 <DEFINE WINDOW-PARENT (CH:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CH>))
314 <COND (<==? <VW-PARENT .VW> <VS-TOPCHAN <VW-VS100 .VW>>> <>)
315 (T <VW-PARENT .VW>)>>
317 <DEFINE WINDOW-CHILDREN (CH:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CH>))
320 <DEFINE PRINT-VSW (VW:VSW
321 "OPTIONAL" (OUTCHAN:CHANNEL .OUTCHAN)
322 (VS:VS <VW-VS100 .VW>))
324 <COND (<VS-HOST .VS> <PRIN1 <VS-HOST .VS>>)>
342 <COND (<VW-CFONT .VW> <FONT-NAME <VW-CFONT .VW>>)>
344 <COND (<VW-CURSOR .VW> <PRINC " CURSOR">)>
345 <COND (<==? <VW-BG .VW> <VS-BLACK .VS>> <PRINC " BLACK">)
346 (<==? <VW-BG .VW> <VS-WHITE .VS>> <PRINC " WHITE">)
347 (<==? <VW-BG .VW> <VS-GRAY .VS>> <PRINC " GRAY">)
348 (T <PRINT-MANY .OUTCHAN PRINC " BG:" <VW-BG .VW>>)>
355 <LENGTH <VW-TOBUF .VW>>>)>
359 <COND (<GASSIGNED? PRINT-VSW> <PRINTTYPE VSW ,PRINT-VSW>)>
361 <DEFINE PRINT-VS (VS:VS "OPTIONAL" (OUTCHAN:CHANNEL .OUTCHAN))
370 <COND (<VS-TOPCHAN .VS> <VW-ID <CHANNEL-DATA <VS-TOPCHAN .VS>>>)>
372 <COND (<VS-TOPCHAN .VS>
373 <LENGTH <VW-KIDS <CHANNEL-DATA <VS-TOPCHAN .VS>>>>)>
375 </ <LENGTH <VS-ALL .VS>> 2>
377 </ <LENGTH <VS-FONTS .VS>> 2>
381 <COND (<VS-BUFFER .VS>
382 <- <LENGTH <VS-BUFFER-TOP .VS>:STRING>
383 <LENGTH <VS-BUFFER .VS>:STRING>>)
386 <LENGTH <VS-IBUFFER .VS>>
392 <COND (<GASSIGNED? PRINT-VS> <PRINTTYPE VS ,PRINT-VS>)>
394 <DEFINE PRINT-WE (WE:WINDOW-EVENT "OPT" (OUTCHAN:CHANNEL .OUTCHAN) "AUX" KIND)
399 <SET KIND <WE-KIND .WE>>
400 (,WE-EXPOSE-WINDOW "EXPOSE")
401 (,WE-EXPOSE-REGION "EXPOSE-REGION")
402 (,WE-EXPOSE-COPY "EXPOSE-COPY")
403 (,WE-RESIZE-WINDOW "RESIZE")
404 (,WE-UNMAP-WINDOW "UNMAP")>
409 <COND (<OR <==? .KIND ,WE-EXPOSE-REGION>
410 <==? .KIND ,WE-EXPOSE-COPY>
411 <==? .KIND ,WE-RESIZE-WINDOW>>
413 <FUNCTION (R:WE-RECTANGLE)
427 <COND (<GASSIGNED? PRINT-WE> <PRINTTYPE WINDOW-EVENT ,PRINT-WE>)>
429 <DEFINE PRINT-ME (ME:MOUSE-EVENT
430 "OPT" (OUTCHAN:CHANNEL .OUTCHAN)
436 <COND (<NOT <0? <ANDB <SET KIND <ME-KIND .ME>> ,ME-PRESSED-MASK>>>
439 (<NOT <0? <ANDB .KIND ,ME-RELEASED-MASK>>> <SET PREL -1> "RELEASED")
440 (<==? .KIND ,ME-MOVED> "MOVED")
441 (<==? .KIND ,ME-ENTER-WINDOW> "ENTER")
442 (<==? .KIND ,ME-LEAVE-WINDOW> "LEAVE")>
444 <COND (<NOT <0? .PREL>>
445 <COND (<NOT <0? <ANDB .KIND
446 <+ ,ME-LEFT-PRESSED ,ME-LEFT-RELEASED>>>>
448 (<NOT <0? <ANDB .KIND
449 <+ ,ME-MIDDLE-PRESSED ,ME-MIDDLE-RELEASED>>>>
466 <COND (<GASSIGNED? PRINT-ME> <PRINTTYPE MOUSE-EVENT ,PRINT-ME>)>
468 <DEFINE VS-READ-IMMEDIATE (CHANNEL:VSCHAN OPER
469 "OPT" (NOWAIT?:<OR ATOM FALSE> <>)
470 "AUX" (VW:VSW <CHANNEL-DATA .CHANNEL>)
471 (VS:VS <VW-VS100 .VW>))
472 <GET-EVENT .VS <NOT .NOWAIT?>>>
474 <DEFINE RECYCLE-EVENTS ("TUPLE" STUFF)
476 <FUNCTION (X:ANY "AUX" L)
477 <COND (<TYPE? .X MOUSE-EVENT>
478 <1 <SET L <ME-CELL .X>> .X>
479 <SETG FREE-MOUSE-EVENTS
480 <PUTREST .L ,FREE-MOUSE-EVENTS>>)
481 (<TYPE? .X WINDOW-EVENT>
482 <PUTREST <REST <SET L <WE-CHANGES .X>>
485 <SETG FREE-RECTANGLES .L>
487 <1 <SET L <WE-CELL .X>> .X>
488 <SETG FREE-WINDOW-EVENTS
489 <PUTREST .L ,FREE-WINDOW-EVENTS>>)>>
493 <DEFINE GET-VS100 (DESC:<OR STRING <PRIMTYPE LIST>>)
495 (<OR <NOT .DESC> <TYPE? .DESC STRING>>
496 <PROG (STR:<OR STRING FALSE> TS (HOST <>) (NUM <>))
498 (<SET STR <OR .DESC <GET-ENV-STR "DISPLAY">>>
499 <COND (<SET TS <MEMQ !\: .STR>>
500 <SET NUM <PARSE <REST .TS>>>
501 <COND (<N==? .TS .STR>
505 <- <LENGTH .STR> <LENGTH .TS>>>>
506 <SET HOST <HOST .HOST>>)>
508 <COND (.HOST <SET DESC (.HOST !.DESC)>)>)
509 (T <SET DESC '(0)>)>)
510 (T <SET DESC '(0)>)>>)>
511 <COND (<==? <LENGTH .DESC:LIST> 1> <VS100-INIT <1 .DESC> <>>)
512 (T <VS100-INIT <2 .DESC> <1 .DESC>>)>>
514 <DEFINE VS100-INIT (WHICH:FIX HOST:<OR FIX FALSE>
515 "AUX" CH L NVS P:<OR UVECTOR FALSE> BUF:STRING NVW)
516 <COND (<NOT <GASSIGNED? VS100-LIST>> <SETG VS100-LIST <SET L ()>>)
517 (T <SET L ,VS100-LIST>)>
519 (<SET NVS <FIND-VS100 .WHICH .HOST>>)
523 <CHANNEL-OPEN NETWORK
524 <STRING "VS" <UNPARSE .WHICH>>
525 <+ ,SERV-VS100 .WHICH>>>)
528 <CHANNEL-OPEN NETWORK
529 <STRING <UNPARSE .HOST>
532 <+ ,SERV-VS100 .WHICH>
547 <SET BUF <REQUEST-BUFFER <> STRING <>>>
556 <LOAD-KEYMAPS .NVS ,X-DEFAULT-KEYMAP>
557 <COND (<SET P <VSOP .NVS X-SETUP 0>>
600 <VS-ALL .NVS (<VW-ID .NVW> <VS-TOPCHAN .NVS>)>
601 <VS-BLACK .NVS <I-LPAR1 .P>>
602 <VS-WHITE .NVS <I-LPAR2 .P>>
603 <VS-GRAY .NVS <I-LPAR3 .P>>
604 <SET P <VSOP .NVS X-QUERY-WINDOW <VW-ID .NVW>>>
605 <VW-WIDTH .NVW <I-SPAR1 .P:UVECTOR>>
606 <VW-HEIGHT .NVW <I-SPAR0 .P:UVECTOR>>
607 <VW-BWIDTH .NVW <I-SPAR5 .P:UVECTOR>>
611 (T <CLOSE .CH> .P)>)>)>>
613 <DEFINE VS-LOAD-KEYMAPS (CH:VSCHAN OPER STR:STRING "OPT" (FORCE? <>))
614 <LOAD-KEYMAPS <VW-VS100 <CHANNEL-DATA .CH>:VSW> .STR .FORCE?>>
616 <DEFINE LOAD-KEYMAPS (VS:VS STR:<OR STRING FALSE> "OPT" (FORCE? <>) "AUX" M1 M2
617 (LOADS:<SPECIAL FIX> 0))
618 <COND (<OR .FORCE? <N=? .STR <VS-MAPNAME .VS>>>
619 <SET M1 <LOAD-MAP .STR "NORMAL">>
620 <SET M2 <LOAD-MAP .STR "FUNCTION">>
622 <COND (<==? .LOADS 2>
627 <VS-MAPNAME .VS .STR>)>
628 <VS-MAPS .VS [.M1 .M2]>)>)
631 <DEFINE LOAD-MAP (STR:<OR STRING FALSE> NM2:<SPECIAL STRING>
632 "AUX" CH:<OR FALSE <CHANNEL 'DISK>> V:VECTOR BASE:FIX
633 (BUF <STACK <IUVECTOR 6>>) CT:FIX TEMP)
634 <COND (<SET CH <GEN-OPEN <COND (,VS100-DIRECTORY
635 <STRING ,VS100-DIRECTORY
637 (.STR)> "READ" "BINARY" DISK>>
638 <SET LOADS <+ .LOADS:FIX 1>>
639 <SET V <IVECTOR <CHANNEL-OP .CH READ-BYTE> <>>>
640 <SET BASE <CHANNEL-OP .CH READ-BYTE>>
642 <COND (<0? <SET CT <CHANNEL-OP .CH READ-BUFFER .BUF>>>
645 <- <1 .BUF> .BASE -1>
646 <CHTYPE <SUBSTRUC .BUF 1 5> KEY>>>
649 (<COND (<=? .NM2 "NORMAL"> <SET TEMP ,X-NORMAL-KEYMAP>)
650 (T <SET TEMP ,X-FUNCTION-KEYMAP>)>
653 <ERROR MISSING-KEYMAP!-ERRORS .NM2 LOAD-KEYMAP>)>>
655 <DEFINE FIND-VS100 (WHICH:FIX HOST:<OR FIX FALSE> "AUX" (L:LIST ,VS100-LIST))
657 <COND (<EMPTY? .L> <RETURN <>>)>
658 <COND (<AND <==? <VS-WHICH <SET VS <1 .L>>> .WHICH>
659 <==? <VS-HOST .VS> .HOST>>
663 <DEFINE MAKE-TEMP-WINDOW MTW
664 (DESC:<OR VSCHAN <PRIMTYPE LIST> STRING> OPER
665 "OPT" (HEIGHT:<OR FIX FALSE> <>)
666 (WIDTH:<OR FIX FALSE> <>) (LEFT:FIX -1)
667 (TOP:FIX -1) (BWIDTH:<OR FIX FALSE> <>)
668 (BPATTERN:<OR ATOM FIX> WHITE)
669 (BACKGROUND:<OR ATOM FIX> BLACK)
670 (FONT:STRING ,INITIAL-FONT)
671 "AUX" PARENT:VSCHAN MX:FIX MY:FIX NVS
672 VW:VSW VS:VS SAVE-HEIGHT SAVE-WIDTH
673 (SAVE-RASTER:<SPECIAL <OR FIX FALSE>> <>)
675 <COND (<NOT <TYPE? .DESC CHANNEL>>
676 <COND (<SET NVS <GET-VS100 .DESC>>
677 <SET PARENT <VS-TOPCHAN .NVS>>)
679 <RETURN .NVS .MTW>)>)
682 <SET VW <CHANNEL-DATA .PARENT>>
683 <SET VS <VW-VS100 .VW>>
684 <VW-FLUSH-BUFFER .VW>
685 <COND (<NOT .BWIDTH> <SET BWIDTH 2>)>
686 <COND (<OR <L? .LEFT 0> <L? .TOP 0>>
687 <SET P <VSOP .VS X-QUERY-MOUSE <VW-ID .VW>>>
688 <COND (<L? .LEFT 0> <SET LEFT <I-SPAR2 .P>>)>
689 <COND (<L? .TOP 0> <SET TOP <I-SPAR3 .P>>)>)>
691 <SET HEIGHT <- <VW-HEIGHT .VW> <* 2 .BWIDTH> .TOP>>)>
693 <SET WIDTH <- <VW-WIDTH .VW> <* 2 .BWIDTH> .LEFT>>)>
695 <MIN <- <VW-WIDTH .VW> .LEFT> <+ .WIDTH <* 2 .BWIDTH>>>>
697 <MIN <- <VW-HEIGHT .VW> .TOP> <+ .HEIGHT <* 2 .BWIDTH>>>>
719 <DEFINE KILL-SUBWINDOWS (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
722 <FUNCTION (CHN:VSCHAN)
725 <COND (<NOT <EMPTY? <SET L <VW-MENU-WINDS .VW>>>>
726 <VSOP <VW-VS100 .VW> X-DESTROY-SUBWINDOWS <VW-ID .VW>>
727 <PUTREST <REST .L <- <LENGTH .L> 1>>
729 <SETG MENU-WINDOW-LIST .L>
730 <VW-MENU-WINDS .VW ()>)>
733 <DEFINE VS-OPEN VO (STYPE OPER NAME DESC:<OR VSCHAN VS <PRIMTYPE LIST> STRING>
734 "OPT" (HEIGHT:<OR FIX FALSE> <>) (WIDTH:<OR FIX FALSE> <>)
735 (LEFT:FIX 0) (TOP:FIX 0) (BWIDTH:<OR FIX FALSE> <>)
736 (BPATTERN:<OR ATOM FIX FALSE> <>)
737 (BACKGROUND:<OR ATOM FIX FALSE> <>)
738 (FONT:<OR STRING FALSE> <>) (BUF? T)
739 (MIN-HEIGHT:FIX 0) (MIN-WIDTH:FIX 0)
740 "AUX" NVS WID F INPUTS PATTERN TEMP TPATTERN
741 (OBUF <COND (.BUF? <ISTRING 320>)>) NVW:VSW
742 P:<OR FALSE UVECTOR> RH:FIX RW:FIX PARENT:VSCHAN
743 (CC:CHANNEL .CURRENT-CHANNEL))
744 <COND (<NOT <TYPE? .DESC CHANNEL>>
745 <COND (<NOT .BWIDTH> <SET BWIDTH 2>)>
746 <COND (<TYPE? .DESC VS>
748 (<NOT <SET NVS <GET-VS100 .DESC>>>
750 <SET PARENT <VS-TOPCHAN .NVS>>)
751 (T <SET PARENT .DESC>)>
752 <SET NVW <CHANNEL-DATA .PARENT>>
753 <COND (<VW-REAL .NVW>
754 <RETURN #FALSE ("ICONS CAN'T HAVE CHILDREN") .VO>)>
755 <VW-FLUSH-BUFFER .NVW>
756 <COND (<NOT .BWIDTH> <SET BWIDTH <VW-BWIDTH .NVW>>)>
757 <COND (<NOT .HEIGHT> <SET HEIGHT <- <VW-HEIGHT .NVW> <* 2 .BWIDTH>>>)>
758 <COND (<NOT .WIDTH> <SET WIDTH <- <VW-WIDTH .NVW> <* 2 .BWIDTH>>>)>
759 <SET NVS <VW-VS100 .NVW>>
761 <SET BPATTERN <TRANSLATE-COLOR .BPATTERN .NVS>>)
763 ; "Inherit border from parent if there is one"
764 <SET BPATTERN <VW-BORDER .NVW>>)
766 ; "Otherwise use initial setting"
767 <SET BPATTERN <TRANSLATE-COLOR ,INITIAL-BORDER .NVS>>)>
769 <SET BACKGROUND <TRANSLATE-COLOR .BACKGROUND .NVS>>)
771 ; "Same for background"
772 <SET BACKGROUND <VW-BG .NVW>>)
774 <SET BACKGROUND <TRANSLATE-COLOR ,INITIAL-BACKGROUND .NVS>>)>
777 <COND (<N==? .PARENT .DESC>
778 <SET FONT ,INITIAL-FONT>)
780 <SET FONT <FONT-NAME <VW-CFONT .NVW>>>)>)>
782 (<SET F <GET-FONT .FONT .NVS>>
783 <SET MIN-WIDTH <* <FONT-WIDTH .F> .MIN-WIDTH>>
784 <SET MIN-HEIGHT <* <FONT-HEIGHT .F> .MIN-HEIGHT>>
789 <VW-ID <CHANNEL-DATA .PARENT:VSCHAN>:VSW>
796 <SET MIN-HEIGHT <MAX 0 .MIN-HEIGHT>>
797 <SET MIN-WIDTH <MAX 0 .MIN-WIDTH>>
805 <VS-ALL .NVS (.WID .CC !<VS-ALL .NVS>)>
806 <VW-KIDS <CHANNEL-DATA .PARENT:VSCHAN>:VSW
808 !<VW-KIDS <CHANNEL-DATA .PARENT:VSCHAN>:VSW>)>
812 <LENGTH <CHANNEL-NAME .CC>:STRING>
814 <COND (<NOT <GASSIGNED? INITIAL-MOUSE-CURSOR>>
815 <SET TEMP ,MDL-CURSOR>)
816 (T <SET TEMP ,INITIAL-MOUSE-CURSOR>)>
817 <COND (<OR <AND <TYPE? .TEMP CURSOR> <SET PATTERN .TEMP>>
818 <AND <TYPE? .TEMP VECTOR>
819 <SET PATTERN <MAKE-PATTERN .NVS !.TEMP>>>>
831 <VSOP .NVS X-REGISTER-CURSOR ,GX-XOR .WID 0 0 0 0 0 0>
833 (T <SET PATTERN <>>)>
834 <COND (<NOT <GASSIGNED? INITIAL-TEXT-CURSOR>> <SET TEMP T>)
835 (T <SET TEMP ,INITIAL-TEXT-CURSOR>)>
836 <COND (<AND <TYPE? .TEMP VECTOR>
837 <SET TPATTERN <MAKE-PATTERN .NVS !.TEMP>>>)
838 (.TEMP <SET TPATTERN .TEMP>)
839 (T <SET TPATTERN <>>)>
842 <COND (<==? .PARENT <VS-TOPCHAN .NVS>>
863 <VSOP .NVS X-MAP-WINDOW .WID>
873 <COND (<==? .BACKGROUND <VS-BLACK .NVS>> ,GX-COPY)
874 (<==? .BACKGROUND <VS-WHITE .NVS>>
885 <+ ,VWM-DEFAULT ,VWM-UNSEEN>
893 <AND <ASSIGNED? SAVE-RASTER> .SAVE-RASTER>
903 <DEFINE VS-WARP-MOUSE (CHN:VSCHAN OPER X:FIX Y:FIX
904 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
905 <VW-FLUSH-BUFFER .VW>
906 <VSOP <VW-VS100 .VW> X-WARP-MOUSE <VW-ID .VW> .X .Y>
909 <DEFINE VS-DRAW-LINE (CHN:VSCHAN OPER FUNC:<OR FIX FALSE>
911 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
912 <VW-FLUSH-BUFFER .VW>
913 <COND (<OR <NOT <0? <MOD <LENGTH .POINTS> 2>>> <L? <LENGTH .POINTS> 4>>
914 <ERROR WRONG-NUMBER-OF-ARGS!-ERRORS DRAW-LINE>)>
915 <SCALE-POINT .POINTS .VW>
916 <REPEAT ((X1 <1 .POINTS>) (Y1 <2 .POINTS>) (VV <REST .POINTS 2>))
917 <SCALE-POINT .VV .VW>
920 <COND (<NOT .FUNC> ,GX-XOR) (.FUNC)>
928 <COND (<EMPTY? <SET VV <REST .VV 2>>> <RETURN>)>>
931 <DEFINE SCALE-POINT (PT:<<PRIMTYPE VECTOR> [2 <OR FIX FLOAT>]> VW:VSW
932 "OPT" (RELATIVE?:<OR ATOM FALSE> <>)
933 "AUX" (SC:<OR FALSE SCALE> <VW-SCALE .VW>) NUM)
935 <COND (<TYPE? <SET NUM <1 .PT>> FLOAT>
936 <1 .PT <FIX <+ .NUM 0.5>>>)>
937 <COND (<TYPE? <SET NUM <2 .PT>> FLOAT>
938 <2 .PT <FIX <+ .NUM 0.5>>>)>)
940 <COND (<TYPE? <SET NUM <1 .PT>> FIX> <SET NUM <FLOAT .NUM>>)>
942 <FIX <+ <* <COND (.RELATIVE? .NUM) (T <- .NUM <S-LEFT .SC>>)>
945 <COND (<TYPE? <SET NUM <2 .PT>> FIX> <SET NUM <FLOAT .NUM>>)>
947 <FIX <+ <* <COND (.RELATIVE? .NUM) (T <- .NUM <S-TOP .SC>>)>
951 <DEFINE VS-DRAW-FILLED
952 (CHN:VSCHAN OPER FUNC:<OR FIX FALSE>
953 FILL-PATTERN:<SPECIAL <OR ATOM FIX>> BORDER?:<SPECIAL <OR ATOM FALSE>>
954 X1:FIX Y1:FIX DFLAGS:<OR FIX FALSE>
956 <COND (<TYPE? .FILL-PATTERN ATOM>
958 <TRANSLATE-COLOR .FILL-PATTERN
959 <VW-VS100 <CHANNEL-DATA .CHN>:VSW>>>)>
960 <VS-DRAW .CHN .OPER .FUNC .X1 .Y1 .DFLAGS !.STUFF>>
962 <DEFINE VS-DRAW-DASHED (CHN:VSCHAN OPER FUNC:<OR FIX FALSE>
963 DASHED-PATTERN:<SPECIAL FIX>
964 DP-LENGTH:<SPECIAL <OR FIX FALSE>>
965 DP-MULT:<SPECIAL <OR FIX FALSE>>
966 X1:<OR FIX FLOAT> Y1:<OR FIX FLOAT> DFLAGS:<OR FIX FALSE>
968 <COND (<NOT .DP-LENGTH> <SET DP-LENGTH 16>)>
969 <COND (<NOT .DP-MULT> <SET DP-MULT 1>)>
970 <VS-DRAW .CHN .OPER .FUNC .X1 .Y1 .DFLAGS !.STUFF>>
973 (CHN:VSCHAN OPER FUNC:<OR FIX FALSE> X1:<OR FIX FLOAT>
974 Y1:<OR FIX FLOAT> DFLAGS:<OR FIX FALSE>
976 "AUX" (VERTS <STACK <ISTRING <* 2 <+ 3 <LENGTH .STUFF>>>>>) (CT 1)
977 (VW:VSW <CHANNEL-DATA .CHN>) (P1 <STACK <VECTOR .X1 .Y1>>)
978 (VS:VS <VW-VS100 .VW>))
979 <VW-FLUSH-BUFFER .VW>
980 <COND (<NOT .FUNC> <SET FUNC ,GX-XOR>)>
981 <COND (<NOT .DFLAGS> <SET DFLAGS 0>)>
982 <SCALE-POINT .P1 .VW>
983 <PUT-WORD .VERTS .CT <1 .P1>>
984 <PUT-WORD .VERTS <SET CT <+ .CT 1>> <2 .P1>>
987 <ANDB .DFLAGS <XORB ,VERTEX-RELATIVE -1>>>
991 <COND (<ASSIGNED? DASHED-PATTERN>
1001 (<ASSIGNED? FILL-PATTERN>
1012 <COND (<==? <VW-BG .VW> <VS-WHITE .VS>>
1018 (T <VSOP .VS X-DRAW .FUNC <VW-ID .VW> .VC .VERTS>)>
1020 <COND (<L? <LENGTH .STUFF> 3>
1021 <ERROR BAD-VERTICES!-ERRORS .STUFF DRAW>
1026 <NOT <0? <ANDB <OR <3 .STUFF> .DFLAGS>
1027 ,VERTEX-RELATIVE>>>>
1028 <PUT-WORD .VERTS <SET CT <+ .CT 1>> <1 .STUFF>>
1029 <PUT-WORD .VERTS <SET CT <+ .CT 1>> <2 .STUFF>>
1030 <PUT-WORD .VERTS <SET CT <+ .CT 1>> <COND (<3 .STUFF>) (T .DFLAGS)>>
1031 <SET STUFF <REST .STUFF 3>>>>
1033 <DEFINE PUT-WORD (BYTES:STRING OFFS:FIX WD:FIX "AUX" (TOFFS <* .OFFS 2>))
1034 <PUT .BYTES .TOFFS <CHTYPE <LSH .WD -8> CHARACTER>>
1035 <PUT .BYTES <- .TOFFS 1> <CHTYPE <ANDB .WD 255> CHARACTER>>>
1037 <DEFINE VS-MOUSE-MOVE? (CHN:VSCHAN OPER
1038 "OPT" ON?:<OR ATOM FALSE FIX>
1039 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
1040 (VS:VS <VW-VS100 .VW>) OLD IP)
1041 <SET OLD <ANDB <SET IP <VW-INPUTS .VW>> ,MOTION-BITS>>
1042 <COND (<TYPE? .ON? ATOM> <SET ON? ,MOUSE-MOVED>)
1043 (<NOT .ON?> <SET ON? 0>)
1044 (<==? .ON? ,MOUSE-LEFT> <SET ON? ,LEFT-DOWN-MOTION>)
1045 (<==? .ON? ,MOUSE-RIGHT> <SET ON? ,RIGHT-DOWN-MOTION>)
1046 (<==? .ON? ,MOUSE-CENTER> <SET ON? ,MIDDLE-DOWN-MOTION>)
1048 <ERROR UNKNOWN-BIT-PATTERN!-ERRORS .ON? MOUSE-MOVE?>
1050 <COND (<AND <ASSIGNED? ON?> <N==? .ON? .OLD>>
1051 <SET IP <ORB <ANDB .IP <XORB ,MOTION-BITS -1>> .ON?>>
1053 <VSOP .VS X-SELECT-INPUT .IP <VW-ID .VW>>)>
1054 <COND (<==? .OLD ,MOUSE-MOVED> T)
1055 (<==? .OLD ,LEFT-DOWN-MOTION> ,MOUSE-LEFT)
1056 (<==? .OLD ,RIGHT-DOWN-MOTION> ,MOUSE-RIGHT)
1057 (<==? .OLD ,MIDDLE-DOWN-MOTION> ,MOUSE-CENTER)
1060 <DEFINE DEFINE-PATTERN
1061 (CHN:<OR VSCHAN <PRIMTYPE LIST> STRING> OPER
1062 BITS:<OR <UVECTOR [8 FIX]> <BYTES [32 FIX]>>
1063 "AUX" VW:VSW VS:<OR VS FALSE>)
1064 <COND (<TYPE? .CHN CHANNEL>
1065 <SET VS <VW-VS100 <SET VW <CHANNEL-DATA .CHN>>>>)
1067 <SET VS <GET-VS100 .CHN>>)>
1069 <VSOP .VS X-STORE-PATTERN 0 .BITS>)>>
1071 <DEFINE FREE-PATTERN (CHN:<OR VSCHAN <PRIMTYPE LIST> STRING> OPER PAT:FIX
1072 "AUX" VW:VSW VS:<OR VS FALSE>)
1073 <COND (<TYPE? .CHN CHANNEL>
1074 <SET VS <VW-VS100 <SET VW <CHANNEL-DATA .CHN>>>>)
1076 <SET VS <GET-VS100 .CHN>>)>
1078 <VSOP <VW-VS100 .VW> X-FREE-PATTERN 0 .PAT>)>>
1080 <DEFINE VS-CLEAR-REGION
1081 (CHN:VSCHAN OPER HEIGHT:<OR FIX FLOAT> WIDTH:<OR FIX FLOAT>
1082 LEFT:<OR FIX FLOAT> TOP:<OR FIX FLOAT>
1084 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>)
1085 (CC <STACK <VECTOR .WIDTH .HEIGHT .LEFT .TOP>>))
1086 <COND (<NOT <ASSIGNED? FUNC>>
1087 <COND (<==? <VW-BG .VW> <VS-WHITE .VS>> <SET FUNC ,GX-SET>)
1088 (T <SET FUNC ,GX-CLEAR>)>)>
1089 <VW-FLUSH-BUFFER .VW>
1090 <SCALE-POINT .CC .VW T>
1091 <SCALE-POINT <REST .CC 2> .VW>
1101 <DEFINE VS-FILL-REGION
1102 (CHN:VSCHAN OPER PAT:<OR ATOM FIX> HEIGHT:<OR FIX FLOAT>
1103 WIDTH:<OR FIX FLOAT> LEFT:<OR FIX FLOAT> TOP:<OR FIX FLOAT> FUNC:FIX
1104 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>)
1105 (CC <STACK <VECTOR .WIDTH .HEIGHT .LEFT .TOP>>))
1106 <COND (<TYPE? .PAT ATOM> <SET PAT <TRANSLATE-COLOR .PAT .VS>>)>
1107 <VW-FLUSH-BUFFER .VW>
1108 <SCALE-POINT .CC .VW T>
1109 <SCALE-POINT <REST .CC 2> .VW>
1120 <DEFINE INVERSE-VIDEO (CHN:<OR VSCHAN VSW> OPER "OPT" ON?:<OR ATOM FALSE>
1122 "AUX" (VW:VSW <COND (<TYPE? .CHN VSW> .CHN)
1123 (T <CHANNEL-DATA .CHN>)>) OLD)
1124 <SET OLD <TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-INVERT>>
1125 <COND (<ASSIGNED? ON?>
1126 <VW-FLUSH-BUFFER .VW .CURSOFF?>
1128 <VW-OUTMODE .VW <ORB <VW-OUTMODE .VW> ,VWM-INVERT>>)
1130 <VW-OUTMODE .VW <ANDB <VW-OUTMODE .VW> <XORB ,VWM-INVERT -1>>>)>)>
1133 <DEFINE UNDERLINE (CHN:<OR VSCHAN VSW> OPER "OPT" ON?:<OR ATOM FALSE>
1135 "AUX" (VW:VSW <COND (<TYPE? .CHN VSW> .CHN)
1136 (T <CHANNEL-DATA .CHN>)>) OLD)
1137 <SET OLD <TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-UNDER>>
1138 <COND (<ASSIGNED? ON?>
1139 <VW-FLUSH-BUFFER .VW .CURSOFF?>
1141 <COND (<NOT <VW-HIGHX .VW>>
1142 <VW-HIGHX .VW <VW-X .VW>>)>
1143 <VW-OUTMODE .VW <ORB <VW-OUTMODE .VW> ,VWM-UNDER>>)
1145 <COND (<NOT <VW-HIGHLIGHT .VW>>
1147 <VW-OUTMODE .VW <ANDB <VW-OUTMODE .VW> <XORB ,VWM-UNDER -1>>>)>)>
1150 <DEFINE VS-SET-HIGHLIGHT (CHN:<OR VSCHAN VSW> OPER
1151 "OPT" PAT:<OR FIX FALSE>
1152 (CURSOFF?:<OR ATOM FALSE> <>)
1154 <COND (<TYPE? .CHN VSW> .CHN)
1155 (T <CHANNEL-DATA .CHN>)>))
1156 <COND (<NOT <ASSIGNED? PAT>> <VW-HIGHLIGHT .VW>)
1158 <VW-FLUSH-BUFFER .VW <NOT .CURSOFF?>>
1159 <VW-HIGHLIGHT .VW .PAT>
1160 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-UNDER>)
1161 (<AND .PAT <NOT <0? .PAT>>>
1162 <VW-HIGHX .VW <VW-X .VW>>)
1164 <VW-HIGHX .VW <>>)>)>>
1166 <DEFINE TRANSLATE-COLOR (CLR:<OR ATOM FIX> VS:VS)
1167 <COND (<TYPE? .CLR FIX> .CLR)
1168 (<==? .CLR BLACK> <VS-BLACK .VS>)
1169 (<==? .CLR WHITE> <VS-WHITE .VS>)
1170 (<==? .CLR GRAY> <VS-GRAY .VS>)
1171 (T <ERROR BAD-COLOR-NAME!-ERRORS .CLR TRANSLATE-COLOR>)>>
1173 <DEFINE VS-CHANGE-COLOR (CHANNEL:VSCHAN OPER BG:<OR ATOM FIX>
1174 "OPT" BORDER:<OR ATOM FIX>
1175 "AUX" (VW:VSW <CHANNEL-DATA .CHANNEL>)
1176 (VS <VW-VS100 .VW>))
1177 <VW-FLUSH-BUFFER .VW>
1178 <SET BG <TRANSLATE-COLOR .BG .VS>>
1179 <COND (<NOT <ASSIGNED? BORDER>> <SET BORDER <VW-BORDER .VW>>)
1180 (T <SET BORDER <TRANSLATE-COLOR .BORDER .VS>>)>
1181 <COND (<OR <N==? .BG <VW-BG .VW>> <N==? .BORDER <VW-BORDER .VW>>>
1182 <VW-BORDER .VW .BORDER>
1183 <COND (<N==? .BG <VW-BG .VW>>
1185 <COND (<==? .BG <VS-BLACK .VS>>
1186 <VW-TEXT-OP .VW ,GX-COPY>)
1187 (<==? .BG <VS-WHITE .VS>>
1188 <VW-TEXT-OP .VW ,GX-COPY-INVERTED>)
1189 (T <VW-TEXT-OP .VW ,GX-XOR>)>)>
1190 <VSOP .VS X-CHANGE-COLOR <VW-ID .VW> .BORDER .BG>)>
1193 <DEFINE VS-MAP MW (CHN:VSCHAN OPER
1194 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) P TOP:FIX LEFT:FIX
1195 WIDTH:FIX HEIGHT:FIX (VS:VS <VW-VS100 .VW>) BWIDTH
1196 NVW:VSW SAVE-RASTER)
1197 <VW-FLUSH-BUFFER .VW>
1198 <COND (<SET SAVE-RASTER <VW-SAVE .VW>>
1199 <COND (<SET P <VSOP .VS X-QUERY-WINDOW <VW-ID .VW>>>
1200 <COND (<NOT <0? <I-SPAR4 .P>>> <RETURN .CHN .MW>)>
1201 <COND (<NOT <0? .SAVE-RASTER>>
1202 <VSOP .VS X-FREE-RASTER 0 .SAVE-RASTER>)>
1203 <SET HEIGHT <I-SPAR0 .P>>
1204 <SET WIDTH <I-SPAR1 .P>>
1205 <SET TOP <I-SPAR3 .P>>
1206 <SET LEFT <I-SPAR2 .P>>
1207 <SET BWIDTH <I-SPAR5 .P>>
1208 <SET NVW <CHANNEL-DATA <VW-PARENT .VW>:VSCHAN>>
1210 <MIN <- <VW-WIDTH .NVW> .LEFT>
1211 <+ .WIDTH <* 2 .BWIDTH>>>>
1213 <MIN <- <VW-HEIGHT .NVW> .TOP>
1214 <+ .HEIGHT <* 2 .BWIDTH>>>>
1215 <COND (<SET SAVE-RASTER
1223 <VW-SAVE .VW .SAVE-RASTER>)>)>)>
1224 <VSOP <VW-VS100 .VW> X-MAP-WINDOW <VW-ID .VW>>>
1226 <DEFINE VS-UNMAP (CHN:VSCHAN OPER "OPT" (QUIET? <>)
1227 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1228 <VW-FLUSH-BUFFER .VW>
1230 <AND <VW-PARENT .VW> <VW-SAVE .VW> <NOT <0? <VW-SAVE .VW>>>>>
1231 ; "Inhibit redisplay events in this case"
1232 <VSOP <VW-VS100 .VW> X-UNMAP-TRANSPARENT <VW-ID .VW>>
1235 <VSOP <VW-VS100 .VW> X-UNMAP-WINDOW <VW-ID .VW>>)>>
1237 <DEFINE RESTORE-WIND RW (VW:VSW
1238 "AUX" (RAST <VW-SAVE .VW>) P CM
1239 (PCH:<OR FALSE VSCHAN> <VW-PARENT .VW>) NVW:VSW
1240 (VS:VS <VW-VS100 .VW>) TOP:FIX LEFT:FIX)
1241 <COND (<AND .PCH .RAST <NOT <0? .RAST>>>
1242 <COND (<SET P <VSOP .VS X-QUERY-WINDOW <VW-ID .VW>>>
1243 <SET TOP <I-SPAR3 .P>>
1244 <SET LEFT <I-SPAR2 .P>>)
1248 <SET NVW <CHANNEL-DATA .PCH>>
1249 <COND (<SET P <VSOP .VS X-QUERY-WINDOW <VW-ID .NVW>>>
1250 <COND (<0? <I-SPAR4 .P>> <RETURN .VW .RW>)>
1251 <SET CM <I-SPAR6 .P>>)
1253 <VSOP .VS X-CLIPMODE 1 <VW-ID .NVW>>
1258 <MIN <- <VW-HEIGHT .NVW> .TOP>
1259 <+ <* 2 <VW-BWIDTH .VW>> <VW-HEIGHT .VW>>>
1260 <MIN <- <VW-WIDTH .NVW> .LEFT>
1261 <+ <* 2 <VW-BWIDTH .VW>> <VW-WIDTH .VW>>>
1265 <VSOP .VS X-CLIPMODE .CM <VW-ID .NVW>>
1266 <VSOP .VS X-FREE-RASTER 0 .RAST>
1270 <DEFINE VS-CLOSE (CHN:VSCHAN OPER
1271 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
1272 (OC <AND <ASSIGNED? CLOSING?> .CLOSING?>)
1273 (CLOSING?:<SPECIAL ATOM> T) (VS:VS <VW-VS100 .VW>)
1274 PC:CHANNEL NVW:VSW CD RAST P CM TC)
1275 <COND (<SET TC <VW-REAL .VW>>
1276 <VW-ICON <CHANNEL-DATA .TC>:VSW <>>
1278 (<SET TC <VW-ICON .VW>>
1279 <VW-REAL <CHANNEL-DATA .TC>:VSW <>>
1281 <MAPF <> <FUNCTION (C:VSCHAN) <CLOSE .C>> <VW-KIDS .VW>>
1282 <COND (<AND <SET CD <VW-CURS-DESC .VW>> <NOT <TYPE? .CD ATOM>>>
1283 <DESTROY-CURSOR .CD .VS>)>
1284 <COND (<NOT <EMPTY? <VW-MENU-WINDS .VW>>>
1285 <PUTREST <REST <VW-MENU-WINDS .VW>
1286 <- <LENGTH <VW-MENU-WINDS .VW>> 1>>
1288 <SETG MENU-WINDOW-LIST <VW-MENU-WINDS .VW>>
1289 <VW-MENU-WINDS .VW ()>)>
1291 <VW-KIDS <SET NVW <CHANNEL-DATA <SET PC <VW-PARENT .VW>>>>
1292 <SPLICE-OUT .CHN <VW-KIDS .NVW>>>
1293 <VS-ALL .VS <SPLICE-OUT <VW-ID .VW> <VS-ALL .VS> 2>>
1294 <COND (<AND <VW-SAVE .VW> <NOT <0? <VW-SAVE .VW>>>>
1295 ; "There's something underneath this"
1296 <CHANNEL-OP .CHN UNMAP T>
1297 ; "So unmap it quietly, which will restore the window")>
1298 <VSOP .VS X-DESTROY-WINDOW <VW-ID .VW>>)
1299 (<AND <VW-SAVE .VW> <NOT <0? <VW-SAVE .VW>>>>
1300 <VSOP .VS X-FREE-RASTER 0 <VW-SAVE .VW>>)>
1303 <DEFINE SPLICE-OUT (FROB:ANY L:LIST "OPT" (N:FIX 1) "AUX" TL:<OR LIST FALSE>)
1304 <COND (<SET TL <MEMQ .FROB .L>>
1305 <COND (<==? .TL .L> <REST .TL .N>)
1307 <SET TL <REST .L <- <LENGTH .L> <LENGTH .TL> 1>>>
1308 <PUTREST .TL <REST .TL <+ .N 1>>>
1312 <SETG MENU-WINDOW-LIST ()>
1314 <GDECL (MENU-WINDOW-LIST) <LIST [REST MENU-WINDOW]>>
1316 <DEFINE VS-MENU-WINDOW
1317 (CHN:VSCHAN OPER HEIGHT:<OR FIX FALSE> WIDTH:FIX LEFT:FIX TOP:FIX
1318 "OPT" (OBJ:ANY <>) TXT:<OR STRING FALSE>
1319 "AUX" WID (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>)
1320 (MWL:LIST ,MENU-WINDOW-LIST) MW:MENU-WINDOW)
1321 <COND (<NOT .HEIGHT> <SET HEIGHT <FONT-HEIGHT <VW-CFONT .VW>>>)>
1322 <VW-FLUSH-BUFFER .VW>
1335 <VSOP .VS X-REGISTER-CURSOR ,GX-XOR .WID 0 0 0 0 0 0>
1336 <VSOP .VS X-MAP-WINDOW .WID>
1337 <COND (<EMPTY? .MWL>
1340 <CHTYPE <VECTOR .WID
1346 !<VW-MENU-WINDS .VW>)>)
1350 <MW-HEIGHT .MW .HEIGHT>
1351 <MW-WIDTH .MW .WIDTH>
1353 <MW-BITS .MW ,VWM-UNSEEN>
1354 <SETG MENU-WINDOW-LIST <REST .MWL>>
1355 <VW-MENU-WINDS .VW <PUTREST .MWL <VW-MENU-WINDS .VW>>>)>
1356 <COND (<NOT <ASSIGNED? TXT>>
1357 <COND (<TYPE? .OBJ STRING> <SET TXT .OBJ>) (T <SET TXT <>>)>)>
1358 <COND (.TXT <CHANNEL-OP .CHN WRITE-TO-MENU-WINDOW .MW .TXT>)>
1361 <DEFINE VS-CLEAR-MENU-WINDOW (CHN:VSCHAN OPER MW:MENU-WINDOW
1362 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
1363 (VS:VS <VW-VS100 .VW>))
1364 <VSOP .VS X-CLEAR <MW-ID .MW>>
1367 <DEFINE VS-SELECT-MENU-WINDOW (CHN:VSCHAN OPER
1368 "OPT" (MW:<OR MENU-WINDOW FALSE> <>)
1369 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) L)
1371 <COND (<NOT <EMPTY? <SET L <VW-MENU-WINDS .VW>>>>
1372 <SET MW <NTH .L <LENGTH .L>>>)>)>
1374 <VSOP <VW-VS100 .VW>
1377 </ <MW-WIDTH .MW> 2>
1378 </ <MW-HEIGHT .MW> 2>>)>>
1380 <DEFINE VS-WRITE-TO-MENU (CHN:VSCHAN OPER MW:MENU-WINDOW TXT:STRING
1381 "OPT" (X:FIX 0) (Y:FIX 0) FONT:STRING
1382 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
1383 (CFONT:<OR FONT FALSE> <VW-CFONT .VW>)
1384 (VS:VS <VW-VS100 .VW>))
1385 <COND (<ASSIGNED? FONT> <SET CFONT <GET-FONT .FONT .VS>>)>
1398 <DEFINE VS-INVERT-MENU (CHN:VSCHAN OPER MW:MENU-WINDOW)
1399 <VSOP <VW-VS100 <CHANNEL-DATA .CHN>:VSW>
1409 <DEFINE VS-SET-FONT (CHN:VSCHAN OPER
1411 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) TF
1412 (VS:VS <VW-VS100 .VW>) P (MH 0) (MW 0))
1413 <COND (<NOT <ASSIGNED? FONT>>
1414 <COND (<SET TF <VW-CFONT .VW>> <FONT-NAME .TF>)>)
1415 (<SET TF <GET-FONT .FONT <VW-VS100 .VW>>>
1416 <COND (<SET P <VSOP .VS X-GET-RESIZE-HINT <VW-ID .VW>>>
1417 <SET MH <I-SPAR0 .P>>
1418 <SET MW <I-SPAR2 .P>>)>
1431 <SETG BUF1 <ISTRING 1>>
1433 <GDECL (BUF1) STRING>
1435 <DEFINE VS-IMAGE-OUT (CHANNEL:VSCHAN OPER CHRS:<OR STRING CHARACTER>
1436 "OPT" (LENGTH:<OR FIX FALSE> <>)
1437 (X:<OR FIX FLOAT FALSE> <>)
1438 (Y:<OR FIX FLOAT FALSE> <>)
1439 (FONT:<OR FONT STRING FALSE> <>)
1440 (DOP:<OR FIX FALSE> <>)
1441 "AUX" (VW:VSW <CHANNEL-DATA .CHANNEL>)
1442 (PP <STACK <VECTOR .X .Y>>) (CFONT <VW-CFONT .VW>)
1443 (VS:VS <VW-VS100 .VW>))
1444 <VW-FLUSH-BUFFER .VW>
1446 <COND (<TYPE? .FONT FONT> <SET CFONT .FONT>)
1447 (T <SET CFONT <GET-FONT .FONT .VS>>)>)>
1448 <GET-COORDS .VW .PP>
1449 <COND (<NOT .DOP> <SET DOP <VW-TEXT-OP .VW>>)>
1450 <COND (<TYPE? .CHRS CHARACTER> <SET CHRS <1 ,BUF1 .CHRS>>)>
1451 <COND (<NOT .LENGTH> <SET LENGTH <LENGTH .CHRS>>)
1452 (T <SET LENGTH <MIN .LENGTH <LENGTH .CHRS>>>)>
1464 <DEFINE GET-COORDS (VW:VSW PP:<<PRIMTYPE VECTOR> [2 <OR FIX FLOAT FALSE>]>
1465 "AUX" (SC <VW-SCALE .VW>) (OX <VW-X .VW>) (OY <VW-Y .VW>)
1466 (X <1 .PP>) (Y <2 .PP>))
1468 <COND (<TYPE? .X FLOAT> <SET X <FIX <+ .X 0.5>>>)>
1470 <COND (<TYPE? .Y FLOAT> <SET Y <FIX <+ .Y 0.5>>>)>
1471 <2 .PP <OR .Y .OY>>)
1472 (<AND <NOT .X> <NOT .Y>> <1 .PP .OX> <2 .PP .OY>)
1475 <1 .PP <S-LEFT .SC>>
1476 <SCALE-POINT .PP .VW>
1480 <SCALE-POINT .PP .VW>
1482 (T <SCALE-POINT .PP .VW>)>)>>
1484 <DEFINE VS-NORMAL-OUT (CHANNEL:VSCHAN OPER CHRS:<OR STRING CHARACTER>
1485 "OPT" (LENGTH:<OR FIX FALSE> <>)
1486 (X:<OR FIX FLOAT FALSE> <>)
1487 (Y:<OR FIX FLOAT FALSE> <>)
1488 (FONT:<OR FONT STRING FALSE> <>)
1489 (DOP:<OR FIX FALSE> <>)
1490 "AUX" (VW:VSW <CHANNEL-DATA .CHANNEL>) ODOP
1491 (CFONT <VW-CFONT .VW>) (RFONT .CFONT) HIGH
1492 (PP <STACK <VECTOR .X .Y>>))
1493 <COND (<TYPE? .CHRS CHARACTER> <SET CHRS <1 ,BUF1 .CHRS>> <SET LENGTH 1>)
1494 (<NOT .LENGTH> <SET LENGTH <LENGTH .CHRS>>)
1495 (T <SET LENGTH <MIN .LENGTH <LENGTH .CHRS>>>)>
1499 (<COND (<NOT .FONT> T)
1500 (<TYPE? .FONT FONT> <SET RFONT .FONT>)
1501 (T <SET RFONT <GET-FONT .FONT <VW-VS100 .VW>>>)>
1502 <GET-COORDS .VW .PP>
1505 <COND (<==? .DOP <SET ODOP <VW-TEXT-OP .VW>>> <SET DOP <>>)>
1506 <COND (<OR <N==? .RFONT .CFONT>
1507 <N==? .Y:FIX <VW-Y .VW>>
1508 <N==? .X:FIX <VW-X .VW>>
1511 <COND (<G? <VW-OCT .VW> 0> <VW-FLUSH-BUFFER .VW T>)>
1512 <CHANNEL-OP .CHANNEL MOVE-CURSOR-ABS .X .Y <> <>>
1513 <VW-CFONT .VW .RFONT>)>
1514 <COND (.DOP <VW-TEXT-OP .VW .DOP>)>
1515 <REPEAT ((CT:FIX 0) CHR:CHARACTER (LAST <CHTYPE -1 CHARACTER>))
1516 <SET CHR <CHTYPE <ANDB <1 .CHRS> 127> CHARACTER>>
1517 <SET CHRS <REST .CHRS>>
1519 <COND (<AND <G=? <ASCII .CHR> 33> <L=? <ASCII .CHR> 126>>
1520 <VS-CHAR .CHANNEL .VW .CHR>)
1521 (<==? .CHR <ASCII 27>> <VS-CHAR .CHANNEL .VW !\$>)
1522 (<==? .CHR <ASCII 32>>
1523 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-UNDER>
1524 <VW-FLUSH-BUFFER .VW <>>
1525 <CHANNEL-OP .CHANNEL UNDERLINE <>>
1526 <VS-CHAR .CHANNEL .VW .CHR>
1527 <CHANNEL-OP .CHANNEL UNDERLINE T>)
1529 <VS-CHAR .CHANNEL .VW .CHR>)>)
1530 (<AND <==? .CHR <ASCII 10>> <==? .LAST <ASCII 13>>>)
1531 (<OR <==? .CHR <ASCII 13>> <==? .CHR <ASCII 10>>>
1532 <DO-LF .CHANNEL .VW>)
1533 (<==? .CHR <ASCII 9>>
1535 <VW-FLUSH-BUFFER .VW <>>
1537 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-UNDER>
1538 <SET HIGH <CHANNEL-OP .CHANNEL UNDERLINE <>>>
1540 <PROG ((X <VW-X .VW>) (AW <FONT-WIDTH <VW-CFONT .VW>>)
1541 (LEN <- <* 8 .AW> <MOD .X <* 8 .AW>>>) OH)
1542 <COND (<G? <SET X <+ .X .LEN>> <VW-WIDTH .VW>>
1543 <COND (<SET OH <VW-HIGHLIGHT .VW>>
1544 <CHANNEL-OP .CHANNEL SET-HIGHLIGHT <>>)>
1546 <CHANNEL-OP .CHANNEL DOWN-CURSOR>
1547 <CHANNEL-OP .CHANNEL CLEAR-EOL>
1549 <CHANNEL-OP .CHANNEL SET-HIGHLIGHT .OH>)>
1550 <VW-X .VW <- .X <VW-WIDTH .VW>>>)
1554 <CHANNEL-OP .CHANNEL UNDERLINE T>)>
1556 (<==? .CHR <ASCII 7>>
1557 <VW-FLUSH-BUFFER .VW>
1558 <VSOP <VW-VS100 .VW> X-FEEP 4 <VW-ID .VW>>)
1559 (<N==? .CHR <ASCII 127>>
1563 <ASCII <ANDB <+ <ASCII .CHR> 64> 127>>>)>
1565 <COND (<G=? .CT .LENGTH> <RETURN .CT>)>>
1566 <COND (<OR .DOP <N==? .CFONT .RFONT>>
1567 <VW-FLUSH-BUFFER .VW T>
1568 <VW-TEXT-OP .VW .DOP>
1569 <VW-CFONT .VW .CFONT>)>
1572 <DEFINE DO-LF (CHN:VSCHAN VW:VSW
1573 "AUX" (Y <VW-Y .VW>) (X <VW-X .VW>) (HEIGHT <VW-HEIGHT .VW>)
1574 (LH <FONT-HEIGHT <VW-CFONT .VW>>)
1575 (MODE <VW-OUTMODE .VW>))
1577 <VW-FLUSH-BUFFER .VW <>>
1578 <COND (<G? <SET Y <+ .Y .LH>> <- .HEIGHT .LH>> <SET Y 0>)>
1583 <VS-CLEAR-EOL .CHN CLEAR-EOL>>
1585 <DEFINE VS-CLEAR-EOL (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1587 <VW-FLUSH-BUFFER .VW <>>
1588 <VSOP <VW-VS100 .VW>
1592 <FONT-HEIGHT <VW-CFONT .VW>>
1593 <- <VW-WIDTH .VW> <VW-X .VW>>
1599 <DEFINE VS-CLEAR-SCREEN (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1600 <VW-HIGHLIGHT .VW <>>
1603 <ANDB <VW-OUTMODE .VW> <XORB -1 <ORB ,VWM-UNDER ,VWM-INVERT>>>>
1606 <VW-OBUF .VW <VW-TOBUF .VW>>
1611 <VSOP <VW-VS100 .VW> X-CLEAR <VW-ID .VW>>
1613 <UPDATE-MC .CHN 0 0>>
1615 <DEFINE VS-CLEAR-EOS (CHN:VSCHAN OPER
1616 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (Y <VW-Y .VW>))
1618 <VW-FLUSH-BUFFER .VW <>>
1619 <COND (<NOT <0? <VW-X .VW>>>
1620 <CHANNEL-OP .CHN CLEAR-EOL>
1621 <SET Y <+ .Y <FONT-HEIGHT <VW-CFONT .VW>>>>)>
1622 <VSOP <VW-VS100 .VW>
1626 <- <VW-HEIGHT .VW> .Y>
1633 <SETG CRLF-STRING <STRING <ASCII 13> <ASCII 10>>>
1635 <DEFINE VS-CHAR (CHN:VSCHAN VW:VSW
1636 "TUPLE" CHARS:<<PRIMTYPE VECTOR> [REST CHARACTER]>
1637 "AUX" (X:FIX <VW-X .VW>) (FONT:FONT <VW-CFONT .VW>)
1638 (WIDTH:FIX <COND (<TYPE? <CHANNEL-USER .CHN> MUD-CHAN>
1639 <* <M-HLEN .CHN> <FONT-WIDTH .FONT>>)
1644 <FUNCTION (CHR:CHARACTER "AUX" WID)
1646 <+ .X <SET WID <CHAR-WIDTH .CHR .FONT>>>>
1648 <OUTPUT-STRING .CHN !\!>
1649 <SET HIGH <VW-HIGHLIGHT .VW>>
1650 <SET UNDER <CHANNEL-OP .CHN UNDERLINE <>>>
1651 <CHANNEL-OP .CHN SET-HIGHLIGHT <>>
1652 <VS-NORMAL-OUT .CHN NORMAL-OUT ,CRLF-STRING>
1653 <CHANNEL-OP .CHN SET-HIGHLIGHT .HIGH>
1654 <CHANNEL-OP .CHN UNDERLINE .UNDER>
1657 <OUTPUT-STRING .CHN .CHR>>
1660 <DEFINE OUTPUT-STRING (CHN:VSCHAN CHR:<OR CHARACTER STRING>
1661 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (OBUF <VW-OBUF .VW>)
1662 (OCT <VW-OCT .VW>) LEN:FIX)
1663 <COND (<TYPE? .CHR CHARACTER> <SET LEN 1> <SET CHR <1 ,BUF1 .CHR>>)
1664 (T <SET LEN <LENGTH .CHR>>)>
1668 <VSOP <VW-VS100 .VW>
1670 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-INVERT>
1671 <COND (<==? <VW-TEXT-OP .VW> ,GX-COPY> ,GX-COPY-INVERTED)
1672 (<==? <VW-TEXT-OP .VW> ,GX-COPY-INVERTED> ,GX-COPY)
1674 (T <VW-TEXT-OP .VW>)>
1678 <FONT-ID <VW-CFONT .VW>>
1681 <VW-OX .VW <VW-X .VW>>
1682 <VW-OY .VW <VW-Y .VW>>
1685 <PROG ((TRANS 0) (CURSOR-IS-OFF <>))
1686 <COND (<G? .LEN <SET TRANS <LENGTH .OBUF>>>
1689 <SET CURSOR-IS-OFF T>
1690 <VSOP <VW-VS100 .VW>
1692 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-INVERT>
1693 <COND (<==? <VW-TEXT-OP .VW> ,GX-COPY>
1695 (<==? <VW-TEXT-OP .VW>
1699 (T <VW-TEXT-OP .VW>)>
1703 <FONT-ID <VW-CFONT .VW>>
1706 <VW-OX .VW <VW-X .VW>>
1707 <VW-OY .VW <VW-Y .VW>>)
1709 <COND (<NOT <EMPTY? .OBUF>>
1710 <SUBSTRUC .CHR 0 .TRANS .OBUF>
1711 <VW-OCT .VW <+ .OCT .TRANS>>)>
1713 <VW-FLUSH-BUFFER .VW <>>
1714 <SET CURSOR-IS-OFF T>
1716 <SET OBUF <VW-TOBUF .VW>:STRING>
1717 <SET CHR <REST .CHR .TRANS>>
1718 <SET LEN <- .LEN .TRANS>>
1721 <SUBSTRUC .CHR 0 .LEN .OBUF>
1722 <VW-OCT .VW <+ .OCT .LEN>>
1723 <VW-OBUF .VW <REST .OBUF .LEN>>)>
1724 <COND (.CURSOR-IS-OFF <CURSOR-ON .VW>)>>)>>
1726 <DEFINE CURSOR-OFF (VW:VSW)
1727 <COND (<VW-CURSOR .VW> <SHOW-CURSOR .VW> <VW-CURSOR .VW <>>)>>
1729 <DEFINE CURSOR-ON (VW:VSW)
1730 <COND (<NOT <VW-CURSOR .VW>> <SHOW-CURSOR .VW> <VW-CURSOR .VW T>)>>
1732 <DEFINE SHOW-CURSOR (VW:VSW "AUX" F:FONT (CD <VW-CURS-DESC .VW>))
1733 <COND (<TYPE? .CD ATOM>
1734 <SET F <VW-CFONT .VW>>
1735 <VSOP <VW-VS100 .VW>
1743 <VS-WHITE <VW-VS100 .VW>>>)
1746 <VSOP <VW-VS100 .VW>
1752 <+ <VW-OX .VW> <C-LEFT .CD>>
1753 <+ <VW-OY .VW> <C-TOP .CD>>
1757 <DEFINE VW-FLUSH-BUFFER (VW:VSW
1758 "OPT" (CURS:<OR ATOM FALSE> T)
1759 "AUX" (VS:VS <VW-VS100 .VW>) (W:FIX <VW-ID .VW>)
1761 <COND (<G? <VW-OCT .VW> 0>
1762 <SET F <VW-CFONT .VW>>
1763 <VSOP <VW-VS100 .VW>
1765 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-INVERT>
1766 <COND (<==? <VW-TEXT-OP .VW> ,GX-COPY>
1768 (<==? <VW-TEXT-OP .VW> ,GX-COPY-INVERTED>
1771 (T <VW-TEXT-OP .VW>)>
1775 <FONT-ID <VW-CFONT .VW>>
1778 <VW-OX .VW <VW-X .VW>>
1779 <VW-OY .VW <VW-Y .VW>>
1781 <VW-OBUF .VW <VW-TOBUF .VW>>)>
1782 <COND (<VW-HIGHX .VW>
1783 <COND (<TEST-VW-MODE <VW-OUTMODE .VW> ,VWM-UNDER>
1784 <VSOP <VW-VS100 .VW> X-LINE ,GX-XOR
1786 <MIN <VW-X .VW> <VW-HIGHX .VW>>
1787 <SET Y <- <+ <VW-Y .VW> <FONT-HEIGHT <VW-CFONT .VW>>>
1789 <MAX <VW-X .VW> <VW-HIGHX .VW>>
1791 <COND (<VW-HIGHLIGHT .VW>
1792 <VSOP <VW-VS100 .VW>
1796 <FONT-HEIGHT <VW-CFONT .VW>>
1797 <ABS <- <VW-X .VW> <VW-HIGHX .VW>>>
1798 <MIN <VW-X .VW> <VW-HIGHX .VW>>
1800 <VW-HIGHLIGHT .VW>>)>
1801 <VW-HIGHX .VW <VW-X .VW>>)>
1802 <COND (.CURS <CURSOR-ON .VW>)>>
1804 <DEFINE VS-BUFOUT (CHN:VSCHAN OPER
1806 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (CDONE? <>))
1807 <COND (<G? <VW-OCT .VW> 0>
1810 <VW-FLUSH-BUFFER .VW T>)>
1812 <COND (<NOT .CDONE?>
1815 <VSB-DUMP <VW-VS100 .VW>>)>
1818 <DEFINE VS-BUFTREE (CHN:VSCHAN OPER
1820 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1821 <COND (<G? <VW-OCT .VW> 0> <CURSOR-OFF .VW> <VW-FLUSH-BUFFER .VW T>)>
1823 <FUNCTION (KID:VSCHAN) <CHANNEL-OP .KID BUFTREE <>>>
1825 <COND (.FORCE? <VSB-DUMP <VW-VS100 .VW>>)>
1828 <DEFINE VS-DOWN-CURSOR (CHN:VSCHAN OPER
1830 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (Y <VW-Y .VW>)
1831 (CH <FONT-HEIGHT <VW-CFONT .VW>>))
1832 <SET Y <+ .Y <* .CT .CH>>>
1833 <CHANNEL-OP .CHN MOVE-CURSOR-ABS <VW-X .VW> .Y T>>
1835 <DEFINE VS-UP-CURSOR (CHN:VSCHAN OPER
1837 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (Y <VW-Y .VW>))
1838 <SET Y <- .Y <* .CT <FONT-HEIGHT <VW-CFONT .VW>>>>>
1839 <CHANNEL-OP .CHN MOVE-CURSOR-ABS <VW-X .VW> .Y T>>
1841 <DEFINE VS-HOME-CURSOR (CHN:VSCHAN OPER)
1842 <CHANNEL-OP .CHN MOVE-CURSOR-ABS 0 0 <> <>>>
1844 <DEFINE VS-BOTTOM-CURSOR (CHN:VSCHAN OPER
1845 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) H CH)
1849 <* <- </ <SET H <VW-HEIGHT .VW>>
1850 <SET CH <FONT-HEIGHT <VW-CFONT .VW>>>>
1856 <DEFINE VS-HOR-POS (CHN:VSCHAN OPER
1858 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1859 <COND (<ASSIGNED? X>
1862 <* .X <FONT-WIDTH <VW-CFONT .VW>>>
1867 (T </ <VW-X .VW> <FONT-WIDTH <VW-CFONT .VW>>>)>>
1869 <DEFINE VS-VER-POS (CHN:VSCHAN OPER
1870 "OPT" Y:<OR FIX FLOAT>
1871 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1872 <COND (<ASSIGNED? Y>
1876 <* .Y <FONT-HEIGHT <VW-CFONT .VW>>>
1880 (T </ <VW-Y .VW> <FONT-HEIGHT <VW-CFONT .VW>>>)>>
1882 <DEFINE VS-HOR-POS-ABS (CHN:VSCHAN OPER
1883 "OPT" X:<OR FIX FLOAT>
1884 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1885 <COND (<ASSIGNED? X>
1886 <CHANNEL-OP .CHN MOVE-CURSOR-ABS .X <VW-Y .VW>>
1890 <DEFINE VS-VER-POS-ABS (CHN:VSCHAN OPER
1892 "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
1893 <COND (<ASSIGNED? Y> <CHANNEL-OP .CHN MOVE-CURSOR-ABS <VW-X .VW> .Y>)
1896 <DEFINE VS-MOVE-CURSOR (CHN:VSCHAN OPER X:FIX Y:FIX
1897 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) F)
1900 <* .X <FONT-WIDTH <SET F <VW-CFONT .VW>>>>
1901 <* .Y <FONT-HEIGHT .F>>
1904 <DEFINE VS-MOVE-CURSOR-ABS (CHN:VSCHAN OPER NX:<OR FIX FLOAT> NY:<OR FIX FLOAT>
1905 "OPT" (CHAR?:<OR ATOM FALSE> <>)
1906 (SCALE?:<OR ATOM FALSE> <NOT .CHAR?>)
1907 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) BOT RIGHT
1908 (CH <FONT-HEIGHT <VW-CFONT .VW>>)
1909 (CW <FONT-WIDTH <VW-CFONT .VW>>) (RCH .CH)
1910 (RCW .CW) (PP <STACK <VECTOR .NX .NY>>) X:FIX
1912 <COND (.SCALE? <SCALE-POINT .PP .VW> <SET X <1 .PP>> <SET Y <2 .PP>>)
1914 <COND (<TYPE? .NX FLOAT> <SET X <FIX <+ .NX 0.5>>>)
1916 <COND (<TYPE? .NY FLOAT> <SET Y <FIX <+ .NY 0.5>>>)
1918 <COND (<OR <N==? .X <VW-X .VW>> <N==? .Y <VW-Y .VW>>>
1923 <SET BOT </ <VW-HEIGHT .VW> .CH>>
1924 <SET RIGHT </ <VW-WIDTH .VW> .CW>>
1928 <SET BOT <VW-HEIGHT .VW>>
1929 <SET RIGHT <VW-WIDTH .VW>>
1935 <COND (<G? .Y 0> <RETURN>)>>)>
1936 <COND (<G=? .Y .BOT> <SET Y <MOD .Y .BOT>>)>
1937 <COND (.CHAR? <SET Y <* .Y .CH>>)>
1940 <SET X <+ .X .RIGHT>>
1943 <COND (<G? .X 0> <RETURN>)>>)>
1944 <COND (<G=? .X .RIGHT>
1945 <SET Y <+ .Y <* .CH </ .X .RIGHT>>>>
1947 <SET X <MOD .X .RIGHT>>)>
1948 <COND (.CHAR? <SET X <* .X .CW>>)>
1949 <COND (.YC <AGAIN>)>>
1950 <COND (<G? <VW-OCT .VW> 0> <VW-FLUSH-BUFFER .VW <>>)>
1956 <UPDATE-MC .CHN </ .X .RCW> </ .Y .RCH>>
1959 <DEFINE VS-FORWARD-CURSOR (CHN:VSCHAN OPER
1961 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) X)
1962 <SET X <+ <VW-X .VW> <* .CT <FONT-WIDTH <VW-CFONT .VW>>>>>
1963 <CHANNEL-OP .CHN MOVE-CURSOR-ABS .X <VW-Y .VW> T>>
1965 <DEFINE VS-BACK-CURSOR (CHN:VSCHAN OPER
1967 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) X)
1968 <SET X <- <VW-X .VW> <* .CT <FONT-WIDTH <VW-CFONT .VW>>>>>
1969 <CHANNEL-OP .CHN MOVE-CURSOR-ABS .X <VW-Y .VW> T>>
1971 <DEFINE DESTROY-CURSOR (CD:<OR CURSOR ATOM> VS:VS)
1972 <COND (<TYPE? .CD ATOM>)
1974 <C-REF .CD <- <C-REF .CD> 1>>
1975 <COND (<L=? <C-REF .CD> 0>
1976 <COND (<NOT <0? <C-MASK .CD>>>
1977 <VSOP .VS X-FREE-RASTER 0 <C-MASK .CD>>)>
1978 <VSOP .VS X-FREE-RASTER 0 <C-RASTER .CD>>)>)>
1981 <DEFINE VS-MOUSE-CURSOR (CHN:VSCHAN OPER
1982 "OPT" PATTERN:<OR STRING BYTES FALSE CURSOR ATOM>
1983 WIDTH:FIX HEIGHT:FIX (TOP:FIX 0) (LEFT:FIX 0)
1984 (MASK:<OR FALSE STRING BYTES> <>)
1985 (DISPLAY:FIX ,GX-XOR)
1986 (PRESERVE?:<OR ATOM FALSE> T)
1987 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
1988 (VS:VS <VW-VS100 .VW>) (OLD <VW-MOUSE-DESC .VW>)
1990 <COND (<AND <ASSIGNED? PATTERN> <N=? .PATTERN .OLD>>
1991 <VW-FLUSH-BUFFER .VW>
1992 <COND (<TYPE? .PATTERN CURSOR>
1993 <COND (<G? <C-REF .PATTERN> 0>
1994 <C-REF .PATTERN <+ <C-REF .PATTERN> 1>>
1995 <VW-MOUSE-DESC .VW .PATTERN>)
1997 <ERROR DEAD-CURSOR!-ERRORS
2000 (<OR <NOT .PATTERN> <TYPE? .PATTERN ATOM>>
2001 <COND (<TYPE? .OLD CURSOR> <DESTROY-CURSOR .OLD .VS>)>
2002 <VW-MOUSE-DESC .VW .PATTERN>)
2012 <COND (<AND <TYPE? .OLD CURSOR> <NOT .PRESERVE?>>
2013 <DESTROY-CURSOR .OLD .VS>)>
2014 <VW-MOUSE-DESC .VW .PATTERN>)>
2015 <COND (<NOT <VW-MOUSE-DESC .VW>>
2016 <VSOP .VS X-UNREGISTER-CURSOR <VW-ID .VW>>)
2017 (<TYPE? <VW-MOUSE-DESC .VW> ATOM>
2031 <C-DISPLAY <SET CURSOR <VW-MOUSE-DESC .VW>>>
2033 <C-RASTER <VW-MOUSE-DESC .VW>>
2041 <DEFINE MAKE-PATTERN
2042 (VS:VS PATTERN:<OR STRING BYTES> WIDTH:FIX HEIGHT:FIX TOP:FIX LEFT:FIX
2043 "OPT" (MASK:<OR STRING BYTES FALSE> <>) (DISPLAY:FIX ,GX-XOR)
2045 <COND (<N==? <LENGTH .PATTERN> <* 2 .HEIGHT </ <+ .WIDTH 15> 16>>>
2046 <ERROR CURSOR-PATTERN-WRONG-LENGTH!-ERRORS
2051 (<AND .MASK <N==? <LENGTH .PATTERN> <LENGTH .MASK>>>
2052 <ERROR MASK-IS-WRONG-LENGTH!-ERRORS
2056 (<SET R <VSOP .VS X-STORE-RASTER 0 .WIDTH .HEIGHT .PATTERN>>
2057 <COND (<OR <NOT .MASK>
2065 <CHTYPE [.R .NR .HEIGHT .WIDTH .TOP .LEFT 1 .DISPLAY]
2067 (T <VSOP .VS X-FREE-RASTER 0 .R> .NR)>)>>
2069 <DEFINE VS-TEXT-CURSOR (CHN:VSCHAN OPER
2070 "OPT" PATTERN:<OR STRING BYTES FALSE CURSOR ATOM>
2071 WIDTH:FIX HEIGHT:FIX (TOP:FIX 0) (LEFT:FIX 0)
2072 (PRESERVE?:<OR ATOM FALSE> T)
2073 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2074 (VS:VS <VW-VS100 .VW>) (OLD <VW-CURS-DESC .VW>)
2076 <COND (<ASSIGNED? PATTERN>
2077 <VW-FLUSH-BUFFER .VW>
2079 <COND (<TYPE? .PATTERN CURSOR>
2080 <COND (<L=? <C-REF .PATTERN> 0>
2081 <ERROR DEAD-CURSOR!-ERRORS .PATTERN TEXT-CURSOR>)
2083 <C-REF .PATTERN <+ <C-REF .PATTERN> 1>>
2084 <VW-CURS-DESC .VW .PATTERN>)>)
2085 (<OR <NOT .PATTERN> <TYPE? .PATTERN ATOM>>
2087 <NOT <TYPE? .OLD ATOM>>
2089 <DESTROY-CURSOR .OLD .VS>)>
2090 <VW-CURS-DESC .VW .PATTERN>)
2099 <COND (.OLD <DESTROY-CURSOR .OLD .VS>)>
2100 <VW-CURS-DESC .VW .PATTERN>)>)>
2104 <DEFINE VS-DISPLAY-CURSOR (CHN:VSCHAN OPER PAT:<OR CURSOR ATOM FALSE>
2105 "OPT" (X:<OR FIX FLOAT FALSE> <>)
2106 (Y:<OR FIX FLOAT FALSE> <>)
2107 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2108 (PP <STACK <VECTOR .X .Y>>) F)
2109 <VW-FLUSH-BUFFER .VW>
2110 <GET-COORDS .VW .PP>
2111 <COND (<==? .PAT TEXT-CURSOR> <SET PAT <VW-CURS-DESC .VW>>)
2112 (<TYPE? .PAT ATOM> <SET PAT <VW-MOUSE-DESC .VW>>)>
2114 (<NOT <TYPE? .PAT CURSOR>>
2115 <VSOP <VW-VS100 .VW>
2119 <FONT-HEIGHT <SET F <VW-CFONT .VW>>>
2123 <VS-WHITE <VW-VS100 .VW>>>)
2125 <VSOP <VW-VS100 .VW>
2131 <+ <1 .PP>:FIX <C-LEFT .PAT>>
2132 <+ <2 .PP>:FIX <C-TOP .PAT>>
2135 <DEFINE VS-FRESH-LINE (CHN:VSCHAN OPER
2137 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2138 (H <FONT-HEIGHT <VW-CFONT .VW>>))
2139 <COND (<NOT <0? <VW-X .VW>>>
2140 <CHANNEL-OP .CHN MOVE-CURSOR-ABS 0 <+ <VW-Y .VW> .H> <> T>
2141 <CHANNEL-OP .CHN CLEAR-EOL>
2151 <COND (<L=? <SET N <- .N 1>> 0> <RETURN>)>>)>
2155 (CHN:VSCHAN OPER HEIGHT:FIX WIDTH:FIX SLEFT:FIX STOP:FIX DLEFT:FIX
2157 "OPT" (FCN:FIX ,GX-COPY) (DOCURS?:<OR ATOM FALSE> T)
2158 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>))
2159 <COND (.DOCURS? <CURSOR-OFF .VW>)>
2160 <VW-FLUSH-BUFFER .VW <>>
2173 <COND (.DOCURS? <CURSOR-ON .VW>)>
2176 <DEFINE VS-INSERT-LINE (CHN:VSCHAN OPER
2177 "OPT" (N:FIX 1) (TOP:<OR FALSE FIX> <>)
2178 (BOT:<OR FALSE FIX> <>)
2179 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2180 (FONT <VW-CFONT .VW>) (H:FIX <FONT-HEIGHT .FONT>)
2181 TEMP (RBOT <- <VW-HEIGHT .VW> 1>))
2182 <COND (<NOT .TOP> <SET TOP <VW-Y .VW>>) (T <SET TOP <* .TOP .H>>)>
2183 <COND (<NOT .BOT> <SET BOT .RBOT>) (T <SET BOT <* .BOT .H>>)>
2184 <COND (<G? .TOP .BOT> <SET TEMP .BOT> <SET BOT .TOP> <SET TOP .TEMP>)>
2185 <COND (<AND <L=? .TOP .RBOT> <NOT <0? .N>>>
2186 <SET BOT <MIN .BOT .RBOT>>
2190 <- .BOT .TOP <* <ABS .N> .H>>
2193 <COND (<G? .N 0> .TOP) (T <+ .TOP <* <- .N> .H>>)>
2195 <COND (<G? .N 0> <+ .TOP <* .N .H>>) (T .TOP)>
2198 <VSOP <VW-VS100 .VW>
2205 <COND (<G? .N 0> .TOP) (T <+ .BOT <* .N .H>>)>
2210 <DEFINE VS-INSERT-CHAR (CHN:VSCHAN OPER
2211 "OPT" (N:FIX 1) (LEFT:<OR FALSE FIX> <>)
2212 (RIGHT:<OR FALSE FIX> <>)
2213 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2214 (FONT <VW-CFONT .VW>) (W:FIX <FONT-WIDTH .FONT>)
2215 TEMP (RRIGHT <- <VW-WIDTH .VW> 1>))
2216 <COND (<NOT .LEFT> <SET LEFT <VW-X .VW>>) (T <SET LEFT <* .LEFT .W>>)>
2217 <COND (<NOT .RIGHT> <SET RIGHT .RRIGHT>) (T <SET RIGHT <* .RIGHT .W>>)>
2218 <COND (<G? .LEFT .RIGHT>
2222 <COND (<AND <L=? .LEFT .RRIGHT> <NOT <0? .N>>>
2227 <- .RIGHT .LEFT <* <ABS .N> .W>>
2228 <COND (<G? .N 0> .LEFT) (T <+ .LEFT <* <- .N> .W>>)>
2230 <COND (<G? .N 0> <+ .LEFT <* .N .W>>) (T .LEFT)>
2234 <VSOP <VW-VS100 .VW>
2240 <COND (<G? .N 0> .LEFT) (T <+ .RIGHT <* .N .W>>)>
2246 <DEFINE VS-ERASE-CHAR (CHN:VSCHAN OPER
2247 "OPTIONAL" (N:FIX 1)
2248 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (X <VW-X .VW>)
2249 (FONT <VW-CFONT .VW>) (W <FONT-WIDTH .FONT>)
2250 (H <FONT-HEIGHT .FONT>) (VS:VS <VW-VS100 .VW>))
2253 <VW-FLUSH-BUFFER .VW>
2254 <REPEAT (NX (NY <VW-Y .VW>) (DIST <* .N .W>))
2257 <COND (<G? .DIST .X> <SET NX 0> <SET DIST <- .DIST .X>>)
2258 (T <SET NX <- .X .DIST>> <SET DIST 0>)>
2269 <COND (<L? <SET NY <- .NY .H>> 0>
2270 <SET NY <- <* </ <VW-HEIGHT .VW> .H> .H> .H>>)>
2271 <SET X <- <VW-WIDTH .VW> .W>>)
2273 <CHANNEL-OP .CHN MOVE-CURSOR-ABS .NX .NY <> <>>
2276 <DEFINE VS-KILL-CHAR (CHN:VSCHAN OPER
2277 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2278 (FONT <VW-CFONT .VW>))
2279 <CHANNEL-OP .CHN BACK-CURSOR>
2281 <VSOP <VW-VS100 .VW>
2290 <CHANNEL-OP .CHN FORWARD-CURSOR>>
2294 <DEFINE ICON? (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
2297 <DEFINE ICONIFIED? (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
2300 <DEFINE INVERT-ICON (CHN:<OR VSCHAN FALSE> OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2301 (VS:VS <VW-VS100 .VW>))
2302 <COND (<NOT <VW-REAL .VW>>
2303 <SET CHN <VW-ICON .VW>>)>
2305 <SET VW <CHANNEL-DATA .CHN>>
2308 <COND (<==? <VW-BG .VW> <VS-BLACK .VS>>
2312 <COND (<==? <VW-BORDER .VW> <VS-BLACK .VS>>
2316 <CHANNEL-OP .CHN REDISPLAY-ICON>
2319 <DEFINE ICONIFY (CHN:VSCHAN OPER X:FIX Y:FIX
2320 "OPT" (IN?:<OR VSCHAN FALSE> <>)
2321 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2322 (VS:VS <VW-VS100 .VW>) FONT NCH NAME:STRING
2324 <COND (<VW-REAL .VW> #FALSE ("CAN'T ICONIFY AN ICON"))
2326 (<SET FONT <GET-FONT ,INITIAL-FONT .VS>>
2327 <SET NAME <CHANNEL-NAME .CHN>>
2328 <SET HIGH <+ 8 <FONT-HEIGHT .FONT>>>
2329 <SET WID <+ 8 <* <FONT-WIDTH .FONT> <LENGTH .NAME>>>>
2330 <COND (<SET NCH <CHANNEL-OPEN VS100 <STRING "ICON-" .NAME>
2337 <CHANNEL-OP .NCH MOUSE-CURSOR !,CROSS-CURSOR
2338 ,GX-COPY-INVERTED <>>
2339 <CHANNEL-OP .NCH TEXT-CURSOR <>>
2340 <SET VW <CHANNEL-DATA .NCH>>
2342 <CHANNEL-OP .CHN UNMAP>
2343 <CHANNEL-OP .NCH REDISPLAY-ICON>
2346 <DEFINE REDISPLAY-ICON (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2347 REAL:<OR VSCHAN FALSE> (VS:VS <VW-VS100 .VW>)
2349 <COND (<NOT <SET REAL <VW-REAL .VW>>>
2350 <COND (<SET REAL <VW-ICON .VW>>
2352 <SET CHN <VW-ICON .VW>>
2353 <SET VW <CHANNEL-DATA .CHN>>)>)>
2355 <VSOP .VS X-CLEAR <VW-ID .VW>>
2356 <VSOP .VS X-RASTER-PATTERN ,GX-COPY <VW-ID .VW>
2357 <VW-HEIGHT .VW> <VW-WIDTH .VW> 0 0 <VS-GRAY .VS>>
2358 <VSOP .VS X-TEXT <COND (<==? <VW-BG .VW> <VS-WHITE .VS>>
2363 <FONT-ID <VW-CFONT .VW>>
2364 <LENGTH <SET NAME <CHANNEL-NAME .REAL>>>
2368 <DEFINE DE-ICONIFY (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2370 <COND (<SET REAL <VW-REAL .VW>>
2371 ; "We were given the icon"
2373 ; "Break the link, so close won't kill the real thing"
2375 <CHANNEL-OP .REAL MAP>
2376 <VW-ICON <CHANNEL-DATA .REAL>:VSW <>>
2378 (<SET REAL <VW-ICON .VW>>
2379 ; "Well, there is an icon"
2380 <CHANNEL-OP .REAL DE-ICONIFY>)>>
2382 <DEFINE MOUSE-LOWER-WINDOW (CHN:VSCHAN OPER EVENT:MOUSE-EVENT "OPT" (SLOP:FIX 20)
2383 (ICON-PARENT:<OR VSCHAN FALSE> <>)
2384 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2385 (VS:VS <VW-VS100 .VW>)
2387 (OLD-EVENT <ME-KIND .EVENT>) OLD
2388 EXEVENT VAL P (UV <STACK <IUVECTOR 2>>))
2391 <CHANNEL-OP .CHN LOWER-WINDOW>)
2393 <CHANNEL-OP .CHN INTERPRET-LOCATOR <ME-LOCATOR .EVENT> .UV>
2394 ; "Get coordinates relative to this window"
2397 <COND (<==? .OLD-EVENT ,ME-LEFT-PRESSED> <SET EXEVENT ,ME-LEFT-RELEASED>)
2398 (<==? .OLD-EVENT ,ME-MIDDLE-PRESSED> <SET EXEVENT ,ME-MIDDLE-RELEASED>)
2399 (<==? .OLD-EVENT ,ME-RIGHT-PRESSED> <SET EXEVENT ,ME-RIGHT-RELEASED>)
2400 (T <SET EXEVENT ,ME-LEFT-RELEASED>)>
2401 <SET OLD <CHANNEL-OP .CHN MOUSE-MOVE? T>>
2402 <SET SLOP <* .SLOP .SLOP>>
2406 <REPEAT (EV (ICON? <>) KIND TFIX:FIX NEW-CURS)
2408 (<SET EV <CHANNEL-OP .CHN READ-BYTE-IMMEDIATE>>
2410 (<TYPE? .EV MOUSE-EVENT>
2411 <COND (<==? <SET KIND <ME-KIND .EV>> .EXEVENT>
2413 <DESTROY-CURSOR .NEW-CURS .VS>
2414 <SET P <VSOP .VS X-INTERPRET-LOCATOR
2418 <VS-TOPCHAN .VS>>:VSCHAN>:VSW>
2421 <CHANNEL-OP .CHN ICONIFY <I-SPAR2 .P:UVECTOR>
2422 <I-SPAR3 .P:UVECTOR> .ICON-PARENT>>)
2424 <CHANNEL-OP .CHN LOWER-WINDOW>
2426 <RECYCLE-EVENTS .EV>
2428 (<NOT <0? <ANDB .KIND ,ME-PRESSED-MASK>>>
2430 (<==? .KIND ,MOUSE-MOVED>
2431 <COND (<AND <NOT .ICON?>
2432 <G? <+ <* <SET TFIX <- <ME-X .EV> .OLD-X>> .TFIX>
2433 <* <SET TFIX <- <ME-Y .EV> .OLD-Y>> .TFIX>>
2437 <MAKE-PATTERN .VS !,ICONIFY-CURSOR ,GX-COPY>>
2438 <VSOP .VS X-UNGRAB-MOUSE 0>
2439 <VSOP .VS X-GRAB-MOUSE
2440 <C-DISPLAY .NEW-CURS>
2441 <VW-ID .VW> <C-RASTER .NEW-CURS>
2442 <C-MASK .NEW-CURS> <C-LEFT .NEW-CURS>
2443 <C-TOP .NEW-CURS> 3 1 <VW-INPUTS .VW>>)>)>)>
2444 <RECYCLE-EVENTS .EV>)
2447 <CHANNEL-OP .CHN MOUSE-MOVE? .OLD>>
2452 <DEFMAC GRAB-MOUSE-AND-DO ('GM-THING 'GM-W GM-PATTERN GM-WIDTH GM-HEIGHT
2453 "OPT" (GM-TOP 0) (GM-LEFT 0) (GM-MASK <>)
2454 (GM-DISPLAY ,GX-COPY-INVERTED))
2455 <FORM BIND (('GM-VW:VSW <FORM CHANNEL-DATA .GM-W>)
2456 'GM-CURS:CURSOR GM-VAL GM-OCM ('GM-VS:VS <FORM VW-VS100 '.GM-VW>)
2457 (GM-ID <FORM VW-ID '.GM-VW>))
2459 <FORM BIND (P ('MOUSE-GRABBED?:<SPECIAL ATOM> T))
2460 <FORM COND (<FORM NOT
2461 <FORM SET GM-CURS <FORM MAKE-PATTERN '.GM-VS
2462 .GM-PATTERN .GM-WIDTH
2463 .GM-HEIGHT .GM-TOP .GM-LEFT
2464 .GM-MASK .GM-DISPLAY>>>
2465 <FORM ERROR CANT-MAKE-CURSOR!-ERRORS '.GM-CURS GRAB-MOUSE>)>
2468 (<FORM SET P <FORM VSOP '.GM-VS X-QUERY-WINDOW '.GM-ID>>
2469 <FORM SET GM-OCM <FORM I-SPAR6 '.P>>
2470 <FORM VSOP '.GM-VS X-CLIPMODE 1 '.GM-ID>
2474 X-GRAB-MOUSE <FORM C-DISPLAY '.GM-CURS>
2476 <FORM C-RASTER '.GM-CURS>
2477 <FORM C-MASK '.GM-CURS>
2478 <FORM C-LEFT '.GM-CURS>
2479 <FORM C-TOP '.GM-CURS>
2480 3 1 <FORM VW-INPUTS '.GM-VW>>
2481 <FORM SET GM-VAL .GM-THING>
2482 <FORM VSOP '.GM-VS X-CLIPMODE '.GM-OCM '.GM-ID>
2483 <FORM VSOP '.GM-VS X-UNGRAB-MOUSE 0>
2484 <FORM DESTROY-CURSOR '.GM-CURS '.GM-VS>
2486 <FORM COND (<FORM ASSIGNED? GM-CURS>
2487 <FORM VSOP '.GM-VS X-CLIPMODE '.GM-OCM '.GM-ID>
2488 <FORM VSOP '.GM-VS X-UNGRAB-MOUSE 0>
2489 <FORM DESTROY-CURSOR '.GM-CURS '.GM-VS>)>>>>
2491 <DEFINE MOUSE-OPEN-WINDOW MOW
2492 (DESC:<OR FALSE <PRIMTYPE LIST> VSCHAN> OPER NAME:STRING
2493 "OPT" (BWIDTH:<OR FIX FALSE> <>) (BPATTERN:<OR ATOM FIX FALSE> <>)
2494 (BACKGROUND:<OR ATOM FIX FALSE> <>) (FONT:<OR STRING FALSE> <>)
2495 (BUF? T) (DEFAULT-HEIGHT:FIX 24) (DEFAULT-WIDTH:FIX 80)
2496 (MIN-HEIGHT:FIX 2) (MIN-WIDTH:FIX 2)
2497 "AUX" VW:VSW (SPEC? <>) VS:VS OLD PID NVS:<OR FALSE VS>
2498 RFONT:<OR FALSE FONT>
2499 MH:FIX MW:FIX DH:FIX DW:FIX PARENT:VSCHAN P OLD-CURSOR TOP:FIX
2500 LEFT:FIX WIDTH:FIX HEIGHT:FIX MY-FONT:FONT MY-WIND MY-WIDTH
2502 <COND (<NOT .BWIDTH> <SET BWIDTH 2>)>
2503 <COND (<NOT <TYPE? .DESC CHANNEL>>
2504 <COND (<SET NVS <GET-VS100 .DESC>> <SET PARENT <VS-TOPCHAN .NVS>>)
2505 (<RETURN .NVS .MOW>)>)
2506 (T <SET PARENT .DESC>)>
2507 <SET VW <CHANNEL-DATA .PARENT>>
2508 <SET VS <VW-VS100 .VW>>
2509 <SET PID <VW-ID .VW>>
2510 <VW-FLUSH-BUFFER .VW>
2511 <SET MY-FONT <GET-FONT ,INITIAL-FONT .VS>>
2513 <COND (<N==? .PARENT .DESC>
2514 <SET FONT ,INITIAL-FONT>)
2516 <SET FONT <FONT-NAME <VW-CFONT .VW>>>)>)>
2517 <COND (<NOT <SET RFONT <GET-FONT .FONT .VS>>>
2518 <RETURN .RFONT .MOW>)>
2519 <SET MH <+ <* .BWIDTH 2> <* .MIN-HEIGHT <SET DH <FONT-HEIGHT .RFONT>>>>>
2520 <SET MW <+ <* .BWIDTH 2> <* .MIN-WIDTH <SET DW <FONT-WIDTH .RFONT>>>>>
2521 <SET OLD <CHANNEL-OP .PARENT MOUSE-MOVE? T>>
2522 <COND (<TYPE? .DESC CHANNEL>
2523 <CHANNEL-OP .PARENT RAISE-WINDOW>)>
2528 <VW-ID <CHANNEL-DATA <VS-TOPCHAN .VS>:CHANNEL>:VSW>
2529 <FONT-HEIGHT .MY-FONT>
2530 <SET MY-WIDTH <* <FONT-WIDTH .MY-FONT> <+ 10 <LENGTH .NAME>>>>
2535 <VSOP .VS X-MAP-WINDOW .MY-WIND>
2536 <SETG DRAW-CHANGED? T>
2540 (<SET P <VSOP .VS X-QUERY-MOUSE .PID>>
2541 <SET TOP <I-SPAR3 .P:UVECTOR>>
2542 <SET LEFT <I-SPAR2 .P:UVECTOR>>
2545 <REPEAT ((DRAW? T) E (LOC? <>) KIND (NEW-SIZE? T)
2546 (TV <STACK <UVECTOR 0 15000>>)
2547 (FH:FIX <CHANNEL-OP <VS-CHANNEL .VS> FILE-HANDLE>)
2548 (RD:FIX <LSH 1 .FH>) (MX:FIX <+ .FH 1>)
2549 (VV <STACK <IUVECTOR 1>>) CT:<OR FIX FALSE>)
2550 <COND (.DRAW? <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>)>
2561 <CHANNEL-OP .PARENT BUFOUT>
2565 (<OR <NOT <SET CT <CALL SYSCALL SELECT .MX <1 .VV .RD> 0 0 .TV>>>
2569 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2570 <CHANNEL-OP .PARENT BUFOUT>
2571 <CALL SYSCALL SELECT 0 0 0 0 .TV>)
2572 (<TYPE? <SET E <CHANNEL-OP .PARENT READ-BYTE-IMMEDIATE T>>
2574 <COND (<==? <SET KIND <ME-KIND .E>> ,ME-MOVED>
2576 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2577 <CHANNEL-OP .PARENT BUFOUT>
2580 <SETG DRAW-CHANGED? T>
2581 <SET HEIGHT <- <ME-Y .E> .TOP>>
2582 <COND (<L? <ABS .HEIGHT> .MH>
2583 <COND (<L? .HEIGHT 0> <SET HEIGHT <- .MH>>)
2584 (T <SET HEIGHT .MH>)>)>
2585 <SET WIDTH <- <ME-X .E> .LEFT>>
2586 <COND (<L? <ABS .WIDTH> .MW>
2587 <COND (<L? .WIDTH 0> <SET WIDTH <- .MW>>)
2588 (T <SET WIDTH .MW>)>)>)
2590 <SETG DRAW-CHANGED? T>
2592 <SET LEFT <ME-X .E>>)>)
2594 <COND (<==? .KIND ,ME-MIDDLE-RELEASED>
2597 (<==? .KIND ,ME-LEFT-PRESSED>
2601 (<==? .KIND ,ME-RIGHT-PRESSED>
2605 (<==? .KIND ,ME-MIDDLE-PRESSED>
2606 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2607 <CHANNEL-OP .PARENT MOUSE-MOVE? ,MOUSE-CENTER>
2610 <RECYCLE-EVENTS .E>>
2611 <VSOP .VS X-DESTROY-WINDOW .MY-WIND>
2612 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2613 <CHANNEL-OP .PARENT MOUSE-MOVE? .OLD>
2615 <PROG ((RFONT <GET-FONT .FONT .VS>))
2616 <SET WIDTH <* .DEFAULT-WIDTH <FONT-WIDTH .RFONT>>>
2617 <COND (<==? .SPEC? 1>
2618 <SET HEIGHT <* .DEFAULT-HEIGHT <FONT-HEIGHT .RFONT>>>)
2619 (T <SET HEIGHT <- <VW-HEIGHT .VW> .TOP <* 2 .BWIDTH>>>)>>)
2621 <COND (<L? .HEIGHT 0>
2622 <SET TOP <+ .TOP .HEIGHT>>
2623 <SET HEIGHT <- .HEIGHT>>)>
2624 <COND (<L? .WIDTH 0>
2625 <SET LEFT <+ .LEFT .WIDTH>>
2626 <SET WIDTH <- .WIDTH>>)>)>
2647 (VS:VS MY-WIND:FIX MY-FONT:FONT NAME:STRING BWIDTH:FIX WIDTH:FIX
2648 HEIGHT:FIX DW:FIX DH:FIX
2649 "AUX" (ST <STACK <ISTRING <+ 10 <LENGTH .NAME>>>>)
2650 (SS <REST .ST <LENGTH .NAME>>))
2651 <SUBSTRUC .NAME 0 <LENGTH .NAME> .ST>
2654 <SET HEIGHT <ABS .HEIGHT>>
2655 <SET WIDTH <ABS .WIDTH>>
2656 <SET SS <DUMP-NUMBER .SS <MAX 1 </ <- .HEIGHT <* 2 .BWIDTH>> .DH>>>>
2659 <DUMP-NUMBER .SS <MAX 1 </ <- .WIDTH <* 2 .BWIDTH>> .DW>>>
2660 <VSOP .VS X-CLEAR .MY-WIND>
2671 <DEFINE DUMP-NUMBER (SS:STRING NUM:FIX "AUX" (BASE:FIX 1000))
2672 <REPEAT ((ANY? <>) DIG)
2673 <SET DIG </ .NUM .BASE>>
2674 <SET NUM <MOD .NUM .BASE>>
2675 <COND (<OR .ANY? <NOT <0? .DIG>>>
2677 <1 .SS <ASCII <+ .DIG <ASCII !\0>>>>
2678 <SET SS <REST .SS>>)
2679 (T <1 .SS !\ > <SET SS <REST .SS>>)>
2680 <COND (<0? <SET BASE </ .BASE 10>>> <RETURN .SS>)>>>
2682 <GDECL (TEMP-VERTS) STRING
2683 (DRAW-CHANGED?) <OR ATOM FALSE>
2686 <DEFINE FDRAW (CH:VSCHAN LEFT:FIX TOP:FIX WIDTH:FIX HEIGHT:FIX
2687 "AUX" (VW:VSW <CHANNEL-DATA .CH>) (VS:VS <VW-VS100 .VW>)
2689 <COND (<NOT <GASSIGNED? TEMP-VERTS>>
2690 <SETG TEMP-VERTS <ISTRING 30>>
2692 <SETG DRAW-CHANGED? T>)>
2693 <SET VERTS ,TEMP-VERTS>
2694 <COND (,DRAW-CHANGED?
2695 <COND (<L? .WIDTH 0>
2696 <SET LEFT <+ .LEFT .WIDTH>>
2697 <SET WIDTH <- .WIDTH>>)>
2698 <COND (<L? .HEIGHT 0>
2699 <SET TOP <+ .TOP .HEIGHT>>
2700 <SET HEIGHT <- .HEIGHT>>)>
2701 <PUT-WORD .VERTS 1 .LEFT>
2702 <PUT-WORD .VERTS 2 .TOP>
2703 <PUT-WORD .VERTS 3 0>
2704 <PUT-WORD .VERTS 4 .WIDTH>
2705 <PUT-WORD .VERTS 5 0>
2706 <PUT-WORD .VERTS 6 ,VERTEX-RELATIVE>
2707 <PUT-WORD .VERTS 7 0>
2708 <PUT-WORD .VERTS 8 .HEIGHT>
2709 <PUT-WORD .VERTS 9 ,VERTEX-RELATIVE>
2710 <PUT-WORD .VERTS 10 <- .WIDTH>>
2711 <PUT-WORD .VERTS 11 0>
2712 <PUT-WORD .VERTS 12 ,VERTEX-RELATIVE>
2713 <PUT-WORD .VERTS 13 0>
2714 <PUT-WORD .VERTS 14 <- .HEIGHT>>
2715 <PUT-WORD .VERTS 15 ,VERTEX-RELATIVE>
2716 <SETG DRAW-CHANGED? <>>)>
2717 <VSOP .VS X-DRAW-DASHED ,GX-XOR <VW-ID .VW> 5
2719 <MOD <LSH <SETG DRAW-ODD? <MOD <+ ,DRAW-ODD? 1> 4>> -1> 2>>
2723 <DEFINE MOUSE-RESIZE-WINDOW (CH:VSCHAN OPER WHICH:FIX)
2724 <COND (<NOT <CHANNEL-OP .CH ICON?>>
2725 <MOUSE-MOVE-WINDOW .CH .OPER .WHICH T>)>>
2727 <DEFINE MOUSE-MOVE-WINDOW (CH:VSCHAN OPER WHICH:FIX
2729 "AUX" (VW:VSW <CHANNEL-DATA .CH>)
2730 (VS:VS <VW-VS100 .VW>)
2731 (PARENT:VSCHAN <VW-PARENT .VW>) TOP:FIX LEFT:FIX
2735 <+ <* 2 <VW-BWIDTH .VW>> <VW-HEIGHT .VW> -1>)
2737 <+ <* 2 <VW-BWIDTH .VW>> <VW-WIDTH .VW> -1>)
2738 P:<OR FALSE UVECTOR> MX:FIX MY:FIX
2739 PID:FIX OLD (CDIST:FIX <MIN>)
2740 TMP MINW:FIX MINH:FIX FH:FIX FW:FIX
2741 (MOVE-RIGHT? <>) (MOVE-LEFT? <>)
2742 (MOVE-TOP? <>) (MOVE-BOTTOM? <>))
2743 <COND (<==? .WHICH ,MOUSE-LEFT> <SET WEVENT ,ME-LEFT-RELEASED>)
2744 (<==? .WHICH ,MOUSE-RIGHT> <SET WEVENT ,ME-RIGHT-RELEASED>)
2745 (<==? .WHICH ,MOUSE-CENTER> <SET WEVENT ,ME-MIDDLE-RELEASED>)
2746 (T <SET WEVENT ,ME-RELEASED-MASK>)>
2747 <VW-FLUSH-BUFFER .VW>
2748 <COND (<==? .PARENT <VS-TOPCHAN .VS>>
2749 <CHANNEL-OP .CH RAISE-WINDOW>)
2751 <CHANNEL-OP .PARENT RAISE-WINDOW>)>
2752 <SET PID <VW-ID <CHANNEL-DATA .PARENT>:VSW>>
2753 <SET OLD <CHANNEL-OP .PARENT MOUSE-MOVE? .WHICH>>
2754 <COND (<SET P <VSOP .VS X-QUERY-WINDOW <VW-ID .VW>>>
2755 <SET LEFT <I-SPAR2 .P>>
2756 <SET TOP <I-SPAR3 .P>>)>
2757 <SET RIGHT <+ .LEFT .WIDTH>>
2758 <SET BOT <+ .TOP .HEIGHT>>
2760 <COND (<SET P <VSOP .VS X-GET-RESIZE-HINT <VW-ID .VW>>>
2761 <SET FH <I-SPAR1 .P>>
2762 <SET FW <I-SPAR3 .P>>
2763 <SET MINW <MIN <+ 1 <* <VW-BWIDTH .VW> 2>> <I-SPAR2 .P>>>
2764 <SET MINH <MIN <+ 1 <* <VW-BWIDTH .VW> 2>> <I-SPAR0 .P>>>)
2768 <SET MINW <+ 1 <* 2 <VW-BWIDTH .VW>>>>
2769 <SET MINH .MINW>)>)>
2772 (<SET P <VSOP .VS X-QUERY-MOUSE .PID>>
2773 <SET MX <I-SPAR2 .P:UVECTOR>>
2774 <SET MY <I-SPAR3 .P:UVECTOR>>
2776 <BIND ((FT <* <+ .TOP <VW-BWIDTH .VW>> 3>)
2777 (FL <* <+ .LEFT <VW-BWIDTH .VW>> 3>)
2782 <COND (<L? .FMY <+ .FT .HEIGHT>>
2784 (<G? .FMY <+ .FT <* 2 .HEIGHT>>>
2785 <SET MOVE-BOTTOM? T>)>
2786 <COND (<L? .FMX <+ .FL .WIDTH>>
2788 (<G? .FMX <+ .FL <* 2 .WIDTH>>>
2789 <SET MOVE-RIGHT? T>)>
2790 <COND (<AND <NOT .MOVE-TOP?> <NOT .MOVE-BOTTOM?>
2791 <NOT .MOVE-LEFT?> <NOT .MOVE-RIGHT?>>
2792 <COND (<L? <- .FMY .FT> <- <+ .FT .FH> .FMY>>
2795 <SET MOVE-BOTTOM? T>)>
2796 <COND (<L? <- .FMX .FL> <- <+ .FL .FW> .FMX>>
2799 <SET MOVE-RIGHT? T>)>)>>)>
2800 <SETG DRAW-CHANGED? T>
2802 <REPEAT (E DX:FIX DY:FIX (DRAW? T) (FLUSH? <>)
2803 (FH:FIX <CHANNEL-OP <VS-CHANNEL .VS> FILE-HANDLE>)
2804 (TV <STACK <UVECTOR 0 15000>>) (MXD:FIX <+ .FH 1>)
2805 (VV <STACK <IUVECTOR 1>>) (RD:FIX <LSH 1 .FH>)
2808 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2810 <CHANNEL-OP .PARENT BUFOUT>)>
2812 (<OR <NOT <SET CT <CALL SYSCALL SELECT .MXD <1 .VV .RD> 0 0 .TV>>>
2816 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2817 <CHANNEL-OP .PARENT BUFOUT>
2818 <CALL SYSCALL SELECT 0 0 0 0 .TV>)
2819 (<TYPE? <SET E <GET-EVENT .VS <>>> MOUSE-EVENT>
2821 (<OR <NOT <0? <ANDB <ME-KIND .E> .WEVENT>>>
2822 <SET FLUSH? <NOT <0? <ANDB <ME-KIND .E> ,ME-PRESSED-MASK>>>>>
2823 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2824 <CHANNEL-OP .PARENT BUFOUT>
2825 <CHANNEL-OP .PARENT MOUSE-MOVE? .OLD>
2826 <CHANNEL-OP .CH BUFOUT>
2829 <SET HEIGHT <- .HEIGHT -1 <* 2 <VW-BWIDTH .VW>>>>
2830 <SET WIDTH <- .WIDTH -1 <* 2 <VW-BWIDTH .VW>>>>
2831 <VW-HEIGHT .VW .HEIGHT>
2832 <VW-WIDTH .VW .WIDTH>
2833 <COND (<VW-SCALE .VW>
2834 <CHANNEL-OP .CH DRAW-LEFT <S-LEFT <VW-SCALE .VW>>>)>
2835 <VW-OUTMODE .VW <ORB <VW-OUTMODE .VW> ,VWM-UNSEEN>>
2844 <VSOP .VS X-MOVE-WINDOW <VW-ID .VW> .LEFT .TOP>)>
2846 <RETURN <NOT .FLUSH?>>)
2847 (<==? <ME-KIND .E> ,ME-MOVED>
2848 <FDRAW .PARENT .LEFT .TOP .WIDTH .HEIGHT>
2849 <CHANNEL-OP .PARENT BUFOUT>
2850 <SETG DRAW-CHANGED? T>
2852 <SET DX <- <ME-X .E> .MX>>
2853 <SET DY <- <ME-Y .E> .MY>>
2858 <COND (<L? <- .RIGHT .MX> .MINW>
2859 <SET LEFT <- .RIGHT .MINW>>)
2863 <COND (<L? <- .MX .LEFT> .MINW>
2864 <SET RIGHT <+ .LEFT .MINW>>)
2868 <COND (<L? <- .BOT .MY> .MINH>
2869 <SET TOP <- .BOT .MINH>>)
2873 <COND (<L? <- .MY .TOP> .MINH>
2874 <SET BOT <+ .TOP .MINH>>)
2877 <SET WIDTH <- .RIGHT .LEFT>>
2878 <SET HEIGHT <- .BOT .TOP>>
2879 <COND (<NOT <0? <MOD <SET TMP <- .WIDTH .MINW>> .FW>>>
2882 </ <FIX <+ .TMP </ .FW 2.0>>>
2885 <SET LEFT <- .RIGHT .WIDTH>>)
2887 <SET RIGHT <+ .LEFT .WIDTH>>)>)>
2888 <COND (<NOT <0? <MOD <SET TMP <- .HEIGHT .MINH>> .FH>>>
2889 <SET HEIGHT <+ .MINH
2891 </ <FIX <+ .TMP </ .FH 2.0>>>
2894 <SET TOP <- .BOT .HEIGHT>>)
2896 <SET BOT <+ .TOP .HEIGHT>>)>)>)
2897 (T <SET LEFT <+ .DX .LEFT>> <SET TOP <+ .DY .TOP>>)>)>)>
2898 <RECYCLE-EVENTS .E>>)>
2902 <DEFINE PAGE-LOC (CHN:VSCHAN OPER
2903 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>) P)
2904 <COND (<SET P <VSOP .VS X-QUERY-WINDOW <VW-ID .VW>>>
2905 <COND (<==? .OPER PAGE-TOP> <I-SPAR3 .P>) (T <I-SPAR2 .P>)>)>>
2907 <DEFINE VS-PAGE-HEIGHT (CHN:VSCHAN OPER
2909 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) OLD
2910 (CFONT <VW-CFONT .VW>))
2911 <SET OLD </ <VW-HEIGHT .VW> <FONT-HEIGHT .CFONT>>>
2912 <COND (<ASSIGNED? NEW>
2913 <SET NEW <* <FONT-HEIGHT .CFONT> .NEW>>
2914 <COND (<L=? .NEW 0>)
2915 (T <CHANNEL-OP .CHN RESIZE .NEW <VW-WIDTH .VW>>)>)>
2918 <DEFINE VS-PAGE-WIDTH (CHN:VSCHAN OPER
2920 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) OLD
2921 (CFONT <VW-CFONT .VW>))
2922 <SET OLD </ <VW-WIDTH .VW> <FONT-WIDTH .CFONT>>>
2923 <COND (<ASSIGNED? NEW>
2924 <SET NEW <* <FONT-WIDTH .CFONT> .NEW>>
2925 <COND (<L=? .NEW 0>)
2926 (T <CHANNEL-OP .CHN RESIZE <VW-HEIGHT .VW> .NEW>)>)>
2929 <DEFINE VS-PAGE-WIDTH-ABS (CHN:VSCHAN OPER
2931 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) OLD)
2932 <SET OLD <VW-WIDTH .VW>>
2933 <COND (<ASSIGNED? NEW> <CHANNEL-OP .CHN RESIZE <VW-HEIGHT .VW> .NEW>)>
2936 <DEFINE VS-PAGE-HEIGHT-ABS (CHN:VSCHAN OPER
2938 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) OLD)
2939 <SET OLD <VW-HEIGHT .VW>>
2940 <COND (<ASSIGNED? NEW> <CHANNEL-OP .CHN RESIZE .NEW <VW-WIDTH .VW>>)>
2943 <DEFINE VS-RESIZE (CHN:VSCHAN OPER HEIGHT:<OR FIX FALSE> WIDTH:<OR FIX FALSE>
2944 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>))
2945 <VW-FLUSH-BUFFER .VW>
2946 <COND (.HEIGHT <VW-HEIGHT .VW .HEIGHT>)
2947 (T <SET HEIGHT <VW-HEIGHT .VW>>)>
2948 <COND (.WIDTH <VW-WIDTH .VW .WIDTH>) (T <SET WIDTH <VW-WIDTH .VW>>)>
2949 <COND (<VW-SCALE .VW>
2950 <CHANNEL-OP .CHN DRAW-LEFT <S-LEFT <VW-SCALE .VW>>>)>
2951 <VSOP .VS X-CHANGE-WINDOW <VW-ID .VW> .HEIGHT .WIDTH>
2952 <VW-OUTMODE .VW <ORB <VW-OUTMODE .VW> ,VWM-UNSEEN>>
2955 <DEFINE VS-MOVE-WINDOW (CHN:VSCHAN OPER LEFT:FIX TOP:FIX
2956 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2957 (VS:VS <VW-VS100 .VW>))
2958 <VW-FLUSH-BUFFER .VW>
2959 <VSOP .VS X-MOVE-WINDOW <VW-ID .VW> .LEFT .TOP>>
2961 <DEFINE SET-RESIZE-HINT (CHN:VSCHAN OPER "OPT" (MIN-HEIGHT:FIX -1)
2962 (HINCR:FIX -1) (MIN-WIDTH:FIX -1) (WINCR:FIX -1)
2963 "AUX" (VW:VSW <CHANNEL-DATA .CHN>) (VS:VS <VW-VS100 .VW>)
2965 <COND (<SET P <VSOP .VS X-GET-RESIZE-HINT <VW-ID .VW>>>
2966 <COND (<L? .MIN-HEIGHT 0> <SET MIN-HEIGHT <I-SPAR0 .P>>)>
2967 <COND (<L? .HINCR 0> <SET HINCR <I-SPAR1 .P>>)>
2968 <COND (<L? .MIN-WIDTH 0> <SET MIN-WIDTH <I-SPAR2 .P>>)>
2969 <COND (<L? .WINCR 0> <SET WINCR <I-SPAR3 .P>>)>)>
2970 <VSOP .VS X-SET-RESIZE-HINT <VW-ID .VW> .MIN-HEIGHT .HINCR .MIN-WIDTH .WINCR>>
2972 <DEFINE VS-WINDOW-NAME (CHN:VSCHAN OPER
2974 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2975 (VS:VS <VW-VS100 .VW>) TS)
2976 <COND (<ASSIGNED? NAME>
2977 <VSOP .VS X-STORE-NAME <VW-ID .VW> <LENGTH .NAME> .NAME>
2979 (<SET TS <VSOP .VS X-FETCH-NAME <VW-ID .VW>>>
2982 <DEFINE VS-CUT-BUFFER (CHN:VSCHAN OPER
2984 "AUX" (VW:VSW <CHANNEL-DATA .CHN>)
2985 (VS:VS <VW-VS100 .VW>) TS)
2986 <COND (<ASSIGNED? STUFF>
2987 <VSOP .VS X-STORE-BYTES 0 0 <LENGTH .STUFF> .STUFF>
2989 (<SET TS <VSOP .VS X-FETCH-BYTES 0 0>>
2992 <DEFINE GET-FONT (NAME:STRING VS:VS)
2993 <REPEAT ((L:<LIST [REST FIX FONT]> <VS-FONTS .VS>))
2994 <COND (<NOT <EMPTY? .L>>
2995 <COND (<=? .NAME <FONT-NAME <2 .L>>> <RETURN <2 .L>>)>
2996 <SET L <REST .L 2>>)
2997 (T <RETURN <LOAD-FONT .NAME .VS>>)>>>
2999 <DEFINE LOAD-FONT LF (NAME:STRING VS:VS
3000 "AUX" (NS <STANDARD-NAME .NAME>) F P FS:FONT FIRST LAST
3002 <SUBSTRUC .NS 0 <- <LENGTH .NS> 1> <REST .NS>>
3004 (<SET F <VSOP .VS X-GET-FONT <- <LENGTH .NS> 1> 0 <REST .NS>>>
3005 <SET FS <CHTYPE [.NAME .F 0 0 0 <> 0 <>] FONT>>
3007 (<SET P <VSOP .VS X-QUERY-FONT 0 .F>>
3008 <FONT-HEIGHT .FS <I-SPAR0 .P>>
3009 <FONT-WIDTH .FS <I-SPAR1 .P>>
3010 <FONT-BASE .FS <I-SPAR4 .P>>
3012 (<NOT <0? <I-SPAR5 .P>>> <FONT-FIXED? .FS T>)
3014 <SET FIRST <I-SPAR2 .P>>
3015 <SET LAST <I-SPAR3 .P>>
3017 (<SET P <VSOP .VS X-TEXTWIDTH 0 .F <ASCII !\W> <ASCII !\l> 1 1 1 1>>
3018 <COND (<==? <I-SPAR2 .P> <I-SPAR3 .P>>
3019 <FONT-WIDTH .FS <I-SPAR2 .P>>
3020 <FONT-FIXED? .FS T>)
3023 (<SET ST <VSOP .VS X-CHAR-WIDTHS 0 .F>>
3025 (UV:<UVECTOR [REST FIX]>
3026 <IUVECTOR <+ 1 <- .LAST .FIRST>>>))
3028 <FONT-CHARS .FS .UV>
3030 <PUT .UV <+ 1 <- .C .FIRST>>
3032 <LSH <ASCII <2 .ST>> 8>>>
3034 <SET ST <REST .ST 2>>>)>)>
3035 <FONT-FIRST .FS .FIRST>)
3036 (T <RETURN .P .LF>)>)>
3037 <VS-FONTS .VS (.F .FS !<VS-FONTS .VS>)>
3040 <DEFINE CHAR-WIDTH (CHAR:CHARACTER FONT:FONT "AUX" FF:FIX)
3041 <COND (<FONT-FIXED? .FONT> <FONT-WIDTH .FONT>)
3042 (<OR <L? <ASCII .CHAR> <SET FF <FONT-FIRST .FONT>>>
3044 <+ .FF <LENGTH <FONT-CHARS .FONT>:UVECTOR>>>>
3047 <NTH <FONT-CHARS .FONT>:UVECTOR <+ <- <ASCII .CHAR> .FF> 1>>)>>
3049 <DEFINE STRING-WIDTH (STR:STRING FONT:FONT VS:VS)
3050 <VSOP .VS X-STRING-WIDTH 0 <FONT-ID .FONT> <LENGTH .STR> .STR>>
3052 <DEFINE VS-LINE-HEIGHT (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
3053 <FONT-HEIGHT <VW-CFONT .VW>>>
3055 <DEFINE VS-CHAR-WIDTH (CHN:VSCHAN OPER "AUX" (VW:VSW <CHANNEL-DATA .CHN>))
3056 <FONT-WIDTH <VW-CFONT .VW>>>