3 ;"*****************************************************************************
5 This file defines constants and macros related to library format, local
6 library operations, and other random cruft.
8 L-DEFS.MUD: EDIT HISTORY Machine Independent
10 COMPILATION: Include when compiling.
12 JUN84 [Shane] - Created.
13 4OCT84 [Shane] - Commented, cleaned up.
14 20OCT84 [Shane] - Add bit for declaring entry applicable.
15 9NOV84 [Shane] - Merge definitions for LIBLOCK, MAP-RECORDS state vector.
16 ****************************************************************************"
20 ;"LENGTHW -- Return number of words required to represent STRING."
22 <DEFMAC LENGTHW ('STRING)
23 <FORM LSH <FORM + <FORM LENGTH .STRING> 3> -2>>
25 ;"RDRWD -- Read and return word (FIX) from disk CHANNEL in binary mode."
27 <DEFMAC RDWRD ('CHANNEL)
28 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> READ-BYTE>>
30 ;"RDBUF -- Read words from disk CHANNEL open in binary mode into UVECTOR,
31 returning number of words read."
33 <DEFMAC RDBUF ('CHANNEL 'UVECTOR "OPT" 'FIX)
34 <COND (<ASSIGNED? FIX>
35 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
36 READ-BUFFER .UVECTOR .FIX>)
38 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
39 READ-BUFFER .UVECTOR>)>>
41 ;"WRWRD -- Write FIX to disk CHANNEL open in binary mode."
43 <DEFMAC WRWRD ('CHANNEL 'FIX)
44 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> WRITE-BYTE .FIX>>
46 ;"WRBUF -- Write words from UVECTOR to disk CHANNEL open in binary mode."
48 <DEFMAC WRBUF ('CHANNEL 'UVECTOR "OPT" 'FIX)
49 <COND (<ASSIGNED? FIX>
50 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
51 WRITE-BUFFER .UVECTOR .FIX>)
53 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
54 WRITE-BUFFER .UVECTOR>)>>
56 ;"SETADR -- Access disk CHANNEL to address FIX."
58 <DEFMAC SETADR ('CHANNEL 'FIX)
59 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> ACCESS .FIX>>
61 ;"GETADR -- Return address of next word in disk CHANNEL."
63 <DEFMAC GETADR ('CHANNEL)
64 <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> ACCESS>>
66 ;"BYTEn - Extract and return the nth byte from WORD. Leftmost byte is 3."
68 <DEFMAC BYTE3 ('WORD) <FORM GETBITS .WORD '<BITS 8 24>>>
70 <DEFMAC BYTE2 ('WORD) <FORM GETBITS .WORD '<BITS 8 16>>>
72 <DEFMAC BYTE1 ('WORD) <FORM GETBITS .WORD '<BITS 8 8>>>
74 <DEFMAC BYTE0 ('WORD) <FORM GETBITS .WORD '<BITS 8 0>>>
76 ;"LHALF, RHALF -- Extract and return the leftmost (rightmost) 16 bits from WORD."
78 <DEFMAC LHALF ('WORD) <FORM GETBITS .WORD '<BITS 16 16>>>
80 <DEFMAC RHALF ('WORD) <FORM GETBITS .WORD '<BITS 16 0>>>
82 ;"ADDRESS - Extract and return rightmost 24 bits from WORD (file address)."
84 <DEFMAC ADDRESS ('WORD) <FORM GETBITS .WORD '<BITS 24 0>>>
86 ;"CHAR - Return WORD changed to character."
88 <DEFMAC CHAR ('WORD) <FORM CHTYPE .WORD CHARACTER>>
90 ;"TESTBIT -- Return T if WORD contains the bits of MASK, otherwise FALSE. If
91 SENSE is FALSE, the result is logically negated."
93 <DEFMAC TESTBIT ('WORD 'MASK "OPT" (SENSE T))
94 #DECL ((SENSE) <OR ATOM FALSE>)
96 <FORM N==? <FORM ANDB .WORD .MASK> 0>)
98 <FORM ==? <FORM ANDB .WORD .MASK> 0>)>>
100 <GDECL (OLD-TYPES) FIX> ;"External."
102 ;"TYPE-NAME? -- Return T if ATOM names a type."
104 <DEFMAC TYPE-NAME? ('ATOM)
105 <FORM BIND ((A .ATOM)) '#DECL ((A) ATOM)
106 '<OR <AND <VALID-TYPE? .A> <G? <LSH <TYPE-C .A> -6> ,OLD-TYPES>>
109 ;"EXTRACT-NMn -- Extract and return the specified part from file-spec NAME."
111 <DEFMAC EXTRACT-NM1 ('NAME)
112 <FORM BIND ((CHANNEL <FORM CHANNEL-OPEN PARSE .NAME 0 0 0 0>)
113 '(STRING <CHANNEL-OP .CHANNEL NM1>))
114 '#DECL ((CHANNEL) <CHANNEL 'DISK> (STRING) STRING)
115 '<CHANNEL-CLOSE .CHANNEL>
118 <DEFMAC EXTRACT-NM2 ('NAME)
119 <FORM BIND ((CHANNEL <FORM CHANNEL-OPEN PARSE .NAME 0 0 0 0>)
120 '(STRING <CHANNEL-OP .CHANNEL NM2>))
121 '#DECL ((CHANNEL) <CHANNEL 'DISK> (STRING) STRING)
122 '<CHANNEL-CLOSE .CHANNEL>
125 ;"DIRECTORY HEADER CONSTANTS."
127 <MSETG DIR-TABSIZ 0> ;"File address of hash table size."
128 <MSETG DIR-LERCNT 1> ;"File address of entry count."
129 <MSETG DIR-LPDCNT 2> ;"File address of package count."
130 <MSETG DIR-FRELST 3> ;"File address of free list."
131 <MSETG DIR-EOFPTR 4> ;"File address of EOF pointer."
132 <MSETG DIR-HDRLEN 5> ;"Header size = file address of first hash bucket."
134 ;"HASH BUCKET CONSTANTS."
136 <MSETG BKT-M *20000000000*> ;"Bit indicating bucket points to list."
137 <MSETG BKT-P *10000000000*> ;"Bit indicating bucket points to package."
138 <MSETG BKT-E *4000000000*> ;"Bit indicating bucket points to entry."
140 ;"RECORD INFORMATION WORD CONSTANTS."
142 <MSETG RINFO-CFN? *400*> ;"Bit indicating presence of code file."
143 <MSETG RINFO-SFN? *1000*> ;"Bit indicating presence of source file."
144 <MSETG RINFO-AFN? *2000*> ;"Bit indicating presence of abstract file."
145 <MSETG RINFO-DFN? *4000*> ;"Bit indicating presence of doc file."
146 <MSETG RINFO-DOC? *10000*> ;"Bit indicating presence of doc string."
147 <MSETG RINFO-PKG? *20000*> ;"Bit indicating record is for package."
149 ;"ENTRY/RENTRY DESCRIPTOR CONSTANTS."
151 <MSETG ERTYP-MANIFEST? *10000*> ;"Bit indicating r/entry is manifested."
152 <MSETG ERTYP-TYPE? *20000*> ;"Bit indicating r/entry is type name."
153 <MSETG ERTYP-ENTRY? *40000*> ;"Bit indictaing r/entry is entry."
154 <MSETG ERTYP-APPLICABLE? *100000*> ;"Bit indicating gval is applicable."
156 ;"USE/EXPORT/INCLUDE DESCRIPTOR CONSTANTS."
158 <MSETG UXI-USED? *200000*> ;"Bit indicating module is used."
159 <MSETG UXI-EXPORTED? *400000*> ;"Bit indicating module is exported."
160 <MSETG UXI-INCLUDED? *1000000*> ;"Bit indicating module is included."
162 ;"HASH TABLE CONSTANTS."
164 <MSETG INITIAL-BUCKETS 4001> ;"Default number of buckets for new library."
165 <MSETG HASH-ROT 13> ;"Magic constant for hashing functions."
167 ;"STRUCTURE SIZE CONSTANTS."
169 <MSETG MAXREC 4096> ;"No record may exceed this size in words (arbitrary)."
170 <MSETG MAXSTRU 256> ;"No string may exceed this size in words (library law)."
171 <MSETG MAXSTRS 1024> ;"No string may exceed this size in chars (library law)."
173 ;"OFFSETS FOR STATE VECTOR IN MAP-RECORDS, NEXT-RECORD (see L-QUERY-BASE.MUD)."
175 <MSETG NEXT-BUCKET <OFFSET 1 UVECTOR FIX>> ;"File address of next bucket."
176 <MSETG BUCKET-CDR <OFFSET 2 UVECTOR FIX>> ;"File address of cdr in list."
177 <MSETG LAST-BUCKET <OFFSET 3 UVECTOR FIX>> ;"File address of last in table."
179 ;"LUP TYPE DEFINITIONS. (See LUP-BASE.MUD)."
181 ;"A LIBLOCK represents a locked local library."
183 <NEWSTRUC LIBLOCK VECTOR
184 ;"Channel to current library locked against writing (using FLOCK under
185 UNIX, thawed (open in MODIFY mode) access under TOPS-20)."
186 LL-OLD <CHANNEL 'DISK>
187 ;"Channel to shadow copy of library. Changes modify this file."
188 LL-NEW <CHANNEL 'DISK>
189 ;"Channel to log file for update record."
190 LL-LOG <CHANNEL 'DISK>
191 ;"The files (names) in LL-TMP-FILES are to be renamed to the
192 corresponding files (names) in LL-ADD-FILES when the updated
193 library is installed."
194 LL-ADD-FILES <LIST [REST STRING]>
195 LL-TMP-FILES <LIST [REST STRING]>
196 ;"The files (names) in LL-DEL-FILES are to be deleted when the updated
197 library is installed."
198 LL-DEL-FILES <LIST [REST STRING]>
199 ;"Unique suffix for generating temporary file names."
202 <MSETG LOCK-FILE 6> ;"Mask for locking in FLOCK (UNIX)."
203 <MSETG UNLOCK-FILE 8> ;"Mask for releasing in FLOCK."
205 <PUT-DECL DSK '<CHANNEL 'DISK>> ;"Convenient synonym."
207 <ENV-COND (("MACHINE" "TOPS20")
208 ;"Suppress generation number in NAME CHANNEL-OP under TOPS-20."
209 <MSETG NO-GENERATION *56*>
210 ;"Following dont exist under TOPS20."
211 <EVAL <PARSE "<PUT-DECL NET '<CHANNEL 'NETWORK>>">>
212 <EVAL <PARSE "<NEWTYPE NET-ADDRESS UVECTOR>">>)
215 <MSETG NO-GENERATION *77*>)>