A2osX/INC/A2osX.I.txt
2019-04-12 16:41:05 +01:00

637 lines
15 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
PREFIX
AUTO 4,1
*--------------------------------------
K.VER .EQ $5D00 93.0
K.ENV.SIZE .EQ 256
K.PIPE.SIZE .EQ 256
*--------------------------------------
K.MEM.ALIGN .EQ 16
K.MEM.nALIGNm1 .EQ $F0
*K.MEM.ALIGN .EQ 64
*K.MEM.nALIGNm1 .EQ $C0
*--------------------------------------
K.IRQDEV.MAX .EQ 4
K.DEV.MAX .EQ 14
K.FLT.MAX .EQ 4
K.NOD.MAX .EQ 32
K.PS.MAX .EQ 32
K.OF.MAX .EQ 32
K.EVT.MAX .EQ 4
K.SCR.MAX .EQ 6
K.TTY.MAX .EQ 4
*--------------------------------------
ZPDRV .EQ $20 32 bytes
ZPLIB .EQ $40 32 bytes
*--------------------------------------
* PS Context : 48 bytes MAX
*--------------------------------------
CORE.EvtIndex .EQ $D0
CORE.EvtCount .EQ $D1
CORE.PSIndex .EQ $D2
CORE.PSCount .EQ $D3
pEvent .EQ $D4
pPs .EQ $D6
*--------------------------------------
pCode .EQ $D8
pData .EQ $DA
pStack .EQ $DC
pLocal .EQ $DE 8 Bytes
ZPBIN .EQ $E0 32 bytes
ZPBIN.SIZE .EQ 40 8+32
*--------------------------------------
* A2osX GLOBAL PAGE
* $BD00->$BD0F : Public Vetors
*--------------------------------------
A2osX.SYSCALL .EQ $BD00
A2osX.LIBCALL .EQ $BD03
A2osX.ATKCALL .EQ $BD06
A2osX.ROMCALL .EQ $BD09
A2osX.BADCALL .EQ $BD0C
*--------------------------------------
A2osX.SLEEP .EQ $BD10
*--------------------------------------
* $BEE0->$BEEF : Public Variables
*--------------------------------------
A2osX.ASCREEN .EQ $BEE0 Active Screen
A2osX.SCRNDEVS .EQ $BEE1 -> $BEE5 (5 screen devices)
A2osX.CPUTYPE .EQ $BEE6
A2osX.CPUSPEED .EQ $BEE7 WORD, (->255.99 Mhz)
A2osX.Z80SLOT .EQ $BEE9
A2osX.Z80SPEED .EQ $BEEA WORD
A2osX.TIMER16 .EQ $BEEC WORD
A2osX.RANDOM16 .EQ $BEEE WORD
*--------------------------------------
* $BEF0->$BEFF : Kernel Config Block
*--------------------------------------
A2osX.KCONFIG .EQ $BEF0
A2osX.HZ .EQ $BEF0 5/6 for 50/60Hz
A2osX.TTYDEVS .EQ $BEF1
A2osX.F .EQ $BEF8
A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx
A2osX.F.PMODE .EQ %01000000 Preemptive Mode
A2osX.S .EQ $BEF8 $BEF9->$BEFF, 7 slots
A2osX.S.Z80 .EQ $80
A2osX.S.VSDRIVE .EQ $81
A2osX.S.ATCARD .EQ $82
A2osX.S.DII .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.DISABLE .EQ $FF
*--------------------------------------
* ProDOS ERROR CODES : $00->$5F
* Kernel ERROR CODES : $60->$7F
* Lib ERROR CODES : $80->$BF
*--------------------------------------
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.NOKEY .EQ $6F Undefined Key
E.DUPKEY .EQ $6E Duplicate Key
E.NODATA .EQ $6D No Data
E.DATALEN .EQ $6C Data Length Mismatch
E.IPWDDB .EQ $68 Invalid PWD database
E.IUSR .EQ $67 Invalid 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.FS .EQ 21
C.ESC .EQ 27
C.SPACE .EQ 32
C.COLON .EQ 58
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 $02
SEEK.END .EQ $04
*--------------------------------------
* A2osX.SYSCALL Functions Indexes
*--------------------------------------
SYS.GetMemStat .EQ $00
* .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
SYS.OpenDir .EQ $10
SYS.ReadDir .EQ $12
SYS.CloseDir .EQ $14
SYS.Open .EQ $16
SYS.Close .EQ $18
SYS.Read .EQ $1A
SYS.Write .EQ $1C
SYS.IOCTL .EQ $1E
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
* .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
* .EQ $44
* .EQ $46
* .EQ $48
SYS.GetDevByName .EQ $4A
SYS.GetDevStatus .EQ $4C
SYS.MKDev .EQ $4E
* .EQ $50
SYS.SScanF .EQ $52
* .EQ $54
* .EQ $56
SYS.PrintF .EQ $58
SYS.SPrintF .EQ $5A
SYS.FPrintF .EQ $5C
* .EQ $5E
* .EQ $60
* .EQ $62
SYS.LoadFile .EQ $64
SYS.LoadTxtFile .EQ $66
SYS.ChTyp .EQ $68
SYS.ChMod .EQ $6A
SYS.ChOwn .EQ $6C
SYS.ChGrp .EQ $6E
SYS.AToF .EQ $70
SYS.AToI .EQ $72
SYS.AToL .EQ $74
SYS.StrToF .EQ $76
SYS.StrToL .EQ $78
* .EQ $7A
SYS.RealPath .EQ $7C
* .EQ $7E
*--------------------------------------
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
SYS.Time .EQ $90
SYS.CTime2Time .EQ $92
SYS.PTime2Time .EQ $94
SYS.StrFTime .EQ $96
SYS.LoadLib .EQ $98
SYS.UnloadLib .EQ $9A
SYS.LoadDrv .EQ $9C
SYS.InsDrv .EQ $9E
*--------------------------------------
SYS.ExecL .EQ $A0
SYS.ExecV .EQ $A2
* .EQ $A4
SYS.Kill .EQ $A6
SYS.GetPWUID .EQ $A8
SYS.GetPWName .EQ $AA
SYS.PutPW .EQ $AC
* .EQ $AE
SYS.Args2ArgV .EQ $B0
SYS.ArgV .EQ $B2
SYS.ExpandStr .EQ $B4
SYS.FileSearch .EQ $B6
SYS.PutEnv .EQ $B8
SYS.SetEnv .EQ $BA
SYS.GetEnv .EQ $BC
SYS.UnsetEnv .EQ $BE
*--------------------------------------
SYS.FAdd .EQ $C0
SYS.FSub .EQ $C2
SYS.FMult .EQ $C4
SYS.FDiv .EQ $C6
SYS.FPwr .EQ $C8
* .EQ $CA
SYS.LRIntF .EQ $CC
SYS.Float .EQ $CE
SYS.Log .EQ $D0
SYS.Sqr .EQ $D2
SYS.Exp .EQ $D4
SYS.Cos .EQ $D6
SYS.Sin .EQ $D8
SYS.Tan .EQ $DA
SYS.ATan .EQ $DC
* .EQ $DF
*--------------------------------------
SYS.GetMem .EQ $E0
SYS.GetMem0 .EQ $E2
SYS.GetMemPtr .EQ $E4
SYS.FreeMem .EQ $E6
SYS.NewStkObj .EQ $E8
SYS.FreeStkObj .EQ $EA
SYS.LoadStkObj .EQ $EC
SYS.GetStkObjData .EQ $EE
SYS.SListGetData .EQ $F0
SYS.SListAddData .EQ $F2
SYS.SListSetData .EQ $F4
SYS.SListGetByID .EQ $F6
SYS.SListNewKey .EQ $F8
SYS.SListLookup .EQ $FA
SYS.SListNew .EQ $FC
SYS.SListFree .EQ $FE
*--------------------------------------
SYS.Kernel.JMP .EQ $E000
SYS.GuiOSD.JMP .EQ $E200
*--------------------------------------
* 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.NOMOVE .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.STATCODE .EQ 4 1 BYTE
S.IOCTL.STATCODE.STATUS .EQ 0
S.IOCTL.STATCODE.GETDCB .EQ 1
S.IOCTL.STATCODE.GETNL .EQ 2
S.IOCTL.STATCODE.GETDIB .EQ 3
S.IOCTL.STATCODE.GETRC .EQ 4
S.IOCTL.STATCODE.GETWC .EQ 5
S.IOCTL.CTRLCODE .EQ 4 1 BYTE
S.IOCTL.CTRLCODE.RESET .EQ 0
S.IOCTL.CTRLCODE.SETDCB .EQ 1
S.IOCTL.CTRLCODE.SETNL .EQ 2
S.IOCTL.CTRLCODE.IRQ .EQ 3
S.IOCTL.CTRLCODE.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.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.DISKII .EQ $10
S.DIB.T.PRODOS .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
*
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.HANDLER .EQ 1 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....)
*--------------------------------------
S.FD.REG.REF .EQ 2
S.FD.REG.IOBUF .EQ 3
*
S.FD.REG .EQ 4
*--------------------------------------
S.FD.DIR.EL .EQ 4
S.FD.DIR.EPB .EQ 5
S.FD.DIR.FC .EQ 6 word
*
S.FD.DIR .EQ 8
*--------------------------------------
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 .EQ 12
*--------------------------------------
* S.FD.LNK
*--------------------------------------
S.FD.DSOCK.IOHANDLER .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.IOHANDLER .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 5
S.FD.PIPE.Free .EQ 6
S.FD.PIPE.Used .EQ 8
*
S.FD.PIPE .EQ 10
*--------------------------------------
* PS STRUCT
*--------------------------------------
S.PS.F .EQ 0
S.PS.F.NOHUP .EQ %10000000
S.PS.F.INIT .EQ %10000000
S.PS.F.RUN .EQ %01000000
S.PS.F.QUIT .EQ %00100000
S.PS.F.DOEVENT .EQ %00010000
S.PS.F.HOLD .EQ %00001000
S.PS.F.SLEEP .EQ %00000100
S.PS.F.EVENT .EQ %00000010
S.PS.F.DUPENV .EQ %00000001
S.PS.PPID .EQ 1
S.PS.PID .EQ 2
S.PS.CPID .EQ 3
S.PS.hCS .EQ 4
S.PS.hDS .EQ 5
S.PS.hSS .EQ 6
S.PS.ENVPAGECNT .EQ 7
S.PS.hENV .EQ 8
S.PS.hPREFIX .EQ 9
S.PS.hStdIn .EQ 10
S.PS.hStdOut .EQ 11
S.PS.hStdErr .EQ 12
S.PS.RC .EQ 13
S.PS.ARGC .EQ 14
S.PS.hARGV .EQ 15
S.PS.UID .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.ZP.SIZE .EQ 23
S.PS.ZP .EQ 24
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
*--------------------------------------
* Task Function Indexes
*--------------------------------------
PS.INIT .EQ 0
PS.RUN .EQ 2
PS.DOEVENT .EQ 4
PS.QUIT .EQ 6
PS.RESUME .EQ 8
*--------------------------------------
* 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.XG .EQ $0008
S.STAT.MODE.WG .EQ $0010
S.STAT.MODE.RG .EQ $0020
S.STAT.MODE.XU .EQ $0040
S.STAT.MODE.WU .EQ $0080
S.STAT.MODE.RU .EQ $0100
*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.FSID.PRODOS .EQ 0
*
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
*--------------------------------------
MAN
SAVE INC/A2OSX.I