NEW AUTO 3,1 *-------------------------------------- CIFS.ChTyp CIFS2.ChTyp *-------------------------------------- CIFS.ChMod CIFS2.ChMod *-------------------------------------- CIFS.FStat *-------------------------------------- CIFS2.FStat txa ora #$80 * lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.Stat >STYA pPath resolved path jsr ClearSocket jsr MakeTrans2Req ldx #0 .1 lda SMB.QueryPathInfo,x sta (ZPReqPtr),y iny inx cpx #SMB.QueryPathInfo.Len bne .1 jsr AppendPath lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA jsr WriteSocket bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.Stat jsr ReadSocket bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y beq .1 lda #MLI.E.FNOTFND bra .99 .1 >PULLW ZPPtr2 Stat Buffer inc pStack Skip Filename inc pStack jsr GetRespDataOffset jsr FileInfo2StatBuf jsr StatBuf2Ptr2 lda hResp >SYSCALL2 FreeMem stz CIFS.Status clc rts .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .90 lda #0 sec rts .90 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 4 *-------------------------------------- CIFS.MKDir >STYA pPath resolved path jsr MakeTrans2Req ldx #0 .1 lda SMB.CreateDirectory,x sta (ZPReqPtr),y iny inx cpx #SMB.CreateDirectory.Len bne .1 jsr AppendPath lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA jsr WriteSocket bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.MKDir jsr ReadSocket bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y clc beq .8 lda #MLI.E.DUPFILE sec .8 jsr FreeRespData stz CIFS.Status >RET 4 .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 4 *-------------------------------------- CIFS.OpenDir >STYA pPath resolved path >LDYAI S.FD.DIR >SYSCALL2 GetMem bcs .9 >STYA ZPPtr2 lda #S.FD.T.DIR sta (ZPPtr2) lda hHandler ldy #S.FD.PFT sta (ZPPtr2),y lda #0 ldy #S.FD.DIR.EPB sta (ZPPtr2),y EOF Flag iny sta (ZPPtr2),y iny sta (ZPPtr2),y >PUSHW pPath >PUSHWI 0 txa >PUSHA >SYSCALL2 mknod .9 rts *-------------------------------------- CIFS2.OpenDir lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.ReadDir jsr GetPFD jsr ClearSocket ldy #S.FD.DIR.EPB lda (pFD),y beq .1 lda #MLI.E.EOF sec rts .1 iny lda (pFD),y iny ora (pFD),y bne CIFS.ReadDir.Next jsr MakeTrans2Req ldx #0 .2 lda SMB.FindFirst2,x sta (ZPReqPtr),y iny inx cpx #SMB.FindFirst2.Len bne .2 bra CIFS.ReadDir.Send CIFS.ReadDir.Next jsr MakeTrans2Req ldx #0 .2 lda SMB.FindNext2,x sta (ZPReqPtr),y iny inx cpx #SMB.FindNext2.Len bne .2 phy ldy #S.FD.DIR.FC+1 lda (pFD),y tax dey lda (pFD),y ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 Search ID sta (ZPReqPtr),y txa iny sta (ZPReqPtr),y ply CIFS.ReadDir.Send lda (pPath) beq .1 jsr AppendPath lda #'\' sta (ZPReqPtr),y iny .1 lda #'*' sta (ZPReqPtr),y iny lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA jsr WriteSocket bcs .9 jmp Sleep .9 rts *-------------------------------------- CIFS2.ReadDir jsr GetPFD jsr ReadSocket bcs .90 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y beq .1 .91 sec lda #MLI.E.IO bra .9 .1 ldy #S.FD.DIR.FC lda (pFD),y iny ora (pFD),y sta bFlag bne .2 ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+1 Search ID lda (ZPRespPtr),y tax dey ora (ZPRespPtr),y beq .91 lda (ZPRespPtr),y ldy #S.FD.DIR.FC sta (pFD),y iny txa sta (pFD),y .2 jsr GetRespDataOffset jsr CIFS2.ReadDir.GetBuf bcs .9 jsr GetRespDataOffset jsr CIFS2.ReadDir.FillBuf lda hResp >SYSCALL2 FreeMem >LDYA BufPtr ldx hBuf stz CIFS.Status clc rts .9 stz CIFS.Status jmp FreeRespData .90 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 stz CIFS.Status sec rts *-------------------------------------- CIFS2.ReadDir.GetBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 iny iny .10 iny iny lda (ZPRespPtr),y End Of Search phy ldy #S.FD.DIR.EPB sta (pFD),y ply dey dey lda (ZPRespPtr),y Search Count beq .99 tax lda #1 +Ending 0 sta ZPPtr2 stz ZPPtr2+1 .1 lda ZPPtr2 clc adc #S.STAT sta ZPPtr2 bcc .2 inc ZPPtr2+1 .2 lda ZPPtr1 clc adc #22 sta ZPPtr1 bcc .3 inc ZPPtr1+1 .3 lda (ZPPtr1) Filename Len pha sec adc ZPPtr2 sta ZPPtr2 bcc .4 inc ZPPtr2+1 .4 pla inc sec adc ZPPtr1 sta ZPPtr1 bcc .5 inc ZPPtr1+1 .5 dex bne .1 >LDYA ZPPtr2 >SYSCALL2 GetMem bcs .9 >STYA BufPtr >STYA ZPPtr2 stx hBuf .9 rts .99 lda #MLI.E.EOF sec rts *-------------------------------------- CIFS2.ReadDir.FillBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 iny iny .10 lda (ZPRespPtr),y tax .1 jsr FileInfo2StatBuf lda ZPPtr1 sec skip Filename Len adc #22 sta ZPPtr1 bcc .2 inc ZPPtr1+1 .2 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPPtr2),y bne .3 tya sec adc ZPPtr1 sta ZPPtr1 bcc .4 inc ZPPtr1+1 .4 tya sec adc ZPPtr2 sta ZPPtr2 bcc .5 inc ZPPtr2+1 .5 jsr StatBuf2Ptr2 lda #S.STAT clc adc ZPPtr2 sta ZPPtr2 bcc .7 inc ZPPtr2+1 .7 dex bne .1 lda #0 sta (ZPPtr2) rts *-------------------------------------- CIFS.CloseDir tax lda Nod.Table.hName-2,x beq .1 phx stz Nod.Table.hName-2,x >SYSCALL2 FreeMem plx .1 lda Nod.Table.hFD-2,x stz Nod.Table.hFD-2,x >SYSCALL2 FreeMem stz CIFS.Status clc rts *-------------------------------------- CIFS2.CloseDir lda #MLI.E.INVPATH sec rts *-------------------------------------- CIFS.ChOwn CIFS2.ChOwn lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.FOpen >STYA pPath resolved path jsr GetGTX ldx #S.SMB.H.CMD.NT.CREATE.ANDX jsr RequestSetupX ldx #0 .1 lda SMB.ComCreate.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComCreate.H.Len bne .1 phy save Y = LEN jsr GetPathLen ldy #S.NETBIOS+S.SMB.H+6 sta (ZPReqPtr),y ply phy sta (ZPReqPtr),y iny Skip ByteCount iny jsr AppendPath lda #0 sta (ZPReqPtr),y iny pla jsr SetReqLenYAtA jsr WriteSocket bcs .9 jmp Sleep .9 >RET 6 *-------------------------------------- CIFS2.FOpen jsr ReadSocket bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y clc beq .8 lda #MLI.E.DUPFILE sec bra .80 .8 >LDYAI S.FD.REG >SYSCALL2 GetMem bcs .99 >STYA pFD lda #S.FD.T.REG sta (pFD) lda hHandler ldy #S.FD.PFT sta (pFD),y ldy #S.NETBIOS+S.SMB.H+6 FileID lda (ZPRespPtr),y pha iny lda (ZPRespPtr),y ldy #S.FD.REG.REF+1 sta (pFD),y dey pla sta (pFD),y ldy #4 path lda (pStack),y >PUSHA lda (pStack),y >PUSHA >PUSHWZ mod txa hFD >PUSHA >SYSCALL2 mknod .80 jsr FreeRespData stz CIFS.Status >RET 6 .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 6 *-------------------------------------- CIFS.FClose jsr GetPFD jsr GetGtx ldx #S.SMB.H.CMD.CLOSE jsr RequestSetupX ldx #0 .1 lda SMB.ComClose.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComClose.H.Len bne .1 phy save Y = LEN ldy #S.FD.REG.REF lda (pFD),y pha iny lda (pFD),y ldy #S.NETBIOS+S.SMB.H+2 FileID sta (ZPReqPtr),y pla dey sta (ZPReqPtr),y ply tya iny Skip ByteCount iny jsr SetReqLenYAtA jsr WriteSocket bcs .9 jmp Sleep .9 rts *-------------------------------------- CIFS2.FClose sta hFILE jsr ReadSocket bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y clc beq .8 lda #MLI.E.DUPFILE sec bra .80 .8 lda hFILE jsr CIFS.CloseDir clc .80 jsr FreeRespData stz CIFS.Status rts .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 sec stz CIFS.Status rts *-------------------------------------- CIFS.FRead clc >RET 5 *-------------------------------------- CIFS2.FRead clc >RET 5 *-------------------------------------- CIFS.FWrite ldy #4 lda (pStack),y jsr GetPFD jsr GetGTX ldx #S.SMB.H.CMD.WRITE.ANDX jsr RequestSetupX ldx #0 .1 lda SMB.ComWrite.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComWrite.H.Len bne .1 sty LenOfs iny iny sty ZPReqLen stz ZPReqLen+1 ldy #S.FD.REG.REF lda (pFD),y pha iny lda (pFD),y ldy #S.NETBIOS+S.SMB.H+6 FileID sta (ZPReqPtr),y pla dey sta (ZPReqPtr),y jsr SetReqLen jsr WriteSocket bcs .9 jmp Sleep .9 >RET 5 *-------------------------------------- CIFS2.FWrite ldy #4 lda (pStack),y jsr ReadSocket bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y clc beq .8 lda #MLI.E.IO sec .8 jsr FreeRespData stz CIFS.Status >RET 5 .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 5 *-------------------------------------- CIFS.FFlush CIFS2.FFlush CIFS.FSeek CIFS2.FSeek CIFS.FTell CIFS2.FTell CIFS.FEOF CIFS2.FEOF CIFS.Remove CIFS2.Remove CIFS.Rename CIFS2.Rename * lda #MLI.E.BADCALL txa ora #$80 sec rts *-------------------------------------- MAN SAVE usr/src/lib/libcifs.io.s LOAD usr/src/lib/libcifs.s ASM