home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / RCPM / Z3ANDBYE.DOC < prev    next >
Text File  |  2000-06-30  |  12KB  |  219 lines

  1.                    Notes on using BYE with ZCPR3
  2.  
  3.       This is an article on my experiences in using ZCPR3 on an RCP/M. It is
  4. intended for System Operators (SYSOPs) who are using, or are considering
  5. using, ZCPR3 in the RCP/M (with BYE) application. If you have any comments
  6. or experiences you would like to share, please feel free to do so at:
  7.  
  8.                     David McCord, SYSOP
  9.                     The ZCPR3 BBS
  10.                     (415) 489-9005
  11.                     24 hrs/7 days  300/1200
  12.  
  13.       One of the first things that a potential ZCPR3 sysop should understand
  14. is that implementation of ZCPR3 will reduce the Transient Program Area (TPA)
  15. available for running the BBS software you are using. In my case, the message
  16. system being used is METAL (by Tim Gary)...since it does not require a
  17. larger-than-average TPA, I have no problem with a "full" implementation of
  18. ZCPR3, which subtracts 5K bytes as compared to a "standard" cp/m or ZCMD
  19. arrangement.  However, some packages, such as RBBS, do require a large TPA,
  20. especially in the compile or link phases of program generation (that darn
  21. L80!). Simply be aware that if you are tight on memory space, that ZCPR3 will
  22. add to your problems. 
  23.  
  24.       Having read that, you may be saying, "Well, why would I want to use
  25. ZCPR3 on my RCP/M?" There are many advantages to using ZCPR3, whether for your
  26. own personal use, or for RCP/M....
  27.  
  28.       -Named Directories
  29.             Can help you partition your system in an easier-to-understand
  30.             manner. Also, the "secure" mode of operation with named directories
  31.             can add an additional level of security to that provided with BYE.
  32.  
  33.       -ALIAS capability
  34.             ALIASes make a lot of things very easy. They can take the "teeth"
  35.             out of useful programs that normally can't be used in RCP/M
  36.             environments by "filtering" dangerous command line options. Also,
  37.             ALIASes can be used as primitive "translators" that will (for
  38.             instance) translate LDIR LIBNAME to DIR LIBNAME.LBR $L. This means
  39.             that users who are not familiar with SD (DIR in the example) can
  40.             still use the old familiar LDIR without actually having the LDIR
  41.             program on your system!
  42.  
  43.       -Flow Control
  44.             The command line IF/ELSE/FI capabilities allow graceful error
  45.             recovery, and also allow branching capability. This means that
  46.             an ALIAS can do different things depending on whether an IF
  47.             condition is true or false.
  48.  
  49.       -MENU capability
  50.             Allows you to make your system much more user friendly by
  51.             presenting callers with a list of choices.
  52.  
  53.       -Video Applications
  54.             Video applications are programs that utilize terminal display
  55.             functions such as clear screen, reverse or dim video, cursor
  56.             addressing, and more. The Z3TCAP (Terminal CAPabilities) file
  57.             contains (presently) over sixty terminal types, and the coherent
  58.             usage of this information by the various ZCPR3 video utilities
  59.             give you the opportunity to go beyond the "plain vanilla" terminal
  60.             approach common on RCP/M's these days.
  61.  
  62.       So you see, there are many advantages to using ZCPR3 on your RCP/M. I
  63. personally think that the power and flexibility of ZCPR3 with not only take
  64. the conventional personal computer world by storm, but will also be the
  65. operating mode of choice for the RCP/M's of the world.
  66.  
  67.       For instance, here are two examples of the uses of ALIAS...In the first
  68. example, a simple "translator" approach is shown. The ALIAS file that contains
  69. the commands shown will be named LDIR.COM:
  70.  
  71.             Line 1:DIR $1.LBR $$L
  72.  
  73.       The "$1" is used as with the SUBMIT.COM program provided by Digital
  74. Research...it means "substitute the first command line parameter here". Thus,
  75. if the user had typed LDIR LIBNAME, LIBNAME would be substituted for $1. The
  76. "$$L" part of the command will be resolved as "$L"...the leading $ tells ALIAS
  77. that a following $ is to be interpreted literally, and no substitution is to
  78. take place. So, if the user had typed LDIR LIBNAME, the ALIAS named LDIR would
  79. be invoked, the substitution of LIBNAME for $1 would occur, and the resulting
  80. command that the ALIAS would "feed" to ZCPR3 is DIR LIBNAME.LBR $L.
  81.  
  82.       The second example shows how an ALIAS can filter out "dangerous" command
  83. line options. This is a little more complicated. TCSELECT is a ZCPR3 program,
  84. that, when invoked with NO command line parameters (like TCSELECT<cr>) simply
  85. allows the user to select a terminal type from Z3TCAP file, and loads it into
  86. RAM at the appropriate address. This is not dangerous. However, when a user
  87. invokes it with a filename parameter (like TCSELECT FILENAME.TYP<cr>), the
  88. information from the Z3TCAP file is written to that filename. This IS
  89. dangerous, because if the user had entered TCSELECT XMODEM.COM, the XMODEM
  90. program would be overwritten with the TCAP data. So, the goal is to prevent
  91. users from using this feature by using an ALIAS to "filter" command line
  92. parameters.
  93.       The first step is to rename TCSELECT.COM so that it cannot be executed
  94. directly; TCSELECT.DAT is what it is renamed to. (Only the SYSOP can do this
  95. assuming the REN command is set to check the wheel byte, as in the RCP
  96. SYS 1.0C. Remote users typically do not have wheel priviliges.) Then, the
  97. ALIAS is created containing the commands shown below. The name of the ALIAS
  98. is TCSELECT.COM...so that when the user invokes TCSELECT, the ALIAS will assume
  99. control. ALIASes cannot be aborted via control-C; and their commands are not
  100. "echoed" on the screen. Remember this when trying to understand the example.
  101.  
  102.       EXAMPLE:
  103.             Line 1:WHL PASSWORD;
  104.             Line 2:IF EXIST FOO.COM;
  105.             Line 3:REN TCSELECT.DAT=FOO.COM;
  106.             Line 4:FI;
  107.             Line 5:REN FOO.COM=TCSELECT.DAT;
  108.             Line 6:FOO;
  109.             Line 7;REN TCSELECT.DAT=FOO.COM;
  110.             Line 8:WHL
  111.  
  112.       EXPLANATION:
  113.             Line 1: This line uses the WHL command of RCP SYS 1.0c to "set"
  114. the WHEEL byte, assuming PASSWORD is the correct wheel password for your
  115. system. If PASSWORD was NOT the correct password, WHL "re-sets" the wheel byte,
  116. i.e., it clears it. We need to have the wheel byte "set" so that the following
  117. REN commands will work. Remember, REN checks the wheel byte and only works if
  118. it is in the "set" state.
  119.             Lines 2-4: These lines will be discussed last. At this point,
  120. pretend that they don't exist as the rest of the ALIAS needs to be explained
  121. first.
  122.             Line 5: This command renames the ORIGINAL TCSELECT.COM (Remember,
  123. we renamed it to TCSELECT.DAT) to FOO.COM in preparation for the next step. (It
  124. could not be renamed to TCSELECT.COM, because name is being used by the ALIAS!)
  125.             Line 6: This line actually executes the ORIGINAL TCSELECT program.
  126. The thing to notice here is that it invokes it with NO command line parameters.
  127. Even if the user had typed TCSELECT XMODEM.COM, the parameter XMODEM.COM is not
  128. passed!
  129.             Line 7: After TCSELECT is done (either through selecting a terminal
  130. and load RAM or aborted with control-C), it is renamed back to the unexecutable
  131. TCSELECT.DAT.
  132.             Line 8: The WHL command, this time with an incorrect password
  133. (actually no password!) will "reset" the wheel byte.
  134.       Now, to explain what lines 2-4 are all about: Ask yourself what happens
  135. when a remote user drops carrier in the middle of running FOO (the original
  136. TCSELECT)? BYE will seize control, effectively ABORTING the ALIAS. When the
  137. next user goes to the cp/m section (like the message system C command), FOO
  138. will already be there! If we did NOT have lines 2-4, Line 5 (because of the
  139. way the REN command works under ZCPR3) would ERASE FOO.COM! It does this BEFORE
  140. it discovers there is no TCSELECT.DAT...Thus, unless we have some way of
  141. checking whether FOO.COM exists, a situation can arise where the original
  142. TCSELECT commits suicide! Lines 2-4 check for this situation, Line 2 checks to
  143. see if FOO.COM exists using the ZCPR3 IF. If it indeed exists, Line 3 will be
  144. executed, renaming it to TCSELECT.DAT, and avoiding the suicide situation. Line
  145. 4 is a "marker" that shows where the effect of the IF command on Line 2 ends.
  146. If FOO.COM did not exist when that IF command on Line 2 was executed, the flow
  147. state would be set to FALSE, and all commands would be ignored until an FI was
  148. encountered. So, if FOO.COM did not exist at that point, Line 3 would be
  149. ignored.
  150.  
  151.       Whew! Although somewhat complicated, this ALIAS can take the "teeth" out
  152. of TCSELECT, and keep creeps from overwriting accessible files on your system.
  153. (However there's still one minor problem....can you find it? It will be covered
  154. in the next section, but look for it as a test...) So, this concludes the
  155. discussion of the uses of ALIASes in ZCPR3 RCP/M applications.
  156.  
  157.       BYE (the version I am presently using is 3-26) needs some minor additions
  158. to take care of some "loose ends" when running with ZCPR3. In particular, BYE
  159. should "flush" (clean out) the Multiple Command Line Buffer that ZCPR3 uses
  160. to store strings of commands, like for instance ALIASes when they are executed.
  161. The following excerpt from my version of BYE illustrates the needed changes:
  162.  
  163. <Option Area>
  164.  
  165. Z3CL    EQU    0FF00h    ;where my Multiple Command Line Buffer is
  166.  
  167. <this code is in the area that gets moved to high RAM when running with BYELOW>
  168. ;
  169. ; ZCPR3 Command Line Buffer Clear Subroutine
  170. ;
  171.      IF    Z3CL ne 0
  172. DOZ3CL:    LXI    H,Z3CL
  173.     MVI    M,(Z3CL MOD 256)+4
  174.     INX    H
  175.     MVI    M,(Z3CL/256)
  176.     INX    H
  177.     MVI    M,0C8h    ;Length of my buffer
  178.     INX    H
  179.     XRA    A
  180.     MOV    M,A
  181.     INX    H
  182.     MOV    M,A
  183.     RET
  184.      ENDIF        ; Z3CL
  185.  
  186. This code will initialize the MCLB so that anything "leftover" as a result of
  187. a caller dropping carrier in the middle of a long ALIAS would be flushed out.
  188. If this was not done, and then you, the SYSOP, aborted BYE with a control-C
  189. locally between callers, whatever had been left there would then be executed!
  190. This could be very dangerous...a particularly nasty scenario is for some creep
  191. to leave a command like ERA *.* in there. This is very nasty because BYE will
  192. restore ("set") the wheel byte when you locally abort, and ERA will just kill
  193. all of your files in the current user area!! And it can be just plain annoying
  194. to just be forced to finish off some less-dangerous command. This is why this
  195. code MUST be executed in BYE. It should be CALLed from two areas in BYE; the
  196. first is the sysop abort routine, called EXCPM. The second routine is where
  197. the COMFILE is called; the COMFILE may not be used in your system...if so,
  198. then you probably don't need to worry about it. However, if you are using the
  199. COMFILE option, then the CALL to DOZ3CL should be placed just prior to the
  200. instruction "CALL 100H" that hands over control to the COMFILE.
  201.  
  202.       The bug in the TCSELECT ALIAS is that it is possible that FOO.COM may
  203. exist when the user enters cp/m. He could then enter FOO XMODEM.COM with the
  204. same painful result of erasing XMODEM. To avoid this, I use the COMFILE option
  205. of BYE to force the user into TCSELECT (the ALIAS) when entering cp/m. How do
  206. I do this? you may be asking....the solution is yet another ALIAS, that is used
  207. as the COMFILE! It is very simple really, the ALIAS name is STARTBBS.COM:
  208.  
  209.             Line 1:BBSPROG;
  210.             Line 2:TCSELECT
  211.       Line 1 will execute the BBSPROG, whatever it is. The user does whatever
  212. in the BBS program, and when he goes to cp/m, he will execute TCSELECT. This
  213. ensures that FOO.COM will not be available to make trouble.
  214.  
  215. If you are reading this on my bbs, this file can be found in the ZCPR3:
  216. directory where it is available for downloading. Please pass it to other rcp/m
  217. systems, particularly systems using ZCPR3. Thank You.
  218.                                               -David McCord  8 Nov 1984
  219.