NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF lib/libcifs
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
				.INB inc/kernel.i
				.INB inc/mli.e.i
				.INB inc/eth.i
				.INB inc/libtcpip.i
				.INB inc/net.smb.i
*--------------------------------------
				.DUMMY
				.OR ZPLIB
ZS.START
ZPReqPtr		.BS 2
ZPReqLen		.BS 2
ZPCtxPtr		.BS 2
pFD				.BS 2

ZPPtr1			.BS 2
ZPPtr2			.BS 2
BufPtr			.BS 2
hBuf			.BS 1
hResp			.BS 1

pPath			.BS 2
flags			.BS 1
ftype			.BS 1
auxtype			.BS 2

ZPRespPtr		.BS 2

bFlag			.BS 1

ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA 0
				.DA CS.END-CS.START
				.DA 0
				.DA 0
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1				.DA LIB.LOAD
				.DA LIB.UNLOAD
				.DA CIFS.Negotiate
				.DA CIFS.SessionSetup
				.DA CIFS.TreeConnect
				.DA CIFS.Mount
				.DA CIFS.UMount
*--------------------------------------
L.CALLBACK		.DA CIFS.CallBack
*--------------------------------------
J.CIFS			.DA CIFS.ChTyp
				.DA CIFS.ChMod
				.DA CIFS.FStat
				.DA CIFS.Stat
				.DA CIFS.MKDir
				.DA CIFS.BADCALL		MKNod
				.DA CIFS.BADCALL		MKFIFO
				.DA CIFS.BADCALL		Pipe

				.DA CIFS.OpenDir
				.DA CIFS.ReadDir
				.DA CIFS.CloseDir

				.DA CIFS.BADCALL		Open
				.DA CIFS.BADCALL		Close
				.DA CIFS.BADCALL		Read
				.DA CIFS.BADCALL		Write
				.DA CIFS.ChOwn

				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL

				.DA CIFS.FOpen
				.DA CIFS.FClose
				.DA CIFS.FRead
				.DA CIFS.FWrite
				.DA CIFS.FFlush
				.DA CIFS.FSeek
				.DA CIFS.FTell
				.DA CIFS.FEOF
				.DA CIFS.Remove
				.DA CIFS.Rename
*--------------------------------------
J.CIFS2			.DA CIFS2.ChTyp
				.DA CIFS2.ChMod
				.DA CIFS2.FStat
				.DA CIFS2.Stat
				.DA CIFS2.MKDir
				.DA CIFS.BADCALL		MKNod
				.DA CIFS.BADCALL		MKFIFO
				.DA CIFS.BADCALL		Pipe

				.DA CIFS2.OpenDir
				.DA CIFS2.ReadDir
				.DA CIFS2.CloseDir

				.DA CIFS.BADCALL		Open
				.DA CIFS.BADCALL		Close
				.DA CIFS.BADCALL		Read
				.DA CIFS.BADCALL		Write
				.DA CIFS2.ChOwn

				.DA CIFS.BADCALL		FPutC...
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL
				.DA CIFS.BADCALL		...UngetC

				.DA CIFS2.FOpen
				.DA CIFS2.FClose
				.DA CIFS2.FRead
				.DA CIFS2.FWrite
				.DA CIFS2.FFlush
				.DA CIFS2.FSeek
				.DA CIFS2.FTell
				.DA CIFS2.FEOF
				.DA CIFS2.Remove
				.DA CIFS2.Rename
*--------------------------------------
L.LIBTCPIP		.DA LIBTCPIP
L.NETBIOS		.DA NETBIOS
				.DA 0
*--------------------------------------
LIB.LOAD		>LDYA L.LIBTCPIP
				>SYSCALL2 LoadLib
				bcs .9

				sta hLIBTCPIP
				>SYSCALL2 GetMemPtr
				>STYA pLIBTCPIP

				>LDYAI 256
				>SYSCALL2 GetMem
				bcs .9

				stx hReq

*				clc
.9				rts
*--------------------------------------
LIB.UNLOAD		lda hReq
				beq .1

				>SYSCALL2 FreeMem

.1				lda hLIBTCPIP
				beq .8

				>SYSCALL2 UnloadLib

.8				clc
				rts
*--------------------------------------
* >PUSHB hSocket
* >PUSHBI 0
* >LIBCALL Negotiate
* A = hSMBContext
*--------------------------------------
CIFS.Negotiate	lda (pStack)
				bne .1

				dec
				sta (pStack)

				ldy #1					hSocket
				lda (pStack),y
				>PUSHA
				>PUSHW L.NETBIOS
				>PUSHWI SMB.NegReq.end-NETBIOS

				ldx #LIBTCPIP.Send
			jsr GO.LIBTCPIP
				bcs .99

				lda #0
				sec
				rts

.1				dec
				sta (pStack)
				beq .98

				ldy #1					hSocket
				lda (pStack),y

				ldx #LIBTCPIP.Recv
			jsr GO.LIBTCPIP
				bcc .3

				cmp #E.NODATA
				bne .99
				inc
				rts

.3				jsr GetRespData

				ldy #S.NETBIOS+S.SMB.H.STATUS
				lda (ZPRespPtr),y
				bne .97

				ldy #S.NETBIOS.LEN+2
				lda (ZPRespPtr),y

				clc
				adc #S.NETBIOS
				sta ZPPtr1
				tay
				lda #0

				>SYSCALL2 GetMem
				bcs .99

				>STYA ZPCtxPtr
				ldy ZPPtr1

.4				dey
				lda (ZPRespPtr),y
				sta (ZPCtxPtr),y
				tya
				bne .4

				ldy #S.NETBIOS+S.SMB.H.FLAGS
				sta (ZPCtxPtr),y

				phx

				lda hResp
				>SYSCALL2 FreeMem

				pla

				clc
				>RET 2

.97				lda hResp
				>SYSCALL2 FreeMem

.98				lda #MLI.E.IO

.99				>RET 2
*--------------------------------------
* >PUSHB hSocket
* >PUSHB hSMBContext
* >PUSHW username
* >PUSHW password
* >PUSHBI 0
* >LIBCALL SessionSetup
* (SMBContext updated with UID)
*--------------------------------------
CIFS.SessionSetup
				lda (pStack)
				bne .5

				dec
				sta (pStack)

				ldy #5					hSMBContext
				jsr GetSMBContext

				ldx #S.SMB.H.CMD.SESSION.SETUP.ANDX
				jsr RequestSetupX

				ldx #0

.2				lda SMB.SessionSetup.H,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.SessionSetup.H.Len
				bne .2

				phy						save Y = LEN
				iny
				iny

				ldx #0

.3				lda SMB.SessionSetup.Guest,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.SessionSetup.Guest.Len
				bne .3

				ldx #0

.4				lda SMB.SessionSetup.T,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.SessionSetup.T.Len
				bne .4

				pla

				jsr SetReqLenYAtA

				phy
				pha

				ldy #6					hSocket
				lda (pStack),y
				>PUSHA
				>PUSHW ZPReqPtr

				pla
				ply
				>PUSHYA

				ldx #LIBTCPIP.Send
			jsr GO.LIBTCPIP
				bcs .99

				lda #0
				sec
				rts

.5				dec
				sta (pStack)
				beq .98

				ldy #6					hSocket
				lda (pStack),y
				ldx #LIBTCPIP.Recv
			jsr GO.LIBTCPIP
				bcc .6

				cmp #E.NODATA
				bne .99
				inc
				rts

.6				jsr GetRespData

				ldy #S.NETBIOS+S.SMB.H.STATUS
				lda (ZPRespPtr),y
				bne .97

				ldy #5					hSMBContext
				jsr GetSMBContext

				ldy #S.NETBIOS+S.SMB.H.UID
				lda (ZPRespPtr),y
				sta (ZPCtxPtr),y
				iny
				lda (ZPRespPtr),y
				sta (ZPCtxPtr),y

.8				lda hResp
				>SYSCALL2 FreeMem

				clc
				>RET 7

.97				lda hResp
				>SYSCALL2 FreeMem

.98				lda #MLI.E.IO
				sec
.99				>RET 7
*--------------------------------------
* >PUSHB hSocket
* >PUSHB hSMBContext
* >PUSHW pathname
* >PUSHBI 0
* >LIBCALL TreeConnect
* (SMBContext updated with TID)
*--------------------------------------
CIFS.TreeConnect
				lda (pStack)
				bne .5

				dec
				sta (pStack)

				ldy #1					pathname
				lda (pStack),y
				sta ZPPtr1
				iny
				lda (pStack),y
				sta ZPPtr1+1

				iny						hSMBContext
				jsr GetSMBContext

				ldx #S.SMB.H.CMD.TREE.CONNECT.ANDX
				jsr RequestSetupX

				ldx #0

.1				lda SMB.TreeConnect.H,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.TreeConnect.H.Len
				bne .1

				phy						save Y = LEN

				iny						Skip ByteCount
				iny

				lda #0
				sta (ZPReqPtr),y		PASSWORD = "\0"
				iny

.2				lda (ZPPtr1)
				inc ZPPtr1
				bne .3

				inc ZPPtr1+1

.3				sta (ZPReqPtr),y
				iny
				tax
				bne .2

				ldx #0

.4				lda SMB.TreeConnect.T,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.TreeConnect.T.Len
				bne .4

				pla

				jsr SetReqLenYAtA

				phy
				pha

				ldy #4					hSocket
				lda (pStack),y
				>PUSHA
				>PUSHW ZPReqPtr

				pla
				ply
				>PUSHYA

				ldx #LIBTCPIP.Send
			jsr GO.LIBTCPIP
				bcs .99

				lda #0
				sec
				rts

.5				dec
				sta (pStack)
				beq .98

				ldy #4					hSocket
				lda (pStack),y
				ldx #LIBTCPIP.Recv
			jsr GO.LIBTCPIP
				bcc .6

				cmp #E.NODATA
				bne .99
				inc
				rts

.6				jsr GetRespData

				ldy #S.NETBIOS+S.SMB.H.STATUS
				lda (ZPRespPtr),y
				bne .97

				ldy #3					hSMBContext
				jsr GetSMBContext

				ldy #S.NETBIOS+S.SMB.H.TID
				lda (ZPRespPtr),y
				sta (ZPCtxPtr),y
				iny
				lda (ZPRespPtr),y
				sta (ZPCtxPtr),y

.8				lda hResp
				>SYSCALL2 FreeMem

				clc
				>RET 5

.97				lda hResp
				>SYSCALL2 FreeMem

.98				lda #MLI.E.IO
				sec
.99				>RET 5
*--------------------------------------
* >PUSHB hSocket
* >PUSHB hSMBContext
* >PUSHW MountPoint
* >LIBCALL Mount
*--------------------------------------
CIFS.Mount		ldy #1
				lda (pStack),y			MP HI
				>PUSHA
				lda (pStack),y			MP LO
				>PUSHA

				>PUSHW L.CALLBACK
				>SYSCALL2 Mount
				bcs .9

				pha						hMount

				ldx #0

.1				>PULLB MountTable,x
				inx
				cpx #4
				bne .1

				pla
				clc
				rts

.9				>RET 4
*--------------------------------------
CIFS.UMount		clc
				rts
*--------------------------------------
CIFS.CallBack	bit CIFS.Status
				bpl .1

				phy
				pha
				ldy #S.PS.PID
				lda (pPS),y
				cmp CIFS.PID
				beq .2

				pla
				ply

				lda #0
				sec
				rts

.1				jmp (J.CIFS,x)

.2				pla
				ply
				jmp (J.CIFS2,x)
*--------------------------------------
				.INB usr/src/lib/libcifs.io.s
*--------------------------------------
GetPFD			tax
				phx

				lda Nod.Table.hName-2,x
				>SYSCALL2 GetMemPtr
				>STYA pPath

				plx
				lda Nod.Table.hFD-2,x
				>SYSCALL2 GetMemPtr
				>STYA pFD
				rts
*--------------------------------------
MakeTrans2Req	lda MountTable+2
				>SYSCALL2 GetMemPtr
				>STYA ZPCtxPtr

				ldx #S.SMB.H.CMD.TRANS2
				jsr RequestSetupX

				ldx #0

.1				lda SMB.Trans2.H,x
				sta (ZPReqPtr),y
				iny
				inx
				cpx #SMB.Trans2.H.Len
				bne .1

				rts
*--------------------------------------
GetSMBContext	lda (pStack),y
				>SYSCALL2 GetMemPtr
				>STYA ZPCtxPtr
				rts
*--------------------------------------
RequestSetupX	phx

				lda hReq
				>SYSCALL2 GetMemPtr
				>STYA ZPReqPtr

				plx

				ldy #0

.1				lda (ZPCtxPtr),y
				cpy #S.NETBIOS+S.SMB.H.CMD
				bne .2

				txa

.2				sta (ZPReqPtr),y
				iny
				cpy #S.NETBIOS+S.SMB.H
				bne .1

				rts
*--------------------------------------
GetPathLen		ldy #$ff
				
.1				iny
				lda (pPath),y
				bne .1
				
				tya
				rts
*--------------------------------------
AppendPath		ldx #0

.1				lda (pPath)
				beq .4

				inc pPath
				bne .2

				inc pPath+1

.2				cmp #'/'
				bne .3

				lda #'\'

.3				sta (ZPReqPtr),y
				tax
				iny
				bra .1

.4				cpx #'\'
				bne .5

				dey

.5				rts
*--------------------------------------
* Y = LEN from S.NETBIOS.TYPE
* A = Ptr to LEN Word
*--------------------------------------
SetReqLenYAtA	sty ZPReqLen
				stz ZPReqLen+1

				sta ZPPtr1
				pha

				tya
				dec
				dec
				sec
				sbc ZPPtr1
				ply

				sta (ZPReqPtr),y
				iny
				lda #0
				sta (ZPReqPtr),y
				bra SetReqLenNETBIOS
*--------------------------------------
SetT2ReqLenYA	sty ZPReqLen
				stz ZPReqLen+1

				tya
				sec
				sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7

				ldy #S.NETBIOS+S.SMB.H+1
				sta (ZPReqPtr),y

				ldy #S.NETBIOS+S.SMB.H+19
				sta (ZPReqPtr),y

				inc
				inc
				inc

				ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2
				sta (ZPReqPtr),y

SetReqLenNETBIOS
				lda ZPReqLen
				sec
				sbc #S.NETBIOS
				ldy #S.NETBIOS.LEN+2
				sta (ZPReqPtr),y
				lda ZPReqLen+1
				sec
				sbc /S.NETBIOS
				dey
				sta (ZPReqPtr),y

				>LDYA ZPReqLen
				rts
*--------------------------------------
Sleep			ldy #S.PS.PID
				lda (pPS),y
				sta CIFS.PID

				dec CIFS.Status

				stz CIFS.Retries

				lda #0
				sec
				rts
*--------------------------------------
GetRespData		sta hResp
				>SYSCALL2 GetMemPtr

				pha
				tya
*				clc
				adc #S.TCP
				sta	ZPRespPtr
				pla
				adc /S.TCP
				sta	ZPRespPtr+1
				rts
*--------------------------------------
GetRespDataOffset
				ldy #S.NETBIOS+S.SMB.H+15				Data Offset
				lda (ZPRespPtr),y
				clc
				adc ZPRespPtr
				tax

				iny
				lda (ZPRespPtr),y
				adc ZPRespPtr+1
				pha

				txa
				clc
				adc #S.NETBIOS
				sta ZPPtr1

				pla
				adc /S.NETBIOS
				sta ZPPtr1+1



				rts
*--------------------------------------
FreeRespData	php
				pha
				lda hResp
				>SYSCALL2 FreeMem
				pla
				plp
				rts
*--------------------------------------
FileInfo2StatBuf
				phx

				ldx #S.STAT-1

.1				stz StatBuf,x
				dex
				bpl .1

				ldy #0					Creation Date/Time
				ldx #S.STAT.CTIME

				jsr FileInfo2StatBufDT

				ldy #4					Last Access Date/Time
				ldx #S.STAT.ATIME

				jsr FileInfo2StatBufDT

				ldy #8					Last Write Date/Time
				ldx #S.STAT.MTIME

				jsr 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				plx

				rts
*--------------------------------------
* YYYYYYYM MMM DDDDD
* HHHHHmmm mmm SSSSS
*--------------------------------------
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

				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
				rts
* TODO : S.TIME.WDAY
*--------------------------------------
StatBuf2Ptr2	ldy #S.STAT-1

.1				lda StatBuf,y
				sta (ZPPtr2),y
				dey
				bpl .1

				rts
*--------------------------------------
ClearSocket		jsr ReadSocket
				bcs .8

				>SYSCALL2 FreeMem
				bra ClearSocket

.8				clc
				rts
*--------------------------------------
ReadSocket		lda MountTable+3		hSocket
				ldx #LIBTCPIP.Recv
GO.LIBTCPIP		jmp (pLIBTCPIP)
*--------------------------------------
CIFS.BADCALL	lda #MLI.E.BADCALL
				sec
				rts
*--------------------------------------
CS.END
*--------------------------------------
NETBIOS			.DA #0					DIRECT TCP TRANSPORT
				.DA #0					24 BITS LENGTH
				.DA /SMB.NegReq.end-SMB.H
				.DA #SMB.NegReq.end-SMB.H
*--------------------------------------
SMB.H			.DA #$FF
				.AS "SMB"
				.DA #S.SMB.H.CMD.NEGOTIATE
				.HS 00000000
				.DA #0					S.SMB.H.FLAGS
				.DA S.SMB.H.FLAGS2.LONGNAMES
				.DA 0					PIDHI
				.HS 0000000000000000	SECFEAT
				.DA 0					RSVD
				.DA $FFFF				TID
				.DA $FFFE				PIDLO
				.BS 2					UID
				.DA 0					MID
*--------------------------------------
SMB.NegReq		.DA #0					WORD COUNT

				.DA #SMB.NegReq.end-2-*	ByteCount
				.DA #0

*				.DA #2
*				.AZ "PC NETWORK PROGRAM 1.0"
*				.DA #2
*				.AZ "LANMAN1.0"
*				.DA #2
*				.AZ "Windows for Workgroups 3.1a"
*				.DA #2
*				.AZ "LM1.2X002"
*				.DA #2
*				.AZ "LANMAN2.1"
				.DA #2
				.AZ "NT LM 0.12"
*				.DA #2
*				.AZ "SMB 2.002"
*				.DA #2
*				.AZ "SMB 2.???"
SMB.NegReq.end	.EQ *
*--------------------------------------
SMB.SessionSetup.H
				.DA #13					WORD COUNT
				.HS FF000000			NO MORE CMD
				.DA 1280				MAX BUFFER
				.DA 2					MAX MPX COUNT
				.HS 0000				VC NUMBER
				.HS 00000000			SESSION KEY
				.DA 0					CI PASS LEN (ANSI)
				.DA 0					CS PASS LEN (UNICODE)
				.HS 00000000
				.HS 00000000			CAPABILITIES
SMB.SessionSetup.H.Len .EQ *-SMB.SessionSetup.H
*				.BS 2					ByteCount
SMB.SessionSetup.Guest
*				.AZ ""					Password
				.AZ "Guest"				Account Name
				.AZ "?"					Primary Domain
SMB.SessionSetup.Guest.Len	.EQ *-SMB.SessionSetup.Guest
SMB.SessionSetup.T
				.AZ "A2osX"				Native OS
				.AZ	"A2osX-CIFSD"		Native LANMAN
SMB.SessionSetup.T.Len		.EQ *-SMB.SessionSetup.T
*--------------------------------------
SMB.TreeConnect.H
				.DA #4					WORD COUNT
				.HS FF000000			NO MORE CMD
				.DA 0
				.DA 1					PASSWORD LEN (1 for "\0")
SMB.TreeConnect.H.Len	.EQ *-SMB.TreeConnect.H
*				.BS 2					ByteCount
*				.AZ ""					PASSWORD
*				.AZ	"_temp"				PATH
SMB.TreeConnect.T
				.AZ "A:"				Disk Share
SMB.TreeConnect.T.Len	.EQ *-SMB.TreeConnect.T
*--------------------------------------
SMB.ComCreate.H	.DA #24					WORD COUNT
				.HS FF000000			NO MORE CMD
				.HS 00					Reserved
			.BS 2						NameLength
				.HS 00000000			Flags
				.HS 00000000			RootDirectoryFID
			.BS 4						DesiredAccess 
				.HS 0000000000000000	AllocationSize
				.HS 00000000			ExtFileAttributes
				.HS 00000000			ShareAccess 
			.BS 4						CreateDisposition	
				.HS 00000000			CreateOptions
				.HS 00000000			ImpersonationLevel
				.HS	00					SecurityFlags
SMB.ComCreate.H.Len .EQ *-SMB.ComCreate.H			
*				.BS 2					ByteCount	
*				.AZ "path\file"
*--------------------------------------
SMB.ComClose.H	.DA #3					WORD COUNT
			.BS 2						FID
				.HS 00000000			LastTimeModified
				.HS 0000				ByteCount
SMB.ComClose.H.Len	.EQ *-SMB.ComClose.H
*--------------------------------------
SMB.ComRead.H	.DA #10					WORD COUNT
				.HS FF000000			NO MORE CMD
			.BS 2						FID
			.BS 4						Offset
			.BS 2						MaxCountOfBytesToReturn
				.HS 0000				MinCountOfBytesToReturn
				.HS 00000000			Timeout
				.HS 0000				Remaining
				.HS 0000				ByteCount
SMB.ComRead.H.Len	.EQ *-SMB.ComRead.H
*--------------------------------------
SMB.ComWrite.H	.DA #12					WORD COUNT
				.HS FF000000			NO MORE CMD
			.BS 2						FID
			.BS 4						Offset
				.HS 00000000			Timeout
				.HS 0001				WriteMode=WritethroughMode
			.BS 2						Remaining
				.HS 0000				Reserved
			.BS 2						DataLength
			.BS 2						DataOffset
SMB.ComWrite.H.Len	.EQ *-SMB.ComWrite.H
			.BS 2						ByteCount
SMB.ComWrite.T
*			DATA.....
SMB.ComWrite.T.Len		.EQ *-SMB.ComWrite.T
*--------------------------------------
SMB.Trans2.H	.DA #15					WORD COUNT
			.BS 2					TotalParamCount
				.DA 0					TotalDataCount
				.DA 10					MaxParameterCount
				.DA 450					MaxDataCount
				.DA #0					MaxSetupCount
				.HS 00					Reserved1
				.DA 0					Flags
				.HS 00000000			Timeout
				.HS 0000				Reserved2
			.BS 2					ParameterCount
				.DA 68					ParameterOffset
				.HS 0000				DataCount
				.HS 0000				DataOffset
				.DA #1					SetupCount
				.HS 00					Reserved3
SMB.Trans2.H.Len	.EQ *-SMB.Trans2.H
*--------------------------------------
SMB.FindFirst2	.DA 1					TRANS2_FIND_FIRST2
			.BS 2						PrmCnt
				.HS 000000				Padding
				.DA $0037				SearchAttributes
				.DA 1024				SearchCount
				.DA 2					Flags
				.DA SMB_INFO_STANDARD	InformationLevel
				.HS 00000000			SearchStorageType
*				.AZ "path\*"
SMB.FindFirst2.Len .EQ *-SMB.FindFirst2
*--------------------------------------
SMB.FindNext2	.DA 2					TRANS2_FIND_NEXT2
			.BS 2						PrmCnt
				.HS 000000				Padding
			.BS 2						SID
				.DA 1024				SearchCount
				.DA SMB_INFO_STANDARD	InformationLevel
				.HS	00000000			ResumeKey
				.DA 2+8					Flags
*				.AZ "path\*"
SMB.FindNext2.Len .EQ *-SMB.FindNext2
*--------------------------------------
SMB.QueryPathInfo
				.DA 5					TRANS2_QUERY_PATH_INFORMATION
			.BS 2						PrmCnt
				.HS 000000				Padding
				.DA SMB_INFO_STANDARD	InformationLevel
				.HS 00000000			SearchStorageType
*				.AZ "filename"
SMB.QueryPathInfo.Len	.EQ *-SMB.QueryPathInfo
*--------------------------------------
SMB.CreateDirectory
				.DA 13					TRANS2_CREATE_DIRECTORY
			.BS 2						PrmCnt
				.HS 000000				Padding
				.HS 00000000			Reserved
*				.AZ "DirName"
SMB.CreateDirectory.Len	.EQ *-SMB.CreateDirectory
*--------------------------------------
LIBTCPIP		.AZ "libtcpip"
hLIBTCPIP		.BS 1
pLIBTCPIP		.BS 2
hSocket			.BS 1
hReq			.BS 1
*--------------------------------------
CIFS.Status		.BS 1
CIFS.PID		.BS 1
CIFS.Retries	.BS 1
*--------------------------------------
MountTable		.BS 2					pMountPoint
				.BS 1					hSMBContext
				.BS 1					hSocket
*--------------------------------------
hFILE			.BS 1
StatBuf			.BS S.STAT
*--------------------------------------
MAN
SAVE usr/src/lib/libcifs.s
ASM
