A2osX/SYS/KERNEL.S.STAT.txt
2018-11-10 15:30:09 +01:00

269 lines
5.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
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
* # FStat
* Return information about a hFILE
* ## C
* `int fstat(short int hFILE, struct stat *statbuf);`
* ## ASM
* **In:**
* `>PUSHW statbuf`
* `lda hFILE`
* `>SYSCALL fstat`
* ## RETURN VALUE
*--------------------------------------
K.FStat jsr PFT.CheckNodeA
jsr STDIO.GetHFile
bcs .9
lda Nod.Table.hPath,x
jsr K.GetMemPtr
jsr K.Stat.I
bcs K.Stat.9
jsr STDIO.GetHFileREG.I
bcs K.Stat.BLK2SIZE
>MLICALL MLIGETEOF
bcs K.Stat.BLK2SIZE
ldy #S.STAT.SIZE+3
lda #0
sta (ZPPtr1),y
ldx #2
.1 lda K.MLI.PARAMS+2,x
dey
sta (ZPPtr1),y
dex
bpl .1
* clc
rts
.9 >RET 2 discard statbuf
*/--------------------------------------
* # Stat
* Return information about a file
* ## C
* `int stat(const char *pathname, struct stat *statbuf);`
* ## ASM
* **In:**
* `>PUSHW statbuf`
* `>LDYA pathname`
* `>SYSCALL stat`
* ## RETURN VALUE
*\--------------------------------------
K.Stat jsr PFT.CheckPathYA
jsr K.Stat.I
bcs K.Stat.9
K.Stat.BLK2SIZE
ldy #S.STAT.SIZE
lda #0
sta (ZPPtr1),y
iny
lda K.MLI.PARAMS+S.FI.UBLKS
asl
sta (ZPPtr1),y
iny
lda K.MLI.PARAMS+S.FI.UBLKS+1
rol
sta (ZPPtr1),y
iny
lda #0
rol
sta (ZPPtr1),y
* clc
K.Stat.9 rts
K.Stat.I jsr STDIO.SetMLIPathYA
>PULLW ZPPtr1
>MLICALL MLIGETFILEINFO
bcs .9
ldx K.MLI.PARAMS+S.FI.A
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
cpx #S.FI.A.FULL
beq .2
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
cpx #S.FI.A.R
beq .2
lda #0
.2 ldy #S.STAT.MODE
sta (ZPPtr1),y
ldx #K.Stat.DST-K.Stat.SRC
.3 ldy K.Stat.SRC-1,x
lda K.MLI.PARAMS,y
ldy K.Stat.DST-1,x
sta (ZPPtr1),y
dex
bne .3
clc
.9 rts
*--------------------------------------
K.Stat.SRC .DA #S.FI.T
.DA #S.FI.AUXTYPE,#S.FI.AUXTYPE+1
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
K.Stat.DST .DA #S.STAT.P.TYPE
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
*/-------------------------------------
* # MKDir
* create a directory
* ## C
* `int mkdir(const char *pathname, int mode);`
* ## ASM
* **In:**
* `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mkdir`
* ## RETURN VALUE
* CC : success
* CS : error
* A = EC
*\-------------------------------------
K.MKDir jsr K.realpath.I
bcs K.MKDir.RTS
>LDYAI K.Buf256
jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA
lda #S.FI.A.FULL
sta K.MLI.PARAMS+S.FI.A
lda #S.FI.T.DIR
sta K.MLI.PARAMS+S.FI.T
lda #S.FI.ST.DIR
sta K.MLI.PARAMS+S.FI.ST
* jsr DATETIME
ldx #3
.1 lda DATELO,x
sta K.MLI.PARAMS+8,x
dex
bpl .1
>MLICALL MLICREATE
K.MKDir.RTS rts
*/--------------------------------------
* # MkNod
* Create a special or ordinary file.
* (CDEV, BDEV, DSOCKS, SSOCK, PIPE)
* ## C
* `hFILE mknod(const char *pathname, int mode, hFD fd);`
* ## ASM
* **In:**
* `>PUSHB fd`
* `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mknod`
* ## RETURN VALUE
* CC = OK, CS = ERROR
* A = hFILE
*\--------------------------------------
K.MkNod >STYA ZPPtr1 pathname
>PULLW K.S.STAT+S.STAT.MODE
>PULLB K.S.STAT+S.STAT.DEV
jsr K.GetMemPtr
bcs K.MKDir.RTS
>STYA pFD
>LDYA ZPPtr1
ldx K.S.STAT+S.STAT.DEV
jsr STDIO.NewHFileYAX
bcs K.MKDir.RTS
lda (pFD) #S.FD.T
tax
jmp (.8,x)
.8 .DA STDIO.IOERR REG
.DA STDIO.IOERR DIR
.DA STAT.MKNOD.CDEV
.DA STAT.MKNOD.BDEV
.DA STDIO.IOERR LNK
.DA STAT.MKNOD.DSOCK
.DA STAT.MKNOD.SSOCK
.DA STAT.MKNOD.PIPE
*--------------------------------------
STAT.MKNOD.CDEV
STAT.MKNOD.BDEV
STAT.MKNOD.DSOCK
STAT.MKNOD.SSOCK
STAT.MKNOD.PIPE
clc
rts
*/--------------------------------------
* # MKFIFO
* return a hFILE to a new FIFO
* ## C
* `hFILE mkfifo(const char *pathname, int mode);`
* ## ASM
* **In:**
* `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mkfifo`
* ## RETURN VALUE
* CC = OK, CS = ERROR
* A = hFILE
*\--------------------------------------
K.MKFIFO >LDYAI K.PIPE.SIZE
jsr K.GetMem
bcs .99
stx .1+1 save PIPE buffer
>LDYAI S.FD.PIPE
jsr K.GetMem0
bcs .9
>STYA pFD
ldy #S.FD.T
lda #S.FD.T.PIPE
sta (pFD),y
iny S.FD.PIPE.hMem
.1 lda #$ff Self Modified
sta (pFD),y
txa
clc
rts
.9 pha save error code
lda .1+1 get back PIPE buffer
jsr K.FreeMem
pla
sec
.99 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.STAT
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM