A2osX/SYS/KERNEL.S.STAT.txt
2020-07-30 13:14:37 +02:00

313 lines
6.0 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
*/--------------------------------------
* # ChTyp
* Change The type of a ProDOS File
* ## C
* `int chtyp(const char *filepath, short int filetype);`
* ## ASM
* `>PUSHW filepath`
* `>PUSHB filetype`
* `>SYSCALL chtyp`
* ## RETURN VALUE
*\--------------------------------------
K.ChTyp jsr PFT.CheckPath1
bcs K.ChTyp.9
>MLICALL MLIGETFILEINFO
bcs K.ChTyp.9
lda (pStack)
sta K.MLI.PARAMS+S.FI.T
K.ChTyp.8 >MLICALL MLISETFILEINFO
K.ChTyp.9 >RET 3
*/--------------------------------------
* # SetAttr
* Change Attributes of a ProDOS File
* ## C
* `int setattr(const char *filepath, short int attributes);`
* ## ASM
* `>PUSHW filepath`
* `>PUSHB attributes`
* `>SYSCALL setattr`
* ## RETURN VALUE
*\--------------------------------------
K.SetAttr jsr PFT.CheckPath1
bcs K.ChTyp.9
>MLICALL MLIGETFILEINFO
bcs K.ChTyp.9
lda (pStack)
sta K.MLI.PARAMS+S.FI.A
bra K.ChTyp.8
*--------------------------------------
* # ChMod
* change permissions of a file
* ## C
* `int chmod(const char *pathname, int mode);`
* ## ASM
* `>PUSHW pathname`
* `>PUSHW mode`
* `>SYSCALL chmod`
* ## RETURN VALUE
*--------------------------------------
K.ChMod jsr PFT.CheckPath2
bcs K.ChMod.RET4
jsr STAT.PullPathAndMode
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
>MLICALL MLIACL
bcs .9
>LDYA K.S.STAT+S.STAT.MODE
>STYA K.MLI.PARAMS+3+S.FIEX.ACL.MOD
lda #$57 write mode
sta K.MLI.PARAMS+3+S.FIEX.ACL
>MLICALL MLIACL
.9 rts
K.ChMod.RET4 >RET 4
*--------------------------------------
* # FStat
* Return information about a hFILE
* ## C
* `int fstat(short int hFILE, struct stat *statbuf);`
* ## ASM
* `>PUSHB hFILE`
* `>PUSHW statbuf`
* `>SYSCALL fstat`
* ## RETURN VALUE
*--------------------------------------
K.FStat >PULLW K.Stat.Store.2+1
>PULLA
jsr PFT.CheckNodeA
bcs K.Stat.Store.RTS
tax
lda OF.Table.hPath-1,x
jsr K.GetMemPtr
jsr PFT.YAToMLIPATH
jsr FS.Stat
bcs K.Stat.Store.RTS
lda (pFD) #S.FD.T
bne K.Stat.Store
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>MLICALL MLIGETEOF
bcs K.Stat.Store.RTS
ldx #2
.1 lda K.MLI.PARAMS+2,x
sta K.S.STAT+S.STAT.SIZE,x
dex
bpl .1
K.Stat.Store ldy #S.STAT-1
K.Stat.Store.1 lda K.S.STAT,y
K.Stat.Store.2 sta $ffff,y SELF MODIFIED
dey
bpl K.Stat.Store.1
* clc
K.Stat.Store.RTS
rts
*/--------------------------------------
* # Stat
* Return information about a file
* ## C
* `int stat(const char *pathname, struct stat *statbuf);`
* ## ASM
* `>PUSHW pathname`
* `>PUSHW statbuf`
* `>SYSCALL stat`
* ## RETURN VALUE
*\--------------------------------------
K.Stat jsr PFT.CheckPath2
bcs K.ChMod.RET4 go discard statbuf
>PULLW K.Stat.Store.2+1
inc pStack
inc pStack
jsr FS.Stat
bcc K.Stat.Store
rts
*/-------------------------------------
* # MKDir
* create a directory
* ## C
* `int mkdir(const char *pathname, int mode);`
* ## ASM
* `>PUSHW pathname`
* `>PUSHW mode`
* `>SYSCALL mkdir`
* ## RETURN VALUE
* CC : success
* CS : error
* A = EC
*\-------------------------------------
K.MKDir jsr PFT.CheckPath2
bcs K.ChMod.RET4
jsr STAT.PullPathAndMode
lda #S.FI.T.DIR
sta K.MLI.PARAMS+4
stz K.MLI.PARAMS+5
stz K.MLI.PARAMS+6
lda #S.FI.ST.DIR
jmp IO.MLI.CREATE
*/--------------------------------------
* # MKFIFO
* return a pathname to a new FIFO
* ## C
* `hFILE mkfifo(const char *pathname, int mode);`
* ## ASM
* `>PUSHW pathname`
* `>PUSHW mode`
* `>SYSCALL mkfifo`
* ## RETURN VALUE
* CC = OK, CS = ERROR
* A = hFILE
*\--------------------------------------
K.MKFIFO jsr STAT.PullPathAndMode
>LDYAI 512
jsr K.pipe
bcs K.Stat.Store.RTS
ldy #0
.1 lda DEV.FIFO,y
sta (ZPPtr1),y fill pathname buffer
iny
cpy #9
bne .1
lda IO.hFD
jsr MATH32.AToHexAX
sta (ZPPtr1),y
txa
iny
sta (ZPPtr1),y
iny
lda #0
sta (ZPPtr1),y
bra K.MkNod.I
*/--------------------------------------
* # MkNod
* Create a special or ordinary file.
* (CDEV, BDEV, DSOCKS, SSOCK, PIPE)
* ## C
* `hFILE mknod(const char *pathname, int mode, hFD fd);`
* ## ASM
* `>PUSHW pathname`
* `>PUSHW mode`
* `>PUSHB fd`
* `>SYSCALL mknod`
* ## RETURN VALUE
* CC = OK, CS = ERROR
* A = hFILE
*\--------------------------------------
K.MkNod >PULLB IO.hFD
jsr STAT.PullPathAndMode
K.MkNod.I ldx #2
.1 lda Nod.Table.hPath-2,x
beq .2
inx
cpx #K.Nod.MAX+2
bne .1
lda #E.OOH
* sec
rts
.2 stx .3+1 Store hFILE
>LDYA ZPPtr1
>SYSCALL2 StrDup
bcs .9
txa
.3 ldx #$ff SELF MODIFIED
sta Nod.Table.hPath-2,x
lda IO.hFD
sta Nod.Table.hFD-2,x
txa hNODE
clc
.9 rts
*/--------------------------------------
* # pipe
* ## C
* `hFD pipe(int size);`
* ## ASM
* `>LDYA size`
* `>SYSCALL pipe`
* ## RETURN VALUE
* CC = OK, CS = ERROR
* A = hFD
*\--------------------------------------
K.Pipe sta .1+1 SIZE HI
>SYSCALL2 NewStkObj
bcs .99
stx .8+1 save PIPE buffer
ldx #2
jsr IO.MkFD
bcs .9
.1 lda #$ff SELF MODIFIED
ldy #S.FD.PIPE.Free+1
sta (pFD),y
ldy #S.FD.PIPE.Size+1
sta (pFD),y
ldy #S.FD.PIPE.hMem
.8 lda #$ff Self Modified
sta (pFD),y
txa hFD
* clc
rts
.9 pha save error code
lda .8+1 get back PIPE buffer
>SYSCALL2 FreeStkObj
pla
sec
.99
K.Pipe.RTS rts
*--------------------------------------
STAT.PullPathAndMode
>PULLW K.S.STAT+S.STAT.MODE
>PULLW ZPPtr1 pathname
rts
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.stat
LOAD usr/src/sys/kernel.s
ASM