*********************************************************** * * * 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 (? for Help)? a2:priv2 Adding PRIV2 -- Password? mypass2 10 Entries in Directory Directory Entry (? 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 (? 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 ( = 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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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 (=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  .