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 / CPM / ZCPR2 / ECHO.MAC < prev    next >
Text File  |  2000-06-30  |  8KB  |  313 lines

  1. ;
  2. ;  PROGRAM:  ECHO
  3. ;  AUTHOR:  RICHARD CONN
  4. ;  VERSION:  1.3
  5. ;  DATE:  17 AUG 83
  6. ;  PREVIOUS VERSIONS:  1.2 (21 JUN 83), 1.1 (6 JAN 83), 1.0 (10 DEC 82)
  7. ;
  8. VERS    EQU    13
  9.  
  10. ;
  11. ;    This program is Copyright (c) 1982, 1983 by Richard Conn
  12. ;    All Rights Reserved
  13. ;
  14. ;    ZCPR2 and its utilities, including this one, are released
  15. ; to the public domain.  Anyone who wishes to USE them may do so with
  16. ; no strings attached.  The author assumes no responsibility or
  17. ; liability for the use of ZCPR2 and its utilities.
  18. ;
  19. ;    The author, Richard Conn, has sole rights to this program.
  20. ; ZCPR2 and its utilities may not be sold without the express,
  21. ; written permission of the author.
  22. ;
  23.  
  24.  
  25. ;
  26. ;    ECHO is used to echo the command line to the screen.  It is invoked
  27. ; in the following ways:
  28. ;        ECHO            <-- print Help Message
  29. ;        ECHO //            <-- print Help Message
  30. ;        ECHO text        <-- print text
  31. ;        ECHO /po text        <-- print text on printer
  32. ;
  33. ;    This seems like a trivial program, but it buys the user one key thing:
  34. ; for ZCPR2 use, a message may be stored in the multiple command line buffer
  35. ; by using ECHO, so that programs like STARTUP can print a welcome message
  36. ; after they have run.  For STARTUP in particular, a sample command line
  37. ; would be:
  38. ;
  39. ;        ioloader;ld ld;tinit;echo WELCOME TO ZCPR II
  40. ;
  41. ;    This line runs IOLOADER, which loads the redirectable I/O devices,
  42. ; followed by LD LD, which loads a named directory into memory, and TINIT,
  43. ; which initializes a TVI 950 terminal (function keys, user line, etc).
  44. ; When all is done, TINIT will have cleared the screen and ECHO will have
  45. ; printed its message.
  46. ;
  47. ;    A second noted use for ECHO is in performing miscellaneous printer
  48. ; functions.  The /P option allows the user to send any text to the printer,
  49. ; and this text can include control characters.  This can be used to set
  50. ; printer controls for those printers which respond to commands from the
  51. ; user.  If the letter following the P is an N, then NO new line is printed
  52. ; following the text (otherwise, the text is followed by a CRLF).
  53. ;
  54. ;    Finally, a third noted use for ECHO is to set attributes of the
  55. ; user's terminal if he has a programmable terminal.  By passing control
  56. ; characters, ECHO allows any control sequence to be sent to a terminal.
  57. ;
  58.  
  59. ;
  60. ;  Externals
  61. ;
  62.     ext    crlf    ; new line on console
  63.     ext    lcrlf    ; new line on printer
  64.     ext    print    ; print string pted to by return address
  65.     ext    cout    ; output to console
  66.     ext    lout    ; output to printer
  67.  
  68. ;
  69. ;  CP/M Constants
  70. ;
  71. tbuff    equ    80h    ; console line buffer
  72. cr    equ    0dh
  73. lf    equ    0ah
  74.  
  75. ;
  76. ;  Branch to Start of Program
  77. ;
  78.     jmp    start
  79.  
  80. ;
  81. ;******************************************************************
  82. ;
  83. ;  SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
  84. ;
  85. ;    This data block precisely defines the data format for
  86. ; initial features of a ZCPR2 system which are required for proper
  87. ; initialization of the ZCPR2-Specific Routines in SYSLIB.
  88. ;
  89.  
  90. ;
  91. ;  EXTERNAL PATH DATA
  92. ;
  93. EPAVAIL:
  94.     DB    0FFH    ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
  95. EPADR:
  96.     DW    40H    ; ADDRESS OF EXTERNAL PATH IF AVAILABLE
  97.  
  98. ;
  99. ;  INTERNAL PATH DATA
  100. ;
  101. INTPATH:
  102.     DB    0,0    ; DISK, USER FOR FIRST PATH ELEMENT
  103.             ; DISK = 1 FOR A, '$' FOR CURRENT
  104.             ; USER = NUMBER, '$' FOR CURRENT
  105.     DB    0,0
  106.     DB    0,0
  107.     DB    0,0
  108.     DB    0,0
  109.     DB    0,0
  110.     DB    0,0
  111.     DB    0,0    ; DISK, USER FOR 8TH PATH ELEMENT
  112.     DB    0    ; END OF PATH
  113.  
  114. ;
  115. ;  MULTIPLE COMMAND LINE BUFFER DATA
  116. ;
  117. MCAVAIL:
  118.     DB    0FFH    ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
  119. MCADR:
  120.     DW    0FF00H    ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE
  121.  
  122. ;
  123. ;  DISK/USER LIMITS
  124. ;
  125. MDISK:
  126.     DB    4    ; MAXIMUM NUMBER OF DISKS
  127. MUSER:
  128.     DB    31    ; MAXIMUM USER NUMBER
  129.  
  130. ;
  131. ;  FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
  132. ;
  133. DOK:
  134.     DB    0FFH    ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
  135. UOK:
  136.     DB    0FFH    ; ALLOW USER CHANGE? (0=NO, 0FFH=YES)
  137.  
  138. ;
  139. ;  PRIVILEGED USER DATA
  140. ;
  141. PUSER:
  142.     DB    10    ; BEGINNING OF PRIVILEGED USER AREAS
  143. PPASS:
  144.     DB    'chdir',0    ; PASSWORD FOR MOVING INTO PRIV USER AREAS
  145.     DS    41-($-PPASS)    ; 40 CHARS MAX IN BUFFER + 1 for ending NULL
  146.  
  147. ;
  148. ;  CURRENT USER/DISK INDICATOR
  149. ;
  150. CINDIC:
  151.     DB    '$'    ; USUAL VALUE (FOR PATH EXPRESSIONS)
  152.  
  153. ;
  154. ;  DMA ADDRESS FOR DISK TRANSFERS
  155. ;
  156. DMADR:
  157.     DW    80H    ; TBUFF AREA
  158.  
  159. ;
  160. ;  NAMED DIRECTORY INFORMATION
  161. ;
  162. NDRADR:
  163.     DW    00000H    ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
  164. NDNAMES:
  165.     DB    64    ; MAX NUMBER OF DIRECTORY NAMES
  166. DNFILE:
  167.     DB    'NAMES   '    ; NAME OF DISK NAME FILE
  168.     DB    'DIR'        ; TYPE OF DISK NAME FILE
  169.  
  170. ;
  171. ;  REQUIREMENTS FLAGS
  172. ;
  173. EPREQD:
  174.     DB    000H    ; EXTERNAL PATH?
  175. MCREQD:
  176.     DB    000H    ; MULTIPLE COMMAND LINE?
  177. MXREQD:
  178.     DB    000H    ; MAX USER/DISK?
  179. UDREQD:
  180.     DB    000H    ; ALLOW USER/DISK CHANGE?
  181. PUREQD:
  182.     DB    000H    ; PRIVILEGED USER?
  183. CDREQD:
  184.     DB    000H    ; CURRENT INDIC AND DMA?
  185. NDREQD:
  186.     DB    000H    ; NAMED DIRECTORIES?
  187. Z2CLASS:
  188.     DB    0    ; CLASS 0
  189.     DB    'ZCPR2'
  190.     DS    10    ; RESERVED
  191.  
  192. ;
  193. ;  END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
  194. ;
  195. ;******************************************************************
  196. ;
  197.  
  198. ;
  199. ;  Start of Program
  200. ;
  201. start:
  202.     xra    a
  203.     sta    pflag    ; clear print flag
  204.     sta    nflag    ; clear new line flag
  205.     lxi    h,tbuff    ; place zero at end of command line
  206.     mov    a,m    ; get char count
  207.     inx    h    ; pt to first char
  208.     push    h    ; save ptr
  209.     add    l    ; HL=HL+A
  210.     mov    l,a
  211.     mov    a,h
  212.     aci    0
  213.     mov    h,a
  214.     mvi    m,0    ; store ending zero
  215.     pop    h    ; pt to first char
  216.     call    sblank    ; skip to first non-blank
  217.     ora    a    ; EOL means print Help Message
  218.     jz    phelp
  219.     cpi    '/'    ; slash means print Help Message also
  220.     jnz    echo    ; if not slash, print buffer contents
  221.     inx    h    ; pt to next character
  222.     mov    a,m    ; get next char
  223.     cpi    'P'    ; printer?
  224.     jnz    phelp
  225.     mvi    a,0ffh    ; set print flag
  226.     sta    pflag
  227.     inx    h    ; pt to after the P
  228.     mov    a,m    ; get option letter
  229.     cpi    'N'    ; new line?
  230.     jnz    echo
  231.     inx    h    ; pt to after option letter
  232.     mvi    a,0ffh    ; set new line flag
  233.     sta    nflag
  234.     jmp    echo    ; perform function
  235.  
  236. ;
  237. ;  Print Help Message
  238. ;
  239. phelp:
  240.     call    print
  241.     db    'ECHO  Version '
  242.     db    (vers/10)+'0','.',(vers mod 10)+'0'
  243.     db    cr,lf,'    ECHO prints the command line on the user''s console'
  244.     db    cr,lf,'or printer.  It is invoked by the following forms:'
  245.     db    cr,lf
  246.     db    cr,lf,'        ECHO or ECHO //        <-- Print this Help'
  247.     db    cr,lf,'        ECHO text        <-- Print text'
  248.     db    cr,lf,'        ECHO /po text        <-- Print text on LST:'
  249.     db    cr,lf
  250.     db    cr,lf,'    In the last form, the significant text begins'
  251.     db    cr,lf,'immediately after the option letter.  If this option'
  252.     db    cr,lf,'letter is N, then the text is NOT followed by a new'
  253.     db    cr,lf,'line.  With no option letter, the text is followed by'
  254.     db    cr,lf,'a carriage return/line feed pair.  This way, ECHO /P'
  255.     db    cr,lf,'simply outputs a new line to the printer.'
  256.     db    cr,lf,'    ECHO performs NO control character interpretation'
  257.     db    cr,lf,'(such as tab expansion).'
  258.     db    cr,lf,0
  259.     ret
  260. ;
  261. ;  Echo Command Line
  262. ;
  263. echo:
  264.     lda    pflag    ; printing?
  265.     ora    a    ; 0=no
  266.     cz    crlf    ; new line
  267.     call    pstr    ; simply print string starting at HL
  268.     lda    pflag    ; printing?
  269.     ora    a    ; 0=no
  270.     rz
  271.     lda    nflag    ; new line?
  272.     ora    a    ; 0=yes (reverse logic)
  273.     cz    lcrlf    ; new line
  274.     ret
  275. ;
  276. ;  Print string (with no interpretation) pointed to by HL
  277. ;
  278. pstr:
  279.     mov    a,m    ; get next char
  280.     ora    a    ; done?
  281.     rz
  282.     inx    h    ; pt to next
  283.     mov    b,a    ; save char
  284.     lda    pflag    ; con or lst?
  285.     ora    a    ; 0=con
  286.     jz    pstrc
  287.     mov    a,b    ; get char
  288.     call    lout    ; list
  289.     jmp    pstr
  290. pstrc:
  291.     mov    a,b    ; get char
  292.     call    cout    ; console
  293.     jmp    pstr
  294. ;
  295. ;  Skip to Non-Blank
  296. ;
  297. sblank:
  298.     mov    a,m    ; get char
  299.     inx    h    ; pt to next
  300.     cpi    ' '    ; skip if space
  301.     jz    sblank
  302.     dcx    h    ; back up to non-space
  303.     ret
  304.  
  305. ;
  306. ;  Buffers
  307. ;
  308. pflag:    ds    1    ; print flag
  309. nflag:    ds    1    ; new line flag
  310.  
  311.  
  312.     end
  313.