NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/atlogon
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
				.INB inc/mli.i
				.INB inc/mli.e.i
				.INB inc/appletalk.i
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ZPAtlkParams	.BS 2
hCmdBuf			.BS 1
hReplyBuf		.BS 1
ZPCmdBuf		.BS 2
ZPReplyBuf		.BS 2
ZPPTR1			.BS 2
ZPPTR2			.BS 2
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		CS
				.DA DS.END-DS.START		DS
				.DA #64					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT
				.DA	CS.QUIT
L.MSG.USAGE		.DA MSG.USAGE
L.MSG.NOATK		.DA MSG.NOATK
L.MSG.ATKERR	.DA MSG.ATKERR
L.MSG.GETINFO	.DA MSG.GETINFO
L.MSG.NETNODPORT .DA MSG.NETNODPORT
L.MSG.NOTFOUND	.DA MSG.NOTFOUND
L.MSG.SRVINFO1	.DA MSG.SRVINFO1
L.MSG.SRVINFO2	.DA MSG.SRVINFO2
L.MSG.PSTR		.DA MSG.PSTR
L.FPLogin.Guest	.DA FPLogin.Guest
L.FPLogin.Auth	.DA FPLogin.Auth
				.DA 0
*--------------------------------------
CS.INIT			clc
				rts
*--------------------------------------
CS.RUN			ldy #S.PS.ARGC
				lda (pPS),y
				beq CS.RUN.USAGE

				jsr CS.RUN.GetInfo
				bcs .9

				jsr CS.RUN.LookupName
				bcs .9

				jsr CS.RUN.GetParms
				bcs .9

				jsr CS.RUN.GetStatus
				bcs .9

				jsr CS.RUN.FILogin
				bcs .9

				lda #0
				sec
.9				rts
*--------------------------------------
CS.RUN.USAGE	>PUSHW L.MSG.USAGE
				>PUSHBI 0
				>SYSCALL PrintF

				lda #E.SYN
				sec
				rts
*--------------------------------------
CS.RUN.GetInfo	>LEA.G P.GetInfo
				ldx #AT.GetInfo
				jsr CS.RUN.GOATLK
				bcs .9

				>PUSHW L.MSG.GETINFO
				>PUSHB.G P.GetInfo+$08	THIS-NET
				>PUSHB.G P.GetInfo+$09	THIS-NET
				>PUSHB.G P.GetInfo+$0E	NODE

				>PUSHB.G P.GetInfo+$0A	BRIDGE

				>PUSHB.G P.GetInfo+$0C	HARDWARE ID
				>PUSHB.G P.GetInfo+$0D	HARDWARE ID
				>PUSHB.G P.GetInfo+$0B	ROM VERSION

				>PUSHBI 7
				>SYSCALL PrintF
				rts

.9				pha
				>LDYA L.MSG.NOATK
				>SYSCALL PutS
				pla
				sec
				rts
*--------------------------------------
CS.RUN.LookupName
				lda #1
				>SYSCALL ArgV
				>STYA ZPPTR1

				>LEA.G NameBuf
				>STYA ZPPTR2
				>STYA.G P.LookupName+$08

				ldy #$ff

.1				iny
				lda (ZPPTR1),y
				bne .1

				tya
				tax
				jsr CS.RUN.PutPtr2

.2				ldy #0

.3				lda (ZPPTR1),y
				jsr CS.RUN.PutPtr2
				iny
				dex
				bne .3

				ldx #SEARCH.STRING.Len
				ldy #0

.4				lda SEARCH.STRING,y
				jsr CS.RUN.PutPtr2
				iny
				dex
				bne .4

				lda #4
				>STA.G P.LookupName+$C	RetInt
				>STA.G P.LookupName+$D	RetCnt

				>LDYAI 5+99
				>STYA.G P.LookupName+$10	BufLen

				>LEA.G LookupBuf
				>STYA.G P.LookupName+$12	BufPtr

				lda #1
				>STA.G P.LookupName+$16		MaxMatch

				>LEA.G P.LookupName
				ldx #AT.LookupName
				jsr CS.RUN.GOATLK
				bcs .9

				>LDA.G P.LookupName+$17
				beq .99

				>PUSHW L.MSG.NETNODPORT

				ldy #LookupBuf
				ldx #4

.5				lda (pData),y
				>PUSHA
				iny
				dex
				bne .5

				>PUSHBI 4
				>SYSCALL PrintF

.9				rts

.99				>LDYA L.MSG.NOTFOUND
				>SYSCALL PutS
				lda #MLI.E.IO
				sec
				rts
*--------------------------------------
CS.RUN.GetParms	>LEA.G P.GetParms
				ldx #AT.GetParms
				jsr CS.RUN.GOATLK
				bcs .9

				>LDYA.G P.GetParms+$4
				>SYSCALL GetMem
				bcs .9

				>STYA ZPCmdBuf
				stx hCmdBuf

				>LDYA.G P.GetParms+$6
				>SYSCALL GetMem
				bcs .9

				>STYA ZPReplyBuf
				stx hReplyBuf

.9				rts
*--------------------------------------
CS.RUN.GetStatus
				>LEA.G LookupBuf
				>STYA ZPPTR1
				>LEA.G P.GetStatus+$8
				>STYA ZPPTR2

				ldy #3

.1				lda (ZPPTR1),y			copy NETWORK/NODE/SOCKET
				sta (ZPPTR2),y
				dey
				bpl .1

				>LDYA.G P.GetParms+$6
				>STYA.G P.GetStatus+$C	Reply buffer length

				>LDYA ZPReplyBuf
				>STYA.G P.GetStatus+$E

				>LEA.G P.GetStatus
				ldx #AT.GetStatus
				jsr CS.RUN.GOATLK
				bcs .9

				>PUSHW L.MSG.SRVINFO1

				lda #10					Server Name
				clc
				adc ZPReplyBuf
				tay
				lda #0
				adc ZPReplyBuf+1
				>PUSHYA

				ldy #1
				lda (ZPReplyBuf),y		Offset to Machine Type
				clc
				adc ZPReplyBuf
				pha

				lda (ZPReplyBuf)
				adc ZPReplyBuf+1
				ply
				>PUSHYA

				>PUSHBI 4
				>SYSCALL PrintF

				ldy #3					Offset to Version list
				lda (ZPReplyBuf),y
				clc
				adc ZPReplyBuf
				pha

				dey
				lda (ZPReplyBuf),y
				adc ZPReplyBuf+1
 				ply

				jsr CS.RUN.PrintListYA

				>LDYA L.MSG.SRVINFO2
				>SYSCALL PutS

				ldy #5					Offset to UAM list
				lda (ZPReplyBuf),y
				clc
				adc ZPReplyBuf
				pha

				dey
				lda (ZPReplyBuf),y
				adc ZPReplyBuf+1
 				ply

				jsr CS.RUN.PrintListYA
				clc

.9				rts
*--------------------------------------
CS.RUN.PrintListYA
				>STYA ZPPTR1

				lda (ZPPTR1)
				beq .8

				tax
				inc ZPPTR1
				bne .1
				inc ZPPTR1+1

.1				phx
				>PUSHW L.MSG.PSTR
				>PUSHW ZPPTR1
				>PUSHBI 2
				>SYSCALL PrintF
				plx
				bcs .9

				lda (ZPPTR1)
				sec
				adc ZPPTR1
				sta ZPPTR1
				bcc .2
				inc ZPPTR1+1

.2				dex
				bne .1

.8				clc
.9				rts
*--------------------------------------
CS.RUN.FILogin	>LEA.G LookupBuf
				>STYA ZPPTR1
				>LEA.G P.FILogin+$4
				>STYA ZPPTR2

				ldy #3

.1				lda (ZPPTR1),y			copy NETWORK/NODE/SOCKET
				sta (ZPPTR2),y
				dey
				bpl .1

				>LDYA.G P.GetParms+$6
				>STYA.G P.FILogin+$E	Reply buffer length

				>LDYA ZPReplyBuf
				>STYA.G P.FILogin+$10

				lda #2					USERNAME
				>SYSCALL ArgV
				bcc .2

				>LDYAI FPLogin.Guest.Len
				>STYA.G P.FILogin+$8	Cmd buffer length

				>LDYA L.FPLogin.Guest
				>STYA.G P.FILogin+$A

				bra .80
*--------------------------------------
.2				>STYA ZPPTR1

				ldx #FPLogin.Auth.Len
				ldy #0

.3				lda FPLogin.Auth,y
				sta (ZPCmdBuf),y
				iny
				dex
				bne .3

				phy
				ldy #$ff

.4				iny
				lda (ZPPTR1),y
				bne .4

				tya
				tax

				ply
				sta (ZPCmdBuf),y		USERNAME Len
				iny

.5				jsr CS.RUN.GetPtr1
				sta (ZPCmdBuf),y
				iny
				dex
				bne .5

				tya
				lsr
				bcc .6

				lda #0
				sta (ZPCmdBuf),y
				iny

.6				phy

				lda #3					PASSWORD
				>SYSCALL ArgV
				bcs .99

				>STYA ZPPTR1

				ldx #8
				ply

.7				jsr CS.RUN.GetPtr1
				beq .8

				sta (ZPCmdBuf),y
				iny
				dex
				bne .7

.8				txa
				beq .10

				lda #0

.9				sta (ZPCmdBuf),y
				iny
				dex
				bne .9

.10				>STYA.G P.FILogin+$8	Cmd buffer length

				>LDYA ZPCmdBuf
				>STYA.G P.FILogin+$A

.80				>LEA.G P.FILogin
				ldx #AT.FILogin
				jsr CS.RUN.GOATLK
				bcs .89

				>LDA.G P.FILogin+$14
				sta A2osX.ATLKSID

.89				rts

.99				ply
				lda #E.SYN
				sec
				rts
*--------------------------------------
CS.RUN.GOATLK	>STYA ZPAtlkParams

				ldy #1
				txa
				sta (ZPAtlkParams),y

				>LDYA ZPAtlkParams
				jsr A2osX.ATKCALL
				bcc .9

				pha

				>PUSHW L.MSG.ATKERR

				ldy #1
				lda (ZPAtlkParams),y
				>PUSHA

				ldy #3
				lda (ZPAtlkParams),y
				>PUSHA
				dey
				lda (ZPAtlkParams),y
				>PUSHA

				>PUSHBI 3
				>SYSCALL PrintF

				pla
				sec
.9				rts
*--------------------------------------
CS.RUN.GetPtr1	lda (ZPPTR1)
				beq .8

				inc ZPPTR1
				bne .8

				inc ZPPTR1+1
.8				rts
*--------------------------------------
CS.RUN.PutPtr2	sta (ZPPTR2)
				inc ZPPTR2
				bne .8

				inc ZPPTR2+1
.8				rts
*--------------------------------------
CS.DOEVENT		sec
				rts
*--------------------------------------
CS.QUIT			lda	hReplyBuf
				beq .1

				>SYSCALL FreeMem

.1				lda	hCmdBuf
				beq .2

				>SYSCALL FreeMem

.2				clc
				rts
*--------------------------------------
CS.END
MSG.USAGE		.AZ "Usage : ATLOGON <SERVER> [USER] [PASSWORD]"
MSG.NOATK		.AZ "AppleTalk Not Loaded."
MSG.ATKERR		.AZ "AppleTalk Call %h, ERR:%H\r\n"
MSG.GETINFO		.AS "Network/Node:%H/%h\r\n"
				.AS "Bridge      :     %h\r\n"
				.AZ "HWID/ROMVER :%H/%h\r\n"
MSG.NETNODPORT	.AZ "Server Address : %H/%h:%h\r\n"
MSG.NOTFOUND	.AZ "Server not found"
MSG.SRVINFO1	.AS "Server Name : %S\r\n"
				.AS "Server Type : %S\r\n"
				.AZ "AFP Dialects :\r\n"
MSG.SRVINFO2	.AZ "Supported UAMs :"
MSG.PSTR		.AZ " %S\r\n"
SEARCH.STRING	>PSTR "AFPServer"
				>PSTR "*"
SEARCH.STRING.Len .EQ *-SEARCH.STRING
*--------------------------------------
FPLogin.Guest	.DA #18
*				.DA #0
				>PSTR "AFPVersion 2.1"
				>PSTR "No User Authent"
FPLogin.Guest.Len	.EQ *-FPLogin.Guest
*--------------------------------------
FPLogin.Auth	.DA #18
*				.DA #0
				>PSTR "AFPVersion 2.1"
				>PSTR "Cleartxt Passwrd"
*				>PSTR "username"
*				.AS "password"			8 bytes, word aligned, 0 padded
FPLogin.Auth.Len	.EQ *-FPLogin.Auth
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
P.GetInfo		.BS $0F
P.LookupName	.BS $18
P.GetParms		.BS $07
P.GetStatus		.BS $14
P.FILogin		.BS $19
NameBuf			.BS 36
lookupBuf		.BS 5+99
DS.END
				.ED
*--------------------------------------
MAN
SAVE usr/src/bin/atlogon.s
ASM
