home *** CD-ROM | disk | FTP | other *** search
- ; srscrn.z - screen routines for displaying status of a transfer
-
- .incl "c:termcap"
-
- .extern initsc ; initialise everything
- initsc:
- push hl
- ld hl,0
- ld (packet),hl
- ld (terr),hl
- ld (perr),hl ; clear the variables
- call clear ; and the screen
- ld hl,30
- call moveto ; set up for the title
- pop hl
- call prtslp ; print protocol type
- ld hl,m1
- .dseg
- m1: db ' File Transfer\0'
- .cseg
- call prtslp ; finish title
- call mtprt
- dw [5 << 8] + 10
- db 'Packet:\0'
- call mtprt
- dw [5 << 8] + 26
- db '0\0'
- call mtprt
- dw [7 << 8] + 10
- db 'Packet Errors: 0\0'
- call mtprt
- dw [9 << 8] + 10
- db 'Total Errors: 0\0'
- ret ; print rest of screen background
-
- .extern initsn ; finish setting up screen for send
- initsn:
- call mtprt
- dw [3 << 8] + 10
- db 'Sending:\0' ; direction for where filename goes
- call mtprt
- dw [11 << 8] + 10
- db 'Sent:\0' ; set up for K transferred printout
- ret
-
- .extern initrc ; finish setting up screen for receive
- initrc:
- call mtprt
- dw [3 << 8] + 10
- db 'Receiving:\0' ; direction for where filename goes
- call mtprt
- dw [11 << 8] + 10
- db 'Received:\0' ; and for K transferred
- ret
-
- .extern pktok ; register a good packet
- pktok:
- ld hl,kcnt ; point at k count flag
- ld a,(hl) ; get value
- or a
- jr z,nokprt ; not set, so don't print
- dec (hl) ; clear flag
- call one_k ; and print a K
- nokprt: ld hl,dcnt ; look at count till we need clear
- ld a,(hl)
- or a
- jr z,nocdg ; no clear needed - bypass
- dec (hl)
- jr nz,nocdg ; not yet ..... skip it
- call diag
- db 0 ; OK there goes the message
- xor a
- ld (dcnt),a ; and reset dcnt back to zero
- nocdg: ld hl,(perr)
- ld a,h
- or l
- jr z,ncperr
- call mtprt
- dw [7 << 8] + 26
- db '0 \0' ; reset packet error count on screen
- ld hl,0
- ld (perr),hl ; and in memory
- ncperr: ld a,(qcount)
- or a
- ret nz
- ld hl,[5 << 8] + 26
- call moveto ; moveto where packet number goes
- ld hl,(packet)
- inc hl
- ld (packet),hl ; bump
- jp decout ; and print
-
- .extern pkterr ; register a bad packet
- pkterr:
- ld hl,[7 << 8] + 26
- call moveto
- ld hl,(perr)
- inc hl
- ld (perr),hl ; bump and print packet errors
- call decout
- ld hl,[9 << 8] + 26
- call moveto
- ld hl,(terr)
- inc hl
- ld (terr),hl ; same for total errors
- jp decout
-
- .extern prfile ; print the filename from auxfcb
- prfile:
- push hl
- ld a,d
- and e
- inc a ; check if there's a real size
- jr z,noprte ; skip if not - this is receive
- push de
- call mtprt
- dw [11 << 8] + 34
- db 'out of \0' ; and file size print
- pop hl
- call decout ; and print it
- ld hl,m2
- call prtslp ; and the 'K'
- noprte: ld hl,0
- ld (kxfer),hl ; reset count of K transferred
- call mtprt
- dw [11 << 8] + 26
- db '0' ; and print 0K to start things
- m2: db 'K \0'
- ld hl,[3 << 8] + 26
- call moveto ; move to where filename gets printed
- pop hl ; get fcb address to hl
- call prtfl ; print the filename
- ld b,14 ; 14 chars to nuke anything left over
- jr cleol
-
- .extern prtfl
- prtfl:
- ld c,(hl) ; get user number to c
- inc hl
- ld a,(hl) ; get drive code
- inc hl ; point at first char of name
- push hl ; save fcb address
- push bc ; save user number
- add a,'@' ; convert to a letter
- ld c,a
- call scrout ; and print it
- pop hl ; user number back to l
- call decob ; and print it
- ld c,':'
- call scrout ; add a ':'
- pop hl
- nodrv: ld b,8
- call pfilnm ; print the name portion
- ld a,(hl)
- cp ' ' ; check for an extension
- ret z ; no - all done
- push hl
- ld c,'.'
- call scrout ; print a '.'
- pop hl
- ld b,3
-
- pfilnm: ld a,(hl) ; get a char from fcb
- inc hl
- push hl
- push bc
- and 0x7f ; ditch attribute bit
- cp ' ' ; is it printable?
- ld c,a
- call nz,scrout ; print if so
- pop bc
- pop hl
- djnz pfilnm ; loop till all done
- ret
-
- .extern diag
- diag:
- ld a,3
- ld (dcnt),a ; set so that 3 packets later we'll clear
- ld hl,[14 << 8] + 10
- call moveto ; move to where messages go
- pop hl ; string address to hl
- push hl ; back on stack
- call prtslp ; print it
- pop de ; restore start to de
- push hl ; save end
- or a
- sbc hl,de ; get length
- ld a,50
- sub l ; get 50 - length
- ld b,a ; to b
- cleol: ld a,(tcbits)
- and b_cleol ; clear to eol possible
- jp z,cleol ; do it if so
- ld c,' ' ; put a space in c
- cleolp: push bc
- call scrout ; and print it
- pop bc
- djnz cleolp ; till count runs out
- ret
-
- .extern one_k
- one_k:
- ld a,(qcount)
- or a
- ret nz
- ld hl,[11 << 8] + 26
- call moveto ; move to where K printout goes
- ld hl,(kxfer)
- inc hl
- ld (kxfer),hl ; add one to count
- call decout ; print the number
- ld c,'K'
- jp scrout ; and add a 'K'
-
- .dseg
- .extern kcnt
- kcnt: db 0
-
- .useg
- dcnt: ds 1
- packet: ds 2
- terr: ds 2
- perr: ds 2
- kxfer: ds 2