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 / ZCPR33 / Z3-33 / Z33UPD.DOC < prev    next >
Text File  |  2000-06-30  |  18KB  |  306 lines

  1. Here is a list of features and changes in ZCPR33.
  2.  
  3. MAJOR SYSTEM ENHANCEMENTS
  4.  
  5.     1.  Transient programs are now installed automatically at execution time 
  6.         (not at load time).  No longer will you need Z3INS (or Z-RIP), and 
  7.         no longer will you have files fail to operate correctly because you 
  8.         forgot to install them.
  9.  
  10.     2.  Extended command processors (ECPs) and error handlers can now 
  11.         coexist.  If a ZCPR33-compatible ECP encounters an error in 
  12.         operation, it can return control to the command processor for error 
  13.         handling.  In fact, any program can force invocation of the error 
  14.         handler to process the command by which the program was invoked.  
  15.         This can be useful when the program detects a syntax error and would 
  16.         like to afford the user the opportunity to edit the command.
  17.  
  18.     3.  The command processor can load programs automatically to starting 
  19.         addresses other than 100H using a new type-3 environment descriptor.  
  20.         If the environment type number in the program header is more than 2, 
  21.         then the word after the environment address (i.e., the word at 10bh) 
  22.         will be used as the load address for the program.  By linking 
  23.         extended command processors and error handlers to an address high in 
  24.         memory, one can cause these programs to be loaded so as not to 
  25.         affect a transient program loaded in the TPA at 100H.  This means 
  26.         that the GO command can be used after an erroneously entered command 
  27.         has caused the ECP and error handler to be invoked.  The same could 
  28.         be done with small shell programs, such as a history shell.  The new 
  29.         FCP package loads the transient IF processor in high memory also, 
  30.         and the new RCP dynamically allocates its buffers at the top of the 
  31.         TPA, so that, again, the GO command can be used fairly predictably.  
  32.         A further use of the new dynamic loading feature is to make 
  33.         transient programs that act as pseudo-residents.  For example, one 
  34.         can now have a transient SAVE program (which could be much more 
  35.         powerful than the resident one).  If SAVE.COM is linked with a type-
  36.         3 environment with a load address of 8000H, then it can be used to 
  37.         save any memory image in the range 100H-7FFFH.  Programs like 
  38.         FINDERR and MEX2Z, which have to examine the memory image left by 
  39.         the previous program that ran, can now be made to examine any part 
  40.         of memory, even at the bottom of the TPA, by linking them to load in 
  41.         high memory.
  42.  
  43.     4.  The command processor can now, like the ZCPR3 utilities, configure 
  44.         itself dynamically according to parameters set in the environment 
  45.         descriptor (Z3ENV).  The features that can be controlled by the 
  46.         environment are:
  47.                 a.  the maximum allowed drive and user number
  48.                 b.  the acceptance of the DU form (DUOK)
  49.                 c.  the addresses of the RCP, FCP, and NDR
  50.         The ability to get the RCP, FCP, and NDR addresses from the 
  51.         environment makes it possible to allocate a single large buffer in 
  52.         different proportions under the control of an alias.
  53.  
  54.  
  55. SPEED ENHANCEMENTS
  56.  
  57.     1.  The SCANCUR option now works correctly so that the command processor 
  58.         does not automatically scan the user's current directory first.  One 
  59.         can now have a command search path that looks first in the directory 
  60.         where one's most often used programs reside before searching the 
  61.         current directory.  The current directory can be omitted from the 
  62.         path so that it is scanned only when a colon is included before the 
  63.         command name.  The latter feature is particularly useful with ram 
  64.         disks.  To make it easier to get the effect of a leading colon (a 
  65.         shifted character), a period (not a shifted character) can be used 
  66.         instead.
  67.  
  68.     2.  An option allows searching of the command path and the extended 
  69.         command processor to be bypassed when an explicit directory is 
  70.         specified with the command.  Then when one makes a typing mistake or 
  71.         uses the wrong name for a file, time will not be wasted scanning the 
  72.         entire path, which may include some slow devices, before the error 
  73.         handler is invoked.
  74.  
  75.     3.  With the tremendous power offered by an extended command processor, 
  76.         a significant fraction of the user's commands may be intended for 
  77.         the ECP.  If a command is entered with a leading space, the 
  78.         processing of the command will be directed to the ECP immediately, 
  79.         saving the time of searching the path.
  80.  
  81.     4.  The minimum path and root path features have now been implemented 
  82.         correctly and efficiently (the minpath no longer takes up any room 
  83.         in the command processor).  Since the minimum path prevents the 
  84.         command processor from looking more than once in the same directory 
  85.         for a file, operating speed is improved.
  86.  
  87.  
  88. COMMAND PROCESSING PRIORITY CHANGES
  89.  
  90.     1.  Commands in the resident command package (RCP) are now scanned 
  91.         before those that are resident in the command processor (CPR) 
  92.         proper.  In this way, when an RCP is loaded that supports a more 
  93.         powerful version of a command present in the CPR, the RCP command 
  94.         will take precedence.
  95.  
  96.     2.  Command line input to the command processor now comes from four 
  97.         sources in the following order:
  98.                 a.  a running ZEX script
  99.                 b.  a running SUBMIT job
  100.                 c.  the shell stack
  101.                 d.  the user
  102.         By moving the priority of ZEX input to the top, ZEX jobs can now run 
  103.         nicely and quickly under shells (since the shell does not have to be 
  104.         reloaded for each line of the ZEX script), and the shells do not 
  105.         have to contain complex code to check for ZEX input.  Once a ZEX job 
  106.         has been started, it is treated as if its script were a single long 
  107.         command line entered by the user.
  108.  
  109.  
  110. IMPROVED SECURITY FEATURES
  111.  
  112.     1.  Security with the DU form of directory reference has been made more 
  113.         rigorous.  It is now quite possible to allow the DU form to be used 
  114.         and still have a secure system.  The highest drive and user number 
  115.         are now under control of the environment, as noted above.  In 
  116.         addition, if a user has reached a drive or user number beyond that 
  117.         range by using a named directory, the D: or U: forms cannot then be 
  118.         used to reach other drives or users that are out of range.  All 
  119.         directories accessed by any DU-type form (DU:, D:, or U:) are fully 
  120.         checked.
  121.  
  122.     2.  For enhanced performance in systems with DU accesses disabled by the 
  123.         DUOK flag or with some named directories beyond the max DU limits, 
  124.         DU expressions that reference directories for which there is a named 
  125.         directory with no password will always be accepted.  For example, if 
  126.         the maximum allowed drive is C but there is a named directory FLOPPY 
  127.         which is J0:, the commands "J0:" and "XD J0:" will work exactly the 
  128.         same as if FLOPPY had appeared in the place of J0.
  129.  
  130.     3.  For convenience, password checking of named directories can be 
  131.         automatically disabled when the wheel byte is on.
  132.  
  133.     4.  Optionally, attempts to log in illegal directories can be passed 
  134.         directly to the extended command processor for action.  One use of 
  135.         this is to display a message and a listing of the allowed areas (by 
  136.         running PWD, for example).
  137.  
  138.     5.  To reduce the nuisance to users in a secure system, password and 
  139.         range checking are not applied to references to the currently logged 
  140.         in directory.  Thus, for example, once you have entered an area 
  141.         named SECRET (B7) by using the password, commands like "XD SECRET:" 
  142.         or "XD B7:*.COM" will be accepted.  Such commands would not normally 
  143.         be entered manually but are often generated by alias scripts.  I 
  144.         have had some aliases ask me for a password four or five times for a 
  145.         directory that I am already logged into!
  146.  
  147.     6.  Password checking is no longer performed for commands scanned while 
  148.         the current IF state is false.  In ZCPR30 the user was asked for the 
  149.         password whenever a passworded directory appeared in a command, even 
  150.         if the command was not going to be executed.  As a result, complex 
  151.         aliases could result in the user being asked numerous times for the 
  152.         password even though only one of several possible commands would 
  153.         actually execute.
  154.  
  155.  
  156. ENHANCEMENTS TO CPR-RESIDENT COMMANDS
  157.  
  158.     1.  The command table (and certain other information) is placed in a 
  159.         standard location in the code (as in the RCP and FCP modules) so 
  160.         that an 'H' command in the RCP or a SHOW command can display 
  161.         information about the resident commands (and other options) 
  162.         supported in the command processor.
  163.  
  164.     2.  Command errors now result in the invocation of the error handler.  
  165.         This is very important when the failure of a command could have a 
  166.         serious detrimental impact on the rest of a command line script.  
  167.         For example, if a SAVE or REN failed, later operations on the 
  168.         resulting file would not work as planned.  By vectoring to an error 
  169.         handler, the user is given the opportunity either to fix the command 
  170.         or to abort the entire script.
  171.  
  172.     3.  When the SAVE or REN command will overwrite an existing file, the 
  173.         user is prompted.  In ZCPR33 the operation of ZEX is temporarily 
  174.         suspended so that unplanned prompts like this will not upset the ZEX 
  175.         script.  If you have ever experienced this situation, you know what 
  176.         a mess it used to cause.
  177.  
  178.     4.  The command REN NEWFILE=OLDFILE has enhanced exception checking.  
  179.         Previously, if NEWFILE already existed and OLDFILE did not, the user 
  180.         would nevertheless be asked if NEWFILE should be erased.  With an 
  181.         affirmative answer, only after NEWFILE was erased would the user be 
  182.         informed that there was no OLDFILE.  Now, the existence of OLDFILE 
  183.         is checked first.
  184.  
  185.     5.  The JUMP command has been significantly enhanced so that it can now 
  186.         serve a useful purpose.  Previously, the command "JUMP 1000" left 
  187.         the default FCBs and the command tail set based on the string 
  188.         "1000".  Now the command line is reparsed after the address token.  
  189.         This means, for example, that "JUMP 100 COMMAND-TAIL" functions 
  190.         identically to "GO COMMAND-TAIL".  It is now possible to execute 
  191.         code loaded at an arbitrary address AND pass parameters to it in the 
  192.         usual way.
  193.  
  194.     6.  The SAVE command can now save a specified number of sectors using 
  195.         the syntax described in "ZCPR3, The Manual", namely, using the form 
  196.         "SAVE nn FILENAME S" or "SAVE nnH FILENAME S".
  197.  
  198.     7.  The DIR command has the additional default forms "DIR /A" and "DIR 
  199.         /S" to display all files in the directory with any attribute or with 
  200.         the SYS attribute respectively.
  201.  
  202.     8.  The GET command will not allow a file to be loaded over the first 
  203.         page of memory (this happened often in the past because of the 
  204.         documentation error that indicated that the first parameter with GET 
  205.         was supposed to be the page address rather than the full address).
  206.  
  207.  
  208. MISCELLANEOUS NEW FEATURES
  209.  
  210.     1.  The address of the environment descriptor is passed in the HL 
  211.         register when a program is called.  This affords an alternative 
  212.         method for automatically installing programs, one that does not 
  213.         depend on the standard 'Z3ENV' header at the beginning of the 
  214.         program.
  215.  
  216.     2.  The address of the beginning of the current command is always kept 
  217.         in the message buffer at address Z3MSG+4.  Formerly this occurred 
  218.         only when there was an error, and the information was going to be 
  219.         needed by the error handler.  With the new code, programs can make 
  220.         whatever use they wish of this information.  In Z33FCP (soon to be 
  221.         released) this feature is used to determine easily whether or not an 
  222.         explicit directory or colon occurred before an IF command.  Shells 
  223.         can use this feature to determine precisely how they were first 
  224.         invoked by the user, namely with an explicit DU: form, an explicit 
  225.         DIR: form, or neither.
  226.  
  227.     3.  The drive/user area from which a program was actually loaded by the 
  228.         command processor is put into the S1 (user) and S2 (drive) bytes of 
  229.         the external FCB at offsets 13 and 14 into the FCB.  Programs can 
  230.         thus determine where the CPR was able to locate them.  (Note that 
  231.         once the file has been loaded, only the name and type fields of the 
  232.         FCB need be preserved for use by programs; the remaining bytes can 
  233.         be used for any purpose.)
  234.  
  235.     4.  The two entry point vectors in the command processor have been 
  236.         replaced by relative rather than absolute jumps.  The byte at offset 
  237.         2 that is freed up contains a version ID (33H) that programs can use 
  238.         to determine whether they are running under version 3.3 of ZCPR.  
  239.         After the second jump (i.e., at offset 5) there are three 
  240.         configuration bytes, where each bit indicates whether or not a 
  241.         specific optional feature of ZCPR33 has been implemented.  The 
  242.         structure of these bytes can be determined from the source code, and 
  243.         they will be documented later.  Here is one example of a use for 
  244.         this.  A program can determine whether or not SCANCUR (automatic 
  245.         inclusion of the current directory at the head of the path) is in 
  246.         effect in the command processor and can then follow the same 
  247.         convention.  ARUNZ used to scan for the ALIAS.CMD file with SCANCUR 
  248.         enabled.  In a future version, I will make ARUNZ follow the command 
  249.         processor.  Another use is with a version of the SHOW command that 
  250.         will tell one much more about the CPR configuration.  (Note that the 
  251.         table of commands now begins at an offset of 08H in the CPR; the "H" 
  252.         command in my experimental RCP145 will have to be modified to work 
  253.         correctly -- it presently looks for the command table at an offset 
  254.         of 6.)
  255.  
  256.  
  257. BUG FIXES AND CODE ENHANCEMENTS
  258.  
  259.     1.  The length of the command tail that is copied from the command line 
  260.         to the tail buffer at 80h is now length limited so that the tail 
  261.         cannot overwrite code at 100h.  If the tail is too long, it will be 
  262.         truncated and a warning message will be displayed.  Processing will 
  263.         continue, however.  Without this checking, the system could easily 
  264.         be crashed or even damaged by entering commands with very long 
  265.         tails.
  266.  
  267.     2.  The default file control blocks are now properly initialized and 
  268.         filled when the extended command processor is invoked.
  269.  
  270.     3.  The root path element is now computed correctly with the minimum 
  271.         path feature enabled (in fact, the latter is no longer an option -- 
  272.         it is always enabled).
  273.  
  274.     4.  The command processor will no longer go into an infinite loop when 
  275.         the error handler cannot be found.  The built-in error handling will 
  276.         always take over under this condition.
  277.  
  278.     5.  When a command error occurs during a false IF condition, invocation 
  279.         of an external error handler was futile, because the error handler 
  280.         command line would be flushed.  Results would be unpredictable and 
  281.         invisible.  Now, when error handling is invoked during a false IF 
  282.         state, the internal error handler is always given control, and it 
  283.         echoes the flushed command line to the screen so that the user knows 
  284.         what has happened.
  285.  
  286.     6.  In ZCPR30 the code for loading a file into memory made sure that the 
  287.         CPR was not overwritten, but it did not allow for the case where a 
  288.         resident system extension (RSX) was present that protected memory 
  289.         even below the CPR.  ZCPR30 could overwrite the RSX code.  In ZCPR33 
  290.         the address of the highest free memory is calculated correctly.
  291.  
  292.     7.  The sending of carriage-return-linefeeds during invocation of the 
  293.         extended command processor has been fixed so that the ECP looks 
  294.         exactly like the normal command processor (in ZCPR30 there used to 
  295.         be another new line for each ECP invocation).
  296.  
  297.     8.  The code for previously existing functions has been significantly 
  298.         shortened by using better algorithms, by eliminating redundant or 
  299.         unused sections of code, by rearranging the code to eliminate jumps, 
  300.         and by using the special Z80 opcodes.  The previously existing 
  301.         functions were implemented so much more efficiently that most of the 
  302.         new features are accommodated without an increase in total code 
  303.         size.  The logical arrangement of the code has been greatly 
  304.         improved, routines now being grouped by function and placed into 
  305.         modules.  The code is now fully, clearly, and extensively commented.
  306.