Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / mim / mimlib / macdefs.mud
1 <USE "NEWSTRUC">
2
3 <GDECL (BUFLEN SBUFLEN) FIX>
4 <MSETG BYTES/WORD 4>
5
6 ; "ARGS TO INTERNAL TIMER CALLS"
7 <MSETG ITIMER-REAL 0>
8 <MSETG ITIMER-VIRTUAL 1>
9 <MSETG ITIMER-PROF 2>
10
11 <MSETG ITIMER-INTERVAL 1>
12 <MSETG ITIMER-VALUE 2>
13
14 <MSETG EINTR 4>
15 <MSETG EEXIST 17>
16
17 ; "SPECIAL FILE DESCRIPTORS"
18
19 <MSETG STDIN 0>
20 <MSETG STDOUT 1>
21 <MSETG ERROUT 2>
22
23 ; "OPEN MODES"
24 <MSETG O-RDONLY 0>      ; "Read, no write"
25 <MSETG O-WRONLY 1>      ; "Write, no read (never used)"
26 <MSETG O-RDWR 2>        ; "Read/write"
27 <MSETG O-NDELAY 4>      ; "Never block on open"
28 <MSETG O-APPEND *10*>   ; "Append on each write"
29
30 <MSETG O-CREAT *400*>   ; "Create if file doesn't exist"
31 <MSETG O-TRUNC *1000*>  ; "Truncate size to 0"
32 <MSETG O-EXCL *2000*>   ; "Error if create and file exists"
33
34
35 ; "FILE MODES"
36
37 <MSETG FM-SET-UID *4000*>
38 <MSETG FM-SET-GID *2000*>
39 <MSETG FM-SAVE *1000*>
40 <MSETG FM-OWN-READ *400*>
41 <MSETG FM-OWN-WRITE *200*>
42 <MSETG FM-OWN-XCT *100*>
43 <MSETG FM-GRP-READ *40*>
44 <MSETG FM-GRP-WRITE *20*>
45 <MSETG FM-GRP-XCT *10*>
46 <MSETG FM-OTHER-READ *4*>
47 <MSETG FM-OTHER-WRITE *2*>
48 <MSETG FM-OTHER-XCT *1*>
49
50 <MSETG R-OK *4*>
51 <MSETG W-OK 2>
52 <MSETG X-OK 1>
53 <MSETG F-OK 0>
54
55 <MSETG FM-READ *4*>
56 <MSETG FM-WRITE *2*>
57 <MSETG FM-XCT *1*>
58 ; "LSH BY THIS AMOUNT TO GET TO OWNER FIELD"
59 <MSETG FM-OWN-OFFS 6>
60 <MSETG FM-GRP-OFFS 3>
61 <MSETG FM-OTHER-OFFS 0>
62
63 ; "MODES FOR ACCESS"
64 <MSETG ACC-READ 4>
65 <MSETG ACC-WRITE 2>
66 <MSETG ACC-XCT 1>
67 <MSETG ACC-EXISTS 0>
68 \f
69
70 <MSETG WHENCE-ABS 0>
71 <MSETG WHENCE-OFFSET 1>
72 <MSETG WHENCE-EOF 2>
73
74 ; "If STAT into a string, offsets of critical things"
75 <MSETG DEV-OFFS 1>
76 <MSETG DEV-SIZE 2>
77 <MSETG MAJOR-DEV-OFFS 1>
78 <MSETG MAJOR-DEV-SIZE 1>
79 <MSETG MINOR-DEV-OFFS 2>
80 <MSETG MINOR-DEV-SIZE 1>
81 <MSETG INODE-OFFS 3>    ; "2 bytes"
82 <MSETG INODE-SIZE 2>
83 <MSETG MODE-OFFS 5>     ; "2 bytes"
84 <MSETG MODE-SIZE 2>
85 <MSETG NLINK-OFFS 7>
86 <MSETG NLINK-SIZE 2>
87 <MSETG OWNER-OFFS 9>
88 <MSETG OWNER-SIZE 2>
89 <MSETG GROUP-OFFS 11>
90 <MSETG GROUP-SIZE 2>
91 <MSETG DEVID-OFFS 13>
92 <MSETG DEVID-SIZE 2>
93 <MSETG SIZE-OFFS 15>    ; "4 bytes long"
94 <MSETG SIZE-SIZE 4>
95 <MSETG ATIME-OFFS 19>   ; "4 bytes"
96 <MSETG ATIME-SIZE 4>
97 <MSETG SPARE-OFFS 23>
98 <MSETG SPARE-SIZE 4>
99 <MSETG MTIME-OFFS 27>
100 <MSETG MTIME-SIZE 4>
101 <MSETG CTIME-OFFS 35>
102 <MSETG CTIME-SIZE 4>
103 <MSETG STAT-LEN 58>     ; "Length of needed string"
104
105 ; "Interpretation of mode field"
106 <MSETG FMT-MASK *170000*>       ; "Andb with this to get file mode"
107 <MSETG FMT-IFDIR *40000*>       ; "Directory"
108 <MSETG FMT-IFCHR *20000*>       ; "Character special"
109 <MSETG FMT-IFBLK *60000*>       ; "block special"
110 <MSETG FMT-IFIFO *10000*>       ; "fifo (pipe)"
111 <MSETG FMT-IFREG *100000*>      ; "regular"
112 <MSETG FMT-IFLNK *120000*>      ; "Symbolic link"
113
114 ; "Rest of mode field goes by chmod bits"
115
116 ; "Code is computed from device type, major device, and device ID (only
117    for special files)"
118 <MSETG DEV-CONSOLE <CHTYPE <ORB ,FMT-IFCHR 7> FIX>>
119 <MSETG DEV-FLOPPY <CHTYPE <ORB ,FMT-IFCHR 5> FIX>>
120 <MSETG DEV-DISK <CHTYPE <ORB ,FMT-IFREG 24> FIX>> "???"
121 <MSETG DEV-DIR <CHTYPE <ORB ,FMT-IFDIR 24> FIX>>
122 <MSETG DEV-NFS <CHTYPE <ORB ,FMT-IFREG 255> FIX>>
123 <MSETG DEV-NFS-DIR <CHTYPE <ORB ,FMT-IFDIR 255> FIX>>
124 <MSETG DISK-MIN-ID 24>
125 <MSETG DISK-MAX-ID 30>
126 <MSETG DEV-MEM <CHTYPE <ORB ,FMT-IFCHR 2> FIX>>
127 <MSETG DEV-NULL <CHTYPE <ORB ,FMT-IFCHR 2 <LSH 2 16>> FIX>>
128 <MSETG DEV-PTY <CHTYPE <ORB ,FMT-IFCHR 20> FIX>>
129 <MSETG DEV-TTY <CHTYPE <ORB ,FMT-IFCHR 1> FIX>>
130 <MSETG DEV-TTYN <CHTYPE <ORB ,FMT-IFCHR 0> FIX>>
131 <MSETG DEV-TTYP <CHTYPE <ORB ,FMT-IFCHR 21> FIX>>
132
133 ; "STATUS BITS"
134 <MSETG STATUS-NEW 1>
135 <MSETG STATUS-RENAME 2>
136 <MSETG STATUS-NO-FLUSH 4>
137 <MSETG STATUS-WRITE 8>
138 <MSETG STATUS-READ 16>
139 <MSETG STATUS-RACC 32>
140 ; "BYTE SIZE GOES IN LH"
141 <MSETG BS-ASCII 0>
142 <MSETG BS-8BIT 1>
143 <MSETG BS-BINARY 2>
144
145 <MSETG DIRBLKSIZ 1024>
146 <MSETG MAXNAMLEN 255>
147 ; "Offsets into DIRECT structure, as used by getdirentries call"
148 <MSETG INODE-START 1>
149 <MSETG INODE-LEN 4>
150 <MSETG RECLEN-START 5>
151 <MSETG RECLEN-LEN 2>
152 <MSETG NAMLEN-START 7>
153 <MSETG NAMLEN-LEN 2>
154 <MSETG NAME-START 8>
155
156 <DEFMAC MSTAT-FIELD ('STR OFFS:FIX SIZE:FIX "AUX" MAIN ST)
157   <COND (<AND <G? .SIZE 1>
158               <OR <TYPE? .STR FORM>
159                   <AND <TYPE? .STR ADECL>
160                        <TYPE? <1 .STR> FORM>>>>
161          <SET ST '.MYSTR>)
162         (<TYPE? .STR ADECL>
163          <SET ST .STR>)
164         (T
165          <SET ST <CHTYPE [.STR STRING] ADECL>>)>
166   <SET MAIN
167        <COND (<==? .SIZE 4>
168               <FORM IFSYS
169                     ("MAC"
170                      <FORM ORB
171                            <FORM LSH <FORM NTH .ST .OFFS> 24>
172                            <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 16>
173                            <FORM LSH <FORM NTH .ST <+ .OFFS 2>> 8>
174                            <FORM NTH .ST <+ .OFFS 3>>>)
175                     ("VAX"
176                      <FORM ORB
177                            <FORM NTH .ST .OFFS>
178                            <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 8>
179                            <FORM LSH <FORM NTH .ST <+ .OFFS 2>> 16>
180                            <FORM LSH <FORM NTH .ST <+ .OFFS 3>> 24>>)>)
181              (<==? .SIZE 2>
182               <FORM IFSYS
183                     ("MAC"
184                      <FORM ORB
185                            <FORM LSH <FORM NTH .ST .OFFS> 8>
186                            <FORM NTH .ST <+ .OFFS 1>>>)
187                     ("VAX"
188                      <FORM ORB
189                            <FORM NTH .ST .OFFS>
190                            <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 8>>)>)
191              (T
192               <FORM CHTYPE <FORM NTH .ST .OFFS> FIX>)>>
193   <COND (<AND <TYPE? .STR FORM>
194               <G? .SIZE 1>>
195          <FORM BIND ((MYSTR .STR))
196            #DECL ((MYSTR) STRING)
197            .MAIN>)
198         (T
199          .MAIN)>>