A2osX/INC/A2osX.I.txt
burniouf 74acfeccd1 KERNEL & DRVs : lot of fixes around DEV.Open() , KCONFIG
SH : fiw for line wrap
ProDOS.FX : removed a strange bug inherited from 2.0.3 trashing FCBs
2023-11-26 14:17:41 +01:00

683 lines
16 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
ZPDRV .EQ $20 32 bytes
ZPLIB .EQ $40 32 bytes
*--------------------------------------
CORE.PSIndex .EQ $D0
CORE.PSCount .EQ $D1
pPS .EQ $D2
pEvent .EQ $D4
hHandler .EQ $D6
* .EQ $D7
*--------------------------------------
* PS Context : 40 bytes MAX
*--------------------------------------
pCode .EQ $D8
pData .EQ $DA
pStack .EQ $DC
pBase .EQ $DE 8 Bytes
ZPBIN .EQ $E0 32 bytes
PSCTX.SIZE .EQ $100-pCode
*--------------------------------------
*A2osX.ZCALL .EQ $0000
*--------------------------------------
* A2osX GLOBAL PAGE
* $1000->$1012 : Public Vectors
*--------------------------------------
A2osX.GP .EQ $0140
A2osX.SYSCALL .EQ A2osX.GP+00
A2osX.LIBCALL .EQ A2osX.GP+03
A2osX.ATKCALL .EQ A2osX.GP+06
A2osX.FPUCALL .EQ A2osX.GP+09
A2osX.BADCALL .EQ A2osX.GP+12
A2osX.SLEEP .EQ A2osX.GP+16
A2osX.SYSCALL2 .EQ A2osX.GP+19
*--------------------------------------
* Public Variables
*--------------------------------------
A2osX.SCRNDEVS .EQ A2osX.GP+22 0=console, 1-8=VT100, 9=GFX
A2osX.ASCREEN .EQ A2osX.GP+32 Active Screen
A2osX.FSID .EQ A2osX.GP+33
A2osX.KVER .EQ A2osX.GP+34 WORD
A2osX.IRQMode .EQ A2osX.GP+36
A2osX.ATLKSID .EQ A2osX.GP+37
A2osX.CPUTYPE .EQ A2osX.GP+38
A2osX.CPUSPEED .EQ A2osX.GP+39 WORD, (->255.99 Mhz)
*
A2osX.Z80SLOT .EQ A2osX.GP+41
A2osX.HWT .EQ A2osX.GP+42
A2osX.HWT.UNKNOWN .EQ 0
A2osX.HWT.IIe .EQ 1
A2osX.HWT.IIc .EQ 2
A2osX.HWT.IIgs .EQ 3
A2osX.HWSubT .EQ A2osX.GP+43
A2osX.HWSubT.Enh .EQ 1
A2osX.HWSubT.LCCard .EQ 2
A2osX.T16 .EQ A2osX.GP+44 WORD
A2osX.R16 .EQ A2osX.GP+46 WORD
*--------------------------------------
* Kernel Config Block
*--------------------------------------
A2osX.KCONFIG .EQ A2osX.GP+48
A2osX.HZ .EQ A2osX.KCONFIG+00 5/6 for 50/60Hz
A2osX.TTYDEVS .EQ A2osX.KCONFIG+01
A2osX.F .EQ A2osX.KCONFIG+02
A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx
A2osX.F.PMODE .EQ %01000000 Preemptive Mode
*
A2osX.S .EQ A2osX.KCONFIG+09 7 slots
A2osX.S.Z80 .EQ $80
A2osX.S.VXD .EQ $81
A2osX.S.ATK .EQ $82
A2osX.S.D2 .EQ $C0
A2osX.S.BLK .EQ $C1
A2osX.S.SP .EQ $C2
A2osX.S.COM .EQ $E0
A2osX.S.XY .EQ $E1
A2osX.S.NIC .EQ $E2
A2osX.S.CLK .EQ $E3
A2osX.S.SND .EQ $E4
A2osX.S.DISABLE .EQ $FF
*--------------------------------------
* ProDOS ERROR CODES : $00->$5F
* Kernel ERROR CODES : $60->$7F
* Lib ERROR CODES : $80->$BF
*--------------------------------------
E.NODATA .EQ $FF No Data
*--------------------------------------
E.CSYN .EQ $C0
E.ESYN .EQ $C1
E.STACKERROR .EQ $C2
E.STKOVERFLOW .EQ $C3
E.NOWHILE .EQ $C4
E.NOFOR .EQ $C5
E.NOIF .EQ $C6
E.BADFTYPE .EQ $C7
E.FUNDEF .EQ $C8
E.UNEXPEOF .EQ $C9
E.NODO .EQ $CA
E.REDEF .EQ $CB
*
E.TMISMATCH .EQ $CF
*--------------------------------------
E.OOM .EQ $7F Out Of Memory Error
E.OOH .EQ $7E Out Of Handle Error
E.INVH .EQ $7D Invalid Handle
E.BUF .EQ $7C Buffer Overflow
E.BADPATH .EQ $7B
E.BADARG .EQ $7A
E.NSP .EQ $79 No Such Process Error
E.SYN .EQ $78 Syntax Error
E.ENVF .EQ $77 Env is Full
E.IBIN .EQ $76 Invalid BIN format
E.FTB .EQ $75 File Too Big Error
E.OOB .EQ $74 Out Of Bound
E.INUM .EQ $73 Invalid Numerical
E.STACK .EQ $72 Stack Error
E.NOKEY .EQ $6F Undefined Key
E.DUPKEY .EQ $6E Duplicate Key
E.EMPTYKEY .EQ $6D No Data for this key
E.DATALEN .EQ $6C Data Length Mismatch
E.IPWDDB .EQ $68 Invalid PWD database
E.IUSR .EQ $67 Invalid User
E.DUPUSR .EQ $66 Duplicate User
*--------------------------------------
* A2osX.SYSCALL Constants
*--------------------------------------
C.ETX .EQ 3 Ctrl-C
C.EOF .EQ 4 Ctrl-D
C.ENQ .EQ 5
C.BEL .EQ 7 Ctrl.G
C.BS .EQ 8
C.TAB .EQ 9
C.LF .EQ 10
C.VT .EQ 11
C.FF .EQ 12
C.CR .EQ 13
C.SO .EQ 14
C.SI .EQ 15
C.XON .EQ 17
C.XOFF .EQ 19
C.ESC .EQ 27
C.SPACE .EQ 32
C.DEL .EQ 127
*--------------------------------------
AF.LOCAL .EQ 0
AF.INET .EQ 2
AF.APPLETALK .EQ 4
*--------------------------------------
O.RDONLY .EQ %00000001
O.WRONLY .EQ %00000010
O.RDWR .EQ %00000011
O.TRUNC .EQ %00000100
O.APPEND .EQ %00001000
O.TEXT .EQ %01000000
O.CREATE .EQ %10000000
*--------------------------------------
SEEK.SET .EQ $00
SEEK.CUR .EQ $01
SEEK.END .EQ $02
*--------------------------------------
SL.. .EQ %10000000
SL._ .EQ %01000000
SL.NoCase .EQ %00000010
SL.EndDollar .EQ %00000001
*--------------------------------------
* A2osX.SYSCALL Functions Indexes
*--------------------------------------D1
* STAT
* .EQ $00
SYS.ChMod .EQ $02
SYS.FStat .EQ $04
SYS.Stat .EQ $06
SYS.MKDir .EQ $08
SYS.MKNod .EQ $0A
SYS.MKFIFO .EQ $0C
SYS.Pipe .EQ $0E
* DIRENT
SYS.OpenDir .EQ $10
SYS.ReadDir .EQ $12
SYS.CloseDir .EQ $14
* UNISTD
SYS.Open .EQ $16
SYS.Close .EQ $18
SYS.Read .EQ $1A
SYS.Write .EQ $1C
SYS.ChOwn .EQ $1E
* STDIO
SYS.FPutC .EQ $20
SYS.PutChar .EQ $22
SYS.GetC .EQ $24
SYS.GetChar .EQ $26
SYS.FPutS .EQ $28
SYS.PutS .EQ $2A
SYS.FGetS .EQ $2C
SYS.UngetC .EQ $2E
SYS.FOpen .EQ $30
SYS.FClose .EQ $32
SYS.FRead .EQ $34
SYS.FWrite .EQ $36
SYS.FFlush .EQ $38
SYS.FSeek .EQ $3A
SYS.FTell .EQ $3C
SYS.FEOF .EQ $3E
SYS.Remove .EQ $40
SYS.Rename .EQ $42
SYS.PrintF .EQ $44
SYS.FPrintF .EQ $46
SYS.SPrintF .EQ $48
SYS.ScanF .EQ $4A
SYS.FScanF .EQ $4C
SYS.SScanF .EQ $4E
* .EQ $50
* .EQ $52
* .EQ $54
* .EQ $56
* PRODOS
SYS.Online .EQ $58
SYS.ChTyp .EQ $5A
SYS.ChAux .EQ $5C
SYS.SetAttr .EQ $5E
*--------------------------------------D2
* MOUNT
SYS.Mount .EQ $60
SYS.UMount .EQ $62
* STKOBJ
SYS.LoadStkObj .EQ $64
SYS.GetStkObj .EQ $66
* ARG
SYS.Shift .EQ $68
SYS.ArgV .EQ $6A
SYS.ArgVDup .EQ $6C
* ERROR
SYS.GetErrMsg .EQ $6E
* STDLIB
SYS.AToF .EQ $70
SYS.AToI .EQ $72
SYS.AToL .EQ $74
SYS.StrToF .EQ $76
SYS.StrToL .EQ $78
SYS.StrToUL .EQ $7A
SYS.RealPath .EQ $7C
SYS.Expand .EQ $7E
* STRING
SYS.StrLen .EQ $80
SYS.StrCpy .EQ $82
SYS.StrCat .EQ $84
SYS.StrDup .EQ $86
SYS.StrUpr .EQ $88
SYS.StrLwr .EQ $8A
SYS.StrCmp .EQ $8C
SYS.StrCaseCmp .EQ $8E
* DEV
SYS.GetDevByName .EQ $90
* .EQ $92
SYS.MKDev .EQ $94
SYS.IOCTL .EQ $96
* BIN
SYS.LoadLib .EQ $98
SYS.UnloadLib .EQ $9A
SYS.LoadDrv .EQ $9C
SYS.InsDrv .EQ $9E
* PS
SYS.ExecL .EQ $A0
SYS.ExecV .EQ $A2
SYS.Fork .EQ $A4
SYS.Kill .EQ $A6
SYS.LoadFile .EQ $A8
SYS.LoadTxtFile .EQ $AA
SYS.FileSearch .EQ $AC
SYS.GetMemStat .EQ $AE
*--------------------------------------E0/AUX
* STRV / STRVX
SYS.StrVNew .EQ $B0
SYS.StrVSet .EQ $B2
SYS.StrVGet .EQ $B4
SYS.StrVFree .EQ $B6
* ENV / ENVX
SYS.PutEnv .EQ $B8
SYS.SetEnv .EQ $BA
SYS.GetEnv .EQ $BC
SYS.UnsetEnv .EQ $BE
* TIME / TIMEX
SYS.Time .EQ $C0
SYS.StrFTime .EQ $C2
SYS.PTime2Time .EQ $C4
SYS.CTime2Time .EQ $C6
* MD5 / MD5X
SYS.MD5 .EQ $C8
SYS.MD5Init .EQ $CA
SYS.MD5Update .EQ $CC
SYS.MD5Finalize .EQ $CE
* PWD / PWDX
SYS.GetPWUID .EQ $D0
SYS.GetPWName .EQ $D2
SYS.PutPW .EQ $D4
SYS.GetGRGID .EQ $D6
SYS.GetGRName .EQ $D8
SYS.PutGR .EQ $DA
SYS.OpenSession .EQ $DC
SYS.CloseSession .EQ $DE
* SLIST / SLISTX
SYS.SListGetData .EQ $E0
SYS.SListAddData .EQ $E2
SYS.SListSetData .EQ $E4
SYS.SListGetByID .EQ $E6
SYS.SListNewKey .EQ $E8
SYS.SListLookup .EQ $EA
SYS.SListFree .EQ $EC
SYS.SListNew .EQ $EE
*--------------------------------------F0
* MEM
SYS.GetMem .EQ $F0
SYS.Realloc .EQ $F2
SYS.GetMemPtr .EQ $F4
SYS.FreeMem .EQ $F6
SYS.Free .EQ $F8
SYS.NewStkObj .EQ $FA
SYS.GetStkObjPtr .EQ $FC
SYS.FreeStkObj .EQ $FE
*--------------------------------------
* MEM STRUCT
*--------------------------------------
S.MEM.F .EQ 0
S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
S.MEM.F.INIT0 .EQ %01000000 Fill with "0"
S.MEM.F.NOCROSS .EQ %00100000
S.MEM.F.ALIGN .EQ %00010000
S.MEM.F.FD .EQ %00001000
S.MEM.F.CODE .EQ %00000100
S.MEM.F.DATA .EQ %00000010
S.MEM.F.STACK .EQ %00000001
S.MEM.REFCNT .EQ 1
S.MEM.OWNERPID .EQ 2
S.MEM.BIN .EQ 3
S.MEM.PTR .EQ 4
S.MEM.LEN .EQ 6
*
S.MEM .EQ 8
*--------------------------------------
S.MSTAT.ML .EQ 0
S.MSTAT.MF .EQ 2
S.MSTAT.MH .EQ 4
S.MSTAT.MLast .EQ 6
*
S.MSTAT.XL .EQ 8
S.MSTAT.XF .EQ 10
S.MSTAT.XH .EQ 12
S.MSTAT.XLast .EQ 14
*
S.MSTAT.DL .EQ 16
S.MSTAT.DF .EQ 18
S.MSTAT.DH .EQ 20
S.MSTAT.DCount .EQ 22
*
S.MSTAT .EQ 24
*--------------------------------------
* IOCTL device API
*--------------------------------------
IOCTL.STATUS .EQ 0 X,Y = byte count returned
IOCTL.READBLOCK .EQ 2
IOCTL.WRITEBLOCK .EQ 4
IOCTL.FORMAT .EQ 6
IOCTL.CONTROL .EQ 8
IOCTL.INIT .EQ 10
IOCTL.OPEN .EQ 12
IOCTL.CLOSE .EQ 14
IOCTL.READ .EQ 16
IOCTL.WRITE .EQ 18
IOCTL.IRQ .EQ 20
*--------------------------------------
S.IOCTL.CNT .EQ 0
S.IOCTL.UNITNUM .EQ 1
S.IOCTL.BUFPTR .EQ 2
S.IOCTL.S .EQ 4 1 BYTE
S.IOCTL.S.STATUS .EQ 0
S.IOCTL.S.GETDCB .EQ 1
S.IOCTL.S.GETNL .EQ 2
S.IOCTL.S.GETDIB .EQ 3
S.IOCTL.S.EOF .EQ 4
S.IOCTL.C .EQ 4 1 BYTE
S.IOCTL.C.RESET .EQ 0
S.IOCTL.C.SETDCB .EQ 1
S.IOCTL.C.SETNL .EQ 2
S.IOCTL.C.IRQ .EQ 3
S.IOCTL.C.EJECT .EQ 4
S.IOCTL.BLKNUM .EQ 4 3 BYTES
S.IOCTL.BYTECNT .EQ 4 2 BYTES
S.IOCTL.ADDRPTR .EQ 6 3 BYTES
*
S.IOCTL .EQ 9
*--------------------------------------
S.DCB.T .EQ 0
S.DCB.T.NIC .EQ $81
S.DCB.T.COM .EQ $82
S.DCB.T.GFX .EQ $83
S.DCB.T.SND .EQ $84
*--------------------------------------
S.DIB.S .EQ 0
S.DIB.S.BLOCK .EQ %10000000
S.DIB.S.WRITE .EQ %01000000
S.DIB.S.READ .EQ %00100000
S.DIB.S.ONLINE .EQ %00010000
S.DIB.S.NOFMT .EQ %00001000
S.DIB.S.WENABL .EQ %00000100
S.DIB.S.IRQ .EQ %00000010
S.DIB.S.OPENED .EQ %00000001
S.DIB.SIZE .EQ 1 3 bytes
S.DIB.IDS .EQ 4 1 (LEN) + 16 MAX
S.DIB.T .EQ 21
S.DIB.T.RAM .EQ $00 Memory Expansion Card (RAM disk)
S.DIB.T.3.5 .EQ $01 3.5" disk
S.DIB.T.PROFILE .EQ $02 ProFile-type hard disk
S.DIB.T.GENSCSI .EQ $03 Generic SCSI
S.DIB.T.ROM .EQ $04 ROM disk
S.DIB.T.CDROM .EQ $05 SCSI CD-ROM
S.DIB.T.TAPE .EQ $06 SCSI tape or other SCSI sequential device
S.DIB.T.HD .EQ $07 SCSI hard disk
* .EQ $08 Reserved
*S.DIB.T.SPRINTER .EQ $09 SCSI printer
S.DIB.T.5.25 .EQ $0A 5-1/4" disk
* .EQ $0B Reserved
* .EQ $0C Reserved
*S.DIB.T.PRINTER .EQ $0D Printer
*S.DIB.T.CLOCK .EQ $0E Clock
*S.DIB.T.MODEM .EQ $0F Modem
S.DIB.T.D2 .EQ $10
S.DIB.T.BLK .EQ $11
S.DIB.T.NIC .EQ $12 Network Interface Card
S.DIB.T.XY .EQ $13 X,Y Pointing Device
S.DIB.T.CHAR .EQ $14
S.DIB.T.GFX .EQ $15
S.DIB.T.SND .EQ $16
S.DIB.ST .EQ 22
S.DIB.ST.EXT .EQ $80
S.DIB.ST.DSKSW .EQ $40
S.DIB.ST.NOREM .EQ $20
S.DIB.VERSION .EQ 23 word
*
S.DIB .EQ 25
*--------------------------------------
* S.FD
*--------------------------------------
S.FD.T .EQ 0
S.FD.T.REG .EQ 0
S.FD.T.DIR .EQ 2
S.FD.T.CDEV .EQ 4
S.FD.T.BDEV .EQ 6
S.FD.T.LNK .EQ 8
S.FD.T.DSOCK .EQ 10
S.FD.T.SSOCK .EQ 12
S.FD.T.PIPE .EQ 14
S.FD.PFT .EQ 1
*--------------------------------------
S.FD.REG.REF .EQ 2
S.FD.REG.IOBUF .EQ 3
S.FD.REG.FPOS .EQ 4 dword
*
S.FD.REG .EQ 16
*--------------------------------------
S.FD.DIR.EL .EQ 4
S.FD.DIR.EPB .EQ 5
S.FD.DIR.FC .EQ 6 word
S.FD.DIR.ACL .EQ 8 57.00
S.FD.DIR.UID .EQ 10
S.FD.DIR.GID .EQ 12
S.FD.DIR.MODE .EQ 14
*
S.FD.DIR .EQ 16
*--------------------------------------
S.FD.DEV.BUSID .EQ 2
S.FD.DEV.DEVID .EQ 3
S.FD.DEV.BUSPTR .EQ 4 word
S.FD.DEV.DRVPTR .EQ 6 word
S.FD.DEV.DCBPTR .EQ 8 word
S.FD.DEV.BUFPTR .EQ 10 word
S.FD.DEV.TYPE .EQ 12 Byte
S.FD.DEV.SIZE .EQ 13 3 Bytes
*
S.FD.DEV .EQ 16
*--------------------------------------
* S.FD.LNK
*--------------------------------------
S.FD.DSOCK.IOH .EQ 2
S.FD.DSOCK.OPEN .EQ 3
S.FD.DSOCK.CLOSE .EQ 4
S.FD.DSOCK.READ .EQ 5
S.FD.DSOCK.WRITE .EQ 6
S.FD.DSOCK.EOF .EQ 7
*
S.FD.DSOCK .EQ 8
*--------------------------------------
S.FD.SSOCK.IOH .EQ 2
S.FD.SSOCK.OPEN .EQ 3
S.FD.SSOCK.CLOSE .EQ 4
S.FD.SSOCK.READ .EQ 5
S.FD.SSOCK.WRITE .EQ 6
S.FD.SSOCK.EOF .EQ 7
*
S.FD.SSOCK .EQ 8
*--------------------------------------
S.FD.PIPE.S .EQ 2
S.FD.PIPE.hMem .EQ 3
S.FD.PIPE.Tail .EQ 4
S.FD.PIPE.Head .EQ 6
S.FD.PIPE.Free .EQ 8
S.FD.PIPE.Used .EQ 10
S.FD.PIPE.Size .EQ 12
*
S.FD.PIPE .EQ 14
*--------------------------------------
* PS STRUCT
*--------------------------------------
S.PS.F .EQ 0
S.PS.F.HOLD .EQ %10000000
S.PS.F.SLEEP .EQ %01000000
S.PS.F.CLOSEONX .EQ %00000100
S.PS.F.EVENT .EQ %00000010
S.PS.F.NOHUP .EQ %00000001
S.PS.S .EQ 1
S.PS.S.INIT .EQ 0
S.PS.S.RUN .EQ 2
S.PS.S.DOEVENT .EQ 4
S.PS.S.QUIT .EQ 6
S.PS.PPID .EQ 2
S.PS.PID .EQ 3
S.PS.CPID .EQ 4
S.PS.hCS .EQ 5
S.PS.hDS .EQ 6
S.PS.hSS .EQ 7
*S.PS.ENVPAGECNT .EQ 8
S.PS.hENV .EQ 9
S.PS.hCWD .EQ 10
S.PS.hStdIn .EQ 11
S.PS.hStdOut .EQ 12
S.PS.hStdErr .EQ 13
S.PS.RC .EQ 14
S.PS.ARGC .EQ 15
S.PS.hARGV .EQ 16
S.PS.A .EQ 17
S.PS.X .EQ 18
S.PS.Y .EQ 19
S.PS.P .EQ 20
S.PS.PC .EQ 21 WORD
S.PS.hSession .EQ 23
S.PS.ZP.CODE .EQ 24
S.PS.ZP.DATA .EQ 26
S.PS.ZP.STACK .EQ 28
S.PS.ZP.LOCAL .EQ 30
*
S.PS .EQ 64
*--------------------------------------
* LIB Function Indexes
*--------------------------------------
LIBMGR.LOAD .EQ 0
LIBMGR.UNLOAD .EQ 2
*--------------------------------------
* EVENT STRUCT
*--------------------------------------
S.EVT.F .EQ 0
S.EVT.F.T10TH .EQ %10000000
S.EVT.F.T1SEC .EQ %01000000
S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.B2 is a hMem
S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.B1 is a hMem
*S.EVT.hDEV .EQ 1
S.EVT.B1 .EQ 2
S.EVT.B2 .EQ 3
S.EVT.W1 .EQ 4
S.EVT.W2 .EQ 6
*
S.EVT .EQ 8
*--------------------------------------
S.TIME.CENTURY .EQ 0 19,20,21....
S.TIME.YEAR .EQ 1 0..99
S.TIME.MONTH .EQ 2 1..12
S.TIME.DAY .EQ 3 1..31
S.TIME.HOUR .EQ 4 0..23
S.TIME.MINUTE .EQ 5 0..59
S.TIME.SECOND .EQ 6 0..61
S.TIME.WDAY .EQ 7 1..7
*
S.TIME .EQ 8
*--------------------------------------
* S.STAT
*--------------------------------------
S.STAT.MODE .EQ 0
S.STAT.MODE.XO .EQ $0001
S.STAT.MODE.WO .EQ $0002
S.STAT.MODE.RO .EQ $0004
S.STAT.MODE.FO .EQ $0007
S.STAT.MODE.XG .EQ $0008
S.STAT.MODE.WG .EQ $0010
S.STAT.MODE.RG .EQ $0020
S.STAT.MODE.FG .EQ $0038
S.STAT.MODE.XU .EQ $0040
S.STAT.MODE.WU .EQ $0080
S.STAT.MODE.RU .EQ $0100
S.STAT.MODE.FU .EQ $01C0
*S.STAT.MODE.SST .EQ $0200
*S.STAT.MODE.SGID .EQ $0400
*S.STAT.MODE.SUID .EQ $0800
S.STAT.MODE.REG .EQ $0000
S.STAT.MODE.DIR .EQ $1000
S.STAT.MODE.CDEV .EQ $2000
S.STAT.MODE.BDEV .EQ $3000
*S.STAT.MODE.LNK .EQ $4000
S.STAT.MODE.DSOCK .EQ $5000
S.STAT.MODE.SSOCK .EQ $6000
S.STAT.MODE.FIFO .EQ $7000
S.STAT.DEV .EQ 2 WORD
S.STAT.UID .EQ 4 WORD
S.STAT.GID .EQ 6 WORD
S.STAT.INO .EQ 8 QWORD
S.STAT.NLINK .EQ 16 WORD
S.STAT.SIZE .EQ 18 DWORD
S.STAT.ATIME .EQ 22 S.TIME
S.STAT.MTIME .EQ 30 S.TIME
S.STAT.CTIME .EQ 38 S.TIME
S.STAT.BLOCKS .EQ 46 DWORD
S.STAT.BLKSIZE .EQ 50 WORD
S.STAT.P.TYPE .EQ 52 BYTE
S.STAT.P.AUXTYPE .EQ 53 WORD
S.STAT.P.SLOT .EQ 55 BYTE
S.STAT.P.DRIVE .EQ 56 BYTE
S.STAT.P.DEVSTATUS .EQ 57 BYTE
S.STAT.P.DEVCNFLCT .EQ 58 BYTE
S.STAT.P.DEVBLOCKS .EQ 59 WORD
S.STAT.FSID .EQ 61 BYTE
S.STAT.P.ACCESS .EQ 62 BYTE
*
S.STAT .EQ 64
*--------------------------------------
S.PW.NAME .EQ 0 16+1
S.PW.PASSWD .EQ 17 32+1
S.PW.UID .EQ 50
S.PW.GID .EQ 51
S.PW.GECOS .EQ 52 64+1
S.PW.DIR .EQ 117 64+1
S.PW.SHELL .EQ 182 64+1
*
S.PW .EQ 247
*--------------------------------------
S.GRP.NAME .EQ 0 16+1
S.GRP.GID .EQ 17
*
S.GRP .EQ 18
*--------------------------------------
S.SESSION.P .EQ 0
S.SESSION.P.ROOT .EQ %10000000
S.SESSION.P.SYSADMIN .EQ %01000000
S.SESSION.UID .EQ 1
S.SESSION.GID .EQ 2
S.SESSION.NAME .EQ 3
*S.SESSION.GECOS .EQ 0
*S.SESSION.DIR .EQ 0
*S.SESSION.SHELL .EQ 0
*
*--------------------------------------
MAN
SAVE inc/a2osx.i