3 <ENTRY HOST NICKNAMES SITE-ENTRY HOST-NAME>
5 <SETG BREAKS <STRING <ASCII 13> <ASCII 10> <ASCII 32> <ASCII 9>>>
7 <GDECL (BREAKS) STRING>
19 <MANIFEST WH-HOSTNUM WH-HOSTNAME WH-NICKNAMES WH-NUMHOST WH-ENTRY>
21 <DEFINE NICKNAMES (WHICH)
22 #DECL ((WHICH) <OR FIX STRING>)
23 <SEARCH-HOSTS .WHICH ,WH-NICKNAMES>>
25 <DEFINE HOST-NAME (WHICH)
26 #DECL ((WHICH) <OR FIX STRING>)
27 <SEARCH-HOSTS .WHICH ,WH-HOSTNAME>>
29 <DEFINE SITE-ENTRY (WHICH)
30 #DECL ((WHICH) <OR FIX STRING>)
31 <SEARCH-HOSTS .WHICH ,WH-ENTRY>>
34 #DECL ((WHICH) <OR STRING FIX>)
35 <SEARCH-HOSTS .WHICH <COND (<TYPE? .WHICH FIX> ,WH-NUMHOST)
38 <DEFINE NUM2STR (SPEC STR "AUX" (CT 0))
40 <SET CT <PUTFIELD <GETBITS .SPEC <BITS 8 0>> .STR .CT>>
41 <PUT .STR <SET CT <+ .CT 1>> !\.>
42 <SET CT <PUTFIELD <GETBITS .SPEC <BITS 8 8>> .STR .CT>>
43 <PUT .STR <SET CT <+ .CT 1>> !\.>
44 <SET CT <PUTFIELD <GETBITS .SPEC <BITS 8 16>> .STR .CT>>
45 <PUT .STR <SET CT <+ .CT 1>> !\.>
46 <SET CT <PUTFIELD <GETBITS .SPEC <BITS 8 24>> .STR .CT>>
47 <SUBSTRUC .STR 0 .CT <REST .STR <- <LENGTH .STR> .CT>>>>
49 <DEFINE PUTFIELD (VAL STR STRT "AUX" (DIV 100) (ANY? <>))
50 #DECL ((VAL) FIX (STR) STRING (STRT DIV) FIX)
52 <COND (<OR <NOT <0? <SET TMP </ .VAL .DIV>>>> .ANY?>
54 <SET STRT <+ .STRT 1>>
55 <ASCII <+ .TMP <ASCII !\0>>>>
56 <SET VAL <MOD .VAL .DIV>>
58 <COND (<0? <SET DIV </ .DIV 10>>>
60 <PUT .STR <SET STRT <+ .STRT 1>> !\0>)>
63 <DEFINE SEARCH-HOSTS (ITARG WHICH "AUX" TARG (NUM? <>)
64 (STR <STACK <ISTRING <COND (<TYPE? .ITARG FIX> 15)
65 (T <LENGTH .ITARG>)>>>)
66 (BUF <STACK <ISTRING 512>>)
68 #DECL ((TARG) STRING (FIRST?) <OR ATOM !<FALSE>> (BUF) STRING
69 (CH) <OR <CHANNEL 'DISK> FALSE> (ITARG) <OR STRING FIX>)
70 <COND (<TYPE? .ITARG FIX>
71 <SET TARG <NUM2STR .ITARG .STR>>
75 <FUNCTION (S1 S2 "AUX" (CHR <1 .S1>))
76 #DECL ((S1 S2) STRING)
77 <COND (<AND <G=? <ASCII .CHR> <ASCII !\A>>
78 <L=? <ASCII .CHR> <ASCII !\Z>>>
79 <SET CHR <ASCII <- <ASCII .CHR>
80 %<- <ASCII !\A> <ASCII !\a>>>>>)>
86 (<SET CH <CHANNEL-OPEN DISK "/ETC/HOSTS" "READ" "ASCII" <>>>
87 <REPEAT (CS (NS "") (STR <>) MSTR)
88 #DECL ((NS MSTR) STRING (CS STR) <OR STRING FALSE>)
90 <SUBSTRUC .NS 0 <LENGTH .NS> <SET MSTR .BUF>>
92 <COND (<0? <CHANNEL-OP .CH
94 <REST .BUF <LENGTH .NS>>>:FIX>
98 <COND (<SET CS <MEMBER .TARG .MSTR>>
99 <SET NS <LINE-BEGIN .CS .BUF>>
100 <COND (<==? <1 .NS> !\#> <SET STR <LINE-END .MSTR>>)
101 (<AND <OR <==? .CS .NS>
102 <MEMQ <1 <BACK .CS>> ,BREAKS>>
103 <G? <LENGTH .CS> <LENGTH .TARG>>
104 <MEMQ <NTH .CS <+ <LENGTH .TARG> 1>> ,BREAKS>>
105 <COND (<NOT <SET STR <LINE-END .CS>>> <AGAIN>)>
106 <COND (<COND (.NUM? <==? .CS .NS>)
109 <RETURN <WINNER .TARG .WHICH .NS .STR>>)>)
110 (<L=? <LENGTH .CS> <LENGTH .TARG>> <SET STR <>>)
111 (T <SET STR <REST .CS <LENGTH .TARG>>>)>)
113 <SET NS <LINE-BEGIN <REST .MSTR <LENGTH .MSTR>> .BUF>>
115 <COND (<AND .CH <CHANNEL-OPEN? .CH>> <CLOSE .CH> <>)>>>
117 <DEFINE LINE-BEGIN (STR TOP)
118 #DECL ((STR TOP) STRING)
120 <COND (<==? .STR .TOP> <RETURN .STR>)>
121 <COND (<==? <1 <SET STR <BACK .STR>>> <ASCII 10>>
122 <RETURN <REST .STR>>)>>>
124 <DEFINE LINE-END (STR)
127 <COND (<EMPTY? .STR> <RETURN <>>)>
128 <COND (<==? <1 .STR> <ASCII 10>> <RETURN <REST .STR>>)>
129 <SET STR <REST .STR>>>>
133 <DEFINE WINNER (TARG WHICH NS STR "AUX" NNS TS)
134 #DECL ((TARG NS STR) STRING (WHICH) FIX)
137 (,WH-ENTRY <SUBSTRUC .NS 0 <- <LENGTH .NS> <LENGTH .STR> 1>>)
139 <REPEAT ((HNUM 0) (CT 0) (ACC 0) CHR)
140 <COND (<==? <SET CHR <1 .NS>> !\.>
142 <PUTBITS .HNUM <BITS 8 <* .CT 8>> .ACC>>
145 (<AND <G=? <ASCII .CHR> <ASCII !\0>>
146 <L=? <ASCII .CHR> <ASCII !\9>>>
149 <- <ASCII .CHR> <ASCII !\0>>>>)
152 <PUTBITS .HNUM <BITS 8 <* .CT 8>> .ACC>>
154 <SET NS <REST .NS>>>)
155 (!'(,WH-NUMHOST ,WH-HOSTNAME)
156 <SET NS <FIND-BREAK .NS .STR>>
157 <SET NS <FIND-NON-BREAK .NS .STR>>
158 <SET STR <FIND-BREAK .NS .STR>>
159 <SUBSTRUC .NS 0 <- <LENGTH .NS> <LENGTH .STR>>>)
161 <SET NS <FIND-NON-BREAK <FIND-BREAK .NS .STR> .STR>>
164 <SET NNS <FIND-BREAK .NS .STR>>
165 <COND (<==? <1 .NNS> <ASCII 10>>
167 <SUBSTRUC .NS 0 <- <LENGTH .NS> <LENGTH .NNS>>>>)
170 <SUBSTRUC .NS 0 <- <LENGTH .NS> <LENGTH .NNS>>>>
171 <SET NS <FIND-NON-BREAK .NNS .STR>>
174 <DEFINE FIND-BREAK (STRT END)
175 #DECL ((STRT END) STRING)
177 <COND (<==? .STRT .END> <RETURN <>>)>
178 <COND (<MEMQ <1 .STRT> ,BREAKS> <RETURN .STRT>)>
179 <SET STRT <REST .STRT>>>>
181 <DEFINE FIND-NON-BREAK (STRT END)
182 #DECL ((STRT END) STRING)
184 <COND (<==? .STRT .END> <RETURN <>>)>
185 <COND (<NOT <MEMQ <1 .STRT> ,BREAKS>> <RETURN .STRT>)>
186 <SET STRT <REST .STRT>>>>