2 <PACKAGE "CHANNEL-TYPE">
8 <NEWSTRUC SDTABLE VECTOR SD-NAME ATOM SD-INHERIT <OR FALSE ATOM <LIST [REST ATOM]>> SD-OPER <LIST [REST ATOM <OR MSUBR ATOM FALSE>]>>
10 <GDECL (CHANNEL-TYPES) <LIST [REST ATOM SDTABLE]>>
13 <GFCN
\1aNEW-CHANNEL-TYPE ("VALUE" <OR ATOM FALSE> ATOM <OR ATOM FALSE <LIST [REST ATOM]>> "TUPLE" <TUPLE [REST ATOM <OR MSUBR ATOM FALSE>]>) SNAME4 INHERIT5>
14 <MAKTUP OPS6 TEMP14 ST7:LIST TL8 TEMP30 = OPS6>
16 <NTHR 'CHANNEL-TYPES 1 = TEMP14 (RECORD-TYPE ATOM) (BRANCH-FALSE + TAG13)>
17 <TYPE? TEMP14 <TYPE-CODE FALSE> + TAG13>
18 <NTHR TEMP14 1 = TEMP14 (RECORD-TYPE GBIND)>
19 <TYPE? TEMP14 <TYPE-CODE UNBOUND> - PHRASE12>
22 <SET ST7 () (TYPE LIST)>
23 <SETG 'CHANNEL-TYPES ST7>
26 <GVAL 'CHANNEL-TYPES = ST7>
30 <LOOP (SNAME4 VALUE) (TL8 VALUE)>
33 <TYPE? TEMP14 <TYPE-CODE ATOM> - TAG21>
34 <VEQUAL? TEMP14 SNAME4 + TAG19>
37 <RESTL TL8 1 = TL8 (TYPE LIST)>
40 <SET TL8 %<> (TYPE FALSE)>
42 <VEQUAL? TL8 0 + BOOL17>
43 <GEN-ASSIGNED? 'REDEFINE - BOOL23>
44 <GEN-LVAL 'REDEFINE = TEMP14>
45 <TYPE? TEMP14 <TYPE-CODE FALSE> - BOOL17>
50 <PUSH 'ALREADY-DEFINED-ERRET-NON-FALSE-TO-REDEFINE!-ERRORS>
51 <PUSH 'NEW-CHANNEL-TYPE>
52 <CALL '
\1aERROR 3 = TEMP14>
53 <TYPE? TEMP14 <TYPE-CODE FALSE> + PHRASE16>
58 <SET TEMP30 0 (TYPE FIX)>
61 <LOOP (TEMP14 VALUE LENGTH) (TEMP30 VALUE)>
64 <EMPUV? TEMP14 + TAG29>
65 <NTHUV TEMP14 1 = STACK>
66 <RESTUV TEMP14 1 = TEMP14 (TYPE VECTOR)>
67 <ADD TEMP30 1 = TEMP30 (TYPE FIX)>
70 <LIST TEMP30 = STACK (TYPE LIST)>
72 <UBLOCK <TYPE-CODE VECTOR> 3 = TEMP30>
73 <CHTYPE TEMP30 <TYPE-CODE SDTABLE> = OPS6>
75 <TYPE? TL8 <TYPE-CODE FALSE> + PHRASE34>
76 <RESTL TL8 1 = TEMP30 (TYPE LIST)>
82 <CONS OPS6 ST7 = TEMP30>
84 <CONS SNAME4 TEMP30 = TEMP30>
85 <SETG 'CHANNEL-TYPES TEMP30>
93 <END
\1aNEW-CHANNEL-TYPE>
96 <GFCN
\1aADD-CHANNEL-OPS ("VALUE" ATOM ATOM "TUPLE" <TUPLE [REST ATOM <OR MSUBR ATOM FALSE>]>) STYPE4>
97 <MAKTUP OPS5:TUPLE TEMP9 = OPS5>
99 <FRAME '
\1aGET-CHANNEL-TYPE>
101 <CALL '
\1aGET-CHANNEL-TYPE 1 = TEMP9>
102 <TYPE? TEMP9 <TYPE-CODE FALSE> + PHRASE7>
108 <EMPUV? TEMP9 + EXIT10>
109 <FRAME '
\1aSET-TYPE-FCN>
111 <NTHUV OPS5 1 = STACK (TYPE ATOM)>
112 <NTHUV OPS5 2 = STACK>
113 <CALL '
\1aSET-TYPE-FCN 3>
114 <RESTUV TEMP9 2 = TEMP9 (TYPE VECTOR)>
115 <CHTYPE TEMP9 <TYPE-CODE VECTOR> = TEMP9>
121 <FRAME '
\1aNEW-CHANNEL-TYPE>
124 <SET TEMP9 2 (TYPE FIX)>
125 <LOOP (OPS5 VALUE LENGTH) (TEMP9 VALUE)>
128 <EMPUV? OPS5 + TAG17>
129 <NTHUV OPS5 1 = STACK>
130 <RESTUV OPS5 1 = OPS5 (TYPE VECTOR)>
131 <ADD TEMP9 1 = TEMP9 (TYPE FIX)>
134 <CALL '
\1aNEW-CHANNEL-TYPE TEMP9>
138 <END
\1aADD-CHANNEL-OPS>
141 <GFCN
\1aSET-TYPE-FCN ("VALUE" <OR ATOM FALSE> ATOM ATOM <OR ATOM MSUBR FALSE>) STYPE4 OPER5 FCN6>
142 <TEMP SD7 TEMP11 TEMP19>
144 <FRAME '
\1aGET-CHANNEL-TYPE>
147 <CALL '
\1aGET-CHANNEL-TYPE 1 = SD7>
149 <TYPE? TEMP11 <TYPE-CODE FALSE> + PHRASE10>
150 <NTHUV SD7 3 = TEMP11 (TYPE LIST)>
151 <EMPL? TEMP11 + TAG15>
152 <LOOP (OPER5 VALUE) (TEMP11 VALUE)>
154 <NTHL TEMP11 1 = TEMP19>
155 <TYPE? TEMP19 <TYPE-CODE ATOM> - TAG18>
156 <VEQUAL? TEMP19 OPER5 + TAG16>
159 <RESTL TEMP11 1 = TEMP11 (TYPE LIST)>
160 <EMPL? TEMP11 - TAG17>
162 <SET TEMP11 %<> (TYPE FALSE)>
164 <VEQUAL? TEMP11 0 + PHRASE14>
165 <RESTL TEMP11 1 = TEMP19 (TYPE LIST)>
171 <NTHUV SD7 3 = TEMP19 (TYPE LIST)>
172 <CONS FCN6 TEMP19 = TEMP19>
174 <CONS OPER5 TEMP19 = TEMP19>
175 <PUTUV SD7 3 TEMP19 (TYPE LIST)>
183 <END
\1aSET-TYPE-FCN>
186 <GFCN
\1aSET-TYPE-INHERIT ("VALUE" <OR FALSE SDTABLE> ATOM <OR ATOM FALSE <LIST [REST ATOM]>>) STYPE4 INHERIT5>
189 <FRAME '
\1aGET-CHANNEL-TYPE>
192 <CALL '
\1aGET-CHANNEL-TYPE 1 = SD6>
194 <TYPE? TEMP10 <TYPE-CODE FALSE> + PHRASE9>
195 <PUTUV SD6 2 INHERIT5>
202 <END
\1aSET-TYPE-INHERIT>
205 <GFCN
\1aGET-CHANNEL-TYPE ("VALUE" <OR ATOM FALSE SDTABLE> ATOM) STYPE4>
208 <NTHR 'CHANNEL-TYPES 1 = TEMP9 (RECORD-TYPE ATOM) (BRANCH-FALSE + PHRASE7)>
209 <TYPE? TEMP9 <TYPE-CODE FALSE> + PHRASE7>
210 <NTHR TEMP9 1 = TEMP9 (RECORD-TYPE GBIND)>
211 <TYPE? TEMP9 <TYPE-CODE UNBOUND> + PHRASE7>
213 <GVAL 'CHANNEL-TYPES = TL5>
215 <LOOP (STYPE4 VALUE) (TL5 VALUE)>
218 <TYPE? TEMP9 <TYPE-CODE ATOM> - TAG13>
219 <VEQUAL? TEMP9 STYPE4 + TAG11>
222 <RESTL TL5 1 = TL5 (TYPE LIST)>
225 <SET TL5 %<> (TYPE FALSE)>
227 <VEQUAL? TL5 0 + PHRASE7>
228 <RESTL TL5 1 = TEMP9 (TYPE LIST)>
230 <NTHL TEMP9 1 = TEMP9>
234 <RETURN #FALSE ("NO SUCH CHANNEL TYPE")>
235 <END
\1aGET-CHANNEL-TYPE>
238 <GFCN
\1aCT-QUERY ("VALUE" ANY ATOM ATOM "OPTIONAL" FIX) STYPE6 OPER7 DEPTH8>
239 <OPT-DISPATCH 2 %<> OPT4 OPT5>
243 <TEMP SD10 TL11 TEMP23>
245 <FRAME '
\1aGET-CHANNEL-TYPE>
247 <CALL '
\1aGET-CHANNEL-TYPE 1 = SD10>
248 <TYPE? SD10 <TYPE-CODE FALSE> + PHRASE15>
249 <NTHUV SD10 3 = TL11 (TYPE LIST)>
251 <LOOP (OPER7 VALUE) (TL11 VALUE)>
253 <NTHL TL11 1 = TEMP23>
254 <TYPE? TEMP23 <TYPE-CODE ATOM> - TAG22>
255 <VEQUAL? TEMP23 OPER7 + TAG20>
258 <RESTL TL11 1 = TL11 (TYPE LIST)>
261 <SET TL11 %<> (TYPE FALSE)>
263 <VEQUAL? TL11 0 + PHRASE18>
264 <RESTL TL11 1 = TEMP23 (TYPE LIST)>
266 <NTHL TEMP23 1 = SD10>
270 <NTHUV SD10 3 = TEMP23 (TYPE LIST)>
271 <EMPL? TEMP23 + TAG25>
272 <LOOP (TEMP23 VALUE)>
274 <NTHL TEMP23 1 = TL11>
275 <TYPE? TL11 <TYPE-CODE ATOM> - TAG28>
276 <VEQUAL? TL11 '* + TAG26>
279 <RESTL TEMP23 1 = TEMP23 (TYPE LIST)>
280 <EMPL? TEMP23 - TAG27>
282 <SET TL11 %<> (TYPE FALSE)>
288 <VEQUAL? TL11 0 + PHRASE24>
289 <RESTL TL11 1 = TEMP23 (TYPE LIST)>
291 <NTHL TEMP23 1 = SD10>
295 <NTHUV SD10 2 = TEMP23>
297 <TYPE? TEMP23 <TYPE-CODE FALSE> + PHRASE31>
298 <ADD DEPTH8 1 = DEPTH8 (TYPE FIX)>
299 <GRTR? DEPTH8 5 - PHRASE33 (TYPE FIX)>
301 <PUSH 'INHERITANCE-DEPTH-TOO-GREAT!-ERRORS>
308 <TYPE? TEMP23 <TYPE-CODE ATOM> - PHRASE36>
316 <CALL '
\1aCT-QUERY 3 = SD10>
319 <SET TL11 %<> (TYPE FALSE)>
323 <EMPL? TEMP23 + MAPAP43>
324 <NTHL TEMP23 1 = SD10>
330 <CALL '
\1aCT-QUERY 3 = SD10>
332 <TYPE? TL11 <TYPE-CODE FALSE> + PHRASE51>
335 <RESTL TEMP23 1 = TEMP23 (TYPE LIST)>
342 <SET SD10 #FALSE ("CHANNEL TYPE DOESN'T DEFINE OPERATION") (TYPE FALSE)>
344 <TYPE? SD10 <TYPE-CODE MSUBR> - PHRASE56>
345 <NTHUV SD10 2 = TEMP23>
353 <RETURN #FALSE ("NO SUCH CHANNEL TYPE")>