Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / vax / mimlib / l-defs.mud
1 <DEFINITIONS "L-DEFS">
2
3 ;"*****************************************************************************
4
5   This file defines constants and macros related to library format, local
6   library operations, and other random cruft.
7
8   L-DEFS.MUD: EDIT HISTORY                                  Machine Independent
9
10   COMPILATION: Include when compiling.
11
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   ****************************************************************************"
17
18 <USE "NEWSTRUC">
19
20 ;"LENGTHW -- Return number of words required to represent STRING."
21
22 <DEFMAC LENGTHW ('STRING)
23    <FORM LSH <FORM + <FORM LENGTH .STRING> 3> -2>>
24
25 ;"RDRWD -- Read and return word (FIX) from disk CHANNEL in binary mode."
26
27 <DEFMAC RDWRD ('CHANNEL)
28    <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> READ-BYTE>>
29
30 ;"RDBUF -- Read words from disk CHANNEL open in binary mode into UVECTOR,
31   returning number of words read."
32
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>)
37          (T
38           <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
39                 READ-BUFFER .UVECTOR>)>>
40
41 ;"WRWRD -- Write FIX to disk CHANNEL open in binary mode."
42
43 <DEFMAC WRWRD ('CHANNEL 'FIX)
44    <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> WRITE-BYTE .FIX>>
45
46 ;"WRBUF -- Write words from UVECTOR to disk CHANNEL open in binary mode."
47
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>)
52          (T
53           <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL>
54                 WRITE-BUFFER .UVECTOR>)>>
55
56 ;"SETADR -- Access disk CHANNEL to address FIX."
57
58 <DEFMAC SETADR ('CHANNEL 'FIX)
59    <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> ACCESS .FIX>>
60
61 ;"GETADR -- Return address of next word in disk CHANNEL."
62
63 <DEFMAC GETADR ('CHANNEL)
64    <FORM CHANNEL-OP <CHTYPE [.CHANNEL '<CHANNEL 'DISK>] ADECL> ACCESS>>
65 \f
66 ;"BYTEn - Extract and return the nth byte from WORD. Leftmost byte is 3."
67
68 <DEFMAC BYTE3 ('WORD) <FORM GETBITS .WORD '<BITS 8 24>>>
69
70 <DEFMAC BYTE2 ('WORD) <FORM GETBITS .WORD '<BITS 8 16>>>
71
72 <DEFMAC BYTE1 ('WORD) <FORM GETBITS .WORD '<BITS 8 8>>>
73
74 <DEFMAC BYTE0 ('WORD) <FORM GETBITS .WORD '<BITS 8 0>>>
75
76 ;"LHALF, RHALF -- Extract and return the leftmost (rightmost) 16 bits from WORD."
77
78 <DEFMAC LHALF ('WORD) <FORM GETBITS .WORD '<BITS 16 16>>>
79
80 <DEFMAC RHALF ('WORD) <FORM GETBITS .WORD '<BITS 16 0>>>
81
82 ;"ADDRESS - Extract and return rightmost 24 bits from WORD (file address)."
83
84 <DEFMAC ADDRESS ('WORD) <FORM GETBITS .WORD '<BITS 24 0>>>
85
86 ;"CHAR - Return WORD changed to character."
87
88 <DEFMAC CHAR ('WORD) <FORM CHTYPE .WORD CHARACTER>>
89
90 ;"TESTBIT -- Return T if WORD contains the bits of MASK, otherwise FALSE. If
91   SENSE is FALSE, the result is logically negated."
92
93 <DEFMAC TESTBIT ('WORD 'MASK "OPT" (SENSE T))
94    #DECL ((SENSE) <OR ATOM FALSE>)
95    <COND (.SENSE
96           <FORM N==? <FORM ANDB .WORD .MASK> 0>)
97          (T
98           <FORM ==? <FORM ANDB .WORD .MASK> 0>)>>
99
100 <GDECL (OLD-TYPES) FIX>                     ;"External."
101
102 ;"TYPE-NAME? -- Return T if ATOM names a type."
103
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>>
107               <GET-DECL .A>>>>
108
109 ;"EXTRACT-NMn -- Extract and return the specified part from file-spec NAME."
110
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>
116          '.STRING>>
117
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>
123          '.STRING>>
124 \f
125 ;"DIRECTORY HEADER CONSTANTS."
126
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."
133
134 ;"HASH BUCKET CONSTANTS."
135
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."
139
140 ;"RECORD INFORMATION WORD CONSTANTS."
141
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."
148
149 ;"ENTRY/RENTRY DESCRIPTOR CONSTANTS."
150
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."
155
156 ;"USE/EXPORT/INCLUDE DESCRIPTOR CONSTANTS."
157
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."
161
162 ;"HASH TABLE CONSTANTS."
163
164 <MSETG INITIAL-BUCKETS 4001>    ;"Default number of buckets for new library."
165 <MSETG HASH-ROT 13>             ;"Magic constant for hashing functions."
166
167 ;"STRUCTURE SIZE CONSTANTS."
168
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)."
172
173 ;"OFFSETS FOR STATE VECTOR IN MAP-RECORDS, NEXT-RECORD (see L-QUERY-BASE.MUD)."
174
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."
178 \f
179 ;"LUP TYPE DEFINITIONS. (See LUP-BASE.MUD)."
180
181 ;"A LIBLOCK represents a locked local library."
182
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."
200           LL-SUFFIX    FIX>
201
202 <MSETG LOCK-FILE 6>                         ;"Mask for locking in FLOCK (UNIX)."
203 <MSETG UNLOCK-FILE 8>                       ;"Mask for releasing in FLOCK."
204
205 <PUT-DECL DSK '<CHANNEL 'DISK>>             ;"Convenient synonym."
206
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>">>)
213           (("MACHINE" "VAX")
214            ;"No effect on vax."
215            <MSETG NO-GENERATION *77*>)>
216
217 <END-DEFINITIONS>
218