1 <PACKAGE "CHANNEL-TYPE">
7 <NEWSTRUC SDTABLE VECTOR
9 SD-INHERIT <OR FALSE ATOM <LIST [REST ATOM]>>
10 SD-OPER <LIST [REST ATOM <OR MSUBR ATOM FALSE>]>>
12 <GDECL (CHANNEL-TYPES) <LIST [REST ATOM SDTABLE]>>
14 <DEFINE NEW-CHANNEL-TYPE (SNAME INHERIT
17 #DECL ((SNAME) ATOM (INHERIT) <OR ATOM FALSE <LIST [REST ATOM]>>
18 (OPS) <TUPLE [REST ATOM <OR MSUBR ATOM FALSE>]> (ST) LIST
19 (TL) <OR LIST FALSE> (LOSER) ATOM)
20 <COND (<NOT <GASSIGNED? CHANNEL-TYPES>>
21 <SETG CHANNEL-TYPES <SET ST ()>>)
22 (<SET ST ,CHANNEL-TYPES>)>
23 <COND (<OR <NOT <SET TL <MEMQ .SNAME .ST>>>
24 <AND <ASSIGNED? REDEFINE> .REDEFINE>
26 ALREADY-DEFINED-ERRET-NON-FALSE-TO-REDEFINE!-ERRORS
28 <SET SD <CHTYPE [.SNAME .INHERIT <LIST !.OPS>] SDTABLE>>
29 <COND (.TL <2 .TL .SD>)
30 (<SETG CHANNEL-TYPES (.SNAME .SD !.ST)>)>
33 <DEFINE SET-TYPE-FCN (STYPE OPER FCN "AUX" SD OL)
34 #DECL ((STYPE) ATOM (OPER) ATOM (FCN) <OR ATOM MSUBR FALSE>
35 (OL) <OR LIST FALSE> (SD) <OR FALSE SDTABLE>)
36 <COND (<SET SD <GET-CHANNEL-TYPE .STYPE>>
37 <COND (<SET OL <MEMQ .OPER <SD-OPER .SD>>> <2 .OL .FCN>)
38 (<SD-OPER .SD (.OPER .FCN !<SD-OPER .SD>)>)>
41 <DEFINE SET-TYPE-INHERIT (STYPE INHERIT "AUX" SD LOSER)
42 #DECL ((STYPE) ATOM (INHERIT) <OR ATOM FALSE <LIST [REST ATOM]>>
43 (SD) <OR SDTABLE FALSE> (LOSER) ATOM)
45 (<SET SD <GET-CHANNEL-TYPE .STYPE>>
46 <SD-INHERIT .SD .INHERIT>)>>
48 <DEFINE GET-CHANNEL-TYPE (STYPE "AUX" TL)
49 #DECL ((STYPE) ATOM (TL) <OR FALSE LIST>)
50 <COND (<AND <GASSIGNED? CHANNEL-TYPES> <SET TL <MEMQ .STYPE ,CHANNEL-TYPES>>>
52 (#FALSE ("NO SUCH CHANNEL TYPE"))>>
54 <DEFINE CT-QUERY (STYPE OPER "OPTIONAL" (DEPTH 0) "AUX" SL SD TL INH RES)
55 #DECL ((STYPE OPER) ATOM (TL SL) <OR LIST FALSE> (DEPTH) FIX
56 (SD) <OR SDTABLE FALSE>
57 (INH) <OR FALSE ATOM LIST>)
59 (<SET SD <GET-CHANNEL-TYPE .STYPE>>
62 (<SET TL <MEMQ .OPER <SD-OPER .SD>>> <2 .TL>)
63 (<SET TL <MEMQ * <SD-OPER .SD>>> <2 .TL>)
64 (<SET INH <SD-INHERIT .SD>>
65 <COND (<G? <SET DEPTH <+ .DEPTH 1>> 5>
66 <ERROR INHERITANCE-DEPTH-TOO-GREAT!-ERRORS
67 .STYPE .OPER CT-QUERY>)>
68 <COND (<TYPE? .INH ATOM> <CT-QUERY .INH .OPER .DEPTH>)
71 <FUNCTION (ATM "AUX" FOO)
74 <CT-QUERY .ATM .OPER .DEPTH>>
78 #FALSE ("CHANNEL TYPE DOESN'T DEFINE OPERATION"))>>
79 <COND (<TYPE? .RES MSUBR> <2 .RES>)
81 (#FALSE ("NO SUCH CHANNEL TYPE"))>>