mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
5.8 KiB
256 lines
5.8 KiB
page
|
|
|
|
; Library: RCPLT for Z34RCP
|
|
; Author: Carson Wilson
|
|
; Version: 1.1
|
|
; Date: August 26, 1989
|
|
; Changes: Some WordStar characters caused garbage to appear on the
|
|
; screen. Now filters control characters other than CR,
|
|
; TAB, and LF. Thanks to Gene Pizzetta for this suggestion.
|
|
;
|
|
; Author: Carson Wilson
|
|
; Version: 1.0
|
|
; Date: June 15, 1988
|
|
;
|
|
; Commands: LIST and TYPE
|
|
|
|
; ----------------------------------------------------------------
|
|
;
|
|
; Command: LIST
|
|
; Function: Print out specified file on the LST: Device
|
|
; Forms:
|
|
; LIST Do form feed
|
|
; LIST <afn> Print file(s) (NO Paging)
|
|
; Notes:
|
|
; The flags which apply to TYPE do not take effect with LIST
|
|
; The tab expansion code is required for LST: output.
|
|
|
|
if liston
|
|
list:
|
|
ld a,(fcb1+1) ; Get filename or ' ' from command
|
|
ld (prflg),a ; List flag (A can't be 0)
|
|
cp ' ' ; Null command?
|
|
jp z,lstff ; Yes, do form feed and return
|
|
jr type0 ; No, send file to LST:
|
|
endif ;liston
|
|
|
|
; --------------------------------------------------------------------
|
|
;
|
|
; Command: TYPE
|
|
; Function: Print out specified file on the CON: Device
|
|
; Forms:
|
|
; TYPE <afn> Print file
|
|
; TYPE <afn> P Print file with paging flag
|
|
; Notes:
|
|
; The flag PGDFLG defines the letter which toggles the paging
|
|
; facility (P in the forms section above)
|
|
; The flag PGDFLT determines if TYPE is to page by default
|
|
; (PGDFLT=TRUE if TYPE pages by default); combined with
|
|
; PGDFLG, the following events occur --
|
|
; If PGDFLT = TRUE, PGDFLG turns OFF paging
|
|
; If PGDFLT = FALSE, PGDFLG turns ON paging
|
|
|
|
type:
|
|
if liston
|
|
xor a ; Turn off printer flag
|
|
ld (prflg),a ; Set flag
|
|
endif ; Liston
|
|
|
|
; Entry point for list function (LIST)
|
|
|
|
type0: call retsave ; Save return address
|
|
ld a,(fcb2+1) ; Get page flag from command
|
|
ld (pgflg),a ; Store it
|
|
ld a,1 ; Select dir files
|
|
call getdir ; Allow ambiguous files (HL points to buffer)
|
|
jp z,noflerr ; EH no files error
|
|
ld a,(lins) ; Set line count
|
|
ld (pagcnt),a
|
|
jr typex1
|
|
|
|
; Entry point for successive files
|
|
|
|
typex0: pop hl ; Balance stack for skip
|
|
pop hl ; ..to next file command (^X)
|
|
typex: ld hl,(nxtfile) ; Get ptr to next file
|
|
ld a,(hl) ; Any files?
|
|
or a
|
|
jp z,exit
|
|
|
|
if liston
|
|
ld a,(prflg) ; Check for lst: output
|
|
or a ; 0=type
|
|
jr z,typex1
|
|
ld a,cr ; Bol on printer
|
|
call lcout
|
|
call lstff ; Form feed the printer
|
|
; fall thru
|
|
endif ; Liston
|
|
|
|
; Entry point for 1st file
|
|
typex1: ld de,fcb1+1 ; Copy into fcb1
|
|
ld b,11 ; 11 bytes
|
|
call blkmov
|
|
ld (nxtfile),hl ; Set ptr to next file
|
|
call initfcb1 ; Init fcb1
|
|
ld c,15 ; Open file
|
|
call bdos
|
|
inc a ; Set error flag
|
|
jp z,noflerr ; EH no files error
|
|
ld a,cr ; New line
|
|
call lcout
|
|
ld a,lf
|
|
call lcout
|
|
ld bc,080h ; Set char position and tab count
|
|
; (b=0=tab, c=080h=char position)
|
|
|
|
; Main loop for loading next block
|
|
|
|
type2: ld a,c ; Get char count
|
|
cp 80h
|
|
jr c,type3
|
|
call break
|
|
push bc ; Read next block
|
|
ld de,fcb1 ; Pt to fcb
|
|
ld c,20 ; Read record
|
|
call bdos
|
|
or a ; Set flags
|
|
pop bc
|
|
jr nz,typex ; End of file?
|
|
ld c,0 ; Set char count
|
|
ld hl,tbuff ; Pt to first char
|
|
|
|
; Main loop for printing chars in tbuff
|
|
|
|
type3: ld a,(hl) ; Get next char
|
|
and 7fh ; Mask out msb
|
|
cp 1ah ; End of file (^z)?
|
|
jr z,typex ; Next file if so
|
|
|
|
; Output char to CON: or LST: device with tabulation
|
|
|
|
cp cr ; Reset tab count?
|
|
jr z,type4
|
|
cp lf ; Reset tab count?
|
|
jr z,type4
|
|
cp tab ; Tab?
|
|
jr z,type5
|
|
cp ' ' ; Skip other ctls.
|
|
jr c,type6
|
|
|
|
; Output char and increment char count
|
|
|
|
call lcout ; Output char
|
|
inc b ; Increment tab count
|
|
jr type6
|
|
|
|
; Output <CR> or <LF> and reset tab count
|
|
|
|
type4: call lcout ; Output <cr> or <lf>
|
|
ld b,0 ; Reset tab counter
|
|
jr type6
|
|
|
|
; Tabulate
|
|
|
|
type5: ld a,' ' ; <sp>
|
|
call lcout
|
|
inc b ; Incr pos count
|
|
ld a,b
|
|
and 7
|
|
jr nz,type5
|
|
|
|
; Continue processing
|
|
|
|
type6:
|
|
inc c ; Increment char count
|
|
inc hl ; Pt to next char
|
|
jr type2
|
|
|
|
; Send a formfeed to LST:. Assumes PRFLG <> 0.
|
|
|
|
lstff:
|
|
ld a,ff ; formfeed
|
|
; fall thru
|
|
|
|
; Send output to LST: or CON:, as per the flag
|
|
; Return with Z if abort
|
|
|
|
lcout: push hl ; Save regs
|
|
push bc
|
|
ld e,a ; Char in e
|
|
ld c,2 ; Output to con:
|
|
|
|
if liston
|
|
prflg equ $+1 ; Pointer for in-the-code modification
|
|
ld a,0 ; 2nd byte is the print flag
|
|
or a ; 0=type
|
|
jr z,lc1
|
|
ld c,5 ; Output to lst:
|
|
endif ; Liston
|
|
|
|
lc1: push de ; Save char
|
|
call bdos ; Output char in e
|
|
pop de ; Get char
|
|
ld a,e
|
|
cp lf ; New line?
|
|
jr nz,lc2 ; No, return
|
|
call break ; Check for abort
|
|
jp z,typex0 ; Skip if ^X
|
|
|
|
if liston
|
|
ld a,(prflg) ; Output to lst:?
|
|
or a ; Nz = yes
|
|
jr nz,lc2
|
|
endif ; Liston
|
|
|
|
; New line, so check for paging
|
|
|
|
ld hl,pagcnt
|
|
dec (hl)
|
|
jr nz,lc2 ; Jump if not end of page
|
|
ld a,(lins)
|
|
ld (hl),a ; Reset counter
|
|
pgflg equ $+1 ; Pointer to in-the-code buffer
|
|
ld a,0 ; 2nd byte is the paging flag
|
|
cp pgdflg ; Page default override option wanted?
|
|
|
|
if pgdflt ; If paging is default
|
|
jr z,lc2 ; Pgdflg means no paging
|
|
else
|
|
jr nz,lc2 ; Pgdflg means page
|
|
endif ; Pgdflt
|
|
|
|
push hl ; Save hl
|
|
call print
|
|
db cr,lf,' Typing',' '+80h
|
|
ld hl,fcb1+1 ; Print file name
|
|
call prfn
|
|
call dash ; Print dash
|
|
call conin ; Get input
|
|
pop hl ; Restore hl
|
|
call break1 ; Set Z flag or abort
|
|
push af ; Save results
|
|
|
|
if typecls and clson
|
|
call cls ; Clear between screens
|
|
else
|
|
call crlf
|
|
endif
|
|
|
|
pop af ; Get results
|
|
jp z,typex0 ; Control-X, so skip to next file
|
|
cp ctrlz ; If Control-Z,
|
|
jr nz,lc2
|
|
ld a,pgdflg ; Switch to non-default
|
|
ld (pgflg),a ; ..paging mode
|
|
lc2: pop bc ; Restore regs
|
|
pop hl
|
|
ret
|
|
|
|
; Storage for line counter
|
|
|
|
pagcnt:
|
|
ds 1
|
|
|
|
; End RCPLT.LIB
|
|
|