home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / z3util / echo14.lbr / RCPECHO.LZB / RCPECHO.LIB
Encoding:
Text File  |  1991-10-10  |  4.0 KB  |  171 lines

  1. ; Library:    RCPECHO for Z34RCP
  2. ; Command:    ECHO
  3. ; Function:    Echo text to console or printer
  4. ; Version:    1.0b
  5. ; Author:    Gene Pizzetta
  6. ; Date:        November 3, 1990
  7. ; Mods:        Added six more bytes which allow sending a delete (rub-out)
  8. ;        character using %D escape sequence.
  9. ;
  10. ; Version:    1.0a
  11. ; Author:    Gene Pizzetta
  12. ; Date:        October 21, 1990
  13. ; Mods:        Added six bytes which allow sending a semi-colon character
  14. ;        using %S escape sequence.
  15. ;
  16. ; Version:    1.0
  17. ; Author:    Carson Wilson
  18. ; Date:        June 15, 1988
  19. ;
  20. ECHO:    xor    a        ; Lower case/printer off flag setting
  21.     ld    (crtfl),a    ; Printer off by default
  22.  
  23.  IF UPCASE            ; If upper case default
  24.     dec    a
  25.  ENDIF ; UPCASE
  26.  
  27.     ld    (casefl),a    ; Store flag in code below
  28.     ld    hl,tbuff+1    ; Point to first character
  29.     call    getchar        ; Get first character (should be blank)
  30.                 ; If none, exit from routine
  31.  
  32. ; Loop to echo chars
  33.  
  34. echo2:    call    getchar
  35.  
  36.  IF ECHOLST
  37.     cp    ff        ; Form feed?
  38.     jr    z,echo3
  39.  ENDIF    ; ECHOLST
  40.  
  41.     cp    '^'
  42.     jr    nz,echo2a    ; Not control character prefix
  43.     call    getchar        ; Get next character
  44.     and    1fh        ; Convert to control character
  45.     jr    echo2e        ; Echo it
  46.  
  47. echo2a:    cp    cmdchar        ; Case shift prefix?
  48.     jr    nz,echo2e    ; No, normal echo
  49.     call    getchar        ; Get next character
  50.  
  51.  IF ECHOLST
  52.     cp    prtchar        ; Turn printer on?
  53.     jr    z,echo2b    ; Store non-zero in crt flag
  54.     cp    crtchar        ; Turn printer off?
  55.     jr    nz,echo2c    ; No, test for shift characters
  56.     xor    a        ; Yes, clear crt flag
  57. echo2b:    ld    (crtfl),a
  58.     jr    echo2        ; On to next character
  59.  
  60. echo2c:    
  61.  ENDIF    ; ECHOLST
  62.     cp    ucasechar    ; Up-shift character?
  63.     jr    z,echo2d    ; Store non-zero value in case flag
  64.     cp    lcasechar    ; Lower-case character?
  65.     jr    nz,echo2f    ; No, echo the character as is
  66.     xor    a        ; Else, clear case flag
  67. echo2d:    ld    (casefl),a
  68.     jr    echo2        ; On to next character
  69. ;
  70. ; Added by GP so we can send all ASCII characters
  71. echo2f:    cp    'S'        ; request for semi-colon?
  72.     jr    nz,echo2g    ; (no)
  73.     ld    a,';'        ; print semi-colon
  74.     jr    echo2e
  75. echo2g:    cp    'D'        ; request for delete char?
  76.     jr    nz,echo2e
  77.     ld    a,07Fh        ; print DEL
  78. ;
  79. echo2e:    call    echout        ; Send char
  80.     jr    echo2
  81.  
  82. ; Form feed - send new line followed by form feed if printer output
  83.  
  84.  IF ECHOLST
  85. echo3:    ld    a,(crtfl)    ; Check for printer output
  86.     or    a        ; Non-zero?
  87.     jr    z,echoff    ; No, send form feed normally
  88.     call    echonl        ; Send new line
  89.     ld    a,ff        ; Send form feed
  90.     jr    echout
  91.  
  92. ; Send form feed char to console
  93.  
  94. echoff:    ld    a,ff        ; Get char
  95.     jr    echo2e
  96.  ENDIF    ; ECHOLST
  97.  
  98. ; End of print loop - check for printer termination
  99.  
  100. echo4:
  101.  IF NOT ECHOLST
  102.     ret
  103.  
  104.  ELSE
  105.     ld    a,(crtfl)    ; Get list mode flag
  106.     or    a
  107.     ret    z        ; Done if no printer output
  108.  
  109. ; Output a new line
  110.  
  111. echonl:    ld    a,cr        ; Output new line on printer
  112.     call    echout
  113.     ld    a,lf        ; Fall thru to echout
  114.  ENDIF    ; NOT ECHOLST
  115.  
  116. ; Output char to printer or console
  117.  
  118. echout:    ld    c,a        ; Char in c
  119.     cp    'A'        ; If less than 'A'
  120.     jr    c,echouta    ; Leave as is
  121.     cp    'Z'+1        ; If greater than 'Z'
  122.     jr    nc,echouta    ; Leave as is
  123.     add    20h        ; Else convert to lower case
  124. echouta:
  125.     ld    d,a        ; Save lower case version in d
  126. casefl    equ    $+1        ; Pointer for in-the-code modification
  127.     ld    a,0
  128.     or    a        ; Upper case?
  129.     jr    nz,echoutb    ; If upper case selected, go on as is
  130.     ld    c,d        ; Else substitute lower case version
  131. echoutb:
  132.     push    hl        ; Save hl
  133.     push    bc        ; Save bc
  134.     ld    de,0ch-3    ; Offset for BIOS console output
  135.  
  136.  IF ECHOLST
  137. crtfl    equ    $+1
  138.     ld    a,0
  139.     or    a        ; Printer?
  140.     jr    z,echout1    ; No
  141.     inc    de        ; Offset for BIOS printer output
  142.     inc    de
  143.     inc    de
  144.  ENDIF    ; ECHOLST
  145.  
  146. ; Output char in C with BIOS offset in DE
  147.  
  148. echout1:
  149.     call    biout        ; Bios output
  150.     pop    bc        ; Restore bc,hl
  151.     pop    hl
  152.     ret
  153.  
  154. ; Get a character from the command tail buffer
  155.  
  156. getchar:
  157.     ld    a,(hl)        ; Get character
  158.     inc    hl        ; Point to next one
  159.     or    a        ; Check for end of string
  160.     ret    nz        ; If not end, return
  161.     pop    hl        ; Else, clean up stack
  162.     jr    echo4        ; And exit from routine
  163.  
  164. ; Output char in C to BIOS with offset in DE
  165.  
  166. biout:    ld    hl,(wboot+1)    ; Get address of warm boot
  167.     add    hl,de        ; Pt to routine
  168.     jp    (hl)        ; Jump to it
  169.  
  170. ; End RCPECHO.LIB
  171.