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
/
DOC
/
Z3USER.SI
< prev
next >
Wrap
Text File
|
2000-06-30
|
55KB
|
1,882 lines
***********************************************************
* *
* USER'S PERSPECTIVE -- An Introduction *
* *
* for *
* *
* ZCPR3 -- Z80 Command Processor Replacement, Version 3 *
* *
***********************************************************
by
Richard Conn
User's Perspective
11 June 1984
ZCPR3 Version 3.0
Copyright (c) 1984 by Richard Conn
All Rights Reserved
Thσáá ZCPR│á System¼áá includinτá it≤á utilitie≤áá anΣáá it≤ ì
documentatioε files¼á i≤ copyright¼á 1984¼á b∙ RicharΣ Conn« Thσ ì
appendi° list≤ al∞ file≤ covereΣ b∙ thi≤ copyright.
CP/═ i≤ ß registereΣ trademarδ oµ Digita∞ Research.
WordStar is a registered trademark of Micropro.
.paè.pn 1
.po 5
.he ZCPR3 from the User's Perspective
THE USER'S PERSPECTIVE - AN INTRODUCTION TO ZCPR3
by Richard Conn
Thσá ZCPR│ Systeφ i≤ ß collectioε oµ program≤á baseΣá arounΣ ì
thσá ZCPR│á CommanΣ Processor«á Forminτ aε integrateΣ systeφá oµ ì
tools¼á thσá ZCPR│á Systeφá offer≤ ßá numbe≥á oµá convenien⌠á anΣ ì
sometime≤á morσá user-friendl∙á feature≤ t∩ thσá CP/═á 2.▓á user« ì
Maintaininτá CP/═á 2.▓á compatibilit∙á a⌠ al∞á time≤á (al∞á knowε ì
commercia∞áá CP/═áá 2.▓áá program≤á ruεáá unde≥áá ZCPR│áá withou⌠ ì
modification)¼á thσ ZCPR│ Systeφ bring≤ t∩ it≤ user≤ ß variet∙ oµ ì
tool≤á whicΦá conceptuall∙á implemen⌠á feature≤á founΣá iεá othe≥ ì
operatinτá systems¼á includinτ TOPS-2░ (1)¼á UNI╪ (2)¼á NO╙á (3)¼ ì
MULTIC╙á (4)¼á anΣ VM╙ (5)¼á anΣ tool≤ whicΦá implemen⌠á feature≤ ì
uniquσ t∩ thσ ZCPR│ Systeφ (t∩ m∙ knowledge).
Thi≤á Introductioεá i≤ intendeΣ t∩ outlinσ somσ oµá thσá ke∙ ì
feature≤á oµá thσá ZCPR│á Systeφá froφá thσá user'≤á perspective« ì
Knowledgσ oµ CP/═ 2.▓ i≤ assumed¼á anΣ somσ experiencσ witΦ ZCPR▓ ì
i≤á usefu∞á iε orde≥ t∩ understanΣ thσ followinτ presentatioεá iε ì
detail«á Thσá majo≥á feature≤á oµ thσá ZCPR│á Systeφá whicΦá arσ ì
describeΣ iε thi≤ Introductioε include:
o Directories o Wheel Users and Passwords
o Command Lines o Command Processing
o Error Handlers o Resident Command Packages
o Aliases o Flow Command Packages
o "Secure" Systems o ZEX Command Files
o Shells o Z3TCAP
o Variable o Screen-Oriented Terminal
o MENU Configuration
o VFILER
Thσá followinτ screeε display≤ arσ intendeΣ t∩ conve∙á idea≤ ì
only«á Thesσá display≤ werσ generateΣ whilσ thσ ZCPR│ Systeφ wa≤ ì
beinτá developed¼á anΣ thσ versioε number≤ anΣ operatioεá oµá thσ ì
ZCPR│á utilitie≤á a≤ distributeΣ diffe≥ froφ thosσ showε iεá thi≤ ì
document.
---- Trademarks ----
(1) TOPS-20 - Digital Equipment Corporation
(2) UNIX - Bell Laboratories
(3) NOS - Control Data Corporation
(4) MULTICS - Honeywell
(5) VMS - Digital Equipment Corporation
.fo ZCPR3 Directories #
1. D i r e c t o r i e s
ááááááááá Unde≥ ZCPR3¼ ß logica∞ disδ caε bσ though⌠ oµ ì
ááááááááát∩á contaiε tw∩ type≤ oµ directories«á Onσ i≤á thσ ì
áááááááááphysica∞ directory¼á whicΦ i≤ usuall∙ locateΣá jus⌠ ì
áááááááááafte≥á thσá systeφ track≤ oεá mos⌠á floppies«á Thσ ì
áááááááááothe≥ i≤ thσ logica∞ directory¼á iε whicΦ eacΦ filσ ì
áááááááááoεá ßá disδá ha≤ ß use≥ numbe≥ associateΣá witΦá i⌠ ì
ááááááááá(froφ ░ t∩ 31)¼á anΣ thσ combinatioε oµ ß disδá anΣ ì
áááááááááuse≥áá numbe≥áá identifie≤á uniquel∙á thσáá logica∞ ì
ááááááááádirector∙ iε whicΦ thσ filσ belongs«á DDT.CO═á ma∙ ì
ááááááááábσ locateΣ oε disδ A¼á use≥ 5¼á whilσ tw∩ copie≤ oµ ì
áááááááááED.CO═ ma∙ bσ locateΣ oε disδ A¼ use≥ ╡ anΣ disδ A¼ ì
áááááááááuse≥ 0«á Thσ combinatioε oµ thσ disδ referencσ anΣ ì
áááááááááuse≥á numbe≥ identifie≤ thσ logica∞ director∙ whicΦ ì
áááááááááa file belongs in.
ááááááááá Thσ logica∞ director∙ i≤ usuall∙ indicateΣ a≤ ì
ááááááááápar⌠á oµ thσ prompt«á Iε thσ example≤á below¼á thσ ì
áááááááááreade≥ caε seσ thσ logica∞ director∙ referreΣ t∩ b∙ ì
áááááááááit≤ disδ anΣ use≥ numbe≥ and¼á iε mos⌠ cases¼á b∙ ß ì
ááááááááánamσ associateΣ witΦ thσ disδ anΣ use≥ number« Thσ ì
áááááááááfollowinτá example≤á illustratσ thσ usσ oµá thσá D╒ ì
ááááááááá(disk/user⌐ forφ anΣ thσ DI╥ (director∙ name⌐á forφ ì
ááááááááát∩ loτ int∩ variou≤ use≥ area≤ anΣ directories.
A0:BASE>15:
A15:ROOT>4:
A4>b:
B4:WORK4>0:
B0:WORK1>a14:
A14>a0:
A0:BASE>root:
A15:ROOT>work2:
ááááááááá Command≤ ma∙ usσ eithe≥ thσ D╒ o≥ DI╥ forφ t∩ ì
áááááááááreferencσá thσ logica∞ directorie≤ the∙ arσ t∩á ac⌠ ì
áááááááááupon« Interpretatioε oµ thσ namσ oµ ß director∙ i≤ ì
ááááááááábuil⌠á int∩ thσ ZCPR│ commanΣ processo≥ itself¼á s∩ ì
áááááááááever∙á commanΣ caε worδ witΦ thσ D╒ anΣá DI╥á form≤ ì
áááááááááwitΦ equa∞ ease.
ááááááááá Command≤á likσá DBAS┼ whicΦ don'⌠ kno≈á abou⌠ ì
áááááááááthσ D╒ o≥ DI╥ form≤ wil∞ usuall∙ jus⌠ pa∙ attentioε ì
ááááááááát∩á thσá disδ referenceΣ anΣ no⌠ thσá use≥á number« ì
áááááááááFo≥ command≤ likσ these¼ i⌠ i≤ usuall∙ bes⌠ t∩ jus⌠ ì
áááááááááemplo∙á thσá disδ lette≥ wheεá referrinτá t∩á thei≥ ì
áááááááááarguments.
B1:WORK2>dir base:
RHEX .COM 2
A0:BASE -- 1 Files Using 2K ( 206K Left)
B1:WORK2>base:
ááááááááá Thσáá PW─á commanΣá display≤á thσá name≤á anΣ ì
áááááááááassociateΣá D╒á form≤á oµá al∞á directorie≤áá whicΦ ì
ááááááááácurrentl∙ááá havσááá name≤áá assigneΣáá t∩ááá them« ì
áááááááááAdditionally¼ wheε usinτ thσ DI╥ forφ t∩ loτ int∩ ß ì
ááááááááádirector∙ (seσ PRIVAT┼ below)¼ ß director∙ s∩ nameΣ ì
áááááááááma∙ havσ ß passworΣ associateΣ witΦ it« Iµ so¼ thσ ì
áááááááááuse≥ i≤ prompteΣ fo≥ thi≤ passworΣ anΣ thσá commanΣ ì
áááááááááwil∞á fai∞á iµá hσá doe≤ no⌠á providσá thσá correc⌠ ì
ááááááááápassword.
A0:BASE>pwd
PWD, Version 1.0
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE A 15: ROOT
B 0: WORK1 B 1: WORK2 B 2: WORK3 B 4: WORK4
B 5: TEXT B 6: MAIL
A0:BASE>private:
PW? unknown
A0:BASE>private:
PW? mypass
A1:PRIVATE>dir
A1:PRIVATE -- 0 Files Using 0K ( 206K Left)
A1:PRIVATE>base:
A0:BASE>dir private:
PW? mypass
A1:PRIVATE -- 0 Files Using 0K ( 206K Left)
A0:BASE>dir a1:
A1:PRIVATE -- 0 Files Using 0K ( 206K Left)
.fo Wheel Users and Passwords #
2. W h e e l U s e r s a n d P a s s w o r d s
ááááááááá PassworΣá protectioε i≤ commoεá unde≥á ZCPR3« ì
áááááááááSevera∞á oµ thσ ZCPR│ utilitie≤ responΣ onσ wa∙á iµ ì
áááááááááthσ use≥ i≤ privelegeΣ (ß Wheel⌐ o≥ no⌠ priveleged« ì
ááááááááá┴á use≥á become≤á privelegeΣ b∙ runninτá thσá WHEE╠ ì
ááááááááácommanΣ anΣ givinτ thσ Whee∞ Password.
A0:BASE>mkdir
MKDIR, Version 3.0
Permission to Run MKDIR Denied - Not Wheel
A0:BASE>pwd pass
PWD, Version 1.0
Password Request Denied - Not Wheel
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE A 15: ROOT
B 0: WORK1 B 1: WORK2 B 2: WORK3 B 4: WORK4
B 5: TEXT B 6: MAIL
A0:BASE>wheel /s
WHEEL, Version 3.0
Wheel Password? Wheel Byte is ON
A0:BASE>pwd pass
PWD, Version 1.0
DU : DIR Name - Password DU : DIR Name - Password
---- -------- -------- ---- -------- --------
A 0: BASE - A 1: PRIVATE - MYPASS
A 15: ROOT -
B 0: WORK1 - B 1: WORK2 -
B 2: WORK3 - B 4: WORK4 -
B 5: TEXT - B 6: MAIL -
A0:BASE>private:
PW? mypass
A1:PRIVATE>root:
A15:ROOT>mkdir sys.ndr
MKDIR, Version 3.0
MKDIR Command (? for Help)? C
** MKDIR Change Mode **
Directory Entry (?<RETURN> for Help)? a2:priv2
Adding PRIV2 -- Password? mypass2
10 Entries in Directory
Directory Entry (?<RETURN> for Help)?
DU : DIR Name - Password DU : DIR Name - Password
---- -------- -------- ---- -------- --------
A 0: BASE - A 1: PRIVATE - MYPASS
A 2: PRIV2 - MYPASS2 A 15: ROOT -
B 0: WORK1 - B 1: WORK2 -
B 2: WORK3 - B 4: WORK4 -
B 5: TEXT - B 6: MAIL -
Directory Entry (?<RETURN> for Help)? x
MKDIR Command (? for Help)? X
Directory has changed since last Write
Do you want to write Directory to Disk (Y/N)? Y
Name of File (<RETURN> = A 15: SYS .NDR)? special.ndr
Writing Directory to Disk ... Done
ááááááááá Iµá ß use≥ know≤ thσ righ⌠ password≤ anΣá ha≤ ì
áááááááááthσ prope≥ Whee∞ privelege¼ hσ caε radicall∙ changσ ì
áááááááááthσ director∙ structure¼á bringinτ ne≈á directorie≤ ì
áááááááááwhicΦ werσ previousl∙ undefineΣ int∩ existence.
ááááááááá Thσá abilit∙á t∩ loτ int∩ ß director∙ caεá bσ ì
ááááááááácontrolleΣ b∙ thσ installer« A⌠ installatioε time¼ ì
áááááááááthσá abilit∙á t∩ usσ D╒ anΣ DI╥ form≤ t∩á loτá int∩ ì
ááááááááádirectorie≤áá o≥á referencσá directorie≤áá caεáá bσ ì
áááááááááestablished« Oε ß morσ securσ system¼ fo≥ example¼ ì
áááááááááthσá abilit∙á t∩á usσ thσ D╒ forφá ma∙á bσá denied« ì
áááááááááThen¼á onl∙á directorie≤á defineΣá b∙ namσá ma∙á bσ ì
áááááááááaccesseΣ (DI╥ form)¼ and¼ iµ thesσ directorie≤ havσ ì
ááááááááápassword≤áá associateΣá witΦáá them¼áá thσáá prope≥ ì
ááááááááápassword≤ mus⌠ bσ given.
A15:ROOT>ldr special.ndr
ZCPR3 LDR, Version 1.0
Loading SPECIAL.NDR
A15:ROOT>pwd
PWD, Version 1.0
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE A 2: PRIV2 A 15: ROOT
B 0: WORK1 B 1: WORK2 B 2: WORK3 B 4: WORK4
B 5: TEXT B 6: MAIL
A15:ROOT>priv2:
PW? mypass2
A2:PRIV2>wheel system r
WHEEL, Version 3.0
Wheel Byte is OFF
A2:PRIV2>pwd pass
PWD, Version 1.0
Password Request Denied - Not Wheel
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE A 2: PRIV2 A 15: ROOT
B 0: WORK1 B 1: WORK2 B 2: WORK3 B 4: WORK4
B 5: TEXT B 6: MAIL
.fo Command Lines #
3. C o m m a n d L i n e s
ááááááááá Thσáá followinτá termina∞á sessioεáá extract≤ ì
áááááááááshoulΣá bσá clea≥ abou⌠ commanΣ line≤ unde≥á ZCPR3« ì
áááááááááComment≤ arσ includeΣ iε thσ termina∞ sessions.
A0:BASE>; Any Line beginning with a semicolon is a comment
A0:BASE>note Any line whose verb is the word "NOTE" is a comment
A0:BASE>note NOTE is handy to insert comments into lines with more than
A0:BASE>note one command in them
A0:BASE>note Such lines separate commands with a semicolon
A0:BASE>dir;note I just did a directory display
RHEX .COM 2
A0:BASE -- 1 Files Using 2K ( 204K Left)
A0:BASE>dir;NOTE This line contains 3 commands (incl one NOTE);dir root:
RHEX .COM 2
A0:BASE -- 1 Files Using 2K ( 204K Left)
MYTERM .Z3T 2r| SPECIAL .NDR 2 | SYS .ENV 2r| SYS .FCP 2r
SYS .NDR 2r| SYS .RCP 2r| SYS1 .FCP 2r| SYS1 .RCP 2r
SYS2 .FCP 2r| SYS2 .RCP 2r| SYS3 .RCP 2r| Z3TCAP .TCP 8r
A15:ROOT -- 12 Files Using 30K ( 204K Left)
A0:BASE>era *.com i;dir;NOTE See the extended options on the basic commands?
RHEX .COM - Erase (Y/N)? n
RHEX .COM 2
A0:BASE -- 1 Files Using 2K ( 204K Left)
.fo Command Processing #
4. C o m m a n d P r o c e s s i n g
ááááááááá Wheεá ßá ZCPR│á use≥á issue≤á ßá command¼áá ß ì
ááááááááásequencσ oµ event≤ take≤ placσ iε orde≥ t∩ identif∙ ì
ááááááááátha⌠ commanΣ anΣ executσ it.
ááááááááá This sequence is outlined briefly:
ááááááááá 1⌐ thσ commanΣ i≤ parsed╗ thσ firs⌠ worΣ ì
áááááááááiεá thσ commanΣ linσ (o≥ sublinσ iµ semicolon≤á arσ ì
áááááááááuseΣá t∩á placσá severa∞ command≤ oε onσá line⌐á i≤ ì
ááááááááátaken to be the name of the command
ááááááááá 2⌐á ZCPR│ check≤ t∩ seσ iµ thi≤á commanΣ ì
ááááááááái≤á ß Flo≈ CommanΣ (IF/ELSE/FI/XIF)¼á and¼á iµá so¼ ì
áááááááááZCPR3 runs the command
ááááááááá 3⌐á ZCPR│á theεá check≤ t∩á seσá iµá thσ ì
ááááááááácurren⌠á I╞ conditioε i≤ TRUE╗á IF≤ ma∙á bσá nesteΣ ì
áááááááááeigh⌠á level≤ dee≡ unde≥ ZCPR3╗á iµ thσ curren⌠á I╞ ì
áááááááááconditioε i≤ TRUE¼ ZCPR│ continues¼ elsσ i⌠ flushe≤ ì
áááááááááthe command and goes on to the next command
ááááááááá 4⌐á ZCPR│á theεá check≤ t∩á seσá iµá thσ ì
ááááááááácommanΣá i≤ buil⌠ int∩ thσ ZCPR│ CommanΣá Processo≥ ì
áááááááááitself╗ iµ so¼ ZCPR│ run≤ thσ command
ááááááááá 5⌐á ZCPR│á theεá check≤ t∩á seσá iµá thσ ì
ááááááááácommanΣ i≤ buil⌠ int∩ thσ curren⌠ Residen⌠á CommanΣ ì
áááááááááPackage (RCP); if so, ZCPR3 runs the command
ááááááááá 6⌐ ZCPR│ theε searche≤ alonτ ß serie≤ oµ ì
ááááááááádirectorie≤á indicateΣ b∙ ß command-searcΦ patΦ fo≥ ì
áááááááááßá CO═ filσ witΦ thσ samσ namσ a≤ thσá command╗á iµ ì
áááááááááfound, ZCPR3 loads the COM file and runs it
ááááááááá 7⌐ finally¼á iµ al∞ oµ thσ abovσá fails¼ ì
áááááááááZCPR│á invoke≤á aεá erro≥ handle≥á o≥á aεá extendeΣ ì
ááááááááácommanΣá processo≥á t∩á proces≤ thσ commanΣá a≤á aε ì
áááááááááerror or to try to resolve it further
ááááááááá Some examples:
A0:BASE>work2:
B1:WORK2>dir
B1:WORK2 -- 0 Files Using 0K ( 302K Left)
B1:WORK2>NOTE in many ZCPR3 systems, you will find RCPs -
B1:WORK2>NOTE Resident Command Packages
B1:WORK2>NOTE this system has several, located in the ROOT
B1:WORK2>dir root:*.rcp
SYS .RCP 2r| SYS1 .RCP 2r| SYS2 .RCP 2r| SYS3 .RCP 2r
A15:ROOT -- 4 Files Using 8K ( 204K Left)
B1:WORK2>NOTE SYS.RCP is the default RCP I use
B1:WORK2>NOTE the H command tells the user what RCP he has loaded and
B1:WORK2>NOTE what commands are available in it
B1:WORK2>h
SYS 1.0A
CP ECHO ERA LIST
NOTE P POKE PROT
REN TYPE
B1:WORK2>NOTE there are 10 commands in this RCP
B1:WORK2>cp work2:=base:rhex.com
Done
B1:WORK2>dir
RHEX .COM 2
B1:WORK2 -- 1 Files Using 2K ( 300K Left)
B1:WORK2>cp rhex2.com=rhex.com
Done
B1:WORK2>dir
RHEX .COM 2 | RHEX2 .COM 2
B1:WORK2 -- 2 Files Using 4K ( 298K Left)
B1:WORK2>era *.com i
RHEX .COM - Erase (Y/N)? n
RHEX2 .COM - Erase (Y/N)? y
B1:WORK2>cp rhex1.com=rhex.com;cp rhex2.com=rhex.com
Done
Done
B1:WORK2>prot *.* r
RHEX .COM Set to R/O
RHEX1 .COM Set to R/O
RHEX2 .COM Set to R/O
B1:WORK2>dir
RHEX .COM 2r| RHEX1 .COM 2r| RHEX2 .COM 2r
B1:WORK2 -- 3 Files Using 6K ( 296K Left)
B1:WORK2>prot rhex1.com
RHEX1 .COM Set to R/W
B1:WORK2>era *.com
RHEX .COM is R/O
RHEX1 .COM
RHEX2 .COM is R/O
B1:WORK2>dir
RHEX .COM 2r| RHEX2 .COM 2r
B1:WORK2 -- 2 Files Using 4K ( 298K Left)
B1:WORK2>echo this command simply echos the command line, as in messages
THIS COMMAND SIMPLY ECHOS THE COMMAND LINE, AS IN MESSAGES
B1:WORK2>ed demo.txt
NEW FILE
: *i
1: This is a test
2: This is only a test
3:
: *e
B1:WORK2>cp demo2.txt=demo.txt
Done
B1:WORK2>dir *.txt
DEMO .TXT 2 | DEMO2 .TXT 2
B1:WORK2 -- 2 Files Using 4K ( 294K Left)
B1:WORK2>ren demo1.txt=demo2.txt
B1:WORK2>cp demo2.txt=demo.txt
Done
B1:WORK2>dir *.txt
DEMO .TXT 2 | DEMO1 .TXT 2 | DEMO2 .TXT 2
B1:WORK2 -- 3 Files Using 6K ( 292K Left)
B1:WORK2>ren demo1.txt=demo2.txt
DEMO1 .TXT - Erase (Y/N)? n
B1:WORK2>type demo.txt
This is a test
This is only a test
B1:WORK2>type *.txt
This is a test
This is only a test
Typing DEMO .TXT -
This is a test
This is only a test
Typing DEMO1 .TXT -
This is a test
This is only a test
B1:WORK2>p 8000 801f;NOTE I look at memory
Peek at 8000
8000 - C3 29 00 C3 CE 80 C3 47 81 C3 82 81 C3 67 81 C3 |C).CN.CG.C..Cg.C|
8010 - 7E 81 C3 E9 80 C3 22 81 C3 10 81 80 F3 00 00 11 |~.Ci.C".C...s...|
B1:WORK2>p 0 f;NOTE anywhere in memory
Peek at 0000
0000 - C3 03 E2 01 11 C3 06 D4 00 FF 00 FF 00 FF 00 FF |C.b..C.T........|
B1:WORK2>poke 8000 1 2 3 "this is a test
Poke at 8000
B1:WORK2>p 8000 801f
Peek at 8000
8000 - 01 02 03 54 48 49 53 20 49 53 20 41 20 54 45 53 |...THIS IS A TES|
8010 - 54 81 C3 E9 80 C3 22 81 C3 10 81 80 F3 00 00 11 |T.Ci.C".C...s...|
B1:WORK2>NOTE the RCP commands can be changed by loading a new RCP
B1:WORK2>ldr root:sys3.rcp
ZCPR3 LDR, Version 1.0
Loading SYS3.RCP
B1:WORK2>h
SYS 1.0C
CP ECHO ERA NOTE
P POKE REN TYPE
WHL WHLQ
B1:WORK2>cp demo3.txt=demo.txt
No Wheel
B1:WORK2>era *.txt
No Wheel
B1:WORK2>wheel system s
WHEEL, Version 3.0
Wheel Byte is ON
B1:WORK2>cp demo3.txt=demo.txt
Done
ááááááááá Somσ example≤ oµ Flo≈ Commands¼á invokeΣ froφ ì
áááááááááFlo≈ CommanΣ Package≤ (FCPs⌐ follow:
B1:WORK2>NOTE now for Flow Command Packages:
B1:WORK2>NOTE under FCPs, we have IF/ELSE/FI (ENDIF)/XIF (Exit All IFs)
B1:WORK2>NOTE Flow Commands:
B1:WORK2>if exist demo.txt
IF T
B1:WORK2>type demo.txt
This is a test
This is only a test
B1:WORK2>else
IF F
B1:WORK2>type demo2.txt
B1:WORK2>fi
To No IF
B1:WORK2>if ~exist demo.txt
IF F
B1:WORK2>type demo.txt
B1:WORK2>else
IF T
B1:WORK2>type demo2.txt
This is a test
This is only a test
B1:WORK2>fi
To No IF
B1:WORK2>if exist *.txt
IF T
B1:WORK2>type demo.txt
This is a test
This is only a test
B1:WORK2>echo we are in a TRUE IF
WE ARE IN A TRUE IF
B1:WORK2>xif
To No IF
B1:WORK2>NOTE IFs can be nested up to 8 levels deep:
B1:WORK2>if exist demo.txt
IF T
B1:WORK2>if exist demo2.txt
IF T
B1:WORK2>if exist demo.txt
IF T
B1:WORK2>if exist demo3.txt
IF T
B1:WORK2>else
IF F
B1:WORK2>fi
To IF T
B1:WORK2>fi;fi;fi
To IF T
To IF T
To No IF
ááááááááá CommanΣ file≤ anΣ commanΣ filσ processor≤ arσ ì
ááááááááádiscusseΣ next«á ZEX¼á ß memory-baseΣ commanΣ filσ ì
áááááááááprocessor¼á i≤á designeΣ t∩ bσ thσá principa∞á too∞ ì
áááááááááused.
B1:WORK2>NOTE ZEX is the command-file processor, memory-based
B1:WORK2>NOTE Under ZEX, there is a GOTO command which works
B1:WORK2>NOTE in conjunction with IFs to provide looping capability
B1:WORK2>ed demo.zex
NEW FILE
: *i
1: NOTE Set Register 1 to 0;reg s1 0
2: ;=loop
3: NOTE Exit all pending IFs;xif
4: NOTE Add 1 to Register 1;reg p1
5: NOTE Test for end of loop;if ~1 3
6: NOTE Branch to LOOP if Register 1 <> 3;goto loop
7: NOTE Done with IF if Register 1 = 3;fi
8:
: *e
B1:WORK2>type demo.zex
NOTE Set Register 1 to 0;reg s1 0
;=loop
NOTE Exit all pending IFs;xif
NOTE Add 1 to Register 1;reg p1
NOTE Test for end of loop;if ~1 3
NOTE Branch to LOOP if Register 1 <> 3;goto loop
NOTE Done with IF if Register 1 = 3;fi
ááááááááá Herσá i≤ aε actua∞ ruε oµ ß ZE╪ commanΣá filσ ì
ááááááááá(DEMO.ZEX⌐ whicΦ illustrate≤ looping:
B1:WORK2>zex demo
ZEX, Version 3.0
-- Pass 1 --
B1:WORK2> ZEX: NOTE Set Register 1 to 0;reg s1 0
REG, Version 1.0
Reg 1 = 0
B1:WORK2> ZEX: ;=loop
B1:WORK2> ZEX: NOTE Exit all pending IFs;xif
To No IF
B1:WORK2> ZEX: NOTE Add 1 to Register 1;reg p1
REG, Version 1.0
Reg 1 = 1
B1:WORK2> ZEX: NOTE Test for end of loop;if ~1 3
IF T
B1:WORK2> ZEX: NOTE Branch to LOOP if Register 1 <> 3;goto loop
GOTO Label LOOP
-- Pass 2 --
B1:WORK2> ZEX: NOTE Exit all pending IFs;xif
To No IF
B1:WORK2> ZEX: NOTE Add 1 to Register 1;reg p1
REG, Version 1.0
Reg 1 = 2
B1:WORK2> ZEX: NOTE Test for end of loop;if ~1 3
IF T
B1:WORK2> ZEX: NOTE Branch to LOOP if Register 1 <> 3;goto loop
GOTO Label LOOP
-- Pass 3 --
B1:WORK2> ZEX: NOTE Exit all pending IFs;xif
To No IF
B1:WORK2> ZEX: NOTE Add 1 to Register 1;reg p1
REG, Version 1.0
Reg 1 = 3
B1:WORK2> ZEX: NOTE Test for end of loop;if ~1 3
IF F
-- Done --
B1:WORK2> ZEX: NOTE Branch to LOOP if Register 1 <> 4;goto loop
B1:WORK2> ZEX: NOTE Done with IF if Register 1 = 3;fi
To No IF
B1:WORK2> ZEX: Done>
ááááááááá Thσá examplσ abovσ wa≤ fo≥ academiπ purposes« ì
áááááááááTw∩ example≤ oµ ZE╪ commanΣ file≤ whicΦ ╔ usσ ever∙ ì
áááááááááda∙á follow«á Onσ commanΣ filσ assemble≤á program≤ ì
áááááááááfo≥ mσ usinτ thσ MA├ assembler¼á anΣ thσ othe≥ use≤ ì
áááááááááthσ M8░ assemble≥ witΦ none¼á one¼á two¼á three¼ o≥ ì
áááááááááfou≥ libraries¼á generatinτ differen⌠ commanΣ line≤ ì
ááááááááádependinτ upoε ho≈ man∙ librarie≤ werσ specifieΣ iε ì
áááááááááthσ origina∞ commanΣ line.
---- Command File for MAC Assembly ----
; MAC -- CP/M Standard MACRO Assembler and Loader
MAC $1 $$PZ SZ
IF INPUT Type N or F to Abort if Errors Exist
ERA $1.BAK
ERA $1.COM
MLOAD $1
FI
ERA $1.HEX
; Assembly Complete
---- Command File for M80 Assembly ----
;
; M80.ZEX -- MACRO-80 Assembler and Linker
; Up to 4 Libraries Specified
;
; ^& Suppress FALSE IF Printout
;
if nul $1 ;note Print Error Message
echo **** No Parameter Specified ****
else ;note Perform Assembly
M80 =$1
if input Type T to Continue or F to Abort (in case of Errors)
ERA $1.BAK
ERA $1.COM
if ~nul $5 ;note Link 4 Additional Libraries
L80 /P:100,$1,$2/S,$3/S,$4/S,$5/S,A:Z3LIB/S,A:SYSLIB/S,$1/N,/U,/E
goto done
fi
if ~nul $4 ;note Link 3 Additional Libraries
L80 /P:100,$1,$2/S,$3/S,$4/S,A:Z3LIB/S,A:SYSLIB/S,$1/N,/U,/E
goto done
fi
if ~nul $3 ;note Link 2 Additional Libraries
L80 /P:100,$1,$2/S,$3/S,A:Z3LIB/S,A:SYSLIB/S,$1/N,/U,/E
goto done
fi
if ~nul $2 ;note Link 1 Additional Library
L80 /P:100,$1,$2/S,A:Z3LIB/S,A:SYSLIB/S,$1/N,/U,/E
goto done
else ;note Standard Link
L80 /P:100,$1,A:Z3LIB/S,A:SYSLIB/S,$1/N,/U,/E
;=done Done with Link
fi ;note on IF ~NUL Tests
fi ;note on IF INPUT
ERA $1.REL
fi ;note on IF NUL
;
; Assembly Complete
;
.fo Error Handlers #
5. E r r o r H a n d l e r s
ááááááááá Erro≥á Handler≤á arσá program≤á whicΦá handlσ ì
ááááááááácommanΣ linσ error≤ iε ß "niceó way«á The∙ ma∙á bσ ì
áááááááááuseΣ anywhere¼á includinτ withiε ZE╪ commanΣ files« ì
ááááááááá┴ fe≈ examples:
B1:WORK2>NOTE There are a number of error handlers on this system:
B1:WORK2>dir root:error?.com s
ERROR1 .COM 2r| ERROR2 .COM 4r| ERROR3 .COM 2r| ERROR4 .COM 2r
A15:ROOT -- 4 Files Using 10K ( 204K Left)
ááááááááá Erro≥ Handler≤ arσ installeΣ b∙ simpl∙ givinτ ì
ááááááááátheir name.
B1:WORK2>error4
ERROR4, Version 1.0
Error Handler Installed
B1:WORK2>NOTE ERROR4 is a simpler error handler
B1:WORK2>NOTE with the invalid command "XXXX";xxxx
File XXXX.COM Not Found
B1:WORK2>NOTE ERROR4 simply says what happened
ááááááááá Erro≥á Handler≤á ma∙á var∙á iεá feature≤á anΣ ì
ááááááááácomplexity«á ERROR▒á i≤ onσ oµ thσá morσá complex« ì
áááááááááERROR2¼ b∙ thσ way¼ i≤ ß screen-orienteΣ versioε oµ ì
áááááááááERROR1¼á usinτ reversσ vide∩ anΣ curso≥ addressing« ì
áááááááááSee the section on Z3TCAP later for more details.
B1:WORK2>error1;NOTE ERROR1 is a more sophisticated error handler
ERROR1, Version 1.0
Error Handler Installed
B1:WORK2>xxxx
ERROR1, Version 1.0
Error Line is:
XXXX
Options are:
1. Replace Command in Error with a New Command
Replace XXXX
2. Advance to Next Command and Resume Processing
Advance to
3. Replace Entire Line with a New Line
Replace XXXX
4. Throw Away Entire Line and Continue
Throw Away XXXX
Select Option - 1
Replacement Command?
dir
DEMO .BAK 0 | DEMO .TXT 2 | DEMO .ZEX 2 | DEMO1 .TXT 2
DEMO2 .TXT 2 | DEMO3 .TXT 2 | RHEX .COM 2r| RHEX2 .COM 2r
B1:WORK2 -- 8 Files Using 14K ( 288K Left)
B1:WORK2>xxxx;dir *.com
ERROR1, Version 1.0
Error Line is:
XXXX;DIR *.COM
Options are:
1. Replace Command in Error with a New Command
Replace XXXX
2. Advance to Next Command and Resume Processing
Advance to DIR *.COM
3. Replace Entire Line with a New Line
Replace XXXX;DIR *.COM
4. Throw Away Entire Line and Continue
Throw Away XXXX;DIR *.COM
Select Option - 2
RHEX .COM 2r| RHEX2 .COM 2r
B1:WORK2 -- 2 Files Using 4K ( 288K Left)
.fo Aliases #
6. A l i a s e s
ááááááááá Aliase≤á arσ CO═ file≤ createΣ b∙á thσá ALIA╙ ì
ááááááááácommanΣá whicΦá contaiε onσ o≥ morσá commanΣá line≤ ì
áááááááááwhicΦá arσá invokeΣ wheε thσ Alia≤ namσá i≤á typed« ì
áááááááááParamete≥á passinτ int∩ thσ commanΣ line≤ withiε aε ì
áááááááááAlia≤á i≤ supporteΣ iε ß manne≥ simila≥ t∩á commanΣ ì
áááááááááfilσ paramete≥ passing«á Aliase≤ arσ convenien⌠ t∩ ì
ááááááááácreatσá commanΣ script≤ whicΦ arσ useΣá repeatedly¼ ì
áááááááááanΣ thσ specia∞ commands¼á sucΦ a≤ STARTU╨ (useΣ oε ì
ááááááááácolΣ boo⌠ t∩ ruε ß serie≤ oµ program≤ t∩ initializσ ì
áááááááááthe system), are created as Aliases.
B1:WORK2>NOTE you have to be a WHEEL to create ALIASes
B1:WORK2>wheel /s
WHEEL, Version 3.0
Wheel Password? Wheel Byte is ON
B1:WORK2>NOTE a number of parameters and some information can be determined
B1:WORK2>NOTE and expanded by an alias
B1:WORK2>alias
ALIAS, Version 1.0
Input Alias (RETURN to Abort)
--> echo The name of this Alias is $0; <-- I ended these
echo The current DU is $d$u:; <-- lines with ^E
echo and the first 4 parameters are:;
echo $1 $2 $3 $4
Name of ALIAS Command (RETURN to Abort)? cmdstat
Alias Created
B1:WORK2>NOTE the alias is a very short file (under 2K)
B1:WORK2>dir cmdstat.com
CMDSTAT .COM 2
B1:WORK2 -- 1 Files Using 2K ( 292K Left)
B1:WORK2>cmdstat
THE NAME OF THIS ALIAS IS CMDSTAT
THE CURRENT DU IS B1:
AND THE FIRST 4 PARAMETERS ARE:
B1:WORK2>cmdstat this is a very short demo
THE NAME OF THIS ALIAS IS CMDSTAT
THE CURRENT DU IS B1:
AND THE FIRST 4 PARAMETERS ARE:
THIS IS A VERY
B1:WORK2>cmdstat hello, world
THE NAME OF THIS ALIAS IS CMDSTAT
THE CURRENT DU IS B1:
AND THE FIRST 4 PARAMETERS ARE:
HELLO, WORLD
B1:WORK2>NOTE aliases are convenient for a number of things --
B1:WORK2>NOTE they are intended primarily to replace tedious command
B1:WORK2>NOTE sequences with a simple command
B1:WORK2>alias
ALIAS, Version 1.0
Input Alias (RETURN to Abort)
--> dir $1;era $1 i;dir $1
Name of ALIAS Command (RETURN to Abort)? exera
Alias Created
B1:WORK2>NOTE I now have an ALIAS which displays a directory of selected
B1:WORK2>NOTE files, allows me to erase them with inspection, and then
B1:WORK2>NOTE displays the same directory again to let me see the
B1:WORK2>NOTE results
B1:WORK2>dir
CMDSTAT .COM 2 | DEMO .TXT 2 | DEMO .ZEX 2 | DEMO1 .TXT 2
DEMO2 .TXT 2 | DEMO3 .TXT 2 | EXERA .COM 2 | RHEX .COM 2r
RHEX2 .COM 2r
B1:WORK2 -- 9 Files Using 18K ( 284K Left)
ááááááááá The following runs an Alias:
B1:WORK2>exera demo?.txt
DEMO .TXT 2 | DEMO1 .TXT 2 | DEMO2 .TXT 2 | DEMO3 .TXT 2
B1:WORK2 -- 4 Files Using 8K ( 284K Left)
DEMO .TXT - Erase (Y/N)? n
DEMO1 .TXT - Erase (Y/N)? y
DEMO2 .TXT - Erase (Y/N)? y
DEMO3 .TXT - Erase (Y/N)? n
DEMO .TXT 2 | DEMO3 .TXT 2
B1:WORK2 -- 2 Files Using 4K ( 288K Left)
B1:WORK2>exera demo3.txt
DEMO3 .TXT 2
B1:WORK2 -- 1 Files Using 2K ( 288K Left)
DEMO3 .TXT - Erase (Y/N)? y
B1:WORK2 -- 0 Files Using 0K ( 290K Left)
B1:WORK2>NOTE also, since IFs are everywhere, they can be used in aliases:
B1:WORK2>alias
ALIAS, Version 1.0
Input Alias (RETURN to Abort)
--> if exist $1;type $1 p;fi
Name of ALIAS Command (RETURN to Abort)? typeit
Alias Created
B1:WORK2>typeit demo.txt
IF T
This is a test
This is only a test
To No IF
B1:WORK2>cp demo1.txt=demo.txt
Done
B1:WORK2>dir demo?.txt
DEMO .TXT 2 | DEMO1 .TXT 2
B1:WORK2 -- 2 Files Using 4K ( 286K Left)
B1:WORK2>typeit demo?.txt
IF T
This is a test
This is only a test
Typing DEMO .TXT -
This is a test
This is only a test
To No IF
B1:WORK2>typeit nofile.txt
IF F
To No IF
B1:WORK2>NOTE or I can expand TYPEIT to be better
B1:WORK2>alias typeit
ALIAS, Version 1.0
Alias Name: TYPEIT
Old Alias Command Line:
1 --> IF EXIST $1;
2 --> TYPE $1 P;
3 --> FI
Input Alias (RETURN to Abort)
--> if exist $1;type $1 p;else;echo file $1 not found;fi
File TYPEIT .COM Exists - Overwrite (Y/N)? Y
Alias Created
B1:WORK2>typeit demo.txt
IF T
This is a test
This is only a test
IF F
To No IF
B1:WORK2>typeit nofile.txt
IF F
IF T
FILE NOFILE.TXT NOT FOUND
To No IF
.fo Shells #
7. S h e l l s
ááááááááá ZCPR│á Shell≤ arσ front-end≤ whicΦ providσá ß ì
áááááááááuse≥ interfacσ iε placσ oµ thσ norma∞ ZCPR│ prompt« ì
áááááááááThσá followinτ termina∞ session≤ sho≈ thσ MEN╒á anΣ ì
áááááááááS╚ shell≤ iε action.
B1:WORK2>NOTE Shells are Front-End Processors which can run in place
B1:WORK2>NOTE of the ZCPR3 Command Processor
B1:WORK2>NOTE Actually, the ZCPR3 Command Processor is still being
B1:WORK2>NOTE used, but it is transparent to the user now
B1:WORK2>NOTE Two shells I am going to demonstrate now are MENU and
B1:WORK2>NOTE SH:
B1:WORK2>dir root:menu.* a;dir root:sh*.* a
MENU .COM 4r
A15:ROOT -- 1 Files Using 4K ( 204K Left)
SH .COM 4r| SHDEFINE.COM 4r| SHFILE .COM 2r| SHOW .COM 4r
SHVAR .COM 4r
A15:ROOT -- 5 Files Using 18K ( 204K Left)
B1:WORK2>NOTE The MENU shell consists of only MENU.COM
B1:WORK2>NOTE The SH shell is SH.COM, but can use SHDEFINE, SHFILE, and SHVAR
B1:WORK2>NOTE for support
B1:WORK2>NOTE First, MENU:
B1:WORK2>ed menu.cpr
NEW FILE
: *i
1: -dx
2: #
3: Sample Menu
4: D - Directory Display
5: Z - Run Any ZCPR3 Command
6:
7: 1 - Set Name of Working File (Currently $f1)
8: 2 - Edit Working File
9: 3 - Type Working File
10: #
11: d!dir
12: z!"Enter Command Line -- "
13: 1setfile 1 "Enter File Name -- "
14: 2ed $f1
15: 3!type $f1
16: ##
17:
: *e
ááááááááá To run the MENU shell, just give its name.
B1:WORK2>menu
Shell Installed
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently .)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - D
CMDSTAT .COM 2 | MENU .BAK 0 | DEMO .TXT 2 | DEMO .ZEX 2
DEMO1 .TXT 2 | EXERA .COM 2 | MENU .CPR 2 | RHEX .COM 2r
RHEX2 .COM 2r| TYPEIT .COM 2
B1:WORK2 -- 10 Files Using 18K ( 284K Left)
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently .)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - Z
Enter Command Line -- dir *.com;era *.com i
CMDSTAT .COM 2 | EXERA .COM 2 | RHEX .COM 2r| RHEX2 .COM 2r
TYPEIT .COM 2
B1:WORK2 -- 5 Files Using 10K ( 284K Left)
CMDSTAT .COM - Erase (Y/N)? y
EXERA .COM - Erase (Y/N)? y
RHEX .COM is R/O
RHEX2 .COM is R/O
TYPEIT .COM - Erase (Y/N)? y
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently .)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - Z
Enter Command Line -- prot rhex?.com;era rhex?.com
RHEX .COM Set to R/W
RHEX2 .COM Set to R/W
RHEX .COM
RHEX2 .COMè
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently .)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - D
DEMO .BAK 0 | DEMO .TXT 2 | DEMO .ZEX 2 | DEMO1 .TXT 2
MENU .CPR 2
B1:WORK2 -- 5 Files Using 8K ( 294K Left)
ááááááááá MEN╒ support≤ u≡ t∩ ┤ filσ name≤ whicΦ caε bσ ì
áááááááááuseΣáá a≤á variable≤á withiεá MENU«áá Thσáá commoε ì
áááááááááapplicatioεá i≤ t∩ usσ thesσ file≤ name≤ t∩ specif∙ ì
áááááááááworkinτ files.
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently .)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 1
Enter File Name -- myfile.txt
SETFILE, Version 1.0
File Name 1 is MYFILE .TXT
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 2
NEW FILE
: *i
1: This is MYFILE.TXT
2: Isn't this fun?
3:
: *b0p
1: This is MYFILE.TXT
2: Isn't this fun?
1: *eè
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 3
This is MYFILE.TXT
Isn't this fun?
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 2
: *#a
1: *i
1: I have modified MYFILE.TXT
2:
2: *b0p
1: I have modified MYFILE.TXT
2: This is MYFILE.TXT
3: Isn't this fun?
1: *e
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 3
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - ^C
B1:WORK2>
ááááááááá Thσ followinτ i≤ ß demonstratioε oµ thσ ZCPR│ ì
áááááááááNamed-Variablσ Shell¼á SH«á S╚ allows¼ amonτ othe≥ ì
áááááááááthings¼á thσá use≥á t∩á specif∙á variable≤á iεá hi≤ ì
ááááááááácommanΣ line≤ whicΦ arσ expandeΣ a≤ macro≤ wheε thσ ì
ááááááááácommanΣá line≤á arσ interpreteΣá b∙á SH«á S╚á theε ì
ááááááááápasse≤á thσá expandeΣá commanΣ line≤ t∩á thσá ZCPR│ ì
áááááááááCommanΣ Processor¼ whicΦ execute≤ them.
B1:WORK2>NOTE Now I will demonstrate SH
B1:WORK2>sh
Shell Installed
B1:WORK2>> ;first, SH looks like the normal ZCPR3, except that the
B1:WORK2>> ;prompt is >>
B1:WORK2>>
B1:WORK2>> ;commands run normally under SH:
B1:WORK2>> dir *.txt
DEMO .TXT 2 | DEMO1 .TXT 2 | MYFILE .TXT 2
B1:WORK2 -- 3 Files Using 6K ( 292K Left)
B1:WORK2>> error4
ERROR4, Version 1.0
Error Handler Installed
B1:WORK2>> NOTE Shells, like many things under ZCPR3, can be nested:
B1:WORK2>> menu
Shell Installed
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 3
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - Z
Enter Command Line -- NOTE and, when I exit, I'm back to SH
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - ^C
B1:WORK2>> ; SH has some built-in commands, which can be determined by
B1:WORK2>> ; a ? command:
B1:WORK2>> ?
SH Commands --
? SHCMT SHECHO SHEXIT
B1:WORK2>> ; guess what SHEXIT does:
B1:WORK2>> shexit
Exiting Shell
B1:WORK2>NOTE oh, well, back to ZCPR3 ... but we were talking
B1:WORK2>NOTE about SH:
B1:WORK2>sh
Shell Installed
B1:WORK2>> ; SHCMT is intended to switch SH into a comment
B1:WORK2>> ; mode, for times like this when I want to record
B1:WORK2>> ; a lot of text and a few commands:
B1:WORK2>> shcmt
B1:WORK2; note that the prompt is now "B1:WORK2; "
B1:WORK2; I don't have to type the leading ; or the word NOTE
B1:WORK2;
B1:WORK2; If I want to execute a command, I simply prefix it with
B1:WORK2; an exclamation mark:
B1:WORK2; !dir *.txt
DEMO .TXT 2 | DEMO1 .TXT 2 | MYFILE .TXT 2
B1:WORK2 -- 3 Files Using 6K ( 292K Left)
B1:WORK2; !menu
Shell Installed
MENU Version 3.0
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - 3
èI have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
MENU Version 3.0 Strike Any Key -
Sample Menu
D - Directory Display
Z - Run Any ZCPR3 Command
1 - Set Name of Working File (Currently MYFILE.TXT)
2 - Edit Working File
3 - Type Working File
Command (<CR>=Menu, ^C=ZCPR3) - ^C
B1:WORK2; and we are back:
B1:WORK2; !?
SH Commands --
? SHCMT SHECHO SHEXIT
B1:WORK2; all commands work that way under SH
B1:WORK2; as I mentioned, SH is a Variable Shell
B1:WORK2; by this I mean that it supports named variables, which
B1:WORK2; can be defined (in groups) by SHDEFINE or one at a time
B1:WORK2; by SHVAR
B1:WORK2;
B1:WORK2; SHVAR with no args displays the names of the current
B1:WORK2; variables
B1:WORK2; !shvar
SHVAR, Version 1.0
Shell Variables --
-- No Variables Defined --
B1:WORK2;
B1:WORK2; with an arg (actually, 2 args), SHVAR defines variables
B1:WORK2; !shvar file1 myfile.txt
SHVAR, Version 1.0
Shell Variable FILE1 = MYFILE.TXT
Writing Shell Variable File SH .VAR
B1:WORK2;
B1:WORK2; and now I can reference variables by preceeding them with
B1:WORK2; a % character
B1:WORK2; !type %file1
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; does the same as
B1:WORK2; !type myfile.txt
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; note that SH variables can only be used under SH
B1:WORK2; don't confuse these with aliases, which can be used
B1:WORK2; anywhere, including under SH
B1:WORK2; !alias
ALIAS, Version 1.0
Input Alias (RETURN to Abort)
--> echo hello, world - my name is $0
Name of ALIAS Command (RETURN to Abort)? hello
Alias Created
B1:WORK2; !hello
HELLO, WORLD - MY NAME IS HELLO
B1:WORK2; !shexit
Exiting Shell
B1:WORK2>hello
HELLO, WORLD - MY NAME IS HELLO
B1:WORK2>sh
Shell Installed
B1:WORK2>> shcmt
B1:WORK2; also, SH variables can be referenced by other SH variables,
B1:WORK2; up to 20 levels deep:
B1:WORK2; !shvar cmddemo type %%file1
SHVAR, Version 1.0
Shell Variable CMDDEMO = TYPE %FILE1
Writing Shell Variable File SH .VAR
B1:WORK2; note my use of the double %% to indicate that I wanted
B1:WORK2; the % character substituted -- If I used just 1 %, then
B1:WORK2; the value of the variable would be substituted:
B1:WORK2; !shvar cmddemo1 type %file1
SHVAR, Version 1.0
Shell Variable CMDDEMO1 = TYPE MYFILE.TXT
Writing Shell Variable File SH .VAR
B1:WORK2; see the difference?
B1:WORK2; so, to execute:
B1:WORK2; !%cmddemo
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; !%cmddemo1
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; as a side comment, the SHECHO command can be used to make
B1:WORK2; SH show you the command line it is generating:
B1:WORK2; !shecho
Echo of Shell Commands is ON
B1:WORK2; !%cmddemo
TYPE MYFILE.TXT
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; Now, if I change the definition of FILE1:
B1:WORK2; !shvar file1 hisfile.txt
SHVAR FILE1 HISFILE.TXT
SHVAR, Version 1.0
Shell Variable FILE1 = HISFILE.TXT
Writing Shell Variable File SH .VAR
B1:WORK2; the meaning of CMDDEMO is different:
B1:WORK2; !%cmddemo
TYPE HISFILE.TXT
No Files
B1:WORK2; while CMDDEMO1 remains unchanged
B1:WORK2; !%cmddemo1
TYPE MYFILE.TXT
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; !ed %file1
ED HISFILE.TXT
NEW FILE
: *i
1: This is HISFILE.TXT
2:
: *e
B1:WORK2; !%cmddemo;%cmddemo1
TYPE HISFILE.TXT;TYPE MYFILE.TXT
This is HISFILE.TXT
I have modified MYFILE.TXT
This is MYFILE.TXT
Isn't this fun?
B1:WORK2; and so on ...
B1:WORK2; !shexit
Exiting Shell
B1:WORK2>
.fo Z3TCAP #
8. Z 3 T C A P
ááááááááá Thσ ZCPR│ TCA╨ (Termina∞ Capability⌐ Facilit∙ ì
ááááááááá(Z3TCAP⌐ allow≤ ZCPR│ t∩ havσ ß variet∙ oµá easily-ì
ááááááááátransportablσá screen-orienteΣ utilities«á ERROR2¼ ì
áááááááááVFILER¼á SHOW¼á anΣ VMEN╒ arσ sucΦ utilitie≤á founΣ ì
áááááááááunde≥ thσ ZCPR│ System.
B1:WORK2>NOTE The ZCPR3 TCAP (Z3TCAP) facility is supported by
B1:WORK2>NOTE three programs and one data file:
B1:WORK2>dir root:tc*.com a;dir root:*.tcp
TCCHECK .COM 2r| TCMAKE .COM 6r| TCSELECT.COM 4r
A15:ROOT -- 3 Files Using 12K ( 202K Left)
Z3TCAP .TCP 8r
A15:ROOT -- 1 Files Using 8K ( 202K Left)
B1:WORK2>NOTE TCCHECK is used to check the validity of Z3TCAP.TCP:
B1:WORK2>root:
A15:ROOT>tccheck
TCCHECK, Version 1.0
Z3TCAP File Check of Z3TCAP .TCP Version 1.0
File Checks with 43 Terminals Defined
ááááááááá Ove≥á fort∙ terminal≤ arσ currentl∙ supporteΣ ì
áááááááááunde≥ thσ Z3TCAP« Thei≥ selectioε anΣ installatioε ì
áááááááááint∩ ß ZCPR│ Systeφ i≤ illustrated:
A15:ROOT>work2:
B1:WORK2>NOTE TCSELECT is used to select your terminal from one of the
B1:WORK2>NOTE terminals in Z3TCAP.TCP:
B1:WORK2>tcselect myterm
TCSELECT, Version 1.0
** Terminal Menu 1 for Z3TCAP Version 1.0 **
A. AA Ambassador K. Concept 100
B. ADDS Consul 980 L. Concept 108
C. ADDS Regent 20 M. CT82
D. ADDS Viewpoint N. DEC VT52
E. ADM 2 O. DEC VT100
F. ADM 31 P. Dialogue 80
G. ADM 3A Q. Direct 800/A
H. ADM 42 R. General Trm 100A
I. Bantam 550 S. Hazeltine 1420
J. CDC 456 T. Hazeltine 1500
Enter Selection, + for Next, or ^C to Exit - +
** Terminal Menu 2 for Z3TCAP Version 1.0 **
A. Hazeltine 1510 K. SOROC 120
B. Hazeltine 1520 L. Super Bee
C. Heathkit H19 M. TAB 132
D. HP 2621 N. Teleray 1061
E. IBM 3101 O. Teleray 3800
F. Micro Bee P. TTY 4424
G. Microterm ACT IV Q. TVI 912
H. Microterm ACT V R. TVI 920
I. P Elmer 1100 S. TVI 950
J. P Elmer 1200 T. VC 404
Enter Selection, - for Last, + for Next, or ^C to Exit - +
** Terminal Menu 3 for Z3TCAP Version 1.0 **
A. VC 415
B. Visual 200
C. WYSE 50
Enter Selection, - for Last, or ^C to Exit - -
** Terminal Menu 2 for Z3TCAP Version 1.0 **
A. Hazeltine 1510 K. SOROC 120
B. Hazeltine 1520 L. Super Bee
C. Heathkit H19 M. TAB 132
D. HP 2621 N. Teleray 1061
E. IBM 3101 O. Teleray 3800
F. Micro Bee P. TTY 4424
G. Microterm ACT IV Q. TVI 912
H. Microterm ACT V R. TVI 920
I. P Elmer 1100 S. TVI 950
J. P Elmer 1200 T. VC 404
Enter Selection, - for Last, + for Next, or ^C to Exit - S
Selected Terminal is: TVI 950 -- Confirm (Y/N)? Y
File MYTERM .Z3T Created
B1:WORK2>dir *.z3t
MYTERM .Z3T 2
B1:WORK2 -- 1 Files Using 2K ( 286K Left)
B1:WORK2>NOTE Once you have a Z3T file, LDR can load it and, at this
B1:WORK2>NOTE time (after loading), your terminal will be known
B1:WORK2>NOTE to the ZCPR3 system and the ZCPR3 utilities can
B1:WORK2>NOTE make use of its features, such as cursor positioning,
B1:WORK2>NOTE reverse video, arrow keys, etc
B1:WORK2>ldr myterm.z3t
ZCPR3 LDR, Version 1.0
Loading MYTERM.Z3T
B1:WORK2>NOTE The commands SHOW and VFILER are now configured for
B1:WORK2>NOTE a TVI 950, as per my selection
ááááááááá No⌠á everyone'≤á termina∞á wil∞á bσá iεáá thσ ì
ááááááááádefaul⌠ Z3TCAP«á T∩ mee⌠ thi≤ problem¼ thσ utilit∙ ì
áááááááááTCMAK┼ i≤ available.
B1:WORK2>NOTE If you terminal is not on the list of terminals in
B1:WORK2>NOTE Z3TCAP.TCP, then TCMAKE can be used to define it
B1:WORK2>NOTE I will define my TVI 950 here:
B1:WORK2>tcmake myterm1
TCMAKE, Version 1.0
** Z3TCAP Main Menu for File MYTERM1 .Z3T **
Define: 1. Clear Screen Sequence
2. Cursor Motion Sequence
3. Clear to End of Line Sequence
4. Standout Mode Sequences
5. Terminal Init/Deinit Sequences
6. Arrow Keys
7. Terminal Name
Status: S. Print Status (Definitions so far)
Exit: X. Exit and Write File
Q. Quit and Abort Program without Writing File
Command? 1
ááááááááá ╔á won'⌠á borσ yo⌡ witΦá detail≤á here«á Thσ ì
ááááááááátermina∞á sessioε i≤ quitσ long¼á illustratinτá thσ ì
ááááááááámajor features of TCMAKE.
.fo "Secure" Systems #
9. " S e c u r e " S y s t e m s
ááááááááá WitΦ passworΣ protectoε anΣ nameΣ directorie≤ ì
ááááááááá(DI╥á form⌐ buil⌠ int∩ ZCPR3¼á ZCPR│ offer≤ ßá mucΦ ì
ááááááááámorσ securσ environmen⌠ thaε CP/M«á Iε particular¼ ì
áááááááááiµ thσ D╒ forφ i≤ disabled¼á thσ onl∙ directorie≤ ß ì
áááááááááuse≥ caε acces≤ arσ thosσ hσ caε name¼á anΣ somσ oµ ì
áááááááááthosσ ma∙ havσ passworΣ protection≤ oε them.
ááááááááá Here is a complete session:
AMPRO 51K TPA CP/M 2.2 with ZCPR 3.0
BIOS Version 1.2 on March 24, 1984
ZCPR3 LDR, Version 1.0
Loading SYS.ENV
Loading SYS.NDR
Loading SYS.FCP
Loading SYS.RCP
ERROR4, Version 1.0
Error Handler Installed
WELCOME TO ZCPR III
BASE>dir
AMPZ358R.COM 10 | SYS3R .RCP 2
A0:BASE -- 2 Files Using 12K ( 266K Left)
BASE>pwd
PWD, Version 1.0
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE1 A 2: PRIVATE2 A 15: ROOT
B 0: DEMO1 B 1: DEMO2 B 2: DEMO3 B 3: DEMO4
B 4: DEMO5 B 5: INTRO B 6: MAIL
BASE>dir root:
PW? unknown
AMPZ358R.COM 10 | SYS3R .RCP 2
A0:BASE -- 2 Files Using 12K ( 266K Left)
BASE>dir root:
PW? rpass
DIR .COM 2 | ERROR4 .COM 2 | GOTO .COM 2 | LDR .COM 4
MENU .COM 4 | MKDIR .COM 6 | PWD .COM 2 | SETFILE .COM 2
SH .COM 4 | SHDEFINE.COM 4 | SHFILE .COM 2 | SHOW .COM 4
SHVAR .COM 4 | SPECIAL .NDR 2 | STARTUP .COM 2 | SYS .ENV 2
SYS .FCP 2 | SYS .NDR 2 | SYS .RCP 2 | TCCHECK .COM 2
TCMAKE .COM 6 | TCSELECT.COM 4 | WHEEL .COM 2 | Z3TCAP .TCP 8
ZEX .COM 6
A15:ROOT -- 25 Files Using 82K ( 266K Left)
BASE>xxx
è File XXX.COM Not Found
ááááááááá Notσ tha⌠ thσ D╒ forφ i≤ simpl∙ ignored«á N∩ ì
áááááááááchangσ t∩ file≤ o≥ director∙ locatioε i≤ made.
BASE>1:
BASE>a:
BASE>b:
BASE>dir 1:
AMPZ358R.COM 10 | SYS3R .RCP 2
A0:BASE -- 2 Files Using 12K ( 266K Left)
BASE>dir demo1:
AMPZ3-58.COM 10 | AMPZ3-60.COM 10 | AMPZ3-61.COM 10 | AMPZ358R.COM 10
BDOS58 .COM 4 | BDOS60 .COM 4 | BDOS61 .COM 4 | CPM58 .COM 10
CPM60 .COM 10 | CPM61 .COM 10 | SYS3R .RCP 2
B0:DEMO1 -- 11 Files Using 84K ( 284K Left)
BASE>demo1:
DEMO1>root:
PW? rpass
ROOT>wheel /s
WHEEL, Version 3.0
Wheel Password? Wheel Byte is ON
ROOT>NOTE We now have one directory structure:
ROOT>pwd
PWD, Version 1.0
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE1 A 2: PRIVATE2 A 15: ROOT
B 0: DEMO1 B 1: DEMO2 B 2: DEMO3 B 3: DEMO4
B 4: DEMO5 B 5: INTRO B 6: MAIL
ááááááááá WitΦáá thσá abilit∙á t∩á havσá severa∞á nameΣ ì
ááááááááádirector∙á files¼á wσá caεá havσá severa∞á set≤á oµ ì
ááááááááádirectories¼á includinτ somσ directorie≤ whicΦá arσ ì
ááááááááábotΦá hiddeεá anΣ totall∙ inaccessablσ t∩ thσá use≥ ì
áááááááááunles≤ hσ ha≤ thσ abilit∙ t∩ loaΣ thσ prope≥á nameΣ ì
ááááááááádirector∙ (NDR⌐ file.
ROOT>NOTE Now that I am a WHEEL and in ROOT, I can define another
ROOT>NOTE directory structure which is special:
ROOT>ldr special.ndr
ZCPR3 LDR, Version 1.0
Loading SPECIAL.NDR
ROOT>pwd
PWD, Version 1.0
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE1 A 2: PRIVATE2 A 14: SYSROOT
A 15: ROOT
B 0: DEMO1 B 1: DEMO2 B 2: DEMO3 B 3: DEMO4
B 4: DEMO5 B 5: INTRO B 6: MAIL
ROOT>NOTE Note that there is a 2nd root, called SYSROOT, which
ROOT>NOTE was not known (OR ACCESSIBLE) under the old system
ROOT>NOTE (SYS.NDR)
ROOT>
ROOT>NOTE Also, as a wheel, I can obtain passwords:
ROOT>pwd pass
PWD, Version 1.0
DU : DIR Name - Password DU : DIR Name - Password
---- -------- -------- ---- -------- --------
A 0: BASE - A 1: PRIVATE1 - MYPASS1
A 2: PRIVATE2 - PASS A 14: SYSROOT - SPASS
A 15: ROOT - RPASS
B 0: DEMO1 - B 1: DEMO2 -
B 2: DEMO3 - B 3: DEMO4 -
B 4: DEMO5 - B 5: INTRO -
B 6: MAIL - MPASS
ROOT>private1:
PW? mypass1
PRIVATE1>wheel /r
WHEEL, Version 3.0
Wheel Password? Wheel Byte is OFF
PRIVATE1>pwd pass
PWD, Version 1.0
Password Request Denied - Not Wheel
DU : DIR Name DU : DIR Name DU : DIR Name DU : DIR Name
---- -------- ---- -------- ---- -------- ---- --------
A 0: BASE A 1: PRIVATE1 A 2: PRIVATE2 A 14: SYSROOT
A 15: ROOT
B 0: DEMO1 B 1: DEMO2 B 2: DEMO3 B 3: DEMO4
B 4: DEMO5 B 5: INTRO B 6: MAIL
PRIVATE1>ldr root:sys.ndr
PW? rpass
ZCPR3 LDR, Version 1.0
Loading SYS.NDR
PRIVATE1>ldr root:special.ndr
PW? rpass
ZCPR3 LDR, Version 1.0
Loading SPECIAL.NDR
PRIVATE1>sysroot:
PW? spass
SYSROOT>root:
PW? rpass
ROOT>ldr sys.ndr
ZCPR3 LDR, Version 1.0
Loading SYS.NDR
ROOT>sysroot:
ROOT>NOTE SYSROOT is not even defined now
---- End of Introduction to ZCPR3 ----
.FI B:Z3USER.IDX