84 lines
1.8 KiB
Plaintext
84 lines
1.8 KiB
Plaintext
; send.z - protocol send code for qterm
|
|
|
|
.var ipbuf 0x80
|
|
|
|
.extern send
|
|
send:
|
|
call pmode
|
|
inc hl
|
|
jr z,modokk
|
|
cp 'x'
|
|
jr z,modok ; k & x are the only legal modes (for now)
|
|
|
|
.extern moderr
|
|
moderr:
|
|
call ilprt
|
|
db 'Unknown mode\r\n\0'
|
|
ret
|
|
|
|
modokk:
|
|
ld a,(hl)
|
|
or 0x20
|
|
cp 'f'
|
|
jr z,arefil
|
|
cp 'l'
|
|
jr z,arefil
|
|
xor a
|
|
modok: push hl ; save pointer
|
|
push af ; and mode character
|
|
call unbyp ; step over flags
|
|
call scnswl ; parse names
|
|
ld hl,(fnbspt)
|
|
ld de,work
|
|
pop af
|
|
sbc hl,de
|
|
pop hl
|
|
jr nz,arefil ; any files found?
|
|
call ilprt ; tell if not
|
|
db 'No files to send\r\n\0'
|
|
ret
|
|
arefil: ex af,af'
|
|
ld a,(xfersz) ; get proposed transfer size
|
|
ld e,4
|
|
sizlp: sla e ; shift size around in e
|
|
rra
|
|
jr nc,sizlp ; loop till we hit a bit
|
|
ld a,e
|
|
ld (btxf),a ; and save it away
|
|
ex af,af'
|
|
cp 'x' ; Kermit or Xmodem
|
|
jr z,sendx
|
|
call sendk ; send kermit
|
|
jr xferdj ; and unwrap
|
|
sendx: call xmflgs ; parse xmodem flags
|
|
call initx
|
|
call initsn ; set up screen
|
|
ld hl,(mdm7b)
|
|
ld a,h
|
|
or l ; batch send?
|
|
jr z,nosb ; no - just send one file
|
|
ld a,(longpk)
|
|
ld (olp),a ; save 1K packet flag
|
|
sblp: call srnxt
|
|
jr z,doneb ; loop till all names done
|
|
call xsfile ; send a file
|
|
jr nz,xferdj ; terminate on an error
|
|
ld a,(olp)
|
|
ld (longpk),a ; reset 1K packet flag
|
|
jr sblp
|
|
doneb: xor a
|
|
ld (auxfcb + 2),a ; set flag for end of transfer
|
|
jr xjsf
|
|
nosb: call srnxt ; single file send - get it
|
|
jr nz,xjsf ; send it if it exists
|
|
call can3 ; kill the far end
|
|
xor a
|
|
inc a
|
|
jr xferdj ; and return error
|
|
xjsf: call xsfile ; send single file or batch close
|
|
xferdj: push af
|
|
ld a,(obtxf)
|
|
ld (btxf),a ; reset transfer size to whatever
|
|
pop af
|
|
jp xferd
|
|
|