Davex/src/xtn/2/net.asm

632 lines
8.5 KiB
NASM

;*********************************************
;
; External command for Davex
;
; net -- AppleTalk experimental
;
; -l = list zones
; -i = get info
; -p = printer info
; -z = lookup entities on specified zone
; -k = lookup a specific kind of entity
; -s = list sessions
; -n = get/set naming mode (-nL, -nS)
; -r = raw (y/n)
;
;*********************************************
;
; Converted to MPW IIgs 20-Sep-92 DAL
;
;*********************************************
.include "Common/2/Globals2.asm"
.include "Common/2/Apple.Globals2.asm"
.include "Common/2/Mli.globals2.asm"
;include '::common:net.globals.aii'
.include "Common/Macros.asm"
.segment "CODE_9000"
OrgAdr = $9000 ;change as necessary (end below $B000)
; org OrgAdr
BigBuffer = $A000
MyVersion = $05
MinVersion = $14
;*********************************************
rts
.byte $ee,$ee
.byte MyVersion,MinVersion
.byte %00000000 ;hardware req
.addr descr
.addr OrgAdr
.addr start
.byte 0,0,0,0
; parameters here
.byte 'l',t_nil
.byte 'i',t_nil
.byte 'z',t_string
.byte 'p',t_nil
.byte 'k',t_string
.byte 's',t_nil
.byte 'n',t_string
.byte 'r',t_yesno
.byte 0,0
descr: pstr "AppleTalk experimental"
;*********************************************
; dum xczpage ;32 locations
Count = xczpage ;ds 2
myPtr = Count+2 ;ds 2
str = myPtr+2 ;ds 2
; dend
;
start: lda #'i'+$80
jsr xgetparm_ch
bcs noInfo
jsr PrintInfo
noInfo: lda #'l'+$80
jsr xgetparm_ch
bcs noZones
jsr ListZones
noZones: lda #'r'+$80
jsr xgetparm_ch
bcs noRaw
jsr DoRaw
noRaw: lda #'p'+$80
jsr xgetparm_ch
bcs noPrinter
jsr DoPrinter
noPrinter: lda #'k'+$80
jsr xgetparm_ch
bcc doLkup
lda #'z'+$80
jsr xgetparm_ch
bcs noLkup
doLkup: jsr DoLookup
noLkup: lda #'s'+$80
jsr xgetparm_ch
bcs noSessions
jsr ListSessions
noSessions:
lda #'n'+$80
jsr xgetparm_ch
bcs noNaming
jsr DoNaming
noNaming:
rts
PrintInfo:
jsr mli
.byte mli_atlk
.addr ZoneP
jsr xmess
.byte cr
asc "Your zone is '"
.byte 0
lda #>pagebuff
ldy #<pagebuff
jsr xprint_path
jsr xmess
asc "'"
.byte cr,0
jsr xmess
asc "User prefix is '"
.byte 0
jsr mli
.byte mli_atlk
.addr UserPfxP
lda #>pagebuff
ldy #<pagebuff
jsr xprint_path
jsr xmess
asc "'"
.byte cr,0
jsr GetInfo
jsr xmess
.byte cr
asc "Get Info:"
.byte cr
asc " ThisNet = "
.byte 0
lda ThisNet+1
ldy ThisNet
jsr prWordAY
jsr crout
jsr xmess
asc " aBridge = $"
.byte 0
lda aBridge
jsr prbyte
jsr crout
jsr xmess
asc " Completion = "
.byte 0
lda compRtn+3
ldy compRtn+2
jsr prWordAY
lda compRtn+1
jsr prbyte
lda compRtn
jsr prbyte
jsr crout
jsr xmess
asc " Hardware ID = $"
.byte 0
lda hwID
jsr prbyte
jsr crout
jsr xmess
asc " ROMvers = "
.byte 0
lda ROMvers+1
ldy ROMvers
jsr prWordAY
jsr crout
jsr xmess
asc " Node number = $"
.byte 0
lda NodeNum
jsr prbyte
jsr crout
rts
UserPfxP:
.byte 0
.byte aFIUserPrefix
.addr 0
.byte 0
.addr pagebuff,0
ListZones:
jsr GetInfo
lda aBridge
sta zBridge
jsr mli
.byte mli_atlk
.addr ZoneListP
bcc ok
;;; brk 0
.byte 0
ok: jsr xmess
asc "Number of zones = "
.byte 0
lda numZones+1
ldy numZones
jsr prWordAY
jsr crout
jsr crout
lda numZones+1
ldy numZones
sta Count+1
sty Count
lda #>BigBuffer
ldy #<BigBuffer
sta myPtr+1
sty myPtr
Pr1Zone: lda Count+1
ldy Count
beq dunZones
lda myPtr+1
ldy myPtr
jsr xprint_path
jsr crout
jsr xcheck_wait
ldy #0
lda (myPtr),y
sec
adc myPtr
sta myPtr
bcc p_ok
inc myPtr+1
p_ok: lda Count
bne Count_ok
dec Count+1
Count_ok: dec Count
jmp Pr1Zone
dunZones: jsr crout
rts
ZoneListP: .byte 0
.byte aGetZoneList
zlErr: .addr 0
.addr 0,0
.addr $1000
.addr BigBuffer,0
zBridge: .byte 0
.addr 1 ;start index
.byte 4,5 ;retry interval, count
numZones:
.addr 0
.addr 0,0 ;reserved
ZoneP: .byte 0
.byte aGetMyZone
zErr: .addr 0
.addr 0,0
.addr pagebuff,0
.byte 2
.byte 20
.addr 0
InfoP: .byte 0
.byte aGetInfo
iErr: .addr 0
compRtn: .addr 0,0
ThisNet: .addr 0
aBridge: .byte 0
hwID: .byte 0
ROMvers: .addr 0
NodeNum: .byte 0
prWordAY:
tax
tya
pha
txa
pha
lda #'$'+$80
jsr cout
pla
jsr prbyte
pla
jmp prbyte
GetInfo: jsr mli
.byte mli_atlk
.addr InfoP
rts
DoRaw: lda #1
sta dirFlag
jsr mli
.byte mli_atlk
.addr PrinterP
lda dirFlag
and #%11011110
pha
lda #'r'+$80
jsr xgetparm_ch
tax
pla
cpx #0
bne rawYES
ora #%00100000
rawYES: sta dirFlag
jsr mli
.byte mli_atlk
.addr PrinterP
rts
DoPrinter:
lda #1
sta dirFlag
jsr mli
.byte mli_atlk
.addr PrinterP
lda #>pagebuff
ldy #<pagebuff
jsr xprint_path
jsr crout
lda #>pagebuff
ldy pagebuff ;not #pagebuff!
iny
jsr xprint_path
jsr crout
ldy pagebuff
iny
tya
sec
adc pagebuff,y
tay
lda #>pagebuff
jsr xprint_path
jsr crout
lda dirFlag
jsr prbyte
jmp crout
PrinterP:
.byte 0
.byte aPMSetPrinter
pErr: .addr 0
.addr pagebuff,0
dirFlag: .byte 1
.addr 4,4,20
DoLookup:
lda #1
sta pagebuff
lda #'='
sta pagebuff+1
lda #'k'
jsr xgetparm_ch
bcc use_Kind
lda #>Wildcard
ldy #<Wildcard
use_Kind:
sta str+1
sty str
ldy #64
copyKind:
lda (str),y
sta pagebuff+2,y
dey
bpl copyKind
lda #'z'
jsr xgetparm_ch
bcs UseMyZone
sta str+1
sty str
ldy #0
lda (str),y
bne ZoneOK
UseMyZone:
lda #>MyZone
ldy #<MyZone
sta str+1
sty str
ZoneOK: ldx pagebuff+2
ldy #0
copyZ: lda (str),y
sta pagebuff+3,x
iny
inx
cpy #64
bcc copyZ
jsr mli
.byte mli_atlk
.addr LookupP
jsr xmess
asc "Number of matches: $"
.byte 0
lda lkupCount
jsr prbyte
jsr crout
lda #>BigBuffer
ldy #<BigBuffer
sta myPtr+1
sty myPtr
Pr1Lkup: lda lkupCount
beq dunLkup
jsr PrintEntity
dec lkupCount
bne Pr1Lkup
dunLkup: rts
PrintEntity:
ldy #1
lda (myPtr),y
pha
dey
lda (myPtr),y
tay
pla
jsr prWordAY
lda #' '+$80
jsr cout
ldy #2
lda (myPtr),y
jsr aByte
ldy #3
lda (myPtr),y
jsr aByte
lda #5
jsr advance
ldy #0
lda #33
sec
sbc (myPtr),y
pha
jsr PrintPstr
pla
tax
@blanks: lda #' '+$80
jsr cout
dex
bne @blanks
jsr PrintPstr
ldy #0
lda (myPtr),y
jsr advance2
jsr crout
jmp xcheck_wait
PrintPstr:
lda myPtr+1
ldy myPtr
jsr xprint_path
ldy #0
lda (myPtr),y
advance2:
sec
.byte $24
advance: clc
adc myPtr
sta myPtr
bcc adv_ok
inc myPtr+1
adv_ok: rts
LookupP: .byte 0
.byte aLookupName
lkErr: .addr 0
.addr 0,0
lkName: .addr pagebuff,0
.byte 4,4
.addr 0 ;reserved
.addr $1000,BigBuffer,0
.byte 0 ;max matches
lkupCount:
.byte 0
Wildcard:
pstr "="
MyZone: pstr "*"
aByte: pha
lda #'$'+$80
jsr cout
pla
jsr prbyte
lda #' '+$80
jmp cout
ListSessions:
jsr mli
.byte mli_atlk
.addr ListSessP
jsr xmess
asc "Number of sessions: "
.byte 0
lda numSess
jsr prbyte
jsr crout
lda #>BigBuffer
ldy #<BigBuffer
sta myPtr+1
sty myPtr
prSessLp:
lda numSess
beq dunSess
jsr Pr1Sess
dec numSess
bne prSessLp
dunSess: rts
Pr1Sess: ldy #0
lda (myPtr),y
jsr aByte
iny
lda (myPtr),y
jsr xprint_sd
lda #' '+$80
jsr cout
ldy #$1e
lda (myPtr),y
pha
iny
lda (myPtr),y
tay
pla
jsr prWordAY
lda #' '+$80
jsr cout
ldy #1
lda (myPtr),y
lsr a
lda #'*'+$80
bcs isUserVol
lda #' '+$80
isUserVol:
jsr cout
lda #' '+$80
jsr cout
clc
lda myPtr
adc #2
tay
lda myPtr+1
adc #0
jsr xprint_path
jsr crout
jsr xcheck_wait
clc
lda myPtr
adc #32
sta myPtr
bcc myPtrOK3
inc myPtr+1
myPtrOK3:
rts
ListSessP:
.byte 0
.byte aFIListSess
.addr 0
.addr $1000,BigBuffer,0
numSess: .byte 0
DoNaming:
sta str+1
sty str
ldy #0
lda (str),y
beq showNaming
iny
lda (str),y
jsr xdowncase
cmp #'l'+$80
beq longNaming
cmp #'s'+$80
beq shortNaming
jsr xmess
asc "*** -nL or -nS expected"
.byte cr,0
jmp xerr
longNaming:
lda #$80
bmi setNaming
shortNaming:
lda #0
setNaming:
sta namingFlag
jsr mli
.byte mli_atlk
.addr NamingP
jsr xmess
asc "Naming is "
.byte 0
lda namingFlag
bmi nIsLong
jsr xmess
asc "short."
.byte cr,0
rts
nIsLong: jsr xmess
asc "long."
.byte cr,0
rts
rts ;%%% remove this
showNaming: lda #0
sta namingDir
beq setNaming
NamingP: .byte 0
.byte aFINaming
.addr 0
namingDir: .byte $80
namingFlag: .byte 0