home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug041.arc / NULU.DOC < prev    next >
Text File  |  1979-12-31  |  41KB  |  889 lines

  1.                             NULU.DOC
  2.                    Documentation for NULU.COM
  3.                          as of 10/01/84
  4.                            Version 1.0
  5.  
  6. NULU.COM  and  NULU.DOC  are  both  Copyright  1984,   by  SYSTEM 
  7. SOLUTIONS,  P.O.  Box 35972,  Dallas, TX  75235. Both may be used 
  8. freely  for  non-commercial purposes,  but neither may  be  sold, 
  9. included in a package for sale,  or used as an incentive to  buy, 
  10. by   any  person,   organization  or  corporation  without  prior 
  11. arrangement with the copyright holder,  SYSTEM SOLUTIONS,  or the 
  12. author  of this version,  Martin  Murray.   Furthermore,  neither 
  13. SYSTEM  SOLUTIONS nor Martin Murray will bear any  responsibility 
  14. for  losses  resulting  from the use or  inability  to  use  this 
  15. program.   NULU.COM may not be distributed without NULU.DOC,  nor 
  16. may the copyright messages be removed from either file nor caused 
  17. to not be displayed.
  18.  
  19.  
  20.                         ACKNOWLEDGEMENTS
  21.  
  22. This  program  would not have been possible were it not  for  the 
  23. elegant work of Gary P. Novosielski and those others working with 
  24. the LU library structure.
  25.  
  26.  
  27.                           INTRODUCTION
  28.  
  29. NULU  is  offered  as a complete replacement for LU  and  LSWEEP.  
  30. Weighing  in  at 14k,  it includes nearly all  features  of  both 
  31. programs and then some.  It features:
  32.  
  33.     Two operation modes with a full menu for each
  34.     Viewing  and printing of member files,  unsqueezing  when
  35.                 necessary
  36.     Extraction of member files with an option to unsqueeze
  37.                 where appropriate
  38.     Bigger libraries, up to 800 members or more depending on
  39.                 available memory
  40.     Automatic member sorting, all members kept sorted at all
  41.                 times
  42.     Faster reorganization
  43.     Enhanced error handling
  44.     Access to deleted members
  45.     Optional read only mode
  46.     General compatibility with LU and NSWEEP syntax
  47.     Numerous user patches
  48.  
  49.  
  50.                  DIFFERENCES BETWEEN NULU AND LU
  51.  
  52. I  am aware of only one thing that LU does that NULU does not do.  
  53. LU  maintains  a  CRC for each member file and  for  the  library 
  54. directory  as a whole.   NULU doesn't do this at all.   In  fact, 
  55. NULU changes these CRC bytes to 00 as soon as it gets the chance.  
  56. In case you still want or need to run LU on a library modified by 
  57. NULU, LU will simply regard it as a library created by an earlier  
  58. LU version and will promptly set CRC's for the various members.
  59.  
  60.  
  61.  
  62.                               NULU
  63.  
  64. To the best of my knowledge,  NULU will run on any system running 
  65. CP/M  2.x  or  higher,  however it has only been  tested  on  the 
  66. Osborne  1  and the Osborne Executive computers.   It is  written 
  67. entirely in 8080 assembly language.
  68.  
  69. A  complete  discussion of the nature and advantages  of  library 
  70. files is beyond the scope of my endurance,  however a short recap 
  71. is in order.
  72.  
  73. A  library file is a single CP/M file which maintains 1  or  more 
  74. smaller  files  as its members.   Each file is written  into  the 
  75. library  and recorded in the library directory.   After that,  it 
  76. may be accessed for viewing,  printing,  or execution,  or may be 
  77. extracted from the library to assume the status of a  stand-alone 
  78. file once again.
  79.  
  80. The  reasons for doing this are many.   For one,  under CP/M each 
  81. file  occupies a minimum amount of disk space.   This amount  can 
  82. range  from 1k to 16k,  depending on the system.   Even though  a 
  83. file  may  only be 1 byte in length,  it will  still  occupy  the 
  84. minimum  required  amount;  the  rest  of the  space  is  wasted.  
  85. Putting these files in a library minimizes the possible waste  to 
  86. 127 bytes.
  87.  
  88. Each  file also occupies a directory entry.   On most floppy disk 
  89. systems,  the  maximum  number  of files  per  disk  is  64.   By 
  90. including  a  file  in a library the directory space it  used  to 
  91. occupy is freed for another file.
  92.  
  93. Additionally,  using  library files can simplify the  process  of 
  94. categorization  by  subsuming several files of similar  types  or 
  95. subjects into one file.
  96.  
  97. However,  there are also dangers associated with using libraries.  
  98. The main one is that if a library file is lost or damaged, all of 
  99. the member files are lost as well.   The solution to this problem 
  100. can  be  summed  up in one  word:  BACKUP.  NULU  probably  isn't 
  101. perfect, and we all know that disk systems aren't, so backup your 
  102. important  libraries,  please.  I  don't  want to  hear  any  sad 
  103. stories.
  104.  
  105. Almost  as  important  as  backing up libraries  is  the  use  of 
  106. discretion  when deciding what to put into them.   Let's face it, 
  107. if  a file is in a library it is not as easy to get to.   If  you 
  108. need to get to a file every 15 minutes,  it probably shouldn't be 
  109. in a library except as a backup measure.
  110.  
  111.  
  112.                   AN ASIDE CONCERNING FILESPECS
  113.  
  114. When  specifying  a  filespec,  wildcards  may  be  used  freely, 
  115. however,  unlike  most programs,  NULU doesn't insist that a  "." 
  116. separate  the  filename  from the  filetype.   For  example,  the 
  117. filespec  "**"  means the same thing as "*.*" to  NULU.   On  the 
  118. other hand,  the filespec "FRED.TXT" should be typed in just like 
  119. that.   "FREDTXT" would make NULU think that no filetype had been 
  120. specified.   The rule is simple: use a dot any time you like, but 
  121. it is only strictly necessary when it is needed for clarity.
  122.  
  123. When  specifying  a  drive and/or user area the  syntax  is  very 
  124. liberal.    "A15:**"  means  the  same  as  "15/A:*.*",  as  does 
  125. "1A5:**".   The  colon is absolutely necessary.   If a  different 
  126. user area is desired for the default drive,  the drive  specifier 
  127. may  be  omitted,  as in "15:**",  just as the user area  may  be 
  128. omitted as in "A:**".
  129.  
  130. If  a  drive/user  specification  is made,  but  no  filespec  is 
  131. indicated, a filespec of ????????.??? is generated.  Therefore to 
  132. indicate the default drive,  current user area, and a filespec of 
  133. ????????.???, just type a colon by itself (e.g., ":") !
  134.  
  135.  
  136.                          NULU OPERATION
  137.  
  138. NULU  may be invoked with or without a command tail.   A  command 
  139. tail can consist of any combination of valid NULU operators up to 
  140. 128  characters  (the limit imposed by the  CCP.   Once  NULU  is 
  141. running, command lines can be as long as 254 characters.)
  142.  
  143. As  in LU,  all NULU commands are preceded by a dash.   This is a 
  144. copy of the menu for the command mode of operation:
  145.  
  146.          -A Add members             -B Brief toggle
  147.          -C Close the library       -D Delete members
  148.          -E Extract members         -F Filesweep mode
  149.          -G Get filespec            -K Krunch the library
  150.          -L List members            -M Menu
  151.          -N Rename members          -O Open a library
  152.          -P Print members           -Q Unsqueeze members
  153.          -R Replace members         -T Replace/Add members
  154.          -U Drive/User change       -V View members
  155.          -X Exit NULU               -Y Disk directory
  156.          -< Redirect input          -> Redirect output
  157.  
  158. Commands  may  be strung together,  each terminated by  a  space.  
  159. They  are processed left to right.   All characters are converted 
  160. to upper case.
  161.  
  162. The  default drive/user area are displayed along with the name of 
  163. the  current command mode each time the console is  prompted  for 
  164. input.
  165.  
  166. The  commands  will  be explained in order  of  their  appearance 
  167. above.    All  items  in  [square  brackets]  indicate   optional 
  168. parameters.    Filespec   parameters  enclosed  in  (parenthesis) 
  169. indicate references to deleted member files.   Three dots ("...") 
  170. after a parameter indicate infinite repetition.
  171.  
  172.  
  173.                             COMMANDS
  174.  
  175. -A       ADD MEMBERS
  176.          Syntax: -a filespec[ filespec...]
  177.  
  178.          Use  this command to add files from disk to the  current 
  179.          library.   NULU will make a series of passes through the 
  180.          directory,  adding  files as it goes,  until the list of 
  181.          matching  files  is  exhausted.   If  matching  filename 
  182.          already exists as an active member in the  library,  its 
  183.          name will be displayed and the file will not be added.
  184.  
  185.          In  all file addition and replacement operations,  if  a 
  186.          deleted  entry  of identical size can be  located,  that 
  187.          disk  space and directory entry will be used rather than 
  188.          allocating new space for the file.   This means that  it 
  189.          will  be  necessary  to reclaim wasted disk  space  less 
  190.          often.
  191.  
  192. -B       BRIEF TOGGLE
  193.          Syntax: -b
  194.  
  195.          This toggles the prompting mode.  The release version of 
  196.          NULU is setup to print the full name of the current mode 
  197.          for  a prompt,  as in "-ADD MEMBERS A0:>".   If BRIEF is 
  198.          turned on the user will simply see "-A A0:>".   NULU may 
  199.          be  permanently patched to default to BRIEF ON  or  OFF.  
  200.          See NULU MODIFICATION.
  201.  
  202. -C       CLOSE THE LIBRARY
  203.          Syntax: -c
  204.  
  205.          This  command  closes the current library,  writing  its 
  206.          directory  to disk if any changes have been made to  the 
  207.          directory.   The  library  directory  is  NEVER  written 
  208.          except when the library is closed,  so be sure to do it.  
  209.          If  you forget to do so and remove the disk,  NULU  will 
  210.          prompt  you  for  the  disk again and  will  attempt  to 
  211.          recover, but no guarantees!  
  212.  
  213.          Some  other operations that cause the current library to 
  214.          be closed are:
  215.                -k, -o, -x
  216.  
  217. -D       DELETE MEMBERS
  218.          Syntax: -d filespec[ filespec (filespec)...]
  219.  
  220.          Member  files matching the given filespec will be  given 
  221.          deleted status in the library directory, except when the 
  222.          filespec  is  enclosed in  parenthesis.   In  that  case 
  223.          matching  deleted  members will be given active  status.  
  224.          That is,  they will be undeleted.   If the filename of a 
  225.          matching deleted member file already exists as an active 
  226.          member, the filename will be displayed and the file will 
  227.          not be undeleted.
  228.  
  229. -E       EXTRACT MEMBERS
  230.          Syntax: -e filespec[=newfilespec filespec...]
  231.  
  232.          Use  this  command to extract active member  files.   If 
  233.          extraction to the current drive/user area is desired, no 
  234.          further syntax is necessary.  To indicate another drive, 
  235.          however,   a   destination  filespec  may  be   included 
  236.          following an equals sign.  Example:
  237.  
  238.          -e **=a5:
  239.  
  240.          would extract all active members to drive A,  user  area 
  241.          5.   Files  may  be  renamed as well  as  redirected  by 
  242.          indicating  a  filespec along with,  or in place  of,  a 
  243.          drive user specification.  Examples:
  244.  
  245.          1.  -e *asm=*bak
  246.          2.  -e *asm=5:*txt
  247.          3.  -e fred.txt=sam.txt jane.inf=c8:girls.dbf
  248.  
  249.          The examples would produce the following results:
  250.  
  251.          1.  Extract all files with a type of .ASM to the default 
  252.          drive/user renaming them with the filetype of .BAK.
  253.          2.  Extract all files of type .ASM to user area 5 of the 
  254.          default drive, renaming each with the .BAK filetype.
  255.          3.   Extract  the  member file FRED.TXT to  the  default 
  256.          drive/user  under the name of SAM.TXT,  and extract  the 
  257.          member file JANE.INF to user area 8 of drive C: with the 
  258.          filename GIRLS.DBF.
  259.  
  260.          The  only  rule  to remember is that  if  a  destination 
  261.          filespec is entered it cannot be any less ambiguous than 
  262.          the  source filespec.   That is,  "*asm=*bak"  is  valid 
  263.          while "**=*bak" is not valid.
  264.  
  265. -F       FILESWEEP MODE
  266.          Syntax: -f
  267.  
  268.          This command places NULU in its second operational mode: 
  269.          the  filesweep  mode.   This  allows the  user  to  move 
  270.          through  the directory of active member files as if they 
  271.          were  individual files being examined by a program  like 
  272.          NSWEEP.    The  filesweep  mode's  command  list  is  as 
  273.          follows:
  274.  
  275.          A Next member              B Previous member
  276.          C Close the library        D Delete member
  277.          E Extract member           L Log new library
  278.          P Print member             Q Unsqueeze member
  279.          R Rename member            U Drive/User change
  280.          V View member              W Wildcard rename
  281.          X Exit NULU                Y Disk directory
  282.          Z NULU command mode        ? Menu
  283.  
  284.          Because of the extreme similarity between these commands 
  285.          and  the commands of NULU's command mode,  only a  short 
  286.          description of each command will be given.
  287.  
  288.          A  --  Advance to next member
  289.                (spacebar, cr, or lf will produce the same result)
  290.          B  --  Back up to previous member
  291.          C  --  Close the current library
  292.          D  --  Delete current member file
  293.          E  --  Extract current member file
  294.                (prompt allows redirection)
  295.          L  --  Logon to new library
  296.                (closes the current library)
  297.          P  --  Dumps the current member file to LST:
  298.                (unsqueezes if needed)
  299.          Q  --  Extract  current  member  file,  unsqueezing  if 
  300.                     necessary
  301.                (prompt allows redirection)
  302.          R  --  Rename current member file
  303.          U  --  Change drive/user defaults
  304.                (returns file pointer to the top of the file list)
  305.          V  --  View current member file
  306.                (unsqueezes if needed)
  307.          W  --  Wildcard rename of members
  308.                (prompts for both oldname and newname)
  309.          X  --  Exit NULU
  310.                (closes all files)
  311.          Y  --  Get disk directory for default drive/user
  312.                (returns file pointer to the top of the file list)
  313.          Z  --  Return to NULU command mode
  314.                (current library remains open)
  315.          ?  --  Print the filesweep mode menu
  316.                (returns file pointer to the top of the file list)
  317.  
  318.          If,  when  the  filesweep mode is entered,  or  after  a 
  319.          library  has  been  closed,   there  is  not  a  library 
  320.          currently open, the filesweep mode will prompt with:
  321.  
  322.          No library open.
  323.  
  324.          and will accept only the following commands:
  325.  
  326.          L,U,X,Y,Z,?
  327.  
  328.          Likewise,  if a library is open but only has a directory 
  329.          with no other active members, the message
  330.  
  331.          No member files.
  332.  
  333.          will be printed and only the commands listed above will 
  334.          be accepted.
  335.  
  336.          During  the filesweep mode operation,  each file will be 
  337.          listed  in  the  order  in which  it  is  found  in  the 
  338.          directory,  along with the size in K that the file would 
  339.          occupy if it were extracted to the default drive.
  340.  
  341.          If  the filesweep mode is terminated by a return to  the 
  342.          NULU  command  mode,  any commands that followed the  -F 
  343.          command  on  the  previous NULU  command  line  will  be 
  344.          executed.
  345.  
  346. -G       GET FILESPEC
  347.          Syntax: -g filespec
  348.  
  349.          NULU  will search for the filespec indicated.   If it is 
  350.          found,  processing  continues.   If  not,  the  user  is 
  351.          prompted  to insert the disk containing  that  filespec.  
  352.          The  drive is then reset and search again.   The program 
  353.          will  prompt  forever  until  it  receives  the   proper 
  354.          filespec or until a cntrl-c is entered,  forcing NULU to 
  355.          continue without the filespec being found.
  356.  
  357.          This  command can be useful when attempting  to  control 
  358.          NULU  through  a submit utility like  DRI's  SUBMIT.COM.  
  359.          For example, one might type:
  360.  
  361.          nulu -o a:asm -g b5:-work.005 -e **=b10: -g a0:-5.005 -x
  362.  
  363.          After loading,  NULU would open a library called ASM.LBR 
  364.          on  drive A:  in the current user area.   Next it  would 
  365.          search  user area 5 of drive B:  for filespec  -WORK.005 
  366.          until  it  was  found.   Then all  active  member  files 
  367.          would  be  extracted  to  user  area  10  of  drive  B:.  
  368.          Finally, NULU would search user area 0 of drive A: for a 
  369.          filespec  called  -5.005 until found.  Then  NULU  would 
  370.          terminate.  Notice here that the ASM.LBR didn't have  to 
  371.          be  closed  before  the search for  the  final  filespec 
  372.          because   no  change  had  been  made  to  the   library 
  373.          directory.   If  a change had been made,  after the  new 
  374.          filespec had been loaded,  NULU would have demanded  the 
  375.          disk with ASM.LBR back so it could update the directory.  
  376.          Therefore   the  GET  operation  would  be   effectively 
  377.          negated.
  378.  
  379. -K       KRUNCH THE LIBRARY
  380.          Syntax: -k[ <number of entries to allow]
  381.  
  382.          Even  though all members are kept in alphabetical  order 
  383.          at all times, when a member is deleted the disk space it 
  384.          occupies  is not released to the operating system  until 
  385.          the KRUNCH command is executed.   KRUNCH consists of the 
  386.          following steps:
  387.  
  388.          1.   The  library directory is re-sorted by sector index 
  389.          number,  that is, in the order in which the member files 
  390.          actually exist in the library.
  391.          2.  The library is closed.
  392.          3.   A  new library called WORKLBR.$$$ is opened in  the 
  393.          default  drive/user  area and the user  is  prompted  to 
  394.          input the number of files that the new library should be 
  395.          able to contain.   If the user wants just enough entries 
  396.          to contain the currently active members, the number 1 or 
  397.          any  number less than or equal to the current number  of 
  398.          active  entries  may  be  entered.    If  the   optional 
  399.          parameter  listed above is entered,  it will be used  as 
  400.          the  number of entries.   (The KRUNCH processed  may  be 
  401.          aborted  here by typing RETURN or 0.   Please note  that 
  402.          the  library  directory  counts as  an  entry  and  will 
  403.          automatically be accounted for by NULU.)
  404.          4.   Once WORKLBR.$$$ is opened, the active member files 
  405.          from the original library will be copied one by one into 
  406.          the  new  library.   The copy routine uses  a  recursive 
  407.          process to copy as many files at one time as possible.
  408.          5.   The  old  library  is deleted  and  WORKLBR.$$$  is 
  409.          renamed with the old library name.
  410.  
  411.          Examples:
  412.          1.  -k
  413.          2.  -k <1
  414.          3.  -u b5: -k <63
  415.          4.  -u b5: -k <1 -u a0: -k <63
  416.  
  417.          The above example would produce the following results:
  418.  
  419.          1.   The  library  would  be  KRUNCHed  to  the  default 
  420.          drive/user  area.   The user would be prompted to  input 
  421.          the number of entries to allow.
  422.          2.   The  library  would  be  KRUNCHed  to  the  default 
  423.          drive/user  area with just enough entries to contain all 
  424.          currently active member files.
  425.          3.   The default drive/user area would be changed to B5: 
  426.          before  the  KRUNCH begins.   Then the library would  be 
  427.          KRUNCHed, allowing 63 entries.
  428.          4.   The default drive/user area would be changed to B5: 
  429.          before  the  KRUNCH begins.  The KRUNCH would  commence, 
  430.          allowing  only  enough  entries to  contain  all  active 
  431.          members.   The drive/user area would be changed to  A0:. 
  432.          Then  the library would be KRUNCHed again,  allowing  63 
  433.          entries.
  434.  
  435. -L       LIST MEMBERS
  436.          Syntax: -l[ filespec]
  437.          Syntax: -l[ (filespec)]
  438.  
  439.          Use  this  command to list the contents of  the  library 
  440.          directory.   Each  member filename will printed followed 
  441.          by  the starting relative sector number in  the  library 
  442.          file, the size of the member in sectors, and the size in 
  443.          K  that the file would occupy if it were to be extracted 
  444.          to the default drive/user area.  Finally, a recap of the 
  445.          size of all member files listed is printed,  along  with 
  446.          the number of sectors occupied by deleted files.
  447.  
  448.          The  parameters listed above can be used to control  the 
  449.          selection of files for display.  Examples:
  450.  
  451.          1.  -l
  452.          2.  -l **
  453.          3.  -l (**)
  454.          4.  -l *asm
  455.          5.  -l (fred.txt)
  456.  
  457.          The above examples would produce the following results:
  458.  
  459.          1.  All active member files listed.
  460.          2.  All active member files listed.
  461.          3.  All deleted member files listed.
  462.          4.  All  active  member files  matching the filespec  of 
  463.          ????????.ASM listed.
  464.          5.   All  deleted member files called  FRED.TXT  listed.  
  465.          (Note  that is IS possible to have more than one deleted 
  466.          file with the same name.)
  467.  
  468. -M       MENU
  469.          Syntax: -m
  470.  
  471.          Print the command mode menu.
  472.  
  473. -N       RENAME MEMBERS
  474.          Syntax: -n oldfilespec=newfilespec[...]
  475.          Syntax: -n (oldfilespec)=newfilespec[...]
  476.  
  477.          This  command is used to rename active or deleted member 
  478.          files.    Wildcards   are  fully  supported,   but   the 
  479.          newfilespec   can   be  no  less  ambiguous   than   the 
  480.          oldfilespec.    Deleted   members  may  be  renamed   by 
  481.          enclosing   the   oldfilespec   ONLY   in   parenthesis.  
  482.          Examples:
  483.  
  484.          1.  -n *asm=*bak
  485.          2.  -n (fred.txt)=sam.txt
  486.          3.  -n **=**
  487.  
  488.          The above examples would produce the following results:
  489.  
  490.          1.    All   active   members   matching   the   filespec 
  491.          ????????.ASM would be renamed with a filetype of .BAK.
  492.          2.   The first deleted member file called FRED.TXT would 
  493.          be renamed to SAM.TXT.   All other members matching that 
  494.          filespec would be listed along with a message indicating 
  495.          that they could not be renamed.
  496.          3.  All active member files would be listed, each with a 
  497.          message  indicating  that  they  could  not  be  renamed 
  498.          because the name already exists.
  499.  
  500.  
  501. -O       OPEN A LIBRARY
  502.          Syntax: -o filename[ <number of entries to allow]
  503.  
  504.          With the exception of the filesweep Logon command,  this 
  505.          command is the only method to open or create a  library.  
  506.          NULU  will search for the filename indicated.   If it is 
  507.          found, it will be opened and a message will be displayed 
  508.          indicating the size of the Data Transfer  Buffer.   This 
  509.          is  the number of sectors in memory that NULU will  have 
  510.          to use in extracting, adding or copying member files.
  511.  
  512.          If the file is not found,  the user will be prompted for 
  513.          the  number of entries to allow in the new library.   If 
  514.          the optional parameter above is passed,  the number will 
  515.          be used to determine the directory size of the  library.  
  516.          All  directories can contain some multiple of 4 entries.  
  517.          All  numbers  input will be rounded up  to  the  nearest 
  518.          multiple  of  4.   Remember  that the  directory  itself 
  519.          counts  as  one entry and that NULU  will  automatically 
  520.          make space for it.
  521.  
  522.          The filename passed must be unambiguous.
  523.  
  524.          NOTE ON DIRECTORY SIZE:
  525.          Depending on available memory, libraries with as many as 
  526.          1250 entries (theoretically) can be opened.   But  watch 
  527.          the  Data  Transfer Buffer Size!   If it is less than  8 
  528.          sectors you will not be able to unsqueeze any files.
  529.  
  530. -P       PRINT MEMBERS
  531.          Syntax: -p filespec[ filespec (filespec)...]
  532.  
  533.          With  this command,  the ascii contents of member  files 
  534.          matching  the filespecs given will be dumped to the list 
  535.          device.   If the file is squeezed,  NULU will  unsqueeze 
  536.          it.   Deleted  members  may be listed by  enclosing  the 
  537.          appropriate filespec in parenthesis.
  538.  
  539. -Q       UNSQUEEZE MEMBERS
  540.          Syntax: -q filespec[=newfilespec filespec...]
  541.  
  542.          This command is identical in operation and syntax to the 
  543.          EXTRACT command, except that if the matching members are 
  544.          squeezed, they will be unsqueezed.
  545.  
  546. -R       REPLACE MEMBERS
  547.          Syntax: -r filespec[ filespec...]
  548.  
  549.          This command is identical in operation and syntax to the 
  550.          ADD command, except that matching files will be added to 
  551.          the  library ONLY if they already exist in the  library.  
  552.          They will be deleted, then the new files will be added.
  553.  
  554. -T       REPLACE/ADD MEMBERS
  555.          Syntax: -t
  556.  
  557.          This command is a combination of the ADD and the REPLACE 
  558.          commands.   If  the  files do not exist in the  library, 
  559.          they  will be added.   If they do exist,  they  will  be 
  560.          replaced.
  561.  
  562. -U       DRIVE/USER CHANGE
  563.          Syntax: -u new drive/user
  564.  
  565.          Use  this command to change the default drive/user area.  
  566.          A colon (":") must follow the drive/user spec.  Example:
  567.  
  568.          -u a5:
  569.  
  570.          would switch the default drive/user area to A5:.
  571.  
  572. -V       VIEW MEMBERS
  573.          Syntax: -v filespec[ filespec (filespec)...]
  574.  
  575.          This  command will list the ascii contents of all member 
  576.          files matching the given filespec to the console device.  
  577.          Deleted  members  may  be  indicated  by  enclosing  the 
  578.          filespec  in  parenthesis.   If  the  member  files  are 
  579.          squeezed,  they will be unsqueezed.   At each page, NULU 
  580.          will accept one  of the following commands:
  581.  
  582.          1.  Cntrl-x to skip to the next member file
  583.          2.  Cntrl-c to abort further listing
  584.          3.  L to list one line
  585.          4.  CR, space, or LF to list another full page
  586.  
  587.          At  the  end  of each member  file  the  message
  588.  
  589.           "Press RETURN"
  590.  
  591.          will  be  displayed and NULU will wait for  a  keystroke 
  592.          before moving to the next matching member file.
  593.  
  594. -X       EXIT NULU
  595.          Syntax: -x[ "$$$.SUB command line"]
  596.  
  597.          This  command will set a flag indicating that  when  the 
  598.          current  NULU  command line is  exhausted,  NULU  should 
  599.          terminate.  But the command is actually a toggle.  If it 
  600.          is  entered  twice  on a line the effect of  the  second 
  601.          issuance will be to negate the first.   If the  optional 
  602.          parameter is passed, it will be written to a file called 
  603.          $$$.SUB  on  drive A:  in the user area that was  active 
  604.          when NULU was first loaded.  The line will be encoded as 
  605.          a   SUBMIT  command  line  recognizable  by   the   CCP.  
  606.          Therefore, when NULU exits, the CCP will reach into that 
  607.          file and execute the line.   (CP/M Plus users take note:  
  608.          the  $$$.SUB file will be written to the drive that  was 
  609.          the   default   drive  when  NULU  was  first   loaded.)  
  610.          Examples:
  611.  
  612.          1.  -x
  613.          2.  -x -x
  614.          3.  -x "nsweep b:"
  615.  
  616.          The above examples would produce the following results:
  617.  
  618.          1.  The  termination  flag  will be set  and  NULU  will 
  619.          terminate when the current command line is exhausted.
  620.          2.   The  termination flag is set and the  reset.   NULU 
  621.          does not terminate.
  622.          3.   The  termination  flag  is set and  a  file  called 
  623.          $$$.SUB  is  created on the appropriate drive  with  the 
  624.          command line "NSWEEP B:" encoded in it.
  625.  
  626. -Y       DISK DIRECTORY
  627.          Syntax: -y[ filespec]
  628.  
  629.          This  command  will print an unsorted directory  of  the 
  630.          disk  indicated by the parameter passed,  or a  complete 
  631.          directory if none is passed.  The scope of the directory 
  632.          may  be  limited by indicated the appropriate  ambiguous 
  633.          filespec.
  634.  
  635. -<       REDIRECT INPUT
  636.          Syntax: -< filename
  637.  
  638.          This  command  will  cause NULU  to  open  the  filename 
  639.          indicated  and begin accepting commands from it  instead 
  640.          of  receiving them from the console.   This type of file 
  641.          is,  in  effect,  a NULU command file.   Syntax  of  the 
  642.          commands  in this file is identical in every way to  the 
  643.          syntax used in normal NULU operation.  Each command line 
  644.          in  the file must be terminated by a CR,LF.   If another 
  645.          "-<"  command is encountered in the  file,  the  current 
  646.          command  file  will  be closed and the new  one  opened.  
  647.          After  the  commands  have  been  completely  processed, 
  648.          control  will be returned to the console.   All  command 
  649.          lines will be converted to upper case and echoed to  the 
  650.          console before processing.  Any commands appearing after 
  651.          a "-<" command will be ignored.
  652.  
  653.          The filename passed must be unambiguous.
  654.  
  655. ->       REDIRECT OUTPUT
  656.          Syntax: -> filename
  657.          Syntax: ->
  658.  
  659.          With the first form of this command, NULU output will be 
  660.          sent  to the filename indicated.   If the  file  already 
  661.          exists, it will be deleted.  All special characters that 
  662.          the  user  may have patched into NULU (see  below,  NULU 
  663.          MODIFICATION) will be sent to the file as well, with the 
  664.          exception  of  the EOF character,  26 (1ah).   The  only 
  665.          output  not echoed to the file will be output caused  by 
  666.          viewing or printing a member file.
  667.  
  668.          The filename passed must be unambiguous.
  669.  
  670.          Under  the  second  form of this  command,  the  current 
  671.          output file, if any will be closed.  When NULU is caused 
  672.          to  terminate,  the current output file is closed  along 
  673.          with the current library, if any.
  674.  
  675.  
  676.                          ERROR MESSAGES
  677.  
  678. All NULU error messages are of the form:
  679.  
  680. ERROR XX: Explanation
  681.  
  682. where  "XX"  is some number from 0 to 255 and "Explanation" is  a 
  683. clue as to the nature of the error.  Each error message is listed 
  684. below,  along  with an explanation.   Suggestions about  ways  to 
  685. handle the error are given when appropriate.
  686.  
  687. ERROR 63: ambiguity error
  688. Problem:       This means that you entered an ambiguous  filespec 
  689.                where an unambiguous filename was required.
  690.  
  691. ERROR 68: disk full
  692. Problem:       The  library disk became full during file addition 
  693.                or  KRUNCHing  or  the  destination  disk  of   an 
  694.                extraction command became full.
  695. Solution:      If  the  error  occurred  during  KRUNCHing,  NULU 
  696.                should have recovered by itself, reopening the old 
  697.                library.   If it did not recover, then you removed 
  698.                the  original disk before the KRUNCH was  complete 
  699.                or a serious read error occured.
  700.  
  701.                If  the  error occurs during file addition to  the 
  702.                library,  operation should not be impaired, but no 
  703.                files  that required additional disk space can  be 
  704.                added  to the library.   Note that deleted entries 
  705.                can still be overwritten by incoming files as long 
  706.                as  the file sizes match.   The original file that 
  707.                caused  the error will be recorded in the  library 
  708.                directory as a deleted entry.
  709.  
  710.                If  the  error  occurs during file  extraction  or 
  711.                unsqueezing   the  destination  file  is   deleted 
  712.                because it is an incomplete file.   Extraction can 
  713.                continue as before.
  714.  
  715. ERROR 73: invalid drive
  716. Problem:       An  invalid drive for your system was chosen  (see 
  717.                below,  NULU MODIFICATION) or a letter higher than 
  718.                "P" was indicated.
  719. Solution:      Choose another drive or re-patch NULU.
  720.  
  721. ERROR 77: not enough memory
  722. Problem:       An  attempt  was  made to open a  library  with  a 
  723.                directory  too  large  to be  accounted  for  with 
  724.                available memory.
  725. Solution:      Open  the library on a computer with a larger  TPA 
  726.                and  reorganize  it  so it can be handled  by  the 
  727.                smaller system.
  728.  
  729. ERROR 78: user cancel
  730. Problem:       No problem.   NULU is simply letting the user know 
  731.                why  an OPEN LIBRARY or KRUNCH operation has  been 
  732.                cancelled.
  733.  
  734. ERROR 83: no directory space
  735. Problem:       An  attempt  was made to create a file on  a  disk 
  736.                with no free directory entries.
  737.  
  738. ERROR 85: file not found
  739. Problem:       The  filespec indicated for some  operation  could 
  740.                not be located.
  741.  
  742. ERROR 86: CP/M 2.x or higher required
  743. Problem:       An  attempt was made to run NULU on a system  with 
  744.                an CP/M version number of less than 2.0.
  745.  
  746. ERROR 88: seek to unwritten sector
  747. Problem:       A  sector  required to gain access to  a  file  is 
  748.                indicated by CP/M to be unwritten.
  749. Solution:      The  library  directory  or  perhaps  the  library 
  750.                itself has become trashed at some point.  Deleting 
  751.                the  entry  and KRUNCHing will probably render  it 
  752.                harmless,  but  the  safest course to take  is  to 
  753.                obtain a fresh copy of the library.
  754.  
  755. ERROR 100: bad library directory
  756. Problem:       The  file  specified  could not  be  opened  as  a 
  757.                library  file.
  758. Solution:      The  directory could be bad,  but most likely  the 
  759.                file  simply isn't a library.   Check it out  with 
  760.                some disk editor like SPZ or EDFILE.
  761.  
  762. ERROR 115: bad syntax
  763. Problem:       Improper syntax was user to attempt some operation.
  764.  
  765. ERROR 116: squeeze decode table
  766. Problem:       A  file has a squeeze decoding table,  but at some 
  767.                point the table is trashed or perhaps is  missing.  
  768. Solution:      None really; get a new copy of the file.
  769.  
  770. ERROR XX: undefined
  771. Problem:       Unknown.
  772. Solution:      Write   down  all  information  presented  on  the 
  773.                terminal.   The number following the word ERROR is 
  774.                especially important.  Get the information to  me.  
  775.                Mail it or call and I will try to help.
  776.  
  777.  
  778.  
  779.                         NULU MODIFICATION
  780.  
  781. Patches  will  be  listed in the order in which  they  appear  in 
  782. NULU.COM.   Each  patch is explained and the default  values  are 
  783. listed immediately next to the patch address.   All addresses are 
  784. absolute hexadecimal.
  785.  
  786. Patch     Default             Explanation
  787. 00171h      00h               Non-zero  makes  NULU use  the  Z80 
  788.                               instructions LDIR and LDDR for data 
  789.                               movement.
  790. 00172h      50h               Number  of  characters  each   full 
  791.                               video   line  can   contain.    Not 
  792.                               necessarily  the same as the number 
  793.                               you can see.
  794. 00173h      50h               Number  of characters visible on  a 
  795.                               line at any one time.
  796. 00180h      10h               Number  of  contiguously   numbered 
  797.                               disk drives in your system.  If you 
  798.                               have drives A and B, set this value 
  799.                               to  2.   It  will prevent you  from 
  800.                               accessing an invalid drive.
  801. 001c5h      00h               Set  to  a non-zero value  to  make 
  802.                               NULU READ/ONLY.   No operators will 
  803.                               be  executed that could change  the 
  804.                               library directory in any way.
  805. 001c6h      00h               LU.COM   was   set   up   to   exit 
  806.                               automatically if a command tail was 
  807.                               used when LU was invoked.  With the 
  808.                               release  version of NULU,  it takes 
  809.                               the -X command to exit.   Set  this 
  810.                               byte to a 01h to get it to act like 
  811.                               LU  in this respect.   That is,  it 
  812.                               will   automatically   exit   after 
  813.                               executing the passed command  tail, 
  814.                               if one was present.
  815. 001c7h      01h               Set  to  a 00h to start  NULU  with 
  816.                               BRIEF  mode  ON (long messages  not 
  817.                               printed).
  818. 001c8h      00h               Starting here are 39 bytes in which 
  819.                               any  valid  NULU operators  may  be 
  820.                               stored.     This   line   will   be 
  821.                               automatically executed when NULU is 
  822.                               loaded,   even  before  any   other 
  823.                               parameters  passed  on the  command 
  824.                               line.  This might be used to create 
  825.                               a  version  of  NULU  that,   after 
  826.                               loading,    sets   the   drive/user 
  827.                               defaults to B0:,  prints the  menu, 
  828.                               scans  the drive for library files, 
  829.                               then  switches to the open  library 
  830.                               mode.  That command line would look 
  831.                               like this:
  832.  
  833.                               -U B: -M -Y *LBR -O
  834.  
  835.                               Notice that all characters in  this 
  836.                               line  MUST  be  UPPER  CASE.    The 
  837.                               entire line MUST be terminated by a 
  838.                               null  byte.    Only  39  bytes  are 
  839.                               available  for  text...not  a  byte 
  840.                               more.   The  40th  byte is for  the 
  841.                               null terminator.
  842. 03103h      0ah               If  you  have trouble  thinking  in                               
  843.                               decimal,  you can change this  byte 
  844.                               to  get NULU to output all  numbers 
  845.                               in whatever base you please, from 2 
  846.                               to 24h (36d).
  847. 03825h    0005h               This  is  the address of  the  BDOS 
  848.                               vector.  All operating system calls 
  849.                               go  through this address.   If  you 
  850.                               have some weird,  non-standard CP/M 
  851.                               implementation  you can patch  this 
  852.                               to try to make NULU work with it.
  853. 03876h      3ch               This  is  the number of lines  that 
  854.                               NULU will print on each page during 
  855.                               member file printing.   Change this 
  856.                               value  in accordance with the  line 
  857.                               printer patch below.
  858.  
  859. Starting at 03848h are 6 data areas used to define strings needed 
  860. to control the console attributes.   Each string is preceded by a 
  861. byte  indicating its active length.   Then 5 bytes are  available 
  862. for  each definition.   Therefore a total of 6 bytes is  consumed 
  863. for each video control.  The attributes are, in order:
  864.      DIM or REVERSE VIDEO ON   (DIM is preferred)
  865.      DIM or REVERSE VIDEO OFF
  866.      UNDERLINING ON
  867.      UNDERLINING OFF
  868.      CURSOR POSITIONING (not used in NULU)
  869.      CLEAR SCREEN
  870.  
  871. Each control becomes active as soon as it is patched in.
  872.  
  873. Likewise,  there  is one string defined for the LST:  device that 
  874. will be issued immediately before printing a file.   It begins at 
  875. 038adh and has the same format as the strings above.
  876.  
  877.  
  878.  
  879.                            FINAL NOTES
  880.  
  881. Please  report any bugs or problems to Martin  Murray,  P.O.  Box 
  882. 35972, Dallas, Tx  75235 or call (214) 351-6117.
  883.  
  884. 17.
  885.  
  886.                             NULU.DOC
  887.                    Documentation for NULU.COM
  888.                          as of 10/01/84
  889.