Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / mim / mimlib / macdefs.mud
diff --git a/mim/mim/mimlib/macdefs.mud b/mim/mim/mimlib/macdefs.mud
new file mode 100644 (file)
index 0000000..a8b81ef
--- /dev/null
@@ -0,0 +1,199 @@
+<USE "NEWSTRUC">
+
+<GDECL (BUFLEN SBUFLEN) FIX>
+<MSETG BYTES/WORD 4>
+
+; "ARGS TO INTERNAL TIMER CALLS"
+<MSETG ITIMER-REAL 0>
+<MSETG ITIMER-VIRTUAL 1>
+<MSETG ITIMER-PROF 2>
+
+<MSETG ITIMER-INTERVAL 1>
+<MSETG ITIMER-VALUE 2>
+
+<MSETG EINTR 4>
+<MSETG EEXIST 17>
+
+; "SPECIAL FILE DESCRIPTORS"
+
+<MSETG STDIN 0>
+<MSETG STDOUT 1>
+<MSETG ERROUT 2>
+
+; "OPEN MODES"
+<MSETG O-RDONLY 0>     ; "Read, no write"
+<MSETG O-WRONLY 1>     ; "Write, no read (never used)"
+<MSETG O-RDWR 2>       ; "Read/write"
+<MSETG O-NDELAY 4>     ; "Never block on open"
+<MSETG O-APPEND *10*>  ; "Append on each write"
+
+<MSETG O-CREAT *400*>  ; "Create if file doesn't exist"
+<MSETG O-TRUNC *1000*> ; "Truncate size to 0"
+<MSETG O-EXCL *2000*>  ; "Error if create and file exists"
+
+
+; "FILE MODES"
+
+<MSETG FM-SET-UID *4000*>
+<MSETG FM-SET-GID *2000*>
+<MSETG FM-SAVE *1000*>
+<MSETG FM-OWN-READ *400*>
+<MSETG FM-OWN-WRITE *200*>
+<MSETG FM-OWN-XCT *100*>
+<MSETG FM-GRP-READ *40*>
+<MSETG FM-GRP-WRITE *20*>
+<MSETG FM-GRP-XCT *10*>
+<MSETG FM-OTHER-READ *4*>
+<MSETG FM-OTHER-WRITE *2*>
+<MSETG FM-OTHER-XCT *1*>
+
+<MSETG R-OK *4*>
+<MSETG W-OK 2>
+<MSETG X-OK 1>
+<MSETG F-OK 0>
+
+<MSETG FM-READ *4*>
+<MSETG FM-WRITE *2*>
+<MSETG FM-XCT *1*>
+; "LSH BY THIS AMOUNT TO GET TO OWNER FIELD"
+<MSETG FM-OWN-OFFS 6>
+<MSETG FM-GRP-OFFS 3>
+<MSETG FM-OTHER-OFFS 0>
+
+; "MODES FOR ACCESS"
+<MSETG ACC-READ 4>
+<MSETG ACC-WRITE 2>
+<MSETG ACC-XCT 1>
+<MSETG ACC-EXISTS 0>
+\f
+
+<MSETG WHENCE-ABS 0>
+<MSETG WHENCE-OFFSET 1>
+<MSETG WHENCE-EOF 2>
+
+; "If STAT into a string, offsets of critical things"
+<MSETG DEV-OFFS 1>
+<MSETG DEV-SIZE 2>
+<MSETG MAJOR-DEV-OFFS 1>
+<MSETG MAJOR-DEV-SIZE 1>
+<MSETG MINOR-DEV-OFFS 2>
+<MSETG MINOR-DEV-SIZE 1>
+<MSETG INODE-OFFS 3>   ; "2 bytes"
+<MSETG INODE-SIZE 2>
+<MSETG MODE-OFFS 5>    ; "2 bytes"
+<MSETG MODE-SIZE 2>
+<MSETG NLINK-OFFS 7>
+<MSETG NLINK-SIZE 2>
+<MSETG OWNER-OFFS 9>
+<MSETG OWNER-SIZE 2>
+<MSETG GROUP-OFFS 11>
+<MSETG GROUP-SIZE 2>
+<MSETG DEVID-OFFS 13>
+<MSETG DEVID-SIZE 2>
+<MSETG SIZE-OFFS 15>   ; "4 bytes long"
+<MSETG SIZE-SIZE 4>
+<MSETG ATIME-OFFS 19>  ; "4 bytes"
+<MSETG ATIME-SIZE 4>
+<MSETG SPARE-OFFS 23>
+<MSETG SPARE-SIZE 4>
+<MSETG MTIME-OFFS 27>
+<MSETG MTIME-SIZE 4>
+<MSETG CTIME-OFFS 35>
+<MSETG CTIME-SIZE 4>
+<MSETG STAT-LEN 58>    ; "Length of needed string"
+
+; "Interpretation of mode field"
+<MSETG FMT-MASK *170000*>      ; "Andb with this to get file mode"
+<MSETG FMT-IFDIR *40000*>      ; "Directory"
+<MSETG FMT-IFCHR *20000*>      ; "Character special"
+<MSETG FMT-IFBLK *60000*>      ; "block special"
+<MSETG FMT-IFIFO *10000*>      ; "fifo (pipe)"
+<MSETG FMT-IFREG *100000*>     ; "regular"
+<MSETG FMT-IFLNK *120000*>     ; "Symbolic link"
+
+; "Rest of mode field goes by chmod bits"
+
+; "Code is computed from device type, major device, and device ID (only
+   for special files)"
+<MSETG DEV-CONSOLE <CHTYPE <ORB ,FMT-IFCHR 7> FIX>>
+<MSETG DEV-FLOPPY <CHTYPE <ORB ,FMT-IFCHR 5> FIX>>
+<MSETG DEV-DISK <CHTYPE <ORB ,FMT-IFREG 24> FIX>> "???"
+<MSETG DEV-DIR <CHTYPE <ORB ,FMT-IFDIR 24> FIX>>
+<MSETG DEV-NFS <CHTYPE <ORB ,FMT-IFREG 255> FIX>>
+<MSETG DEV-NFS-DIR <CHTYPE <ORB ,FMT-IFDIR 255> FIX>>
+<MSETG DISK-MIN-ID 24>
+<MSETG DISK-MAX-ID 30>
+<MSETG DEV-MEM <CHTYPE <ORB ,FMT-IFCHR 2> FIX>>
+<MSETG DEV-NULL <CHTYPE <ORB ,FMT-IFCHR 2 <LSH 2 16>> FIX>>
+<MSETG DEV-PTY <CHTYPE <ORB ,FMT-IFCHR 20> FIX>>
+<MSETG DEV-TTY <CHTYPE <ORB ,FMT-IFCHR 1> FIX>>
+<MSETG DEV-TTYN <CHTYPE <ORB ,FMT-IFCHR 0> FIX>>
+<MSETG DEV-TTYP <CHTYPE <ORB ,FMT-IFCHR 21> FIX>>
+
+; "STATUS BITS"
+<MSETG STATUS-NEW 1>
+<MSETG STATUS-RENAME 2>
+<MSETG STATUS-NO-FLUSH 4>
+<MSETG STATUS-WRITE 8>
+<MSETG STATUS-READ 16>
+<MSETG STATUS-RACC 32>
+; "BYTE SIZE GOES IN LH"
+<MSETG BS-ASCII 0>
+<MSETG BS-8BIT 1>
+<MSETG BS-BINARY 2>
+
+<MSETG DIRBLKSIZ 1024>
+<MSETG MAXNAMLEN 255>
+; "Offsets into DIRECT structure, as used by getdirentries call"
+<MSETG INODE-START 1>
+<MSETG INODE-LEN 4>
+<MSETG RECLEN-START 5>
+<MSETG RECLEN-LEN 2>
+<MSETG NAMLEN-START 7>
+<MSETG NAMLEN-LEN 2>
+<MSETG NAME-START 8>
+
+<DEFMAC MSTAT-FIELD ('STR OFFS:FIX SIZE:FIX "AUX" MAIN ST)
+  <COND (<AND <G? .SIZE 1>
+             <OR <TYPE? .STR FORM>
+                 <AND <TYPE? .STR ADECL>
+                      <TYPE? <1 .STR> FORM>>>>
+        <SET ST '.MYSTR>)
+       (<TYPE? .STR ADECL>
+        <SET ST .STR>)
+       (T
+        <SET ST <CHTYPE [.STR STRING] ADECL>>)>
+  <SET MAIN
+       <COND (<==? .SIZE 4>
+             <FORM IFSYS
+                   ("MAC"
+                    <FORM ORB
+                          <FORM LSH <FORM NTH .ST .OFFS> 24>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 16>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 2>> 8>
+                          <FORM NTH .ST <+ .OFFS 3>>>)
+                   ("VAX"
+                    <FORM ORB
+                          <FORM NTH .ST .OFFS>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 8>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 2>> 16>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 3>> 24>>)>)
+            (<==? .SIZE 2>
+             <FORM IFSYS
+                   ("MAC"
+                    <FORM ORB
+                          <FORM LSH <FORM NTH .ST .OFFS> 8>
+                          <FORM NTH .ST <+ .OFFS 1>>>)
+                   ("VAX"
+                    <FORM ORB
+                          <FORM NTH .ST .OFFS>
+                          <FORM LSH <FORM NTH .ST <+ .OFFS 1>> 8>>)>)
+            (T
+             <FORM CHTYPE <FORM NTH .ST .OFFS> FIX>)>>
+  <COND (<AND <TYPE? .STR FORM>
+             <G? .SIZE 1>>
+        <FORM BIND ((MYSTR .STR))
+          #DECL ((MYSTR) STRING)
+          .MAIN>)
+       (T
+        .MAIN)>>
\ No newline at end of file