1 "The following functions parse a terminal description file into
2 the format used by the rest of the TTY package. If GC-READ and
3 friends ever exist, they will probably replace this. PARSE-SPEC-FILE,
4 the top-level, takes a channel (which it will close) to the description
5 file, and returns a TTY-DESC. Other information is needed to make the
8 <DEFINE PARSE-SPEC-FILE (CH "AUX" BYTE NAME HEIGHT WIDTH PAD CRPAD LFPAD
9 OPCNT OPMAX TTY BUFSTR OPVEC LEN)
10 #DECL ((CH) CHANNEL (BYTE) CHARACTER (NAME) STRING
11 (CRPAD LFPAD LEN HEIGHT WIDTH OPCNT OPMAX) FIX
12 (PAD) CHARACTER (TTY) TTY-DESC
13 (OPVEC) VECTOR (BUFSTR) STRING)
14 <COND (<NOT <GASSIGNED? BUFSTR>>
15 <SETG BUFSTR <ISTRING 256>>)>
17 <SET LEN <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
18 <SET NAME <ISTRING .LEN>>
19 <FCHANNEL-OP .CH READ-BUFFER .NAME>
20 <SET HEIGHT <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
21 <SET WIDTH <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
22 <SET PAD <FCHANNEL-OP .CH READ-BYTE>>
23 <SET CRPAD <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
24 <SET LFPAD <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
25 <SET OPMAX <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
26 <SET OPCNT <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
27 <SET OPVEC <IVECTOR .OPMAX <>>>
28 <SET TTY <CHTYPE [.NAME .HEIGHT .WIDTH .PAD
29 .CRPAD .LFPAD .OPVEC] TTY-DESC>>
34 <SET LEN <CHTYPE <FCHANNEL-OP .CH READ-BYTE> FIX>>
36 <FCHANNEL-OP .CH READ-BUFFER .BUFSTR .LEN>
37 <PUT .OPVEC <CHTYPE <1 .BUFSTR> FIX>
38 <PARSE-SPEC <REST .BUFSTR> <- .LEN 1>>>)>
39 <SET OPCNT <- .OPCNT 1>>>>
41 "PARSE-SPEC parses the specification for a single terminal operation,
42 and returns an appropriate structure."
44 <DEFINE PARSE-SPEC (SPECSTR LEN "AUX" NP VEC)
45 #DECL ((SPECSTR) STRING (LEN) FIX)
46 <SET NP <CHTYPE <1 .SPECSTR> FIX>>
47 <SET SPECSTR <REST .SPECSTR>>
50 <GET-TTY-OP .SPECSTR>)
52 <SET VEC <IVECTOR .NP <>>>
56 <1 .VV <GET-TTY-OP .SPECSTR>>
57 <SET SPECSTR <REST .SPECSTR <+ <CHTYPE <2 .SPECSTR> FIX>
62 <DEFINE NEW-STRING (STR LEN "AUX" (NS <ISTRING .LEN>))
63 #DECL ((STR NS) STRING (LEN) FIX)
70 <DEFINE GET-TTY-OP (STR "AUX" PAD ELTS NS)
71 #DECL ((STR) STRING (PAD) FIX)
72 <SET PAD <CHTYPE <1 .STR> FIX>>
73 <SET ELTS <CHTYPE <3 .STR> FIX>>
74 <COND (<AND <1? .ELTS>
75 <L? <CHTYPE <4 .STR> FIX> *200*>>
77 <SET NS <NEW-STRING <REST .STR 4> <CHTYPE <4 .STR> FIX>>>)
79 <SET NS <CHTYPE <IVECTOR .ELTS 0> TTY-ELT>>
80 <SET STR <REST .STR 3>>
81 ; "Rest off all but element descriptions"
83 <FUNCTION (NNS "AUX" NUM)
84 #DECL ((NNS) <PRIMTYPE VECTOR>)
85 <COND (<G=? <SET NUM <CHTYPE <1 .STR> FIX>> *200*>
87 <SET STR <REST .STR>>)
89 <1 .NNS <NEW-STRING <REST .STR> .NUM>>
90 <SET STR <REST .STR <+ .NUM 1>>>)>>
93 (<CHTYPE [.NS .PAD] TTY-OUT>)>>