mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +00:00
1310 lines
19 KiB
Plaintext
1310 lines
19 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
CIFS.ChTyp
|
||
CIFS2.ChTyp
|
||
*--------------------------------------
|
||
CIFS.ChMod
|
||
CIFS2.ChMod
|
||
*--------------------------------------
|
||
CIFS.FStat
|
||
*--------------------------------------
|
||
CIFS2.FStat lda #MLI.E.BADCALL
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.Stat >STYA pPath resolved path
|
||
|
||
* jsr ClearSocket
|
||
|
||
jsr GetCTX
|
||
|
||
jsr RequestT2SetupX
|
||
|
||
ldx #0
|
||
|
||
.1 lda SMB.QueryPathInfo,x
|
||
sta (ZPReqPtr),y
|
||
iny
|
||
inx
|
||
cpx #SMB.QueryPathInfo.Len
|
||
bne .1
|
||
|
||
jsr ReqT2SetupPtr2
|
||
|
||
jsr AppendPathPtr2
|
||
|
||
jsr AddYReqLenPtr2
|
||
|
||
jsr SetT2ReqLen
|
||
jsr WriteSocket
|
||
bcs .9
|
||
|
||
jmp Sleep
|
||
|
||
.9 >RET 4
|
||
*--------------------------------------
|
||
CIFS2.Stat jsr ReadSocket
|
||
bcs .9
|
||
|
||
jsr GetRespData
|
||
|
||
jsr CheckSMBStatus
|
||
|
||
lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior
|
||
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 ClearSocket
|
||
|
||
jsr GetCtx
|
||
|
||
jsr RequestT2SetupX
|
||
|
||
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
|
||
|
||
jsr CIFS.NewFD
|
||
bcs .9
|
||
|
||
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
|
||
|
||
>PUSHW pPath
|
||
>PUSHWZ
|
||
>PUSHB hFD
|
||
>SYSCALL2 mknod
|
||
bcc .9
|
||
|
||
jsr CIFS.FreeFD
|
||
stz CIFS.Status
|
||
|
||
sec
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CIFS2.OpenDir lda #MLI.E.BADCALL
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.ReadDir jsr CIFS.GetFD
|
||
|
||
* 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 RequestT2SetupX
|
||
|
||
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 RequestT2SetupX
|
||
|
||
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 CIFS.GetFD
|
||
|
||
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
|
||
|
||
jsr Exit.OK
|
||
|
||
>LDYA BufPtr
|
||
ldx hBuf
|
||
|
||
clc
|
||
.90 rts
|
||
|
||
.9 jmp Exit.NODATA
|
||
|
||
.99 stz CIFS.Status
|
||
jmp FreeRespData
|
||
*--------------------------------------
|
||
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 jsr AddSTAT2Ptr2
|
||
|
||
lda #22
|
||
clc
|
||
jsr AddA2Ptr1
|
||
|
||
lda (ZPPtr1) Filename Len
|
||
sec +\0
|
||
jsr AddA2Ptr2
|
||
|
||
lda (ZPPtr1) Filename Len
|
||
inc +1 skip Filename Len
|
||
sec +\0
|
||
jsr AddA2Ptr1
|
||
|
||
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 phx
|
||
|
||
jsr FileInfo2StatBuf
|
||
|
||
lda #22
|
||
clc
|
||
jsr 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 AddA2Ptr1
|
||
|
||
txa
|
||
sec
|
||
sbc #4 "x.EXT" ?
|
||
bcc .7
|
||
|
||
tay
|
||
|
||
lda (ZPPtr2),y
|
||
cmp #'.'
|
||
bne .7
|
||
|
||
ldx #0
|
||
|
||
.4 phy Y = '.' offset
|
||
|
||
phx
|
||
|
||
.5 iny
|
||
lda (ZPPtr2),y
|
||
beq .51
|
||
|
||
cmp #'A'
|
||
bcc .50
|
||
|
||
cmp #'Z'+1
|
||
bcs .50
|
||
|
||
eor #$20
|
||
|
||
.50 cmp PRODOS.FT.TXT,x
|
||
bne .6
|
||
|
||
inx
|
||
bra .5
|
||
|
||
.51 pla
|
||
lsr
|
||
lsr
|
||
tax
|
||
lda PRODOS.FT.HEX,x
|
||
sta StatBuf+S.STAT.P.TYPE
|
||
|
||
ply
|
||
lda #0
|
||
sta (ZPPtr2),y
|
||
|
||
tya
|
||
bra .70
|
||
|
||
.6 pla
|
||
clc
|
||
adc #4
|
||
tax
|
||
|
||
ply
|
||
|
||
cpx #PRODOS.FT.END
|
||
bne .4
|
||
|
||
tya
|
||
* sec
|
||
adc #3
|
||
bra .70
|
||
|
||
.7 txa
|
||
.70 sec +\0
|
||
jsr AddA2Ptr2
|
||
|
||
jsr StatBuf2Ptr2
|
||
|
||
jsr AddSTAT2Ptr2
|
||
|
||
.8 plx
|
||
dex
|
||
bne .1
|
||
|
||
lda #0
|
||
sta (ZPPtr2)
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.CloseReg
|
||
CIFS.CloseDir tax
|
||
|
||
lda hFDs.hName-1,x
|
||
beq .1
|
||
|
||
phx
|
||
|
||
stz hFDs.hName-1,x
|
||
>SYSCALL2 FreeMem
|
||
|
||
plx
|
||
|
||
.1 lda hFDs-1,x
|
||
stz hFDs-1,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
|
||
|
||
ldy #2
|
||
lda (pStack),y TYPE
|
||
pha
|
||
|
||
jsr AppendPathPtr2
|
||
|
||
pla
|
||
beq .2
|
||
|
||
jsr AppendTypePtr2
|
||
|
||
.2 jsr AddYReqLen
|
||
|
||
tya
|
||
|
||
ldy #S.NETBIOS+S.SMB.H+6 NameLength
|
||
sta (ZPReqPtr),y
|
||
|
||
inc +1 for \0
|
||
jsr 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 SetReqLen
|
||
|
||
jsr WriteSocket
|
||
bcs .9
|
||
|
||
jmp Sleep
|
||
|
||
.9 >RET 6
|
||
*--------------------------------------
|
||
CIFS2.FOpen jsr ReadSocket
|
||
bcs .9
|
||
|
||
jsr GetRespData
|
||
|
||
jsr CheckSMBStatus
|
||
bcs .90
|
||
|
||
jsr CIFS.NewFD
|
||
bcs .91
|
||
|
||
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.REF+2
|
||
|
||
.2 pla
|
||
sta (pFD),y
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
bra .8
|
||
|
||
.3 jsr CIFS.Seek0
|
||
|
||
.8 ldy #4 path
|
||
|
||
lda (pStack),y
|
||
>PUSHA
|
||
lda (pStack),y
|
||
>PUSHA
|
||
|
||
>PUSHWZ mod
|
||
>PUSHB hFD
|
||
>SYSCALL2 mknod
|
||
bcc .91
|
||
|
||
jsr CIFS.FreeFD
|
||
sec
|
||
|
||
.91 stz CIFS.Status
|
||
jsr FreeRespData
|
||
bra .90
|
||
|
||
.9 jsr Exit.NODATA
|
||
beq .99
|
||
|
||
.90 >POP 6
|
||
|
||
.99 rts
|
||
*--------------------------------------
|
||
CIFS.FClose jsr CIFS.GetFD
|
||
|
||
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.CloseReg
|
||
|
||
jmp Exit.OK
|
||
|
||
.9 jmp Exit.NODATA
|
||
|
||
.99 rts
|
||
*--------------------------------------
|
||
CIFS.FRead ldy #4 hFILE
|
||
lda (pStack),y
|
||
|
||
jsr CIFS.GetFD
|
||
|
||
jsr GetCtx
|
||
|
||
ldx #S.SMB.H.CMD.READ.ANDX
|
||
jsr RequestSetupX
|
||
|
||
ldx #0
|
||
|
||
.1 lda SMB.ComRead.H,x
|
||
sta (ZPReqPtr),y
|
||
iny
|
||
inx
|
||
cpx #SMB.ComRead.H.Len
|
||
bne .1
|
||
|
||
jsr ReqSetupPtr2
|
||
|
||
jsr CIFS.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 SetReqLen
|
||
|
||
jsr WriteSocket
|
||
bcs .9
|
||
|
||
jmp Sleep
|
||
|
||
.9 >RET 5
|
||
*--------------------------------------
|
||
CIFS2.FRead jsr ReadSocket
|
||
bcs .9
|
||
|
||
jsr GetRespData
|
||
|
||
jsr CheckSMBStatus
|
||
bcs .90
|
||
|
||
ldy #S.NETBIOS+S.SMB.H+11 DataLength LO
|
||
lda (ZPRespPtr),y
|
||
iny
|
||
ora (ZPRespPtr),y
|
||
bne .10
|
||
|
||
jsr Exit.OK
|
||
|
||
lda #MLI.E.EOF
|
||
sec
|
||
bra .90
|
||
|
||
.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 CIFS.CopyX
|
||
|
||
ldy #S.NETBIOS+S.SMB.H+11
|
||
jsr CIFS2.RWSetOfsY
|
||
|
||
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 jsr Exit.OK
|
||
|
||
ldy #1 DataLen HI
|
||
lda (pStack),y
|
||
ora (pStack) DataLen LO
|
||
bne .8
|
||
|
||
>LDYA CIFS.Cnt
|
||
|
||
bra .90
|
||
|
||
.8 jmp Sleep2 Back to CIFS.FRead for next chunk
|
||
|
||
.9 jsr Exit.NODATA
|
||
beq .99
|
||
|
||
.90 >POP 5
|
||
.99 rts
|
||
*--------------------------------------
|
||
CIFS.FWrite ldy #4 hFILE
|
||
lda (pStack),y
|
||
|
||
jsr CIFS.GetFD
|
||
|
||
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
|
||
|
||
jsr CIFS.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 CIFS.CopyX
|
||
|
||
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
|
||
|
||
ldy #S.NETBIOS+S.SMB.H+5 Count LO
|
||
jsr CIFS2.RWSetOfsY
|
||
|
||
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 jsr Exit.OK
|
||
|
||
ldy #1 DataLen HI
|
||
lda (pStack),y
|
||
ora (pStack) DataLen LO
|
||
|
||
bne .8
|
||
|
||
>LDYA CIFS.Cnt
|
||
clc
|
||
bra .90
|
||
|
||
.8 jmp Sleep2
|
||
|
||
.9 jsr Exit.NODATA
|
||
beq .99
|
||
|
||
.90 >POP 5
|
||
.99 rts
|
||
*--------------------------------------
|
||
CIFS.FFlush clc Nothing to do
|
||
rts
|
||
*--------------------------------------
|
||
CIFS2.FFlush
|
||
*--------------------------------------
|
||
CIFS.FSeek ldy #5 hFILE
|
||
lda (pStack),y
|
||
|
||
jsr CIFS.GetFD
|
||
>PULLA
|
||
tax whence
|
||
|
||
>PULLL ZPPtr1 ZPPtr2
|
||
inc pStack
|
||
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CIFS2.FSeek
|
||
*--------------------------------------
|
||
CIFS.FTell
|
||
*--------------------------------------
|
||
CIFS2.FTell
|
||
*--------------------------------------
|
||
CIFS.FEOF
|
||
*--------------------------------------
|
||
CIFS2.FEOF 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
|
||
|
||
.2 inc pPath skip /mount
|
||
bne .3
|
||
|
||
inc pPath+1
|
||
|
||
.3 lda (pPath)
|
||
cmp #'/'
|
||
bne .2
|
||
|
||
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
|
||
|
||
jsr Exit.OK
|
||
bra .99
|
||
|
||
.9 jmp Exit.NODATA
|
||
|
||
.99 >RET 4
|
||
*--------------------------------------
|
||
CIFS.NewFD ldx #1
|
||
|
||
.1 lda hFDs-1,x
|
||
beq .2
|
||
|
||
inx
|
||
cpx #K.hFD.MAX+1
|
||
bne .1
|
||
|
||
lda #E.OOH
|
||
* sec
|
||
rts
|
||
|
||
.2 stx hFILE
|
||
|
||
>LDYAI 16 S.FD.REG = S.FD.DIR = 16
|
||
>SYSCALL2 GetMem
|
||
bcs .9
|
||
|
||
>STYA pFD
|
||
stx hFD
|
||
|
||
txa
|
||
ldx hFILE
|
||
|
||
sta hFDs-1,x
|
||
stz hFDs.hName-1,x
|
||
|
||
lda hHandler
|
||
ldy #S.FD.PFT
|
||
sta (pFD),y
|
||
|
||
* clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CIFS.GetFD sta hFILE
|
||
|
||
tax
|
||
phx
|
||
|
||
lda hFDs.hName-1,x
|
||
>SYSCALL2 GetMemPtr
|
||
>STYA pPath
|
||
|
||
plx
|
||
lda hFDs-1,x
|
||
>SYSCALL2 GetMemPtr
|
||
>STYA pFD
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.FreeFD pha
|
||
lda hFD
|
||
>SYSCALL2 FreeMem
|
||
|
||
ldx hFILE
|
||
stz hFDs-1,x
|
||
|
||
pla
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.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
|
||
*--------------------------------------
|
||
CIFS2.RWSetOfsY phy
|
||
|
||
ldy #4 hFILE
|
||
lda (pStack),y
|
||
|
||
jsr CIFS.GetFD
|
||
|
||
ply Count LO
|
||
phy
|
||
lda (ZPRespPtr),y
|
||
|
||
ldy #S.FD.REG.REF+2
|
||
clc
|
||
adc (pFD),y
|
||
sta (pFD),y
|
||
|
||
ply
|
||
iny Count HI
|
||
lda (ZPRespPtr),y
|
||
|
||
ldy #S.FD.REG.REF+3
|
||
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
|
||
*--------------------------------------
|
||
CIFS.CopyX ldy #0
|
||
|
||
.1 lda (ZPPtr1),y
|
||
sta (ZPPtr2),y
|
||
iny
|
||
dex
|
||
bne .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CIFS.Seek0 ldx #4
|
||
ldy #S.FD.REG.REF+2
|
||
lda #0
|
||
|
||
.1 sta (pFD),y
|
||
iny
|
||
dex
|
||
bne .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/lib/libcifs.io.s
|
||
LOAD usr/src/lib/libcifs.s
|
||
ASM
|