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