NEW AUTO 3,1 *-------------------------------------- IO.CallBack >STYA SaveYA bit CIFS.Status bmi .1 Busy.... jsr IO.SaveZP jmp (J.IO.Q,x) .1 ldy #S.PS.PID lda (pPS),y cmp CIFS.PID bne .2 jsr IO.SaveZP jmp (J.IO.R,x) .2 lda #0 sec rts *-------------------------------------- IO.SaveZP ldy #ZS.END-ZS.START-1 .1 lda ZS.START,y sta SaveZP,y dey bpl .1 >LDYA SaveYA rts *-------------------------------------- IO.Sleep ldy #S.PS.PID lda (pPS),y sta CIFS.PID dec CIFS.Status stz CIFS.Cnt stz CIFS.Cnt+1 IO.SleepContZ lda #TIMEOUT.MAX sta TimeOut IO.SleepCont lda #0 sec bra IO.RestoreZP *-------------------------------------- IO.Exit stz CIFS.Status *-------------------------------------- IO.RestoreZP php pha phx phy lda hResp beq .1 stz hResp >SYSCALL2 FreeMem .1 ldy #ZS.END-ZS.START-1 .2 lda SaveZP,y sta ZS.START,y dey bpl .2 ply plx pla plp rts *-------------------------------------- IO.Q.ChOwn IO.R.ChOwn *-------------------------------------- IO.Q.ChTyp IO.R.ChTyp *-------------------------------------- IO.Q.ChAux IO.R.ChAux *-------------------------------------- IO.Q.SetAttr IO.R.SetAttr *-------------------------------------- IO.Q.ChMod IO.R.ChMod lda #MLI.E.BADCALL sec rts *-------------------------------------- IO.Q.FStat jsr IO.GetFD jsr IO.Q.Stat1 jsr IO.WriteSocket bcs .9 jmp IO.Sleep .9 >POP 3 jmp IO.Exit *-------------------------------------- IO.R.FStat jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior bcs .98 jsr CORE.GetRespDataPtr1 jsr IO.FileInfo2StatBuf >PULLW ZPPtr2 Stat Buffer jsr IO.StatBuf2Ptr2 inc pStack Pop hFILE clc jmp IO.Exit .98 >POP 3 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.Q.Stat >STYA pPath resolved path jsr IO.Q.Stat1 jsr IO.WriteSocket bcs .9 jmp IO.Sleep .9 >POP 4 jmp IO.Exit *-------------------------------------- IO.R.Stat jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior bcs .98 jsr CORE.GetRespDataPtr1 jsr IO.FileInfo2StatBuf >PULLW ZPPtr2 Stat Buffer jsr IO.StatBuf2Ptr2 inc pStack Pop Filename inc pStack clc jmp IO.Exit .98 >POP 4 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.Q.Stat1 jsr CORE.ReqT2SetupX ldx #0 .1 lda SMB.QueryPathInfo,x sta (ZPReqPtr),y iny inx cpx #SMB.QueryPathInfo.Len bne .1 jsr CORE.ReqT2SetupPtr2 jsr CORE.AppendPathPtr2 jsr CORE.AddYReqLenPtr2 jmp CORE.SetT2ReqLen *-------------------------------------- IO.Q.MKDir >STYA pPath resolved path jsr CORE.ReqT2SetupX ldx #0 .1 lda SMB.CreateDirectory,x sta (ZPReqPtr),y iny inx cpx #SMB.CreateDirectory.Len bne .1 jsr CORE.AppendPath lda #0 sta (ZPReqPtr),y iny jsr CORE.SetT2ReqLenYA jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 >POP 4 jmp IO.Exit *-------------------------------------- IO.R.MKDir jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus * bcs .98 .98 >POP 4 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.Q.OpenDir >STYA pPath resolved path >SYSCALL PutS jsr IO.NewFD bcs .98 lda #S.FD.T.DIR sta (pFD) lda #0 ldy #S.FD.DIR.EPB sta (pFD),y EOF Flag iny sta (pFD),y iny sta (pFD),y jsr IO.NewFILE bcc .98 pha jsr IO.FreeFD pla sec .98 jmp IO.Exit *-------------------------------------- * IO.R.OpenDir *-------------------------------------- * A = hDIR *-------------------------------------- IO.Q.ReadDir jsr IO.GetFD ldy #S.FD.DIR.EPB lda (pFD),y beq .1 lda #MLI.E.EOF sec jmp IO.Exit .1 iny #S.FD.DIR.FC lda (pFD),y iny #S.FD.DIR.FC+1 ora (pFD),y bne IO.Q.ReadDir.Next jsr CORE.ReqT2SetupX ldx #0 .2 lda SMB.FindFirst2,x sta (ZPReqPtr),y iny inx cpx #SMB.FindFirst2.Len bne .2 bra IO.Q.ReadDir.Send IO.Q.ReadDir.Next jsr CORE.ReqT2SetupX 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 IO.Q.ReadDir.Send lda (pPath) beq .1 jsr CORE.AppendPath lda #'\' sta (ZPReqPtr),y iny .1 lda #'*' sta (ZPReqPtr),y iny lda #0 sta (ZPReqPtr),y iny jsr CORE.SetT2ReqLenYA jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 jmp IO.Exit *-------------------------------------- IO.R.ReadDir jsr IO.GetFD jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus bcs .98 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 .97 lda (ZPRespPtr),y ldy #S.FD.DIR.FC sta (pFD),y iny txa sta (pFD),y .2 jsr CORE.GetRespDataPtr1 jsr IO.R.ReadDir.GetBuf bcs .98 jsr CORE.GetRespDataPtr1 jsr IO.R.ReadDir.FillBuf lda hBuf >SYSCALL2 GetMemPtr ldx hBuf * clc jmp IO.Exit .97 lda #MLI.E.IO sec .98 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.R.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 .98 tax lda #1 +Ending 0 sta ZPPtr2 stz ZPPtr2+1 .1 jsr IO.AddSTAT2Ptr2 lda #22 clc jsr IO.AddA2Ptr1 lda (ZPPtr1) Filename Len sec +\0 jsr IO.AddA2Ptr2 lda (ZPPtr1) Filename Len inc +1 skip Filename Len sec +\0 jsr IO.AddA2Ptr1 dex bne .1 >LDYA ZPPtr2 >SYSCALL2 GetMem bcs .99 >STYA ZPPtr2 stx hBuf * clc rts .98 lda #MLI.E.EOF sec .99 rts *-------------------------------------- IO.R.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 phx jsr IO.FileInfo2StatBuf lda #22 clc jsr IO.AddA2Ptr1 lda (ZPPtr1) tax Save Filename Len inc ZPPtr1 Skip Filename Len bne .2 inc ZPPtr1+1 .2 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPPtr2),y bne .3 txa sec jsr IO.AddA2Ptr1 jsr IO.R.ReadDir.AuxT jsr IO.R.ReadDir.Type .7 txa sec +\0 jsr IO.AddA2Ptr2 jsr IO.StatBuf2Ptr2 jsr IO.AddSTAT2Ptr2 .8 plx dex bne .1 lda #0 sta (ZPPtr2) rts *-------------------------------------- IO.R.ReadDir.AuxT txa X = filename len sec sbc #5 "x.EXT_hhhh" ? bcc .99 beq .99 tay lda (ZPPtr2),y cmp #'_' bne .99 phy iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 asl asl asl asl sta StatBuf+S.STAT.P.AUXTYPE+1 iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 ora StatBuf+S.STAT.P.AUXTYPE+1 sta StatBuf+S.STAT.P.AUXTYPE+1 iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 asl asl asl asl sta StatBuf+S.STAT.P.AUXTYPE iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 ora StatBuf+S.STAT.P.AUXTYPE sta StatBuf+S.STAT.P.AUXTYPE pla tax tay lda #0 sta (ZPPtr2),y rts .9 plx .99 stz StatBuf+S.STAT.P.AUXTYPE stz StatBuf+S.STAT.P.AUXTYPE+1 rts *-------------------------------------- IO.R.ReadDir.Type txa X = filename len sec sbc #4 "x.EXT" ? bcc .99 beq .99 tay lda (ZPPtr2),y cmp #'.' bne .99 phx ldx #0 .1 phy Y = '.' offset .2 iny lda (ZPPtr2),y beq .4 cmp #'A' bcc .3 cmp #'Z'+1 bcs .3 eor #$20 .3 cmp PRODOS.FT.TXT,x bne .5 inx bra .2 .4 txa lsr lsr tax lda PRODOS.FT.HEX,x sta StatBuf+S.STAT.P.TYPE ply bra .8 .5 txa and #$FC clc adc #4 tax ply cpx #PRODOS.FT.END bne .1 iny lda (ZPPtr2),y cmp #'0' bne .9 iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 asl asl asl asl sta StatBuf+S.STAT.P.TYPE iny lda (ZPPtr2),y jsr IO.IsHexDigit bcs .9 ora StatBuf+S.STAT.P.TYPE sta StatBuf+S.STAT.P.TYPE .8 pla sec sbc #4 tax tay lda #0 sta (ZPPtr2),y rts .9 plx .99 stz StatBuf+S.STAT.P.TYPE rts *-------------------------------------- IO.Q.CloseDir jsr IO.FreeFILE * clc .8 jmp IO.Exit *-------------------------------------- * IO.R.CloseDir *-------------------------------------- * short int fopen ( const char *filename, short int flags, short int ftype, int auxtype ); *-------------------------------------- IO.Q.FOpen >STYA pPath resolved path ldx #S.SMB.H.CMD.NT.CREATE.ANDX jsr CORE.ReqSetupX ldx #0 .1 lda SMB.ComCreate.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComCreate.H.Len bne .1 jsr CORE.ReqSetupPtr2 jsr CORE.AppendPathPtr2 phy ldy #2 lda (pStack),y TYPE beq .2 ply jsr CORE.AppendTypePtr2 phy lda (pStack) AUXT tax ldy #1 ora (pStack),y beq .2 lda (pStack),y AUXT ply jsr CORE.AppendAuxTPtr2 phy .2 ply lda #0 ending \0 sta (ZPPtr2),y jsr CORE.AddYReqLen tya ldy #S.NETBIOS+S.SMB.H+6 NameLength sta (ZPReqPtr),y * inc +1 for \0 jsr CORE.Add2ByteCount ldx #1 FILE_OPEN ldy #3 fopen flags lda (pStack),y bit #O.WRONLY beq .8 bit #O.CREATE bne .3 ldx #3 FILE_OPEN_IF .3 bit #O.APPEND bne .8 ldx #5 FILE_OVERWRITE_IF .8 txa ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 CreateDisposition sta (ZPReqPtr),y jsr CORE.SetReqLen jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 >POP 6 jmp IO.Exit *-------------------------------------- IO.R.FOpen jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus bcs .98 jsr IO.NewFD bcs .98 jsr IO.R.FOpen.SetFD ldy #4 path lda (pStack),y sta pPath iny lda (pStack),y sta pPath+1 jsr IO.NewFILE bcc .98 pha jsr IO.FreeFD pla sec .98 >POP 6 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.R.FOpen.SetFD lda #S.FD.T.REG sta (pFD) 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 #3 fopen flags lda (pStack),y bit #O.APPEND beq .3 ldy #S.NETBIOS+S.SMB.H+56+3 EOF ldx #4 .1 lda (ZPRespPtr),y pha dey dex bne .1 ldx #4 ldy #S.FD.REG.FPOS .2 pla sta (pFD),y iny dex bne .2 rts .3 jmp IO.Seek0 *-------------------------------------- IO.Q.FClose jsr IO.GetFD ldx #S.SMB.H.CMD.CLOSE jsr CORE.ReqSetupX 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 CORE.SetReqLen jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 jmp IO.Exit *-------------------------------------- IO.R.FClose sta hFILE jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus bcs .98 jsr IO.FreeFILE clc .98 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.Q.FRead ldy #4 hFILE lda (pStack),y jsr IO.GetFD ldx #S.SMB.H.CMD.READ.ANDX jsr CORE.ReqSetupX ldx #0 .1 lda SMB.ComRead.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComRead.H.Len bne .1 jsr CORE.ReqSetupPtr2 jsr IO.RWGetFidOfs ldy #1 DataLen HI lda (pStack),y beq .2 lda #0 ldx #1 256 bytes to read bra .3 .2 lda (pStack) DataLen LO ldx #0 .3 ldy #S.NETBIOS+S.SMB.H+11 MaxCountOfBytesToReturn sta (ZPReqPtr),y iny txa sta (ZPReqPtr),y jsr CORE.SetReqLen jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 >POP 5 jmp IO.Exit *-------------------------------------- IO.R.FRead jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus bcs .98 ldy #S.NETBIOS+S.SMB.H+11 DataLength LO lda (ZPRespPtr),y iny ora (ZPRespPtr),y bne .10 lda #MLI.E.EOF sec bra .98 .10 ldy #S.NETBIOS+S.SMB.H+13 DataOffset LO lda (ZPRespPtr),y * clc adc #4 S.NETBIOS * clc adc ZPRespPtr sta ZPPtr1 lda #0 adc ZPRespPtr+1 sta ZPPtr1+1 ldy #3 DataPtr HI lda (pStack),y sta ZPPtr2+1 dey DataPtr LO lda (pStack),y sta ZPPtr2 ldy #S.NETBIOS+S.SMB.H+11 DataLength LO lda (ZPRespPtr),y tax jsr IO.CopyXPtr1Ptr2 ldy #S.NETBIOS+S.SMB.H+11 jsr IO.RWSetPFosY ldy #S.NETBIOS+S.SMB.H+12 DataLength HI lda (ZPRespPtr),y beq .2 less than 256 inc CIFS.Cnt+1 ldy #1 DataLen HI lda (pStack),y dec sta (pStack),y ldy #3 DataPtr HI lda (pStack),y inc sta (pStack),y bra .7 .2 dey DataLength LO lda (ZPRespPtr),y sta CIFS.Cnt lda #0 sta (pStack) DataLen LO .7 ldy #1 DataLen HI lda (pStack),y ora (pStack) DataLen LO bne .80 >LDYA CIFS.Cnt clc .98 >POP 5 jmp IO.Exit .99 jmp IO.SleepCont .80 stz CIFS.Status back to Q jmp IO.SleepContZ Back to CIFS.FRead for next chunk *-------------------------------------- * int fwrite ( short int stream, const void * ptr, int count ); *-------------------------------------- IO.Q.FWrite ldy #4 hFILE lda (pStack),y jsr IO.GetFD ldx #S.SMB.H.CMD.WRITE.ANDX jsr CORE.ReqSetupX ldx #0 .1 lda SMB.ComWrite.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComWrite.H.Len bne .1 jsr CORE.ReqSetupPtr2 jsr IO.RWGetFidOfs 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 sta (ZPReqPtr),y iny txa 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 plx jsr IO.CopyXPtr1Ptr2 jsr CORE.SetReqLen jsr IO.WriteSocket bcs .99 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 IO.Sleep .7 lda #0 sta (pStack) DataLen = 0 jmp IO.Sleep .99 >POP 5 jmp IO.Exit *-------------------------------------- IO.R.FWrite jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus bcs .98 ldy #S.NETBIOS+S.SMB.H+5 Count LO jsr IO.RWSetPFosY ldy #S.NETBIOS+S.SMB.H+5 Count LO lda (ZPRespPtr),y bne .1 inc CIFS.Cnt+1 bra .7 .1 sta CIFS.Cnt lda #0 sta (pStack) DataLen LO .7 ldy #1 DataLen HI lda (pStack),y ora (pStack) DataLen LO bne .80 >LDYA CIFS.Cnt clc .98 >POP 5 jmp IO.Exit .99 jmp IO.SleepCont .80 stz CIFS.Status back to Q jmp IO.SleepContZ *-------------------------------------- IO.Q.FFlush IO.R.FFlush clc Nothing to do rts *-------------------------------------- * int fseek( short int stream, long offset, short int whence ); *-------------------------------------- IO.Q.FSeek ldy #5 hFILE lda (pStack),y jsr IO.GetFD >PULLA tax whence >PULLL ZPPtr1 ZPPtr2 inc pStack >POP 6 clc jmp IO.Exit *-------------------------------------- * IO.R.FSeek *-------------------------------------- * long ftell( short int stream ); *-------------------------------------- IO.Q.FTell jsr IO.GetFD ldy #S.FD.REG.FPOS+3 .1 lda (pFD),y >PUSHA dey cpy #S.FD.REG.FPOS-1 bne .1 clc jmp IO.Exit *-------------------------------------- * IO.R.FTell *-------------------------------------- IO.Q.FEOF *-------------------------------------- IO.R.FEOF lda #MLI.E.BADCALL sec rts *-------------------------------------- IO.Q.Remove >STYA pPath resolved path ldx #S.SMB.H.CMD.DELETE jsr CORE.ReqSetupX ldx #0 .1 lda SMB.ComDelete.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComDelete.H.Len bne .1 jsr CORE.ReqSetupPtr2 jsr CORE.AppendPathPtr2BF4 jsr CORE.AddYReqLen tya inc +1 for BufferFormat inc +1 for \0 ldy ByteCountOfs sta (ZPReqPtr),y jsr CORE.SetReqLen jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 jmp IO.Exit *-------------------------------------- IO.R.Remove jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus * bcs .98 .98 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.Q.Rename >STYA pPath resolved src path ldx #S.SMB.H.CMD.RENAME jsr CORE.ReqSetupX ldx #0 .1 lda SMB.ComRename.H,x sta (ZPReqPtr),y iny inx cpx #SMB.ComRename.H.Len bne .1 jsr CORE.ReqSetupPtr2 jsr CORE.AppendPathPtr2BF4 tya inc +1 for BufferFormat inc +1 for \0 jsr CORE.Add2ByteCount lda (pStack) sta pPath ldy #1 lda (pStack),y sta pPath+1 .2 inc pPath skip /mount bne .3 inc pPath+1 .3 lda (pPath) cmp #'/' bne .2 jsr CORE.AppendPathPtr2 tya inc +1 for BufferFormat inc +1 for \0 ldy ByteCountOfs sta (ZPReqPtr),y jsr CORE.SetReqLen jsr IO.WriteSocket bcs .99 jmp IO.Sleep .99 >POP 4 jmp IO.Exit *-------------------------------------- IO.R.Rename jsr IO.ReadSocket bvs .99 bcs .98 jsr CORE.CheckSMBStatus * bcs .98 .98 >POP 4 jmp IO.Exit .99 jmp IO.SleepCont *-------------------------------------- IO.RWGetFidOfs ldx #6 ldy #S.FD.REG.REF .1 lda (pFD),y pha iny dex bne .1 ldx #6 ldy #S.NETBIOS+S.SMB.H+5+5 .2 pla sta (ZPReqPtr),y dey dex bne .2 rts *-------------------------------------- IO.RWSetPFosY phy ldy #4 hFILE lda (pStack),y jsr IO.GetFD ply Count LO phy lda (ZPRespPtr),y ldy #S.FD.REG.FPOS clc adc (pFD),y sta (pFD),y ply iny Count HI lda (ZPRespPtr),y ldy #S.FD.REG.FPOS+1 adc (pFD),y sta (pFD),y bcc .8 iny lda (pFD),y inc sta (pFD),y bne .8 iny lda (pFD),y inc sta (pFD),y .8 rts *-------------------------------------- IO.CopyXPtr1Ptr2 ldy #0 .1 lda (ZPPtr1),y sta (ZPPtr2),y iny dex bne .1 rts *-------------------------------------- IO.AddA2Ptr1 adc ZPPtr1 sta ZPPtr1 bcc .8 inc ZPPtr1+1 .8 rts *-------------------------------------- IO.StatBuf2Ptr2 ldy #S.STAT-1 .1 lda StatBuf,y sta (ZPPtr2),y dey bpl .1 rts *-------------------------------------- IO.AddSTAT2Ptr2 lda #S.STAT clc *-------------------------------------- IO.AddA2Ptr2 adc ZPPtr2 sta ZPPtr2 bcc .8 inc ZPPtr2+1 .8 rts *-------------------------------------- IO.Seek0 ldy #S.FD.REG.FPOS+3 lda #0 .1 sta (pFD),y dey cpy #S.FD.REG.FPOS-1 bne .1 rts *-------------------------------------- IO.ReadSocket stz hResp lda hSocket ldx #LIBTCPIP.Recv jsr IO.GoLIBTCPIP clv bcc .8 cmp #E.NODATA bne .99 lda TimeOut beq .98 bit .99 set V lda #0 sec rts .98 lda #MLI.E.OFFLINE sec .99 rts .8 jmp CORE.GetRespData *-------------------------------------- IO.WriteSocket >PUSHB hSocket >PUSHW ZPReqPtr >PUSHW ZPReqLen ldx #LIBTCPIP.Send *-------------------------------------- IO.GoLIBTCPIP jmp (pLIBTCPIP) *-------------------------------------- IO.FileInfo2StatBuf ldx #S.STAT-1 .1 stz StatBuf,x dex bpl .1 ldy #0 Creation Date/Time ldx #S.STAT.CTIME jsr IO.FileInfo2StatBufDT ldy #4 Last Access Date/Time ldx #S.STAT.ATIME jsr IO.FileInfo2StatBufDT ldy #8 Last Write Date/Time ldx #S.STAT.MTIME jsr IO.FileInfo2StatBufDT ldy #12+3 Data Size ldx #3 .7 lda (ZPPtr1),y sta StatBuf+S.STAT.SIZE,x dey dex bpl .7 ldy #20 File Attribute lda (ZPPtr1),y and #$10 beq .8 lda /S.STAT.MODE.DIR sta StatBuf+S.STAT.MODE+1 .8 rts *-------------------------------------- * YYYYYYYM MMM DDDDD * HHHHHmmm mmm SSSSS *-------------------------------------- IO.FileInfo2StatBufDT iny lda (ZPPtr1),y lsr php clc adc #80 sta StatBuf+S.TIME.YEAR,x lda #19 adc #0 sta StatBuf+S.TIME.CENTURY,x dey plp lda (ZPPtr1),y ror lsr lsr lsr lsr sta StatBuf+S.TIME.MONTH,x lda (ZPPtr1),y and #$1F sta StatBuf+S.TIME.DAY,x iny iny lda (ZPPtr1),y and #$1F asl sta StatBuf+S.TIME.SECOND,x lda (ZPPtr1),y and #$E0 sta StatBuf+S.TIME.MINUTE,x iny lda (ZPPtr1),y lsr ror StatBuf+S.TIME.MINUTE,x lsr ror StatBuf+S.TIME.MINUTE,x lsr ror StatBuf+S.TIME.MINUTE,x lsr StatBuf+S.TIME.MINUTE,x lsr StatBuf+S.TIME.MINUTE,x sta StatBuf+S.TIME.HOUR,x * TODO : S.TIME.WDAY rts *-------------------------------------- IO.IsHexDigit jsr IO.IsDigit bcc .8 cmp #'A' bcc .9 cmp #'F'+1 bcc .1 cmp #'a' bcc .9 cmp #'f'+1 bcs .99 eor #$20 .1 * clc sbc #'A'-11 cc so A->10 (11-CC) clc .8 rts .9 sec .99 rts *-------------------------------------- IO.IsDigit cmp #'0' bcc .9 cmp #'9'+1 bcs .99 and #$0F * clc rts .9 sec .99 rts *-------------------------------------- IO.NewFD ldx #1 .1 lda FDs.pHI-1,x beq .2 inx cpx #K.FD.MAX+1 bcc .1 lda #E.OOH * sec rts .2 stx hFD >LDYAI S.FD.REG S.FD.DIR = 16 >SYSCALL2 GetMem bcs .9 >STYA pFD ldx hFD sta FDs.pHI-1,x tya sta FDs.pLO-1,x lda hHandler ldy #S.FD.PFT sta (pFD),y * clc .9 rts *-------------------------------------- IO.GetFD sta hFILE tay ldx FILEs.hFD-1,y stx hFD lda FDs.pLO-1,x sta pFD lda FDs.pHI-1,x sta pFD+1 lda FILEs.hName-1,y >SYSCALL2 GetMemPtr >STYA pPath rts *-------------------------------------- IO.NewFILE >PUSHW pPath >PUSHWZ >PUSHB hFD >SYSCALL2 mknod bcs .9 tax inc FILEs.oCnt-1,x * clc .9 rts *-------------------------------------- IO.FreeFILE ldx hFILE lda FILEs.hFD-1,x sta hFD stz FILEs.hFD-1,x lda FILEs.hName-1,x beq IO.FreeFD stz FILEs.hName-1,x >SYSCALL2 FreeMem *-------------------------------------- IO.FreeFD ldx hFD lda FDs.pHI-1,x beq .8 stz FDs.pHI-1,x ldy FDs.pLO-1,x >SYSCALL2 Free .8 clc rts *-------------------------------------- MAN SAVE usr/src/sbin/cifsd.s.io LOAD usr/src/sbin/cifsd.s ASM