home *** CD-ROM | disk | FTP | other *** search
- page
-
- ; RCP-ECHO.Z80
-
- ;=============================================================================
- ;
- ; E C H O T E X T T O S C R E E N A N D P R I N T E R
- ;
- ;=============================================================================
-
- ; Command: ECHO
- ; Function: Echo text to console or printer
-
- echo:
- xor a ; Lower case flag setting
-
- if upcase ; If upper case default
- dec a
- endif ;upcase
-
- ld (casefl),a ; Store flag in code below
-
- ld hl,tbuff+1 ; Point to first character
- call getchar ; Get first character (should be blank)
- ; If none, exit from routine
-
- if echolst
- call getchar ; Get first char after leading blank
- ld b,a ; Save first char as list output flag
- cp '$' ; Print flag?
- jr z,echo2 ; If so, go on
- dec hl ; Else backup one character
- endif ; Echolst
-
- ; LOOP TO ECHO CHARS
-
- echo2: call getchar
-
- if echolst
- cp ff ; Form feed?
- jr z,echo3
- endif ;echolst
-
- cp '^'
- jr nz,echo2a ; Not control character prefix
- call getchar ; Get next character
- and 1fh ; Convert to control character
- jr echo2d ; Echo it
-
- echo2a: cp cmdchar ; Case shift prefix?
- jr nz,echo2d ; No, normal echo
- call getchar ; Get next character
- cp ucasechar ; Up-shift character?
- jr z,echo2c ; Store non-zero value in case flag
-
- echo2b: cp lcasechar ; Lower-case character?
- jr nz,echo2d ; No, echo the character as is
- xor a ; Else, clear case flag
- echo2c: ld (casefl),a
- jr echo2 ; On to next character
-
- echo2d:
- call echout ; Send char
- jr echo2
-
- ; FORM FEED - SEND NEW LINE FOLLOWED BY FORM FEED IF PRINTER OUTPUT
-
- if echolst
- echo3:
- ld a,b ; Check for printer output
- cp '$'
- jr nz,echoff ; Send form feed normally if not printer
- call echonl ; Send new line
- ld a,ff ; Send form feed
- jr echout
-
- ; SEND FORM FEED CHAR TO CONSOLE
-
- echoff:
- ld a,ff ; Get char
- jr echo2d
- endif ;echolst
-
- ; END OF PRINT LOOP - CHECK FOR PRINTER TERMINATION
-
- echo4:
- if not echolst
-
- ret
-
- else
-
- ld a,b ; Get list mode flag
- cp '$'
- ret nz ; Done if no printer output
-
- ; OUTPUT A NEW LINE
-
- echonl:
- ld a,cr ; Output new line on printer
- call echout
- ld a,lf ; Fall thru to echout
-
- endif ;not echolst
-
- ; OUTPUT CHAR TO PRINTER OR CONSOLE
-
- echout:
- ld c,a ; Char in c
-
- cp 'A' ; If less than 'a'
- jr c,echouta ; Leave as is
- cp 'Z'+1 ; If greater than 'z'
- jr nc,echouta ; Leave as is
- add 20h ; Else convert to lower case
- echouta:
- ld d,a ; Save lower case version in d
- casefl equ $+1 ; Pointer for in-the-code modification
- ld a,0
- or a
- jr nz,echoutb ; If upper case selected, go on as is
- ld c,d ; Else substitute lower case version
- echoutb:
-
- push hl ; Save hl
- push bc ; Save bc
- ld de,0ch-3 ; Offset for console output
-
- if echolst
- ld a,b ; Check for printer output
- cp '$'
- jr nz,echout1
- inc de ; Add 3 for printer offset
- inc de
- inc de
- endif ;echolst
-
- ; OUTPUT CHAR IN C WITH BIOS OFFSET IN DE
-
- echout1:
- call biout ; Bios output
- pop bc ; Restore bc,hl
- pop hl
- ret
-
- ; Get a character from the command tail buffer
-
- getchar:
- ld a,(hl) ; Get character
- inc hl ; Point to next one
- or a ; Check for end of string
- ret nz ; If not end, return
- pop hl ; Else, clean up stack
- jr echo4 ; And exit from routine
-
- ; OUTPUT CHAR IN C TO BIOS WITH OFFSET IN DE
-
- biout:
- ld hl,(wboot+1) ; Get address of warm boot
- add hl,de ; Pt to routine
- jp (hl) ; Jump to it
-
- ; End RCP-ECHO.Z80
-
-