A2osX/SYS/KERNEL.S.STAT.txt
2021-07-24 22:42:23 +02:00

325 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.PM
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 inc pStack
K.ChMod.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 K.ChMod.RET3
>PULLW K.Stat.Store.2+1
>PULLA
tax
lda hFDs.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 MLIGETEOF
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 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.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.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.PM
>LDYAI 512
jsr K.pipe
bcs STAT.RTS
ldy #0
.1 lda STAT.FIFO,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
lda ZPPtr1
clc
adc #5 skip /dev/
sta ZPPtr1
bcc K.MkNod.I
inc ZPPtr1+1
bra K.MkNod.I
*--------------------------------------
STAT.FIFO .AS "/dev/fifo"
*/--------------------------------------
* # 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.PM
K.MkNod.I ldx #1
.1 lda hFDs-1,x
cmp IO.hFD
beq .2
inx
cpx #K.hFD.MAX+1
bne .1
lda #MLI.E.IO
* sec
rts
.2 stx IO.hFILE
>LDYA ZPPtr1
>SYSCALL2 StrDup
bcs .9
txa
ldx IO.hFILE
sta hFDs.hName-1,x store path
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
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.stat
LOAD usr/src/sys/kernel.s
ASM