; ; PROGRAM: ECHO ; AUTHOR: RICHARD CONN ; VERSION: 1.1 ; DATE: 6 JAN 83 ; PREVIOUS VERSIONS: 1.0 (10 DEC 82) ; VERS EQU 11 ; ; This program is Copyright (c) 1982, 1983 by Richard Conn ; All Rights Reserved ; ; ZCPR2 and its utilities, including this one, are released ; to the public domain. Anyone who wishes to USE them may do so with ; no strings attached. The author assumes no responsibility or ; liability for the use of ZCPR2 and its utilities. ; ; The author, Richard Conn, has sole rights to this program. ; ZCPR2 and its utilities may not be sold without the express, ; written permission of the author. ; ; ; ECHO is used to echo the command line to the screen. It is invoked ; in two different ways: ; ECHO <-- print Help Message ; ECHO // <-- print Help Message ; ECHO text <-- print text ; ; This seems like a trivial program, but it buys the user one key thing: ; for ZCPR2 use, a message may be stored in the multiple command line buffer ; by using ECHO, so that programs like STARTUP can print a welcome message ; after they have run. For STARTUP in particular, a sample command line ; would be: ; ioloader;ld ld;tinit;echo WELCOME TO ZCPR II ; This line runs IOLOADER, which loads the redirectable I/O devices, ; followed by LD LD, which loads a named directory into memory, and TINIT, ; which initializes a TVI 950 terminal (function keys, user line, etc). ; When all is done, TINIT will have cleared the screen and ECHO will have ; printed its message. ; ; ; Externals ; ext pstr ; print string pted to by HL ext crlf ; new line ext print ; print string pted to by ret adr ; ; CP/M Constants ; tbuff equ 80h ; console line buffer cr equ 0dh lf equ 0ah ; ; Branch to Start of Program ; jmp start ; ;****************************************************************** ; ; SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format ; ; This data block precisely defines the data format for ; initial features of a ZCPR2 system which are required for proper ; initialization of the ZCPR2-Specific Routines in SYSLIB. ; ; ; EXTERNAL PATH DATA ; EPAVAIL: DB 0FFH ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES) EPADR: DW 40H ; ADDRESS OF EXTERNAL PATH IF AVAILABLE ; ; INTERNAL PATH DATA ; INTPATH: DB 0,0 ; DISK, USER FOR FIRST PATH ELEMENT ; DISK = 1 FOR A, '$' FOR CURRENT ; USER = NUMBER, '$' FOR CURRENT DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 ; DISK, USER FOR 8TH PATH ELEMENT DB 0 ; END OF PATH ; ; MULTIPLE COMMAND LINE BUFFER DATA ; MCAVAIL: DB 0FFH ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE? MCADR: DW 0FF00H ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE ; ; DISK/USER LIMITS ; MDISK: DB 4 ; MAXIMUM NUMBER OF DISKS MUSER: DB 31 ; MAXIMUM USER NUMBER ; ; FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK ; DOK: DB 0FFH ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES) UOK: DB 0FFH ; ALLOW USER CHANGE? (0=NO, 0FFH=YES) ; ; PRIVILEGED USER DATA ; PUSER: DB 10 ; BEGINNING OF PRIVILEGED USER AREAS PPASS: DB 'chdir',0 ; PASSWORD FOR MOVING INTO PRIV USER AREAS DS 41-($-PPASS) ; 40 CHARS MAX IN BUFFER + 1 for ending NULL ; ; CURRENT USER/DISK INDICATOR ; CINDIC: DB '$' ; USUAL VALUE (FOR PATH EXPRESSIONS) ; ; DMA ADDRESS FOR DISK TRANSFERS ; DMADR: DW 80H ; TBUFF AREA ; ; NAMED DIRECTORY INFORMATION ; NDRADR: DW 00000H ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY NDNAMES: DB 64 ; MAX NUMBER OF DIRECTORY NAMES DNFILE: DB 'NAMES ' ; NAME OF DISK NAME FILE DB 'DIR' ; TYPE OF DISK NAME FILE ; ; REQUIREMENTS FLAGS ; EPREQD: DB 000H ; EXTERNAL PATH? MCREQD: DB 000H ; MULTIPLE COMMAND LINE? MXREQD: DB 000H ; MAX USER/DISK? UDREQD: DB 000H ; ALLOW USER/DISK CHANGE? PUREQD: DB 000H ; PRIVILEGED USER? CDREQD: DB 000H ; CURRENT INDIC AND DMA? NDREQD: DB 000H ; NAMED DIRECTORIES? Z2CLASS: DB 0 ; CLASS 0 DB 'ZCPR2' DS 10 ; RESERVED ; ; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA ; ;****************************************************************** ; ; ; Start of Program ; start: lxi h,tbuff ; place zero at end of command line mov a,m ; get char count inx h ; pt to first char push h ; save ptr add l ; HL=HL+A mov l,a mov a,h aci 0 mov h,a mvi m,0 ; store ending zero pop h ; pt to first char call sblank ; skip to first non-blank ora a ; EOL means print Help Message jz phelp cpi '/' ; slash means print Help Message also jnz echo ; if not slash, print buffer contents ; ; Print Help Message ; phelp: call print db 'ECHO Version ' db (vers/10)+'0','.',(vers mod 10)+'0' db cr,lf,' ECHO prints the command line on the user''s console.' db cr,lf,'It is invoked by the following forms:' db cr,lf db cr,lf,' ECHO or ECHO // <-- Print this Help' db cr,lf,' ECHO text <-- Print text' db cr,lf,0 ret ; ; Echo Command Line ; echo: call crlf ; new line call pstr ; simply print string starting at HL ret ; ; Skip to Non-Blank ; sblank: mov a,m ; get char inx h ; pt to next cpi ' ' ; skip if space jz sblank dcx h ; back up to non-space ret end