home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / z33rcp02.lbr / RCPECHO.LZB / RCPECHO.LIB
Encoding:
Text File  |  1993-10-25  |  3.5 KB  |  165 lines

  1.     page
  2.  
  3. ; RCP-ECHO.Z80
  4.  
  5. ;=============================================================================
  6. ;
  7. ;    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
  8. ;
  9. ;=============================================================================
  10.  
  11. ; Command:    ECHO
  12. ; Function:    Echo text to console or printer
  13.  
  14. echo:
  15.     xor    a        ; Lower case flag setting
  16.  
  17.      if    upcase        ; If upper case default
  18.     dec    a
  19.      endif ;upcase
  20.  
  21.     ld    (casefl),a    ; Store flag in code below
  22.  
  23.     ld    hl,tbuff+1    ; Point to first character
  24.     call    getchar        ; Get first character (should be blank)
  25.                 ; If none, exit from routine
  26.  
  27.      if    echolst
  28.     call    getchar        ; Get first char after leading blank
  29.     ld    b,a        ; Save first char as list output flag
  30.     cp    '$'        ; Print flag?
  31.     jr    z,echo2        ; If so, go on
  32.     dec    hl        ; Else backup one character
  33.      endif            ; Echolst
  34.  
  35. ; LOOP TO ECHO CHARS
  36.  
  37. echo2:    call    getchar
  38.  
  39.      if    echolst
  40.     cp    ff        ; Form feed?
  41.     jr    z,echo3
  42.      endif    ;echolst
  43.  
  44.     cp    '^'
  45.     jr    nz,echo2a    ; Not control character prefix
  46.     call    getchar        ; Get next character
  47.     and    1fh        ; Convert to control character
  48.     jr    echo2d        ; Echo it
  49.  
  50. echo2a:    cp    cmdchar        ; Case shift prefix?
  51.     jr    nz,echo2d    ; No, normal echo
  52.     call    getchar        ; Get next character
  53.     cp    ucasechar    ; Up-shift character?
  54.     jr    z,echo2c    ; Store non-zero value in case flag
  55.  
  56. echo2b:    cp    lcasechar    ; Lower-case character?
  57.     jr    nz,echo2d    ; No, echo the character as is
  58.     xor    a        ; Else, clear case flag
  59. echo2c:    ld    (casefl),a
  60.     jr    echo2        ; On to next character
  61.  
  62. echo2d:
  63.     call    echout        ; Send char
  64.     jr    echo2
  65.  
  66. ; FORM FEED - SEND NEW LINE FOLLOWED BY FORM FEED IF PRINTER OUTPUT
  67.  
  68.      if    echolst
  69. echo3:
  70.     ld    a,b        ; Check for printer output
  71.     cp    '$'
  72.     jr    nz,echoff    ; Send form feed normally if not printer
  73.     call    echonl        ; Send new line
  74.     ld    a,ff        ; Send form feed
  75.     jr    echout
  76.  
  77. ; SEND FORM FEED CHAR TO CONSOLE
  78.  
  79. echoff:
  80.     ld    a,ff        ; Get char
  81.     jr    echo2d
  82.      endif    ;echolst
  83.  
  84. ; END OF PRINT LOOP - CHECK FOR PRINTER TERMINATION
  85.  
  86. echo4:
  87.      if    not echolst
  88.  
  89.     ret
  90.  
  91.      else
  92.  
  93.     ld    a,b        ; Get list mode flag
  94.     cp    '$'
  95.     ret    nz        ; Done if no printer output
  96.  
  97. ; OUTPUT A NEW LINE
  98.  
  99. echonl:
  100.     ld    a,cr        ; Output new line on printer
  101.     call    echout
  102.     ld    a,lf        ; Fall thru to echout
  103.  
  104.      endif    ;not echolst
  105.  
  106. ; OUTPUT CHAR TO PRINTER OR CONSOLE
  107.  
  108. echout:
  109.     ld    c,a        ; Char in c
  110.  
  111.     cp    'A'        ; If less than 'a'
  112.     jr    c,echouta    ; Leave as is
  113.     cp    'Z'+1        ; If greater than 'z'
  114.     jr    nc,echouta    ; Leave as is
  115.     add    20h        ; Else convert to lower case
  116. echouta:
  117.     ld    d,a        ; Save lower case version in d
  118. casefl    equ    $+1        ; Pointer for in-the-code modification
  119.     ld    a,0
  120.     or    a
  121.     jr    nz,echoutb    ; If upper case selected, go on as is
  122.     ld    c,d        ; Else substitute lower case version
  123. echoutb:
  124.  
  125.     push    hl        ; Save hl
  126.     push    bc        ; Save bc
  127.     ld    de,0ch-3    ; Offset for console output
  128.  
  129.      if    echolst
  130.     ld    a,b        ; Check for printer output
  131.     cp    '$'
  132.     jr    nz,echout1
  133.     inc    de        ; Add 3 for printer offset
  134.     inc    de
  135.     inc    de
  136.      endif    ;echolst
  137.  
  138. ; OUTPUT CHAR IN C WITH BIOS OFFSET IN DE
  139.  
  140. echout1:
  141.     call    biout        ; Bios output
  142.     pop    bc        ; Restore bc,hl
  143.     pop    hl
  144.     ret
  145.  
  146. ; Get a character from the command tail buffer
  147.  
  148. getchar:
  149.     ld    a,(hl)        ; Get character
  150.     inc    hl        ; Point to next one
  151.     or    a        ; Check for end of string
  152.     ret    nz        ; If not end, return
  153.     pop    hl        ; Else, clean up stack
  154.     jr    echo4        ; And exit from routine
  155.  
  156. ; OUTPUT CHAR IN C TO BIOS WITH OFFSET IN DE
  157.  
  158. biout:
  159.     ld    hl,(wboot+1)    ; Get address of warm boot
  160.     add    hl,de        ; Pt to routine
  161.     jp    (hl)        ; Jump to it
  162.  
  163. ; End RCP-ECHO.Z80
  164.  
  165.