4 <ENTRY PARSE-TERMCAP PARSE-TERM-TYPE>
6 <L-FLOAD "TTYTYPES.MUD">
13 <SETG CRLF-LEN <LENGTH ,CRLF-STRING>>
15 "Write a TTY-DESC to the supplied file. This produces a format that can be
16 read by the TTY package."
18 <DEFINE WRITE-TTY-DESC (FN DESC
19 "AUX" (DEV "USR") (SNM "MIM/TTYS") (NM2 "") CH
20 (BUFSTR <STACK <ISTRING 256>>))
21 #DECL ((DESC) TTY-DESC (FN) STRING (CH) <OR CHANNEL FALSE> (BUFSTR) STRING
22 (DEV SNM NM2) <SPECIAL STRING>)
23 <SET CH <CHANNEL-OPEN PARSE .FN>>
24 <SET FN <CHANNEL-OP .CH NAME>>
27 (<SET CH <CHANNEL-OPEN DISK .FN "CREATE" "ASCII">>
28 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <LENGTH <TD-NAME .DESC>> CHARACTER>>
29 <CHANNEL-OP .CH WRITE-BUFFER <TD-NAME .DESC>>
30 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <TD-HEIGHT .DESC> CHARACTER>>
31 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <TD-WIDTH .DESC> CHARACTER>>
32 <CHANNEL-OP .CH WRITE-BYTE <TD-PADCHR .DESC>>
33 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <TD-CRPAD .DESC> CHARACTER>>
34 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <TD-LFPAD .DESC> CHARACTER>>
35 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE <LENGTH <TD-PRIMOPS .DESC>> CHARACTER>>
39 <FUNCTION (X) <COND (.X 1) (0)>>
45 <FUNCTION (X "AUX" (TLEN 0) NLEN)
46 #DECL ((X) <OR FALSE TTY-OP> (TLEN) FIX)
49 <SET BUFSTR <TOP .BUFSTR>>
50 <1 .BUFSTR <CHTYPE .ID CHARACTER>>
52 <COND (<TYPE? .X VECTOR>
53 <2 .BUFSTR <CHTYPE <LENGTH .X> CHARACTER>>
57 <WRITE-PART .PART <REST .BUFSTR 2>>>
58 <SET TLEN <+ .TLEN .NLEN>>
59 <SET BUFSTR <REST .BUFSTR .NLEN>>>
62 <2 .BUFSTR <CHTYPE 1 CHARACTER>>
63 <SET NLEN <WRITE-PART .X <REST .BUFSTR 2>>>
64 <SET TLEN <+ .TLEN .NLEN>>)>
65 <CHANNEL-OP .CH WRITE-BYTE <CHTYPE .TLEN CHARACTER>>
66 <CHANNEL-OP .CH WRITE-BUFFER <TOP .BUFSTR> .TLEN>)>
71 <DEFINE WRITE-PART (PART BUF "OPTIONAL" (PAD 0) "AUX" (CHRS 0))
72 #DECL ((PART) <OR TTY-ELT STRING TTY-OUT> (CHRS) FIX (BUF) STRING (PAD) FIX)
75 <1 .BUF <CHTYPE .PAD CHARACTER>>
76 <2 .BUF <CHTYPE <+ <LENGTH .PART> 2> CHARACTER>>
78 <4 .BUF <CHTYPE <LENGTH .PART> CHARACTER>>
80 <FUNCTION (X Y) #DECL ((X Y) STRING) <1 .X <1 .Y>>>
84 (<TYPE? .PART TTY-OUT> <WRITE-PART <TO-STRING .PART> .BUF <TO-PAD .PART>>)
85 (<TYPE? .PART TTY-ELT>
86 <1 .BUF <CHTYPE .PAD CHARACTER>>
87 <3 .BUF <CHTYPE <LENGTH .PART> CHARACTER>>
88 <PROG ((TBUF <REST .BUF 3>) (LEN 0))
91 #DECL ((FROB) <OR STRING FIX>)
92 <COND (<TYPE? .FROB FIX>
93 <1 .TBUF <CHTYPE .FROB CHARACTER>>
94 <SET TBUF <REST .TBUF>>
97 <1 .TBUF <CHTYPE <LENGTH .FROB> CHARACTER>>
104 <SET TBUF <REST .TBUF <+ <LENGTH .FROB> 1>>>
105 <SET LEN <+ .LEN 1 <LENGTH .FROB>>>)>>
107 <2 .BUF <CHTYPE .LEN CHARACTER>>
110 "Parse a TERMCAP file, making new files for each terminal described."
266 <DEFINE GET-STANDARD-NAME (NAME "AUX" TV)
267 #DECL ((NAME) STRING (TV) <OR VECTOR FALSE>)
268 <COND (<SET TV <MEMBER .NAME ,NAME-VEC>> <2 .TV>)
271 #DECL ((X) CHARACTER)
272 <COND (<AND <G=? <ASCII .X> <ASCII !\a>>
273 <L=? <ASCII .X> <ASCII !\z>>>
275 <- <ASCII !\A> <ASCII !\a>>>>)
279 <DEFINE PARSE-TERM-TYPE ("AUX" (VEC <CALL GETS ENVIR>) ST)
280 <COND (<SET ST <GET-ENV-STR "TERMCAP" .VEC>>
281 <PARSE-TERMCAP "FOO" .ST>)
282 (#FALSE ("TERMCAP ENTRY NOT IN ENVIRONMENT"))>>
284 <DEFINE GET-NEXT-STRING (CH
285 "AUX" (BUF <STACK <ISTRING 512>>)
286 (CUR <CHANNEL-OP .CH ACCESS>) CT)
287 #DECL ((CHANNEL) CHANNEL (BUF) STRING (CUR) FIX)
288 <REPEAT OLOOP (TS (TBUF .BUF))
290 (<SET CT <CHANNEL-OP .CH READ-BUFFER .TBUF>>
291 <COND (<0? .CT> <RETURN <>>)>
292 <SET CT <- 512 <- <LENGTH .TBUF> .CT>>>
293 <COND (<N==? .CT 512> <SUBSTRUC .BUF 0 .CT <REST .BUF <- 512 .CT>>>)>
295 <COND (<SET TS <MEMQ !\: .TS>>
296 <COND (<==? <LENGTH .TS> 1>
298 <SET TBUF <REST .BUF>>
300 <COND (<==? <2 .TS> <ASCII 10>>
302 <ISTRING <- <CHANNEL-OP .CH ACCESS>
305 <CHANNEL-OP .CH ACCESS .CUR>
306 <CHANNEL-OP .CH READ-BUFFER .BUF>
307 <RETURN .BUF .OLOOP>)>
313 <DEFINE PARSE-TERMCAP ("OPTIONAL" (FN "/ETC/TERMCAP") ST "AUX" (CH <>) DESCS)
314 #DECL ((FN ST) STRING (CH) <OR CHANNEL FALSE>)
317 <AND <SET CH <CHANNEL-OPEN DISK .FN "READ" "ASCII">>
319 <COND (<NOT <ASSIGNED? ST>> <SET ST "">)>
322 <FUNCTION ("AUX" DSTR TSS TS NAME STDNAME TS1 TS2 NS)
323 #DECL ((TS) <OR STRING FALSE> (TSS NAME STDNAME) STRING)
325 <COND (<OR <NOT .CH> <NOT <SET NS <GET-NEXT-STRING .CH>>>>
328 <COND (<==? <1 .ST> !\#>
329 <COND (<SET TS <MEMBER ,CRLF-STRING .ST>>
330 <SET ST <REST .TS ,CRLF-LEN>>
333 <SET TSS <MEMQ !\| .ST>>
334 <SET TS1 <MEMQ !\| <REST .TSS>>>
335 <SET TS2 <MEMQ !\: <REST .TSS>>>
336 <COND (<AND .TS1 .TS2>
337 <COND (<L? <LENGTH .TS1> <LENGTH .TS2>> <SET TS1 .TS2>)>)
338 (<SET TS1 <OR .TS1 .TS2>>)
340 <SET NAME <SUBSTRUC <REST .TSS> 0 <- <LENGTH .TSS> 1 <LENGTH .TS1>>>>
341 <SET STDNAME <GET-STANDARD-NAME .NAME>>
342 <SET ST <MEMQ !\: .TSS>>
345 <FUNCTION ("AUX" CHR NUM)
346 <COND (<AND <G=? <LENGTH .ST> 2>
348 <OR <==? <2 .ST> <ASCII 10>>
349 <==? <2 .ST> <ASCII 13>>>>
350 <SET ST <REST .ST 2>>
351 <COND (<AND <NOT <EMPTY? .ST>> <==? <1 .ST> <ASCII 10>>>
352 <SET ST <REST .ST>>)>
354 <COND (<EMPTY? .ST> <MAPSTOP>)>
356 (<==? <1 .ST> <ASCII 10>> <SET ST <REST .ST>> <MAPRET>)
357 (<==? <1 .ST> <ASCII 13>> <SET ST <REST .ST>> <MAPRET>)
358 (<==? <1 .ST> <ASCII 92>>
360 (<MEMQ <SET CHR <2 .ST>> "01234567">
363 <FUNCTION (STR "AUX" (CHR <1 .STR>))
364 #DECL ((CHR) CHARACTER (STR) STRING)
365 <COND (<MEMQ .CHR "01234567">
368 <- <ASCII .CHR> <ASCII !\0>>>>)
369 (T <SET ST .STR> <MAPLEAVE>)>>
371 <COND (<==? .NUM 128> <SET NUM 0>)
372 (<==? .NUM <ASCII !\:>> <MAPRET "\\;">)>
375 <SET ST <REST .ST 2>>
376 <COND (<==? .CHR <ASCII 10>> <MAPRET>)
377 (<==? .CHR <ASCII 13>> <MAPRET>)
378 (<==? .CHR !\E> <ASCII 27>)
379 (<==? .CHR !\n> <ASCII 10>)
380 (<==? .CHR !\r> <ASCII 13>)
381 (<==? .CHR !\t> <ASCII 9>)
382 (<==? .CHR !\b> <ASCII 8>)
383 (<==? .CHR !\f> <ASCII 12>)
387 <SET ST <REST .ST 2>>
388 <CHTYPE <ANDB .CHR 31> CHARACTER>)
389 (T <SET CHR <1 .ST>> <SET ST <REST .ST>> .CHR)>>>>
390 [.NAME .STDNAME .DSTR]>>>
393 <FUNCTION (STDESC "AUX" DESC)
394 #DECL ((STDESC) <VECTOR [3 STRING]>)
395 <SET DESC <MAKE-DESC <2 .STDESC> <3 .STDESC> .DESCS>>
396 <WRITE-TTY-DESC <1 .STDESC> .DESC>>
400 <DEFINE GET-NUM (TARG MAIN "OPTIONAL" (AUX <>) (DEF 0) "AUX" (NUM 0) TS)
401 #DECL ((TARG MAIN) STRING (AUX TS) <OR STRING FALSE> (NUM) FIX)
402 <COND (<AND <SET TS <MEMBER .TARG .MAIN>>
403 <==? <NTH .TS <+ <LENGTH .TARG> 1>> !\#>>
404 <SET TS <REST .TS <+ <LENGTH .TARG> 1>>>
407 #DECL ((C) CHARACTER)
408 <COND (<==? .C !\:> <MAPLEAVE>)>
410 <+ <* .NUM 10> <- <ASCII .C> <ASCII !\0>>>>>
413 (.AUX <GET-NUM .TARG .AUX <> .DEF>)
416 <DEFINE GET-STR (TARG MAIN "OPTIONAL" (AUX <>) (DEF <>) "AUX" TS (QUOTE <>))
417 #DECL ((TARG MAIN) STRING (AUX TS) <OR FALSE STRING>)
418 <COND (<SET TS <MEMBER .TARG .MAIN>>
419 <SET TS <REST .TS <LENGTH .TARG>>>
420 <COND (<==? <1 .TS> !\@> "")
424 #DECL ((C) CHARACTER)
427 <COND (<==? .C !\;> !\:) (.C)>)
431 (<==? .C !\:> <MAPSTOP>)
434 (.AUX <GET-STR .TARG .AUX <> .DEF>)
437 <DEFINE GET-AUX-DESC (NAME DESCS)
439 (DESCS) <VECTOR [REST <VECTOR STRING STRING STRING>]>)
441 <FUNCTION (DD) <COND (<=? .NAME <1 .DD>> <MAPLEAVE <3 .DD>>)>>
445 [[,TTY-FWD GET-TTY-OP ":nd"]
446 [,TTY-BCK GET-TTY-BCK]
447 [,TTY-UP GET-TTY-OP ":up"]
448 [,TTY-DWN GET-TTY-OP ":do"]
449 [,TTY-HRZ GET-TTY-OP ":ch" ":cm"]
450 [,TTY-VRT GET-TTY-OP ":cv" ":cm"]
451 [,TTY-MOV GET-TTY-OP ":cm"]
452 [,TTY-HOM GET-TTY-HOME]
453 [,TTY-HMD GET-TTY-HOMD]
454 [,TTY-CLR GET-TTY-CLR]
455 [,TTY-CEW GET-TTY-OP ":cd"]
456 [,TTY-CEL GET-TTY-OP ":ce"]
457 [,TTY-ERA GET-TTY-ERA]
458 [,TTY-BEC GET-TTY-BEC]
459 [,TTY-IL GET-TTY-OP ":al"]
460 [,TTY-DL GET-TTY-OP ":dl"]
461 [,TTY-IC GET-TTY-OP ":ic"]
462 [,TTY-DC GET-TTY-OP ":dc"]
463 [,TTY-DS GET-TTY-OP ":cs"]
464 [,TTY-SU GET-TTY-OP ":sf"]
465 [,TTY-SD GET-TTY-OP ":sr"]]>
467 <GDECL (OP-VEC) <VECTOR [REST VECTOR]>>
469 <DEFINE MAKE-DESC (STDNAME DESC DESCS
470 "AUX" (CUR-NAME .STDNAME) HEIGHT WIDTH PAD CRPAD LFPAD AUXN
472 #DECL ((STDNAME DESC) STRING (HEIGHT WIDTH CRPAD LFPAD) FIX
473 (PAD) <OR STRING CHARACTER> (CUR-NAME) <SPECIAL STRING>)
474 <COND (<SET AUXN <GET-STR ":tc" .DESC>>
475 <SET AUX <GET-AUX-DESC .AUXN .DESCS>>)>
476 <SET HEIGHT <GET-NUM ":li" .DESC .AUX>>
477 <SET WIDTH <GET-NUM ":co" .DESC .AUX>>
478 <COND (<TYPE? <SET PAD <GET-STR ":pc" .DESC .AUX <ASCII 0>>> STRING>
480 <SET CRPAD <GET-NUM ":dC" .DESC .AUX 0>>
481 <SET LFPAD <GET-NUM ":dN" .DESC .AUX 0>>
482 <SET OPS <IVECTOR ,MAX-TTY-OP <>>>
485 #DECL ((OD) <VECTOR FIX ATOM [REST ANY]>)
488 <APPLY ,<2 .OD> .DESC .AUX !<REST .OD 2>>>>
490 <CHTYPE [.STDNAME .HEIGHT .WIDTH .PAD .CRPAD .LFPAD .OPS] TTY-DESC>>
492 <DEFINE GET-TTY-OP (MAIN AUX TARG "OPTIONAL" (OTH <>) "AUX" TS)
493 #DECL ((MAIN TARG) STRING (OTH AUX) <OR STRING FALSE>)
494 <COND (<AND <SET TS <GET-STR .TARG .MAIN .AUX <>>> <NOT <EMPTY? .TS>>>
496 (.OTH <GET-TTY-OP .MAIN .AUX .OTH>)>>
498 <DEFINE GET-TTY-BCK (MAIN AUX)
499 <COND (<OR <MEMBER ":bs" .MAIN> <MEMBER ":bs" .AUX>>
501 (<GET-TTY-OP .MAIN .AUX ":bc">)>>
503 <DEFINE GET-TTY-CLR (MAIN AUX "AUX" HO CD)
504 <COND (<GET-TTY-OP .MAIN .AUX ":cl">)
505 (<AND <SET HO <GET-TTY-HOME .MAIN .AUX>>
506 <SET CD <GET-TTY-OP .MAIN .AUX ":cd">>>
507 <MERGE-OPS .HO .CD>)>>
509 <DEFINE GET-TTY-ERA (MAIN AUX "AUX" BS)
510 <COND (<SET BS <GET-TTY-BCK .MAIN .AUX>> <MERGE-OPS .BS " ">)>>
512 <DEFINE GET-TTY-BEC (MAIN AUX "AUX" BS)
513 <COND (<SET BS <GET-TTY-BCK .MAIN .AUX>>
514 <MERGE-OPS <MERGE-OPS .BS " "> .BS>)>>
516 <DEFINE GET-TTY-HOME (MAIN AUX "AUX" TS)
517 <COND (<GET-TTY-OP .MAIN .AUX ":ho">)
518 (<SET TS <GET-STR ":cm" .MAIN .AUX <>>> <MAKE-OP .TS 0 0>)>>
520 <DEFINE GET-TTY-HOMD (MAIN AUX "AUX" TS)
521 <COND (<GET-TTY-OP .MAIN .AUX ":ll">)
522 (<=? .CUR-NAME "VS100"> <>)
523 (<SET TS <GET-STR ":cm" .MAIN .AUX <>>>
524 <MAKE-OP .TS 0 <- <GET-NUM ":li" .MAIN .AUX> 1>>)>>
526 <DEFINE MERGE-OPS (OP1 OP2)
527 #DECL ((OP1 OP2) <OR STRING TTY-OUT VECTOR TTY-ELT>)
529 (<AND <TYPE? .OP1 STRING> <TYPE? .OP2 STRING>> <STRING .OP1 .OP2>)
530 (<AND <TYPE? .OP1 TTY-ELT> <TYPE? .OP2 TTY-ELT>>
531 <CHTYPE [!.OP1 !.OP2] TTY-ELT>)
532 (<AND <TYPE? .OP1 TTY-OUT> <TYPE? .OP2 TTY-OUT>> [.OP1 .OP2 ""])
533 (<AND <TYPE? .OP2 TTY-OUT> <TYPE? .OP1 STRING TTY-ELT>>
534 <COND (<TYPE? <TO-STRING .OP2> STRING>
535 <COND (<TYPE? .OP1 STRING>
536 <TO-STRING .OP2 <STRING .OP1 <TO-STRING .OP2>>>)
537 (<TO-STRING .OP2 <CHTYPE [!.OP1 .OP2] TTY-ELT>>)>)
539 <COND (<TYPE? .OP1 STRING>
541 <CHTYPE [.OP1 !<TO-STRING .OP2>] TTY-ELT>>)
544 <CHTYPE [!.OP1 !<TO-STRING .OP2>]
546 (<AND <TYPE? .OP1 TTY-OUT STRING TTY-ELT>
547 <TYPE? .OP2 TTY-OUT STRING TTY-ELT>>
548 <COND (<AND <TYPE? .OP1 STRING> <TYPE? .OP2 TTY-ELT>>
549 <CHTYPE [.OP1 !.OP2] TTY-ELT>)
550 (<AND <TYPE? .OP1 TTY-ELT> <TYPE? .OP2 STRING>>
551 <CHTYPE [!.OP1 .OP2] TTY-ELT>)
553 (<AND <TYPE? .OP1 VECTOR> <EMPTY? <NTH .OP1 <LENGTH .OP1>>>>
556 <COND (<TYPE? .OP2 VECTOR> <2 .OP2>) (.OP2)>>)
557 (<ERROR CANT-MERGE .OP1 .OP2>)>>
559 <DEFINE MAKE-OP (STR "OPTIONAL" (X <>) (Y <>) "AUX" (PAD 0))
560 #DECL ((STR) STRING (X Y) <OR FIX FALSE> (PAD) FIX)
563 (<MEMQ <1 .STR> "0123456789">
565 <FUNCTION (ST "AUX" (C <1 .ST>))
566 #DECL ((ST) STRING (C) CHARACTER)
571 (<AND <G=? <ASCII .C> <ASCII !\0>>
572 <L=? <ASCII .C> <ASCII !\9>>>
575 <- <ASCII .C> <ASCII !\0>>>>)
576 (T <SET STR .ST> <MAPLEAVE>)>>
578 <COND (<EMPTY? .STR> <>)
579 (<==? .PAD 0> <GET-TTY-ELTS .STR .X .Y>)
580 (<G? .PAD 0> <CHTYPE [<GET-TTY-ELTS .STR .X .Y> .PAD] TTY-OUT>)
582 ["" <CHTYPE [<GET-TTY-ELTS .STR .X .Y> <- .PAD>] TTY-OUT> ""])>>
584 <DEFINE GET-TTY-ELTS (STR
585 "OPTIONAL" (X <>) (Y <>)
586 "AUX" (X-FIRST? <>) (FIRST-USED? <>) (LAST-START .STR)
587 (INC? <>) (BCD? <>) TE (SST .STR))
588 #DECL ((STR) STRING (LAST-START) <OR STRING FALSE> (TE) VECTOR
589 (BCD? INC? X-FIRST? FIRST-USED?) <OR ATOM FALSE>
590 (X Y) <OR FIX FALSE>)
592 (<NOT <MEMQ !\% .STR>> .STR)
596 <FUNCTION ("AUX" C ANUM NS)
598 <COND (<N==? .SST .STR> <MAPSTOP .SST>) (<MAPSTOP>)>)>
600 (<N==? <SET C <1 .STR>> !\%> <SET STR <REST .STR>> <MAPRET>)
602 <SET NS <SUBSTRUC .SST 0 <- <LENGTH .SST> <LENGTH .STR>>>>
607 <SET STR <REST .STR 2>>
609 <COND (<==? .C !\%> <MAPRET "%">)
610 (<==? .C !\r> <SET X-FIRST? <NOT .X-FIRST?>> <MAPRET>)
611 (<==? .C !\i> <SET INC? T> <MAPRET>)
612 (<==? .C !\B> <SET BCD? T> <MAPRET>)>
614 <COND (.FIRST-USED? <SET ANUM ,TTY-Y-POS>)
615 (T <SET FIRST-USED? T> <SET ANUM ,TTY-X-POS>)>)
617 <COND (.FIRST-USED? <SET ANUM ,TTY-X-POS>)
618 (T <SET FIRST-USED? T> <SET ANUM ,TTY-Y-POS>)>)>
620 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-INC-ARG> FIX>>)>
622 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-BCD-ARG> FIX>>)>
624 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-DECIMAL> FIX>>)
626 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-RJD2> FIX>>)
628 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-RJD3> FIX>>)
630 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-LITERAL> FIX>>)
632 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-LIT+> FIX>>
633 <SET STR <REST .STR>>
636 <PRINC "WARNING -- unknown descriptor `">
641 <SET ANUM <CHTYPE <ORB .ANUM ,TTY-UNKNOWN> FIX>>)>
642 <COND (<AND .X <0? <CHTYPE <ANDB .ANUM ,TTY-X/Y> FIX>>>
643 <MAPRET <PROCESS-ARG .ANUM .X>>)
644 (<AND .Y <NOT <0? <CHTYPE <ANDB .ANUM ,TTY-X/Y> FIX>>>>
645 <MAPRET <PROCESS-ARG .ANUM .Y>>)>
647 <COND (<REPEAT ((TV .TE))
648 <COND (<EMPTY? .TV> <RETURN <>>)
649 (<NOT <TYPE? <1 .TV> STRING>> <RETURN T>)>
651 <CHTYPE .TE TTY-ELT>)
654 <DEFINE PROCESS-ARG (ANUM ARG "AUX" TS)
655 #DECL ((ANUM ARG) FIX (TS) STRING)
656 <COND (<NOT <0? <CHTYPE <ANDB .ANUM ,TTY-INC-ARG> FIX>>>
657 <SET ARG <+ .ARG 1>>)>
658 <COND (<NOT <0? <CHTYPE <ANDB .ANUM ,TTY-BCD-ARG> FIX>>>
659 <SET ARG <+ <* 16 </ .ARG 10>> <MOD .ARG 10>>>)>
660 <SET ANUM <CHTYPE <ANDB .ANUM ,TTY-ARG-DESC> FIX>>
661 <COND (<==? .ANUM ,TTY-LITERAL> <STRING <ASCII .ARG>>)
662 (<==? .ANUM ,TTY-LIT+> <STRING <ASCII <+ .ARG 32>>>)
663 (<==? .ANUM ,TTY-DECIMAL> <UNPARSE .ARG>)
664 (<==? .ANUM ,TTY-RJD2> <UNPARSE .ARG>)
665 (<==? .ANUM ,TTY-RJD3> <UNPARSE .ARG>)>>