NZCPRFIX.DOC -------------- from Horn Engineering Associates ----------------------------- [This fix for NZCPR and ZCMD is required for WHATSNEW (D-41 and later versions) to work correctly if your CCP is based on NZCPR] This fix for NZCPR, probably for all versions, and probably for ZCMD as well, corrects a problem with the user auto-search that will sometimes fail to search all user areas. In our case the problem was with NZCPR, Version 1.6. The problem shows up when, for example, you are in USER 4 on DRIVE B and try to execute a file, such as WHATSNEW, that is on B0. NZCPR will first search B4; then the user area designated as your restricted area (RESUSER) if the WHEEL is set for full access; then B0 (if that is the DEFUSER that you have specified by assembly default or have set with the DFU function). In this example WHATSNEW will be found on B0, and it will be executed. If it had not been found there the search would have continued to DRIVE A, USER DEFUSER (in our example, A0). Now for the problem. Suppose that the system had done just as described above and WHATSNEW was found on B0 and executed. If WHATSNEW were to be immediately executed again the search would skip the search of B0 and go to DRIVE A for the search. The problem is in the NZCPR search code. When this code determines that a target file is not on DRIVE B, it sets a flag called DFLAG as an in-line code patch. After not finding the file on B0, the flag directs the system to log-on DRIVE A and search USER 0. The problem is - DFLAG IS SET BEFORE B0 IS SEARCHED. This does not prevent B0 from being searched the first time but, if the target file is found there, it is executed without DFLAG being reset. The next time the search is made from a user area on DRIVE B other than USER 0, DFLAG will send the search directy to A0 without searching B0. The fix for this problem requires the addition of four bytes of code. This addition will probably not cause an overrun of the 2K allocation for NZCPR because it only applies when the SECURE assembly option is selected, in which case considerable code is probably not assembled. That is; if CPRTYP, CPRLST, or CPRDIR have been set FALSE. The new code unconditionally resets DFLAG at any time that a file has been found and loaded. It is added immediately following the label MLA1: just before the file is loaded for execution. This label will be found very near the end of the program. Add the following code: IF SECURE XRA A ;get a zero STA DFLAG ;reset DFLAG ENDIF ;SECURE This code will be followed by the existing label, LOADADR. Sorry, but now you must reassemble NZCPR, using MAC, and reinstall in in your system. If you have forgotten how to do this, look for a library file called CCPLOC.LBR for the details. Regards... Charles Horn 4 November 1984