home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug037.arc / LU.DOC < prev    next >
Text File  |  1979-12-31  |  23KB  |  666 lines

  1.  
  2.  
  3. Documentation for LU.COM and LRUN.COM
  4.  
  5.  
  6. This  document applies to version 1.10 of LU.COM and version
  7. 1.0 of LRUN.COM.
  8.  
  9. Copyright (c) 1982 Gary P. Novosielski
  10. All rights reserved.
  11.  
  12. Permission  is  hereby  granted  to copy and distribute this
  13. document  for  any  non-commercial  purpose. Any use of this
  14. material  for  commercial  advantage  without  prior written
  15. consent of the author is prohibited.
  16.  
  17.  
  18.  
  19.                         INTRODUCTION
  20.  
  21. Lubrary  Utility  (LU)  is  a  program to allow combining of
  22. multilple  files  into  one  larger  file.  It requires CP/M
  23. version  2.0  or  higher  to  run.  LU  was  developed as an
  24. alternative  to  the excellent ARCHIVE series of programs by
  25. Michael Rubenstein. The major differences are:
  26.  
  27.      LU  was written mostly in the BDS implementation of the
  28. C  language,  with substantial reduction of object code size
  29. as  compared  with  the  ARCHIVE programs. The add, extract,
  30. delete,  list/map, and reorganize functions are all combined
  31. in one object program of less than 20k.
  32.      The directory information is stored in the same file as
  33. the  data,  or  member  files.  The  amount  of  space to be
  34. allocated  to  the  directory  must be specified by the user
  35. when  a  new library is created, but can be changed when the
  36. file  is reorganized. The size of each directory entry is 32
  37. bytes,  which  means each four directory entries take up one
  38. sector  of the library file. Currently only 16 bytes of each
  39. entry  are  used,  with 16 bytes being reserved for use with
  40. possible  future enhancements. The directory itself uses one
  41. entry  for  control  information, so the number of directory
  42. sectors  needed  for  a library of m members is (m + 1) / 4,
  43. rounded up to the next whole number.
  44.      The  user need not be concerned with this discussion as
  45. directory  size  is calculated by the program. All directory
  46. sizes  are  input and output in terms of entries, each entry
  47. being a potential member file. The program adjusts directory
  48. size to an integral number of sectors.
  49.  
  50.      LRUN.COM  is  a  small (12 sector) program which allows
  51. running  a  .COM (object code) file member directly from any
  52. library,  without  having  to  extract it to a separate disk
  53. file.
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64. Page 1   82-08-07
  65.  
  66.  
  67.  
  68.  
  69. Documentation for LU.COM and LRUN.COM
  70.  
  71.  
  72.                      WHY USE LIBRARIES?
  73.  
  74.      First,  a library file usually takes up less space than
  75. the total of the individual member files which went into it.
  76. The  reason  for  this  is that CP/M allocates disk space in
  77. fixed  blocks  or groups, typically 2k bytes each. Any space
  78. after  the  last  sector  of  a file up to the next 2k block
  79. boundry  is wasted. The same files in a library use only the
  80. number of sectors they actually need, and though the library
  81. itself  may  have  a  partially wasted block at the end, and
  82. requires   some  space  for  directory  information  at  the
  83. beginning,  the  net  effect  is  usually  a saving of total
  84. space.  The  best results are seen when many small files are
  85. combined into one library.
  86.      Second,  a library file makes most efficient use of the
  87. CP/M disk directory, since it is treated as only one file by
  88. CP/M regardless of how many members it contains.
  89.      Third,  libraries  can  aid in transferring packages of
  90. software  from  one system to another using XMODEM. Only one
  91. file  is transferred, eliminating the need to run the XMODEM
  92. transfer  program several times, the chance of overlooking a
  93. needed  file, and the problems of naming conflicts, (such as
  94. READ.ME files) among unrelated packages.
  95.  
  96.  
  97.  
  98.                    WHY NOT USE LIBRARIES?
  99.  
  100.      There   are  some  very  good  reasons  for  not  using
  101. libraries.
  102.      For one thing, files within a library are not available
  103. to  most "normal" programs. If a frequently accessed file is
  104. placed  in  a library, it will have to be extracted from the
  105. library  to  its  free-standing counterpart before it can be
  106. used  by  a  program. (.COM files are a notable exception to
  107. this,  because  of  the  availability  of  the LRUN command,
  108. covered later.)
  109.      Libraries  can  actually  waste disk space. When a disk
  110. file  is erased, CP/M returns the space formerly used by the
  111. file  to  the  free  space pool for use by new files. When a
  112. member  file  is  deleted  from a library however, the space
  113. previously  occupied by the file is not useable. The library
  114. must  be  reorganized  to make this space available to CP/M.
  115. While  this  is  easy  to  do with the LU command, it is not
  116. automatic,  and  if the situation is ignored, large areas of
  117. disk can be tied up as unproductive "dead space".
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130. Page 2   82-08-07
  131.  
  132.  
  133.  
  134.  
  135. Documentation for LU.COM and LRUN.COM
  136.  
  137.  
  138.                HOW TO USE THE LIBRARY UTILITY
  139.  
  140.      LU has two basic methods of operation: interactive, and
  141. parameter  driven. Use of the interactive method is probably
  142. the  best way to get to know the program, because the effect
  143. of each action can be immediatley seen.
  144.   To  start an interactive library maintenance session, just
  145. type  LU  on  the  command line with no parameters after it.
  146. After  you  are  familiar  with the program, you can specify
  147. multiple paramters on the command line and LU will work with
  148. little  or no intervention. Input from disk files, C program
  149. "pipes",  and  the XSUB facility are also supported for more
  150. advanced applications.
  151.      All  the  methods  make  use of similar syntax. Command
  152. input  takes two forms: operators (sometimes called tags, or
  153. options) and operands.
  154.      An  operator  is  defined  as  any two character string
  155. where  the  first  character is a minus sign. Operators tell
  156. the  program what to do. Valid operators are -a, -d, -e, -l,
  157. -o, and -r. Anything else with a similar form is an operator
  158. too, but an invalid one.
  159.      Operands  are  everything  else. Normally, operands are
  160. file names which you want to add to, delete from, or extract
  161. from  a  library  file,  or are names of library files to be
  162. opened. They may contain the characters * or ? in which case
  163. they are called ambiguous operands. Some valid operands are:
  164.  
  165.  foo.bar
  166.  b:test.fil
  167.  z
  168.  *.*
  169.  comm?nd
  170.  
  171.  etc.  To  refer to a file named "-z" the operand would have
  172. to  be  entered as "-z." with the period, since otherwise it
  173. would be mistaken as an invalid operator.
  174.      What  action  is taken upon the file depends upon which
  175. operator  most  recently  preceded  it.  If  no operator was
  176. entered,  or  an invalid one, or one that takes no operands,
  177. the operand will be ignored.
  178.      When running interactively, LU prompts for each operand
  179. and  operator,  one per input line. Multiple inputs per line
  180. are not allowed using the interactive method.
  181.      The  prompt  you  will  see  is the name of the current
  182. operator  followed  by  a  ">" character, for example "-E>".
  183. This  indicates that the -e operator is in effect, and if an
  184. operand  is  entered it will be interpreted as the name of a
  185. member  file  to  be  Extracted  from  the library. When the
  186. program  first starts up, the prompt is "-?>" which means no
  187. operator  is  currently  in  effect.  In this case, the only
  188. valid input is an operator. Any operand will be ignored.
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196. Page 3   82-08-07
  197.  
  198.  
  199.  
  200.  
  201. Documentation for LU.COM and LRUN.COM
  202.  
  203.  
  204.                     SUMMARY OF OPERATORS
  205.  
  206.      -a   add  files  to  library.  -a  causes the prompt to
  207. change  to  -A> which will then accept as operands the names
  208. of  files  to  be  added to the open library. (If no library
  209. name  has  been  opened  with  the  -o operator, the default
  210. library  LIBRARY.LBR  is  always  used  instead.)  Ambiguous
  211. operands  match  all  disk  files which qualify according to
  212. normal  CP/M  wild-card  conventions,  except  those  with a
  213. filetype of .LBR. Explicit drive specification on an operand
  214. causes  that drive to be searched for the file(s) instead of
  215. the current drive.
  216.  
  217.      -d   delete files from library. -d causes the prompt to
  218. change  to  -D>  which  accepts names of files to be deleted
  219. from  the  open  library.  Ambiguous  names match all member
  220. files  which  qualify.  Drive specifications on operands are
  221. ignored,   since   the  library  members  are  obviously  on
  222. whichever drive contains the open library.
  223.  
  224.      -e   extract  files  from library. -e causes the prompt
  225. to change to -E> which accepts names of library member files
  226. to   be   extracted  to  normal  free-standing  CP/M  files.
  227. Ambiguous  names match all member files which qualify. Drive
  228. specification  on a member name causes the output file to be
  229. placed on the specified drive rather than the current drive.
  230. Any  existing  file  with  the same name will be overwritten
  231. unless  it  is protected by virtue of its Read/Only flag bit
  232. being set.
  233.  
  234.      -l   list  current library map. -l causes the directory
  235. of  the  current  library  to  be listed on the console. The
  236. member  names  are  displayed,  along  with  their index, or
  237. starting  position  within  the  library,  and their size in
  238. sectors.  Also, information is displayed about the number of
  239. sectors  in  the  library,  and  how  much space, is used or
  240. unused  (wasted).  Information  is  also displayed about the
  241. number of entries in the directory, and how many are active,
  242. deleted,  or  free for use. This helps determine whether the
  243. library  needs  to  be re-organized to free unused space and
  244. deleted  entries.  The  operator  -l expects no operands, so
  245. after  the list is displayed, the prompt changes back to -?>
  246. for entry of another operator.
  247.  
  248.      -o   open  a library. -o causes the prompt to change to
  249. -O>  which  accepts  the name of a library file to be opened
  250. for  use  with  subsequent  operators. If another library is
  251. already  open,  it  is closed first. If the new library does
  252. not  exist, it is created with an empty directory. Ambiguous
  253. names  are  not allowed. Drive specification is allowed. The
  254. file  type  may  be specified, but defaults to .LBR which is
  255. strongly suggested as the file type for all library files.
  256.      You  will  recall that files of type -a (add) operator.
  257. This  prevents  libraries  from  being accidentally added to
  258. other  libraries,  or  to themselves; a situation not unlike
  259. trying  to  drive  a  truck up its own tailpipe. If for some
  260.  
  261.  
  262. Page 4   82-08-07
  263.  
  264.  
  265.  
  266.  
  267. Documentation for LU.COM and LRUN.COM
  268.  
  269.  
  270. reason  you want to add one library to another, be my guest,
  271. but  you  will  have  to  specify  the  name  without * or ?
  272. characters when adding it.
  273.  
  274.      -r   reorganize  library.  -r causes the currently open
  275. library  to  be  reorganized. First, the directory is sorted
  276. into  alphabetical  order,  and  then all active members are
  277. copied  to  a  work  library  which is opened on the current
  278. drive, not necessarily the drive containing the old library.
  279. The  user  may specify a different number of entries for the
  280. work  library  if  it is necessary to expand or compress the
  281. directory. The directory will always be made large enough to
  282. contain all the active members of the old library, so a size
  283. of  1  may  be  specified  to make the directory as small as
  284. possible. (See Specifying Directory Sizes below.)
  285.      When  reorganization  is  complete,  the old library is
  286. deleted  and  the work library is renamed to the name of the
  287. old   library.   No  backup  copy  is  retained.  The  newly
  288. reorganized  library  remains  open  for use with subsequent
  289. operations.
  290.  
  291.    Whenever the program is prompting for an operand, another
  292. operator  may be entered instead to change the status of the
  293. prompt. To end an interactive session, enter a blank line at
  294. the prompt.
  295.  
  296.  
  297.  
  298.                  SPECIFYING DIRECTORY SIZE
  299.  
  300.      Whenever  an  old library is opened, the directory size
  301. is displayed as follows:
  302.  
  303.  Old library LIBRARY.LBR has 32 entries, 5 free.
  304.  
  305.      This  means that 5 more members may be added before the
  306. directory  becomes  full.  When  the  directory  is full, -a
  307. becomes  an  invalid  operator,  and  the  library  must  be
  308. reorganized to add any more members.
  309.      When  a library is created for the first time, the user
  310. is prompted like this:
  311.  
  312.  New library COMMAND.LBR. Allow how many entries?_
  313.  
  314.      Any number from 1 to 65535 is valid. The actual maximum
  315. is  determined by the amount of free memory available on the
  316. system in use. Directory size will be rounded up to the next
  317. whole  sector  necessary  to  contain  the number of entries
  318. requested.  This  number  will  remain  in  effect until the
  319. library is reorganized. Since the directory itself counts as
  320. an  entry,  one entry is added to whatever is entered before
  321. the  size  is  calculated.  Therefore just enter the maximum
  322. number of member files you want the library to be capable of
  323. holding.
  324.      The  maximum number of member files is also constrained
  325. by  the  amount  of  available  disk space. If during an add
  326.  
  327.  
  328. Page 5   82-08-07
  329.  
  330.  
  331.  
  332.  
  333. Documentation for LU.COM and LRUN.COM
  334.  
  335.  
  336. operation  the disk space runs out, the name is not added to
  337. the  directory.  If a multiple add is in progress, due to an
  338. ambiguous  operand, the remaining qualifying files are still
  339. added  if possible. If any of them is small enough to fit in
  340. the  remaining  disk space, it will be added. If any sectors
  341. were  written  by  an  add attempt, and then never utilized,
  342. they  remain  as  unused  sectors, and the library should be
  343. reorganized.
  344.  
  345.  
  346.  
  347.                   PARAMETER DRIVEN METHOD
  348.  
  349.      All of the information needed for a maintenance run may
  350. be specified on the command line. The operators and operands
  351. are  entered, separated by spaces, after the LU command, and
  352. the operations will take place without console intervention,
  353. except  in  the  case  where  the  directory  size for a new
  354. library is requested. The syntax is:
  355.  
  356.  LU <opr> [<opd> [<opd> ...]] [<opr> [<opd> ...]...
  357.  
  358.  where square brackets indicate optional parameters, and:
  359.      <opr> is any operator.
  360.      <opd> is any operand.
  361.      ...   indicates  that the preceding parameter may occur
  362. multiple times.
  363.      Any  names  occurring  prior  to the first operator, or
  364. following  an  operator  which does not expect operands, are
  365. ignored.
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Page 6   82-08-07
  395.  
  396.  
  397.  
  398.  
  399. Documentation for LU.COM and LRUN.COM
  400.  
  401.  
  402.                      ADVANCED FEATURES
  403.  
  404.      Input  from  BDS C "pipes" or ordinary sequential files
  405. is  also  possible. The filename is specified on the command
  406. line  preceded  by a "<" character and no intervening blank.
  407. Example:
  408.  
  409.  LU <CONSOL.DUP
  410.      reads the contents of the file CONSOL.DUP and uses each
  411. line  of  the  file  as  if  it had been typed at the normal
  412. console   by  the  interactive  method.  In  this  case,  no
  413. operators  or  operands  may  be present. Console output may
  414. also  be  redirected  by  specifying  an  output file on the
  415. command  line  after  the  character  ">".  This  applies to
  416. parameter  driven as well as interactive (including "piped")
  417. input. Examples:
  418.  
  419.  LU -O SPECIAL -A ZOT.COM >LOGFILE.OUT
  420.      would  add  the file zot.com to the library special.lbr
  421. and  write  the console output to a file called logfile.out.
  422. the  location of the output name on the line does not matter
  423. and  except  for turning on redirected output, it is ignored
  424. by all operators.
  425.  
  426.  LU <BATCH.IN >B:RECORD.DOC
  427.      would  take interactive commands from the file batch.in
  428. and  write  console  output  to  a file called record.doc on
  429. drive B.
  430.  
  431.      Normally,  console  file  output  is also echoed on the
  432. real  console,  except  when input is also redirected, as in
  433. the  last example. To force visible console output when both
  434. an  input  and  output  file  are  used,  the  ">" character
  435. preceding  the  output  file  name  may  be changed to a "+"
  436. instead:
  437.  
  438. LU +RECORD.DOC <BATCH.IN
  439.      would  have  the  same  effect as the previous example,
  440. except  that  message  output  would  also be visible on the
  441. console.
  442.  
  443.  
  444.  
  445.  
  446.                           CAUTIONS
  447.  
  448.     The  importance  of  keeping  backup  copies of all disk
  449. files,  and  especially libraries, cannot be overemphasized.
  450. By  using  library files, the user is exposed to the dreaded
  451. all-the-eggs-in-one-basket  syndrome.  That is, if something
  452. happens  to the library file, particularly the directory, it
  453. may  be  beyond  the  capabilities  of even a CP/M wizard to
  454. restore the member files. The situation is made particularly
  455. sticky by the fact that the the directory must be updated in
  456. place as members are added or deleted.
  457.      Precautions  have been taken to minimize this risk. For
  458.  
  459.  
  460. Page 7   82-08-07
  461.  
  462.  
  463.  
  464.  
  465. Documentation for LU.COM and LRUN.COM
  466.  
  467.  
  468. one  thing,  the  directory  is  read  into  memory when the
  469. library  is  first  opened,  and  is only written back if it
  470. differs  from  the  copy  on  the  disk  when the library is
  471. closed.  Operations  which  change  the directory are: adds,
  472. deletes,  and  the  sort  operation  which  is  done  before
  473. reorganization.   If   only   extracts   (or   LRUN  program
  474. executions)  are done, the directory is never rewritten, and
  475. the .LBR file may be write protected if desired.
  476.      For  another  thing,  the  entire  empty  directory  is
  477. allocated  and  written  to disk when a new library is first
  478. created. This insures that there will always be enough space
  479. on disk for the number of directory entries requested at the
  480. time  of  creation.  The disk space may run out while adding
  481. files later, but there will always be enough room on disk to
  482. update the directory once it is successfully created.
  483.      The  fact that only the memory copy of the directory is
  484. modified  until the file is closed may come in very handy if
  485. you  mistakenly  delete  a file and recognize it right away.
  486. For  example,  suppose  you  make  the mistake of typing *.*
  487. after the -D> prompt.
  488.      Briefly,  your  heart sinks, as the "Deleting:" message
  489. is  displayed  and  all  the member names zip into oblivion.
  490. Don't  panic. Only the memory copy of the directory has been
  491. modified.  When  the  -D> prompt returns, do not hit RETURN.
  492. Instead,  abort the program with Control-C. This will cancel
  493. the program without updating the directory, and the original
  494. members will still be present.
  495.      Here  is  another  caution.  Since the entire directory
  496. (but not member sectors) must fit in memory for a library to
  497. be successfully opened, it is possible that a huge directory
  498. created  on a your system will be too large to fit in memory
  499. if  read on another system will less memory. This should not
  500. be a problem with a library of under a hundred entries.
  501.      To  give  you an idea of how much elbowroom you have to
  502. work with, LU displays the highest memory location used each
  503. time  it terminates. This will vary depending on the largest
  504. directory  used  during  operation.  It does not include the
  505. stack,  which  grows  down  from high memory, and is allowed
  506. about  a thousand bytes of space for subroutine linkages and
  507. temporary work areas.
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526. Page 8   82-08-07
  527.  
  528.  
  529.  
  530.  
  531. Documentation for LU.COM and LRUN.COM
  532.  
  533.  
  534.                       THE LRUN COMMAND
  535.  
  536.      The  LRUN  command was created for those of us who have
  537. lots  of command files we like to keep on line all the time.
  538. What usually happens is that some nice little .COM files are
  539. very  small  programs, but having a lot of them on disk eats
  540. up  file  space  at  an  alarming rate due to the fixed CP/M
  541. block  size.  Put them all into a library called COMMAND.LBR
  542. using  LU.  You can then run any .COM file directly from the
  543. library by saying:
  544.  LRUN <followed by normal command line just like always>
  545.     The full syntax of LRUN is:
  546.  
  547.  LRUN [-<lbrfile>] <commember> [<parameters>]
  548.  
  549. Where:
  550.  
  551.      <lbrfile>  is  the  library  to be searched. The square
  552. brackets  around  -<lbrfile>  indicate it is optional. The -
  553. character tells LRUN that what follows is a library name. It
  554. is not an actual part of the name. Don't leave a space after
  555. the  -. If the first parameter doesn't begin with - then the
  556. default  library  COMMAND.LBR  is  used.  If a drive spec is
  557. given,  such as B:, then only that drive is searched for the
  558. library.  If  no  drive  spec is given, the current drive is
  559. searched first, and if no library of that name is found, the
  560. A:  drive  is  searched  before giving up. If a name, but no
  561. type is entered, .LBR is assumed.
  562.  
  563.      <commember>  is  the  name of the command to be run. No
  564. drive  spec is used here. The type defaults to .COM and need
  565. not be entered.
  566.  
  567.      <parameters>  is  a the normal (possibly empty) list of
  568. parameters  which  the  .COM  file  expects  to  find on the
  569. command  line  when  it  is  run. This list is parsed to the
  570. required  file  control  blocks and command line area before
  571. execution  begins,  so  the  program  will not be aware that
  572. anything  cute  is  going  on. (Thanks to Ron Ron Fowler for
  573. supplying the code which makes this possible.)
  574.  
  575.  
  576.  
  577.                        LRUN EXAMPLES
  578.  
  579.  LRUN ED FOO.BAR
  580.      the  file  ED.COM is searched for in COMMAND.LBR on the
  581. current  drive,  or the A: drive. If found, ED.COM is loaded
  582. from  the  library,  and  FOO.BAR  is  passed  to  it  as  a
  583. parameter.
  584.  
  585.  LRUN -C:SPECIAL LU -O COMMAND -A A:*.COM
  586.      the file LU.COM is searched for in SPECIAL.LBR on the C
  587. drive.  If  found,  LU.COM  is  loaded,  and the strings -O,
  588. COMMAND, -A, and *.COM are passed to it as parameters.
  589.  
  590.  
  591.  
  592. Page 9   82-08-07
  593.  
  594.  
  595.  
  596.  
  597. Documentation for LU.COM and LRUN.COM
  598.  
  599.  
  600.  LRUN - -ZIP
  601.      the file -ZIP.COM is searched for in COMMAND.LBR on the
  602. current drive, or the A: drive. If found, -ZIP.COM is loaded
  603. and  executed  with  a  blank parameter list. Since -ZIP.COM
  604. begins  with a -, the extra - followed by a space was needed
  605. to act as a place-holder for the library name. Compare with:
  606.  
  607.  LRUN -ZIP
  608.      the  library  -ZIP.LBR  is looked for, but nothing else
  609. happens, because no command was specified.
  610.  
  611.  LRUN
  612.      with  no  parameters  at  all,  causes a screen of help
  613. information to be displayed as a memory refresher.
  614.  
  615.  
  616.  
  617.      Please   report   any   problems   or  suggestions  for
  618. enhancement  to  me  via  CompuServe  EMAIL  or CP-MIG, user
  619. number  70160,120;  or  by  phone  at (201) 935-4087, voice,
  620. evenings (eastern) or weekends.
  621.  
  622.                     Gary P. Novosielski
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658. Page 10   82-08-07
  659.  
  660.  
  661.             Gary P. Novosielski
  662.  
  663.  
  664.  
  665.  
  666.