page ; RCP-LT.Z80 ;============================================================================= ; ; L I S T A N D T Y P E C O M M A N D S ; ;============================================================================= ;Command: LIST ;Modified: August 20, 1989, Gene Pizzetta -- now filters control chars from ; console output ;Function: Print out specified file on the LST: Device ;Forms: ; LIST Print file (NO Paging) ;Notes: ; The flags which apply to TYPE do not take effect with LIST if liston list: ; ; CHECK FOR WHEEL APPROVAL IF OPTION ENABLED call retsave ld a,0ffh ; Turn on printer flag jr type0 endif ;liston ;Command: TYPE ;Function: Print out specified file on the CON: Device ;Forms: ; TYPE Print file ; TYPE 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: ; ; CHECK FOR WHEEL APPROVAL IF OPTION ENABLED ; ; call retsave xor a ; Turn off printer flag ; ; ENTRY POINT FOR CPR LIST FUNCTION (LIST) ; type0: if liston ld (prflg),a ; Set flag endif ; Liston ld a,(fcb2+1) ; Get page flag ld (pgflg),a ; Save it as a flag ld a,1 ; Select dir files call getdir ; Allow ambiguous files (HL points to buffer) jp z,prfnf ; No files jr typex2 ; Entry point for successive files 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 list output or a ; 0=type jr z,typex1 ld a,cr ; Bol on printer call lcout ld a,ff ; Form feed the printer call lcout jr typex2 endif ; Liston typex1: ; LDA PAGCNT ; If we've just done so, push hl ld hl,(pagcnt) ld a,(hl) pop hl cp nlines-2 ; Don't type another call nz,pagebreak ; Page break message typex2: 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,prfnf ; Abort if error ; MVI A,NLINES-2 ; Set line count ; STA PAGCNT ld hl,(pagcnt) ld (hl),nlines-2 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 ; PUSH H ; Read next block push bc ld de,fcb1 ; Pt to fcb ld c,20 ; Read record call bdos or a ; Set flags pop bc ; POP H 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 ; type3x: cp cr ; Reset tab count? jr z,type4 cp lf ; Reset tab count? jr z,type4 cp tab ; Tab? jr z,type5 cp ' ' ; is it any other control char? jr c,type6 ; (yes, skip it) ; ; OUTPUT CHAR AND INCREMENT CHAR COUNT ; call lcout ; Output char inc b ; Increment tab count jr type6 ; ; OUTPUT OR AND RESET TAB COUNT ; type4: call lcout ; Output or ld b,0 ; Reset tab counter jr type6 ; ; TABULATE ; type5: ld a,' ' ; 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 call break ; Check for abort jp z,typex ; Skip jr type2 ; ; 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 jr nz,lc2 if liston ld a,(prflg) ; Output to lst:? or a ; Nz = yes jr nz,lc2 endif ; Liston ; ; CHECK FOR PAGING ; ; LXI H,PAGCNT ; Count down ld hl,(pagcnt) dec (hl) jr nz,lc2 ; Jump if not end of page ld (hl),nlines-2 ; Refill 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 ; call pagebreak ; Print page break message jp z,typex ; Z to skip lc2: pop bc ; Restore regs pop hl ret ; ; PRINT PAGE BREAK MESSAGE AND GET USER INPUT ; ABORT IF ^C, RZ IF ^X ; pagebreak: 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 push af call crlf ; New line pop af jp break1 ; ; End RCP-LT.Z80 .