NEW AUTO 3,1 *-------------------------------------- CIFS.ChTyp CIFS2.ChTyp *-------------------------------------- CIFS.ChMod CIFS2.ChMod *-------------------------------------- CIFS.FStat *-------------------------------------- CIFS2.FStat >DEBUG lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.Stat >STYA pPath resolved path jsr ClearSocket jsr GetCTX jsr MakeTrans2Req ldx #0 .1 lda SMB.QueryPathInfo,x sta (ZPReqPtr),y iny inx cpx #SMB.QueryPathInfo.Len bne .1 jsr ReqT2SetupPtr2 jsr AppendPathPtr2 jsr SetT2ReqLen jsr WriteSocket bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.Stat jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .90 jsr GetRespDataPtr1 jsr FileInfo2StatBuf >PULLW ZPPtr2 Stat Buffer inc pStack Skip Filename inc pStack jsr StatBuf2Ptr2 jmp Exit.OK .9 jsr Exit.NODATA beq .99 .90 >POP 4 .99 rts *-------------------------------------- CIFS.MKDir >STYA pPath resolved path jsr GetCtx 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 jsr CheckSMBStatus bcs .90 jmp Exit.OK .9 jsr Exit.NODATA beq .99 .90 >POP 4 .99 rts *-------------------------------------- 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 jsr GetCtx 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 .9 jsr GetRespData jsr CheckSMBStatus bcs .90 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 .90 lda (ZPRespPtr),y ldy #S.FD.DIR.FC sta (pFD),y iny txa sta (pFD),y .2 jsr GetRespDataPtr1 jsr CIFS2.ReadDir.GetBuf bcs .99 jsr GetRespDataPtr1 jsr CIFS2.ReadDir.FillBuf lda hResp >SYSCALL2 FreeMem >LDYA BufPtr ldx hBuf stz CIFS.Status clc .90 rts .9 jmp Exit.NODATA .99 jmp Exit.KO *-------------------------------------- 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 GetCtx 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 jsr ReqSetupPtr2 jsr AppendPathPtr2 tya ldy #S.NETBIOS+S.SMB.H+6 NameLength sta (ZPReqPtr),y inc +1 for \0 ldy ByteCountOfs sta (ZPReqPtr),y lda #0 ror iny ByteCountOfs+1 sta (ZPReqPtr),y jsr SetReqLen ldx #1 FILE_OPEN ldy #3 fopen flags lda (pStack),y bpl .3 O.CREATE ldx #3 FILE_OPEN_IF .3 bit #O.APPEND bmi .4 ldx #5 FILE_OVERWRITE_IF .4 txa ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 CreateDisposition sta (ZPReqPtr),y jsr WriteSocket bcs .9 jmp Sleep .9 >RET 6 *-------------------------------------- CIFS2.FOpen jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .90 >DEBUG >LDYAI S.FD.REG >SYSCALL2 GetMem bcs .91 >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 .91 jsr FreeRespData bra .90 .9 jsr Exit.NODATA beq .99 .90 >POP 6 .99 rts *-------------------------------------- CIFS.FClose jsr GetPFD jsr GetCtx 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 sty ZPReqLen stz ZPReqLen+1 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 jsr SetReqLen jsr WriteSocket bcs .9 jmp Sleep .9 rts *-------------------------------------- CIFS2.FClose sta hFILE jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .99 lda hFILE jsr CIFS.CloseDir lda hResp >SYSCALL2 FreeMem jmp Exit.OK .9 jmp Exit.NODATA .99 rts *-------------------------------------- CIFS.FRead clc >RET 5 *-------------------------------------- CIFS2.FRead clc >RET 5 *-------------------------------------- CIFS.FWrite ldy #4 hNod lda (pStack),y jsr GetPFD jsr GetCtx 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 jsr ReqSetupPtr2 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 ldy #3 DataPtr HI lda (pStack),y sta ZPPtr1+1 dey DataPtr LO lda (pStack),y sta ZPPtr1 dey DataLen HI lda (pStack),y beq .5 lda #0 ldx #1 write $100 bra .6 .5 dey DataLen LO lda (pStack),y ldx #0 write $0xx .6 pha ldy #S.NETBIOS+S.SMB.H+21 DataLength clc adc #2 sta (ZPReqPtr),y iny txa adc #0 sta (ZPReqPtr),y pla pha clc adc ZPReqLen sta ZPReqLen txa adc ZPReqLen+1 sta ZPReqLen+1 pla pha ldy ByteCountOfs sta (ZPReqPtr),y txa iny sta (ZPReqPtr),y ldy #0 plx .70 lda (ZPPtr1),y sta (ZPPtr2),y iny dex bne .70 jsr SetReqLen jsr WriteSocket bcs .9 ldy #1 DataLen HI lda (pStack),y beq .7 dec DataLen - $100 sta (pStack),y ldy #3 DataPtr HI lda (pStack),y inc DataPtr + $100 sta (pStack),y jmp Sleep .7 lda #0 sta (pStack) DataLen = 0 jmp Sleep .9 >RET 5 *-------------------------------------- CIFS2.FWrite jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .90 lda hResp >SYSCALL2 FreeMem ldy #1 lda (pStack),y ora (pStack) clc beq .90 jmp Sleep2 .9 jsr Exit.NODATA beq .99 .90 >POP 5 .99 rts *-------------------------------------- CIFS.FFlush CIFS2.FFlush CIFS.FSeek CIFS2.FSeek CIFS.FTell CIFS2.FTell CIFS.FEOF CIFS2.FEOF >DEBUG lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.Remove >STYA pPath resolved path jsr ClearSocket jsr GetCTX ldx #S.SMB.H.CMD.DELETE jsr RequestSetupX ldx #0 .1 lda SMB.ComDelete.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComDelete.H.Len bne .1 jsr ReqSetupPtr2 lda #$04 BufferFormat jsr PutBytePtr2 jsr AppendPathPtr2 tya inc +1 for BufferFormat inc +1 for \0 jsr Add2ByteCount jsr SetReqLen jsr WriteSocket bcs .9 jmp Sleep .9 rts *-------------------------------------- CIFS2.Remove jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .99 jmp Exit.OK .9 jmp Exit.NODATA .99 rts *-------------------------------------- CIFS.Rename >STYA pPath resolved src path jsr ClearSocket jsr GetCTX ldx #S.SMB.H.CMD.RENAME jsr RequestSetupX ldx #0 .1 lda SMB.ComRename.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComRename.H.Len bne .1 jsr ReqSetupPtr2 lda #$04 BufferFormat jsr PutBytePtr2 jsr AppendPathPtr2 tya inc +1 for BufferFormat inc +1 for \0 jsr Add2ByteCount lda (pStack) sta pPath ldy #1 lda (pStack),y sta pPath+1 lda #$04 BufferFormat jsr PutBytePtr2 jsr AppendPathPtr2 tya inc +1 for BufferFormat inc +1 for \0 jsr Add2ByteCount jsr SetReqLen jsr WriteSocket bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.Rename jsr ReadSocket bcs .9 jsr GetRespData jsr CheckSMBStatus bcs .99 jmp Exit.OK .9 jmp Exit.NODATA .99 >RET 4 *-------------------------------------- MAN SAVE usr/src/lib/libcifs.io.s LOAD usr/src/lib/libcifs.s ASM