A2osX/SYS/KERNEL.S.STAT.txt
2023-11-04 15:42:28 +01:00

292 lines
5.1 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
*/--------------------------------------
* # 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 STAT.RET4
jsr STAT.PM
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
>MLICALL MLI.ACL
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 MLI.ACL
.9 rts
STAT.RET4 inc pStack
STAT.RET3 inc pStack
inc pStack
inc pStack
rts
*/--------------------------------------
* # 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 ldy #2
jsr PFT.CheckNodeY
bcs STAT.RET3
>PULLW K.Stat.Store.2+1
>PULLA
tax
lda FILEs.hName-1,x get path
jsr K.GetMemPtr
jsr PFT.YAToMLIPATH
jsr FS.Stat.203
bcs STAT.RTS
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>MLICALL MLI.GETEOF
bcs STAT.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
STAT.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 STAT.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 STAT.RET4
jsr STAT.PM
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 FS.MLICREATE
*/--------------------------------------
* # 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.PM
>LDYAI 512
jsr K.pipe
bcs STAT.RTS
ldy #0
.1 lda STAT.TMPFIFO,y
sta (ZPPtr1),y fill pathname buffer
iny
cpy #9
bne .1
lda IO.hFD
jsr STDIO.A2HexAX
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, DSOCK, 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 >PULLA
jsr DEV.GetPFD
jsr STAT.PM
K.MkNod.I ldx #1
.1 lda FILEs.hFD-1,x
beq .2
inx
cpx #K.FILE.MAX+1
bcc .1
lda #E.OOH
* sec
rts
.2 stx IO.hFILE
lda IO.hFD
sta FILEs.hFD-1,x
stz FILEs.oCnt-1,x
lda (pFD)
cmp #S.FD.T.CDEV
beq .8
cmp #S.FD.T.BDEV
beq .8
>LDYA ZPPtr1
>SYSCALL2 StrDup
bcs .9
txa
ldx IO.hFILE
sta FILEs.hName-1,x store path
.8 txa hFILE
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
lda #S.FD.T.PIPE
jsr DEV.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
lda IO.hFD
* clc
rts
.9 pha save error code
lda .8+1 get back PIPE buffer
>SYSCALL2 FreeStkObj
pla
sec
.99 rts
*--------------------------------------
STAT.PM >PULLW K.S.STAT+S.STAT.MODE
>PULLW ZPPtr1 pathname
rts
*--------------------------------------
STAT.TMPFIFO .AS "/tmp/fifo"
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.stat
LOAD usr/src/sys/kernel.s
ASM