home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / ZCPR3 / ECHO.MAC < prev    next >
Text File  |  2000-06-30  |  4KB  |  181 lines

  1. ;
  2. ; Program: ECHO
  3. ; Author: Richard Conn
  4. ; Version: 1.0
  5. ; Date: 22 Mar 84
  6. ;
  7. version    equ    10
  8. z3env    SET    0F400H    ;base address of ZCPR3 Environment Descriptor
  9.  
  10. ;
  11. ;    The purpose of ECHO is two-fold:
  12. ;        1) to provide a convenient way of sending messages to
  13. ; the console during the execution of a command file or multiple command
  14. ; line; for example:
  15. ;
  16. ;    echo Assembling;m80 =$1;^E
  17. ;        if input;echo Linking;l80 /P:100,$1,A:SYSLIB/S,$1/N,/E;fi
  18. ;
  19. ; as a single multiple command line will print the informative messages of
  20. ; "ASSEMBLING" and "LINKING" during the respective phases of the commands
  21. ;
  22. ;        2) to provide a convenient way to send escape sequences
  23. ; to the CRT and printer; ECHO does no character translation, using direct
  24. ; BIOS calls, so sequences used to program intelligent devices can be
  25. ; issued by running echo and typing in those sequences
  26. ;
  27.  
  28. ;
  29. ; Z3LIB and SYSLIB References
  30. ;
  31.     ext    z3init,print
  32.  
  33. ;
  34. ; Equates
  35. ;
  36. wboot    equ    00h
  37. tbuff    equ    80h
  38. fcb1    equ    5ch
  39. cr    equ    0dh
  40. ff    equ    0ch
  41. lf    equ    0ah
  42.  
  43. ;
  44. ; Environment Definition
  45. ;
  46.     if    z3env ne 0
  47. ;
  48. ; External ZCPR3 Environment Descriptor
  49. ;
  50.     jmp    start
  51.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  52.     db    1    ;External Environment Descriptor
  53. z3eadr:
  54.     dw    z3env
  55. start:
  56.     lhld    z3eadr    ;pt to ZCPR3 environment
  57. ;
  58.     else
  59. ;
  60. ; Internal ZCPR3 Environment Descriptor
  61. ;
  62.     MACLIB    Z3BASE.LIB
  63.     MACLIB    SYSENV.LIB
  64. z3eadr:
  65.     jmp    start
  66.     SYSENV
  67. start:
  68.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  69.     endif
  70.  
  71. ;
  72. ; Start of Program -- Initialize ZCPR3 Environment
  73. ;
  74.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  75.  
  76. ;
  77. ; Check for Help
  78. ;
  79.     lda    fcb1+1    ;get first char
  80.     cpi    '/'    ;if slash, then print help
  81.     jnz    echo
  82.     call    print
  83.     db    'ECHO, Version '
  84.     db    (version/10)+'0','.',(version mod 10)+'0',cr,lf
  85.     db    'Syntax:',cr,lf
  86.     db    '    ECHO text    <-- send text to console',cr,lf
  87.     db    '    ECHO $text    <-- send text to printer',cr,lf
  88.     db    '    ECHO $text^L    <-- send text to printer',cr,lf
  89.     db    '                terminated by CR,LF,FF'
  90.     db    0
  91.     ret
  92. ;
  93. ; Run ECHO Routine
  94. ;
  95. ECHO:
  96.     LXI    H,TBUFF+1    ;PT TO FIRST CHAR
  97. ECHO1:
  98.     MOV    A,M        ;SKIP LEADING SPACES
  99.     INX    H        ;PT TO NEXT
  100.     CPI    ' '
  101.     JZ    ECHO1
  102.     MOV    B,A        ;CHAR IN B
  103.     CPI    '$'        ;PRINT FLAG?
  104.     JZ    ECHO2
  105.     DCX    H        ;PT TO CHAR
  106. ;
  107. ; LOOP TO ECHO CHARS
  108. ;
  109. ECHO2:
  110.     MOV    A,M        ;GET CHAR
  111.     ORA    A        ;EOL?
  112.     JZ    ECHO4
  113.     CPI    FF        ;FORM FEED?
  114.     JZ    ECHO3
  115. ECHO2C:
  116.     CALL    ECHOUT        ;SEND CHAR
  117.     INX    H        ;PT TO NEXT
  118.     JMP    ECHO2
  119. ;
  120. ; FORM FEED - SEND NEW LINE FOLLOWED BY FORM FEED IF PRINTER OUTPUT
  121. ;
  122. ECHO3:
  123.     MOV    A,B        ;CHECK FOR PRINTER OUTPUT
  124.     CPI    '$'
  125.     JNZ    ECHOFF        ;SEND FORM FEED NORMALLY IF NOT PRINTER
  126.     CALL    ECHONL        ;SEND NEW LINE
  127.     MVI    A,FF        ;SEND FORM FEED
  128.     JMP    ECHOUT
  129. ;
  130. ; SEND FORM FEED CHAR TO CONSOLE
  131. ;
  132. ECHOFF:
  133.     MVI    A,FF        ;GET CHAR
  134.     JMP    ECHO2C
  135. ;
  136. ; END OF PRINT LOOP - CHECK FOR PRINTER TERMINATION
  137. ;
  138. ECHO4:
  139.     MOV    A,B        ;CHECK FOR PRINTER OUTPUT
  140.     CPI    '$'
  141.     RNZ            ;DONE IF NO PRINTER OUTPUT
  142. ;
  143. ; OUTPUT A NEW LINE
  144. ;
  145. ECHONL:
  146.     MVI    A,CR        ;OUTPUT NEW LINE ON PRINTER
  147.     CALL    ECHOUT
  148.     MVI    A,LF        ;FALL THRU TO ECHOUT
  149. ;
  150. ; OUTPUT CHAR TO PRINTER OR CONSOLE
  151. ;
  152. ECHOUT:
  153.     MOV    C,A        ;CHAR IN C
  154.     PUSH    H        ;SAVE HL
  155.     PUSH    B        ;SAVE BC
  156.     LXI    D,0CH-3        ;OFFSET FOR CONSOLE OUTPUT
  157.     MOV    A,B        ;CHECK FOR PRINTER
  158.     CPI    '$'
  159.     JNZ    ECHOUT1
  160.     INX    D        ;ADD 3 FOR PRINTER OFFSET
  161.     INX    D
  162.     INX    D
  163. ;
  164. ; OUTPUT CHAR IN C WITH BIOS OFFSET IN DE
  165. ;
  166. ECHOUT1:
  167.     CALL    BIOUT        ;BIOS OUTPUT
  168.     POP    B        ;RESTORE BC,HL
  169.     POP    H
  170.     RET
  171.  
  172. ;
  173. ; OUTPUT CHAR IN C TO BIOS WITH OFFSET IN DE
  174. ;
  175. BIOUT:
  176.     LHLD    WBOOT+1        ;GET ADDRESS OF WARM BOOT
  177.     DAD    D        ;PT TO ROUTINE
  178.     PCHL            ;JUMP TO IT
  179.  
  180.     end
  181.