NEW AUTO 3,1 */-------------------------------------- * # GetMemStat * **In:** * Y,A = Ptr to 24 bytes buffer * ## RETURN VALUE * Buffer filled with memory stats *\-------------------------------------- K.GetMemStat >STYA ZPPtr1 ldy #23 ldx #7 .1 lda DevMgr.Stat,x sta (ZPPtr1),y dey dex bpl .1 sta SETREADAUX jsr .2 sta CLRREADAUX .2 ldx #7 .3 lda Mem.Table,x sta (ZPPtr1),y dey dex bpl .3 rts *-------------------------------------- * # ChMod * change permissions of a file * ## C * `int chmod(const char *pathname, int mode);` * ## ASM * **In:** * `>PUSHW mode` * `>LDYA pathname` * `>SYSCALL chmod` * ## RETURN VALUE *-------------------------------------- * only 777-555 *-------------------------------------- K.ChMod jsr PFT.CheckPathYA bcs .99 >PULLW K.S.STAT+S.STAT.MODE lda K.S.STAT+S.STAT.MODE+1 and /S.STAT.MODE.RU beq .9 lda K.S.STAT+S.STAT.MODE and #S.STAT.MODE.XO+S.STAT.MODE.RO+S.STAT.MODE.XG+S.STAT.MODE.RG+S.STAT.MODE.XU+S.STAT.MODE.RU cmp #S.STAT.MODE.XO+S.STAT.MODE.RO+S.STAT.MODE.XG+S.STAT.MODE.RG+S.STAT.MODE.XU+S.STAT.MODE.RU bne .9 >MLICALL MLIGETFILEINFO bcs .90 lda K.MLI.PARAMS+S.FI.A and #$3D not S.FI.A.RN+S.FI.A.D+S.FI.A.W ora #S.FI.A.R tax lda K.S.STAT+S.STAT.MODE tay bit #S.STAT.MODE.WG beq .1 txa ora #S.FI.A.RN tax tya .1 bit #S.STAT.MODE.WU beq .2 txa ora #S.FI.A.D tax tya .2 bit #S.STAT.MODE.WO beq .3 txa ora #S.FI.A.W tax .3 stx K.MLI.PARAMS+S.FI.A >MLICALL MLISETFILEINFO clc rts .9 lda #E.SYN sec .90 rts .99 >RET 2 *-------------------------------------- * # 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 bcs K.FStat.9 tax lda OF.Table.hPath-1,x jsr K.GetMemPtr jsr PFT.YAToMLIPATH jsr K.Stat.I bcs K.Stat.9 lda (pFD) #S.FD.T bne K.Stat.BLK2SIZE ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 >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 K.FStat.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 bcs K.FStat.9 go discard statbuf 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 >PULLW ZPPtr1 Get StatBuf >MLICALL MLIGETFILEINFO bcs .9 lda K.MLI.PARAMS+S.FI.A jsr STAT.Access2Mode .2 phy ldy #S.STAT.MODE sta (ZPPtr1),y iny pla 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 *-------------------------------------- STAT.Access2Mode and #S.FI.A.FULL cmp #S.FI.A.FULL beq .7 tay ldx #S.STAT.MODE.RO+S.STAT.MODE.RG+S.STAT.MODE.RU+S.STAT.MODE.XO+S.STAT.MODE.XG+S.STAT.MODE.XU bit #S.FI.A.W beq .1 txa ora #S.STAT.MODE.WO tax tya .1 asl D in C bpl .2 RN in N txa ora #S.STAT.MODE.WG tax .2 txa bcc .8 ora #S.STAT.MODE.WU .HS 2C BIT ABS .7 lda #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU rwxrwxrwx .8 ldy /S.STAT.MODE.RU ??????R?? rts */------------------------------------- * # 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 PFT.CheckPathYA bcs K.Stat.9 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 */-------------------------------------- * # 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 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 ldx #SYS.StrDup jsr K.SYSCALL.GoB bcs .9 txa .3 ldx #$ff SELF MODIFIED sta Nod.Table.hPath-2,x lda K.S.STAT+S.STAT.DEV sta Nod.Table.hFD-2,x txa hNODE clc .9 rts */-------------------------------------- * # MKFIFO * return a hFILE to a new FIFO * ## C * `hFILE mkfifo();` * ## ASM * **In:** * `>SYSCALL mkfifo` * ## RETURN VALUE * CC = OK, CS = ERROR * A = hFILE *\-------------------------------------- K.MKFIFO * jsr K.pipe * bcs .9 * sta IO.hFD * stz K.S.STAT+S.STAT.MODE * stz K.S.STAT+S.STAT.MODE+1 * >LDYA STAT.PipeFn * >STYA ZPPtr1 * jsr K.MkNod.I * bcc .9 * jmp IO.OPEN.ERR sec rts */-------------------------------------- * # pipe * ## C * `hFD pipe(int size);` * ## ASM * `>LDYA size` * `>SYSCALL pipe` * ## RETURN VALUE * CC = OK, CS = ERROR * A = hFD *\-------------------------------------- K.Pipe >STYA ZPPtr1 * jsr K.NewStkObj Buffer in AUX mem jsr K.GetMem bcs .99 stx .1+1 save PIPE buffer >LDYAI S.FD.PIPE ldx #S.MEM.F.INIT0+S.MEM.F.FD jsr MEM.GetMem.YAX bcs .9 >STYA pFD lda #S.FD.T.PIPE sta (pFD) ldy #S.FD.PIPE.Free lda ZPPtr1 sta (pFD),y iny lda ZPPtr1+1 sta (pFD),y ldy #S.FD.PIPE.Size lda ZPPtr1 sta (pFD),y iny lda ZPPtr1+1 sta (pFD),y ldy #S.FD.PIPE.hMem .1 lda #$ff Self Modified sta (pFD),y txa hFD * clc rts .9 pha save error code lda .1+1 get back PIPE buffer jsr K.FreeMem pla sec .99 rts *-------------------------------------- *STAT.PipeFn .AZ "/DEV/PIPE00" *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.STAT LOAD USR/SRC/SYS/KERNEL.S ASM