home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 487.lha / whereis / whereis.doc < prev    next >
Text File  |  1991-03-11  |  28KB  |  613 lines

  1.                           --- whereis.doc ---              Monday 07/01/91
  2. **************************************************************************
  3. * whereis.doc (english) for whereis V1.21 (07-Jan-91) AMIGA-VERSION by   *
  4. * Roland Bless. All rights reserved.                      Doc lines: 612 *
  5. * (C) 1989/90 by Byteable Software Products (Roland Bless)               *
  6. **************************************************************************
  7.  
  8. Yaffu? Yet another "find-that-file" utility? Nah, look at the features of
  9. "whereis"! ;-)
  10.  
  11. Please read this documentation to inform yourself about:
  12. 1) What is "whereis" (good for)?
  13. 2) How is it used?
  14. 3) How it works.
  15. 4) What the error-messages mean.
  16.  
  17. Copyright/Distribution:
  18. =======================
  19.  
  20. The program is PUBLIC DOMAIN (what else for this shabby stuff?) and should
  21. be spread to any AMIGA-user around the world, because it is a utility that
  22. saves time (esp. if you're using a harddisk, as I do!). Please distribute
  23. or copy it ALWAYS with this documentation!
  24.  
  25. There are only two restrictions of distribution:
  26. ***************************************************************************
  27. * This software may be distributed for non-profit only!!                  *
  28. * No redistribution of a changed source and/or executable without the     *
  29. * permission of the author!!! Please ask me first. See address below.THANX*
  30. ***************************************************************************
  31.  
  32.  
  33. About this documentation:
  34. =========================
  35. In some examples the quotation marks "" and '' must/need not to be typed.
  36. They are only used to emphasize what you have to type in. Asterisks are
  37. sometimes used to *emphasize* words.
  38. Although there is a short info about the switches of "whereis", please read
  39. this doc in its entirety to get the maximum benefit of this program. If
  40. you're reading this in an editor or text-display program, you can jump to
  41. the sections with searching for 1), 2), 3), or 4).
  42.  
  43.  
  44. RELEASE HISTORY at the end of this document!!
  45. German manual also available!
  46.  
  47.  
  48. Overview of functions:
  49. ======================
  50.  
  51. Format:
  52.  
  53.   whereis [-acdfijnpst] [dev:path] filepattern
  54.  
  55. Wildcards * and ? in the filepattern (strictly;-) allowed!
  56. You can abort anytime with CTRL-D or CTRL-C.
  57.  
  58. Switches:
  59.   -a  all. Same as -st, so date and size will be displayed.
  60.   -c  CASE-SENSITIVE-Search
  61.   -d  dirs only! Only directories are displayed.
  62.   -f  files only! Files are displayed only, no directories!
  63.   -i  Version-Info
  64.   -j  jump into dir! Interactive "cd" function. If wanted, a "cd" will be
  65.       executed and the search aborts. Your current dir has changed.
  66.   -n  no subdirectories! Subdirectories are not scanned.
  67.       (Doesn't make much sense, except for listing functions
  68.        (e.g. 'whereis -nfa "" *'))
  69.   -p  Detailed pathnames! Displays detailed pathnames, if a path was given as an
  70.       argument.
  71.  
  72.   -s  sizes please! Displays sizes of the found files.
  73.  
  74.   -t  time & date! Displays date and time of last change of a file.
  75.       Format: dd-mm-yy hh:mm:ss (Day-Month-Year Hour:Minute:Second)
  76.  
  77. 1) What is "whereis" (good for)?
  78.    =============================
  79.  
  80. "Whereis" is a utility which searches a file(name) on (hard)disk and shows
  81. you the path to this file. Because AMIGA's power is only revealed if you've
  82. installed a hard-disk (and AMIGA's commands are often loaded from disk
  83. (c:-dir)), some hard-disk users (like me) will loose overview about the
  84. stored files. If you have hundreds or thousands of subdirectories and don't
  85. know in which of them the program "DiskSalv" was, just type in: "whereis
  86. disksalv" and "whereis" will search through your whole active volume. You
  87. don't have to look for with "list" or "dir" manually. All files matching
  88. the given filename (-pattern) are displayed.
  89.  
  90. "Whereis" combines a "find that file"-function with certain list functions:
  91. you can use it as "fnams/recurdir/mydir"[1] (or whatever that little
  92. programs are called) to collect the filenames and give them to "ZOO" which
  93. then can compress whole subdirectories or volumes. "Whereis" will do that
  94. job savely for you!
  95.  
  96. ** Note: "whereis" can only be started from a CLI or SHELL (sorry WB Users!).
  97.  
  98. [1] "RecurDir" or "mydir" (that's how the author (Stephen Vermeulen) named it)
  99. was released on Fish-Disk 284. It is recursive programmed and 5516 Bytes long.
  100.  
  101.  
  102. Features of "whereis":
  103. ======================
  104.  
  105. + Case dependent/independent (switch -c).
  106.  
  107. + Wildcards * and ? possible.
  108.  
  109. + Abortable at any time (with CTRL-D or CTRL-C).
  110.  
  111. + Interactive mode which allows to change your current dir.
  112.  
  113. + Non recursive algorithm -> no problems with stack-sizes (not like LookFor or
  114.                                                            RecurDir)
  115. + Works also as "fnams"/"RecurDir". Use "whereis" with pipes.
  116.   (archives all filenames from subdirectories for "ZOO", look below)
  117.  
  118. + Can search on any file-oriented AmigaDOS-device and in any sub-dirs.
  119.   Can be used as a "list all".
  120.  
  121. + Displays date and size of files if wanted.
  122.  
  123. + some other useful options.
  124.  
  125.  
  126. 2) How to use "whereis":
  127.    =====================
  128.  
  129. If the program was not renamed, you can start it from CLI with:
  130.  
  131. whereis [-acdfijnpst] [dev:path] filename
  132.  
  133. The arguments in braces are optional that means they need not to be entered.
  134. If "whereis" is called without any argument, it will display a hint for usage.
  135. It doesn't matter where the options/switches are placed. All options/switches
  136. are preceeded by a '-'-sign.
  137.  
  138. Another possibility to let "whereis" run, is to let it run in the background by
  139. "run", "Arun" or "runback" and so on...(to abort it, when running in background,
  140. just send via the "break" command the break-signal, e.g. "break 2 all").
  141. To redirect the input/output is also allowed, but please note the '-j' switch,
  142. which will always need an interactive input! If the input isn't interactive,
  143. "whereis" will abort with "ERROR: Input must be interactive!".
  144.  
  145. And now something about the syntax:
  146. -----------------------------------
  147. If you enter "whereis filename", the searching for "filename" starts from the
  148. root directory of your current active device/volume/partition. This "filename"
  149. can contain the so called "wildcards" * and ? (therefore better "filepattern"
  150. than "filename").
  151.  
  152. - wildcards: "*" stands for none, one or more character(s).
  153.   ---------- (identical with #? in AMIGA-DOS)
  154.              "?" stands for just one character.
  155.              You can use multiple *s and ?s together!!
  156.  
  157.   Examples:
  158.   *.info     stands for all files containing .info at the end of their name.
  159.   *disk*     stands for all files containing "disk" anywhere in their name.
  160.   ?a*        stands for all files containing an "a" as second character in
  161.              their name.
  162.   ...and so on...
  163.  
  164.              Please note a special behaviour:
  165.              Is there one or more ? at the *end* of the pattern, it is
  166.              possible that ? stands for *none* character, too!
  167.              For example: "a????" displays all files with an "a" as first
  168.              character and 5 characters AT MOST, but all files with less
  169.              than 5 characters in their name are displayed, too (so even 'a',
  170.              'ab','abc'...etc.)!
  171.  
  172.  
  173. - pathnames:
  174.   ----------
  175.   In addition to the necessary filename-pattern you can command "whereis"
  176.   in which directory it should look for. E.g. df0:,dh1:,usr:bin,/bin,include
  177.   and so on... It doesn't matter in which sequence filepattern and pathname
  178.   occur, because "whereis" is a little bit "intelligent"! To separate the
  179.   filepattern from the pathname there must be a ":" or a "/" in the path.
  180.   Otherwise "whereis" will always identify the first argument as pathname and
  181.   the second as filepattern! It is allowed to use "" for the current directory
  182.   and / for the parent directory or : for the root-dir of the current active
  183.   volume. You must enter the path separated from the filenamepattern, because it
  184.   would not make much sense to join them. Consider the following example:
  185.   "whereis dh1:test"
  186.   This looks like test were located in the root-dir of dh1:, but "test" is
  187.   possibly found in "dh1:usr/bin/"? If you recognize this conflict, please
  188.   don't be annoyed about this little extra space. If you nevertheless join
  189.   the path and searchpattern "whereis" will reply with: "ERROR: Please no
  190.   path in the filename/pattern! See usage!".
  191.  
  192.   Examples:
  193.  
  194.   "whereis usr:bin test" will search from "usr:bin" down through all sub-dirs
  195.                          for "test" and is equivalent to "whereis test usr:bin"
  196.   "whereis bin/ test"    will search in the directory "bin" (and downwards) for
  197.                          test, if "bin" is a sub-directory of the current active
  198.                          directory. Equivalent with
  199.   "whereis test bin/"    and
  200.   "whereis bin test"     .
  201.                          *Not* equivalent would be "whereis test bin" (will
  202.                          search for bin!).
  203.   "whereis df1: readme"  searches for readme on df1:.
  204.  
  205.   'whereis "" test'      searches downwards from the current active directory
  206.   'whereis / test'       searches downwards from the parent directory
  207.   'whereis : test'       searches downwards from the root-directory
  208.  
  209.   "whereis /// test" is also allowed!
  210.  
  211. - options/switches:
  212.   -----------------
  213.   switches are always preceeded by a '-'.
  214.  
  215.   a: All. -a is equivalent to -st.
  216.      -a causes the output of size and date/time of the found files.
  217.  
  218.   c: CASE-DEPENDENT or CASE-SENSITIVE.
  219.      -c instructs "whereis" to distinguish upper case from lower case letters.
  220.      The default value is not to distinguish.
  221.  
  222.   d: Directories only! Only names of directories will be displayed.
  223.  
  224.   f: Files only! The outprinted names are exclusively file- and *not*
  225.      directory-names. This option excludes '-d' and vice versa. If you use
  226.      '-df', the output will be none! (Doesn't make much sense, right?)
  227.  
  228.   i: info. Prints the actual version-number of your version.
  229.  
  230.   j: jump into dir!
  231.      This is an interactive useful option: If "whereis" finds a matching
  232.      filename it will prompt "Change to that dir? [yNq]:". Now you have three
  233.      possible responses:
  234.  
  235.      y,Y: Yes, change the current directory of your cli or shell into that in
  236.           which "whereis" found that filename. If "whereis" displayed a dir-
  237.           name, it would change to that dir.
  238.  
  239.      q,Q: Quit. Cancels the search ("whereis-- Aborted!") and you're back to
  240.           your current dir which was active before you started "whereis".
  241.  
  242.      n,N: No, don't change the current dir (skip). Continues the search...!
  243.  
  244.      All other Keys behave like n,N (therefore N is capitalized in [yNq]) and
  245.      continue the search.
  246.  
  247.      Please note that this option is only active with an interactive standard-
  248.      input-device (You must be able to enter something!), otherwise "whereis"
  249.      will abort with an error message: "ERROR: Input must be interactive!", or
  250.      you'll just get the message "Change to that dir? [yNq]:", because the
  251.      standard-input was redirected. In this case, the best is, to cancel with q
  252.      or Q and start again without stdin redirected! Not allowed are e.g.:
  253.      "run whereis -j test" or "whereis <nil: -j test"
  254.  
  255.      This option automatically activates '-p' (detailed pathnames).
  256.  
  257.   n: No sub-directories!
  258.      Only the named directory is scanned and not the nested sub-directories.
  259.      If no directory/pathname was given, only the root-dir will be scanned.
  260.      This option may seem to contradict with the sense of "whereis", because
  261.      you seem already to know, where the file(s) is/are located. I just
  262.      considered the list-function of "whereis" and found out that in some rare
  263.      cases this may be helpful (think about "whereis : * -dn"; it will list all
  264.      branching directories from your root-dir).
  265.  
  266.   p: Detailed pathnames!
  267.      Without any pathname as argument (e.g. whereis test) '-p' hasn't got any
  268.      effect, because "whereis" always displays the most detailed path, likewise
  269.      if the option '-j' is active (AmigaDOS does the same: if you enter "cd
  270.      usr:work", the "cd" will show the detailed path (e.g. MyHD1:usr/work) and
  271.      not "usr:work"!)
  272.  
  273.      With a given pathname (e.g. whereis dh0:usr test) "whereis" (*without* the
  274.      option '-p' activated) displays the *short* path that means the path from
  275.      the given pathname to the found file and not the whole path from the root
  276.      directory to this file. This takes advantage of "assigned directories":
  277.      For example "etc:" is an assigned directory and is located in
  278.      "Rob-HD1:usr/etc". Supposing the file "test" is located in etc:, then '-p'
  279.      has got the following effect:
  280.      Input:                     Output:
  281.  
  282.      "whereis etc: test"    --> "etc:test"
  283.      "whereis -p etc: test" --> "Rob-HD1:usr/etc/test"
  284.  
  285.      Supposing usr: is your current active directory, then you'll get this:
  286.      'whereis "" test'    --> "etc/test"
  287.      'whereis -p "" test' --> "Rob-HD1:usr/etc/test"
  288.  
  289.      If you activate the "LONGPATH"-option, the detailed path will be shown,
  290.      that means also "Rob-HD1:" instead of "dh1:".
  291.  
  292.   s: Sizes (please)! The size of the found files is displayed. If "whereis"
  293.      displays a directory, "(dir)" is printed instead of a size value.
  294.      This option is helpful, if you have some versions of one program on your
  295.      hard-disk and you want to know, which versions are being displayed
  296.      (consider that new versions must not always be longer!). In this case use:
  297.  
  298.   t: Time and date (please)! Date and time of the last change of the found file
  299.      are displayed. This is also useful to distinguish different versions of a
  300.      file (see also option '-a').
  301.      The format of the date is: dd-mm-yy hh:mm:ss
  302.                                (day-month-year hours:minutes:seconds)
  303.  
  304.    ---
  305.    It is not (like in UNIX) of importance where you set the options:
  306.  
  307.    whereis -c dh0: test
  308.    whereis dh0: -c test
  309.    whereis dh0: test -c
  310.  
  311.    are all equivalent.
  312.  
  313.    It doesn't matter either, whether the options stand alone or are encounted
  314.    behind one '-':
  315.  
  316.    whereis -cfp usr: test
  317.    whereis -p usr: test -c -f
  318.    whereis -f usr: -p test -c
  319.    whereis -c -p -f usr: test
  320.    whereis test -pfc usr:
  321.  
  322.    These calls are equivalent, too.
  323.  
  324. - "whereis" and PIPES: Forget "fnams"/"recurdir"!
  325.   -----------------------------------------------
  326.   The archive-program "ZOO" isn't able yet, to pack whole directories with their
  327.   sub-dirs (or whole volumes). Instead it has got an option I, which lets "ZOO"
  328.   read all filenames to compress from standard-input. To collect these filenames,
  329.   there were written some utilities (I got "fnams" and "recurdir" [1])
  330.   Both programs have got one great disadvantage: they work recursive! That
  331.   causes sometimes trouble with your STACK-size and then the GURU will visit
  332.   you. I prefer programs, which can run with a default stack-size of 4000 bytes.
  333.   Because for each program you need to change your STACK-size, maybe you'll get
  334.   confused (think of each process started from the shell with a huge stack-size:
  335.   this will eat up your memory! With 3MB I got enough, but I find it nasty to
  336.   waste memory!). So "whereis" allocates memory, instead of requiring large
  337.   stack-sizes, and naturally warns you and aborts correctly, if you run out of
  338.   memory. Recurdir just said goodbye after scanning 8 nested dirs (If you're
  339.   running UUCP-software, you'll soon get this depth) with a stack of 4000 bytes.
  340.   Note that recurdir/mydir is already 5516 Bytes large and recursive.
  341.  
  342.   If you enter "whereis >usrdir -f usr: *", you can find the whole directory-tree
  343.   of usr: in the file "usrdir".
  344.  
  345.   Ideal is the usage of "whereis" with pipes:
  346.   -------------------------------------------
  347.   Example for the ARP-Shell:
  348.   whereis -fp usr: * | zoo aI usrfiles
  349.  
  350.   Normal Shell:
  351.   run whereis >pipe:files -fp usr: * +
  352.   run zoo <pipe:files aI usrfiles
  353.  
  354.   This should run without any problems [2]!
  355.  
  356.   You can get a sorted output in the ARP-Shell with:
  357.   whereis dh1: c* | sort
  358.  
  359.   Because of this possibility I didn't implement a sort option...
  360.  
  361.   [2]: Attention! The PIP: device from ARP 1.3 (it's the ConHandler from ConMan)
  362.        can guru! The bug is obviously caused by the ConHandler.library
  363.        V34.6, because other programs also lock up, but run fine with the
  364.        PIPE: device: e.g. type foo | sort (If foo is large enough,
  365.        sometimes the PIP: will lock up) Because of safety you should
  366.        perhaps prefer the PIPE:-device.
  367.  
  368. 3) How "whereis works:
  369.    ===================
  370.  
  371. "Whereis" scans all sub-directories branching from the named and displays files,
  372. which match with the search-pattern on standard-output (STDOUT). "whereis" is
  373. not programmed recursive and should not cause a stack overflow!
  374. If an error occurs at execution, "whereis" will display an error-message on the
  375. standard-error-output (STDERR). If you redirected STDOUT, the error-message will
  376. appear on your CLI-Window and not in your output-file.
  377.  
  378. If you made a mistake and don't want to waste time, you can always abort the
  379. scanning with: CTRL-d or CTRL-c
  380. The message "*** BREAK ***" will follow.
  381.  
  382. BUT: The break-signal (CTRL-c/d) is only detected, if "whereis" climbs up one
  383. directory. That means, if you let *display* "whereis" a lot of files (e.g.
  384. "whereis c: *"), it may take a while to react and abort, but "whereis" will
  385. ABORT ALWAYS! One CTRL-D is enough [3]! If there is not a lot of output, CTRL-c
  386. will break as good as CTRL-D, but during output to the window it may react worse
  387. than CTRL-D (try "whereis *"). Just a slight delay will be recognized during
  388. normal use (not as a "list" command abused), and therefore no problems should
  389. arouse. I decided in favour of sparing run-time to handle the break signal not
  390. after each scanned entry, therefore you must accept this litte delay and
  391. disadvantage. No advantage without a disadvantage...
  392. The memory is freed decently at any abort caused by breaks or errors or the '-j'
  393. interactive mode. Everytime "whereis" aborts with the message "-- Aborted!".
  394. Everytime "-- Aborted!" appears, "whereis" returns an error code
  395. (RETURN_ERROR=10). Sometimes other codes are returned.
  396.  
  397. [3]: A WARNING to all ConMan-Users (V1.3):
  398.      Seems only to concern conhandler.library V34.6:
  399.      If you press CTRL-c or CTRL-d to long, the machine will crash! That's
  400.      no bug of "whereis", but of ConMan V1.3. It took some time for me to
  401.      recognize that my setsignal-routines are ok. Using NEWCON: or (the
  402.      original) CON: you'll have no problems!
  403.  
  404. - How to use "whereis" more efficiently
  405.   -------------------------------------
  406.   Reduce, if possible, the directories that should be scanned!
  407.   Use "assigned directories": e.g. "whereis utils: disksalv"
  408.   The scan-time will be shortened, because to search a whole partition or
  409.   hard-disk will take a while (ca. 1 min for 20MBytes, depends strongly on your
  410.   "scan- speed"/"access-time" of your hard-drive!). Another possibility is, to
  411.   start "whereis" as a background-process, while you are working on other tasks
  412.   (what the hell is Multitasking else for?): e.g. "run whereis >T:found dh1:
  413.   *.c". Perhaps that is to use, if you can't restrict the search to a few
  414.   directories and must search the whole volume, but you want to continue your
  415.   work (write a text or program etc...).
  416.  
  417. 4) What the error-messages mean:
  418.    =============================
  419.  
  420. Possible error-messages and their causes:
  421.  
  422.   "FATAL ERROR: Not enough memory available!"
  423.   -------------------------------------------
  424.   Cause: Perhaps other programs allocated too much memory. "Whereis" needs
  425.          just a few bytes of memory to remember the directories, which type
  426.          of memory, FAST-, CHIP- or what else RAM, serves doesn't matter.
  427.  
  428.   "ERROR: Can't find that directory or device:"
  429.   ---------------------------------------------
  430.   Cause: Perhaps you mis-spelled the path. "Whereis" cannot get a "lock" on
  431.          this directory or device!
  432.  
  433.   "ERROR: Destroyed entry! Couldn't examine this ' '. Very strange!"
  434.   ------------------------------------------------------------------
  435.   Cause: I don't know either!...strange: "whereis" was able to get a "lock" on
  436.          the entry, but EXAMINE returned an error!
  437.  
  438.   "ERROR: Can't handle so many arguments. See usage!"
  439.   ---------------------------------------------------
  440.   Cause: You gave "whereis" more arguments than just the pattern and the path.
  441.  
  442.   "ERROR: Please no path in the filename/pattern! See usage!"
  443.   -----------------------------------------------------------
  444.   Cause: You joined path and pattern! The filename contains a "/" or ":".
  445.   See section "How to use whereis - pathnames".
  446.  
  447.   "ERROR: Illegal Option ' '!"
  448.   ----------------------------
  449.   Cause: This option (all preceeded by the "-") is unknown to "whereis".
  450.  
  451.   "ERROR: I've no filepattern to search for!"
  452.   -------------------------------------------
  453.   Cause: "whereis" always needs a filename/pattern to search for.
  454.          You only entered an option/switch.
  455.  
  456.   "STRANGE ERROR: Something strange happend...!"
  457.   ----------------------------------------------
  458.   Cause: While descending the directory-tree, "whereis" cannot get a "lock"
  459.          on a subdirectory. This error should *never* occur!
  460.          Another possibility is a fault during the CD, if you enable the
  461.          interactive mode (switch '-j').
  462.  
  463.   "ERROR: Input must be interactive!"
  464.   -----------------------------------
  465.   Cause: This error occurs only in conjunction with the "-j" (interactive)
  466.   option. Perhaps you tried to run the interactive mode in background ("run
  467.   whereis -j ...") or you redirected the standard-input to a non input-
  468.   device ("whereis <t:tmp -j ..."). Please start again without "run" or "<".
  469.  
  470.  
  471. Future enhancements?!
  472. =====================
  473.  
  474. If you find this utility quite useful and better than all other "find-that-file"-
  475. utilities, and if there are no "flames", I could add some features:
  476.  
  477. - a listing option. The output of date and size will then be formatted. Until
  478.   this option is implemented use "list" instead and pipes.
  479.  
  480. - search for date. Since/upto option like implemented in "list". In some cases
  481.   it would be useful to find the files again, which you used and got today or
  482.   yesterday or last week...
  483.  
  484. - A faster and more compact code (perhaps with help of assembler-routines).
  485.   I think this would produce much more speed, maybe about 5%. The speed
  486.   depends more on your hard-disk and controller!
  487.  
  488.  
  489. A few words from the author...
  490. ==============================
  491.  
  492. I wrote this program, because I was fed up to look for programs with my
  493. former "whereis/wo/findpath/find..." utilities:
  494. All of them had aggravating deficiencies.
  495. Either no case-independent search or not abortable, or to slow and now
  496. wildcards :-(. Because I learned C, I thought of making it better (I hope
  497. it succeeded...:-)! Because good literature is rare and I prefer the
  498. English/American originals it wasn't easy to get the amiga under control...
  499. I missed a good manual for the dos.library, but nevertheless the first
  500. working version was ready after one week (I did the work a few hours each
  501. day)...
  502. In comparison with "LookFor" (distributed on Fish-Disk 274, Author: Mark
  503. Schretlen, size: 11224 bytes), which doesn't offer any special options and
  504. requires more stack than 4000 bytes, "whereis" was faster:
  505. Scanning 3210 entries yielded on my system:
  506.  
  507. LookFor: 69.46 s  [lookfor >nil: test on sc1:]        3 entries found
  508. Whereis: 59.78 s  [whereis >nil: sc1: test]           4 entries found
  509. Find   : 61.40 s  [find >nil: sc1: -name test -print] 4 entries found
  510.  
  511. As you can see, the times of "find" and "whereis" are very similar. Perhaps
  512. little differences are caused by caching in buffers or other side effects.
  513. All programs were held and started from ram-disk.
  514. BTW: "whereis" runs fine with 4000 bytes of stack. LookFor requires more stack.
  515.      The "LookFor" option "LookFor test on all" caused an error, because I
  516.      mounted the PIPE: device. LookFor couldn't manage this!
  517.  
  518. I don't want to annoy the authors of the "fnams|recurdir|mydir" utilities, but
  519. "whereis" combines *two* functions in one program! ;-)
  520.  
  521. Play with "whereis" and it's features and perhaps you'll discover new
  522. applications.
  523. I hope that this utility will be placed in every programmers utility-dir to
  524. make it easier for their work (Hi Matt?:-).
  525.  
  526. ** Have Fun! **
  527.  
  528. Best wishes,
  529.  Roland Bless
  530.  
  531. P.S.: I want to thank Matt Dillon for his great DME! Thanx Matt!
  532.       All others, please excuse my poor English, but it isn't my
  533.       native language. I will welcome some hints about shabby faults.
  534.  
  535. --------------------------------------------------------------------------------
  536.  
  537. RELEASE-HISTORY:
  538. ----------------
  539. V1.14 : First released ;-) version of "whereis".
  540.         KNOWN BUGS: Requires FAST-RAM. Doesn't run with NOFASTMEM!
  541.  
  542. V1.14a: Fixed the bug of V1.14.
  543.         NOT RELEASED.
  544.  
  545. V1.15:  Some new useful options/switches.
  546.         -a, -s, -t, -f, -d, -p -n
  547.         KNOWN BUGS: -a Option (forgot a break ...:-).
  548.         NOT RELEASED.
  549.  
  550. V1.16:  Source optimized: minimal faster, but less Code than in V1.15.
  551.         Bug fixed (-a option). Errorhandling completed:
  552.         No filepattern to search for...
  553.         KNOWN BUGS: If there is not enough free memory, "whereis" would
  554.                     abort with an error message, but the allocated memory
  555.                     won't be freed correctly.
  556.                     Fixed in versions since 26-11-89.
  557.  
  558.         Wildcard-handling improved: "*?*??*a*c" etc. is now perfect!
  559.  
  560. V1.16a: A BUG in the wildcard-handling fixed:
  561.         Filenames with a space in it, were not displayed, if the '*'-wildcard
  562.         was selected. Really a subtle bug! Didn't occur when the -c option was
  563.         active, because then toupper() was not used.
  564.         (Note: 0x020 & 0x5f == '\0')
  565.         I found this bug by accident (do you often have files with a space
  566.         in their name? I don't!)
  567.  
  568.         ALL versions till V1.16a (inclusive) were released just in a few bbs in
  569.         germany (FRG).
  570.  
  571. V1.17:  -j option added.
  572.         -p switch changed! (see option -p).
  573.         Checked the break-behaviour. All ok.
  574.         KNOWN BUGS: The CD to a volume killed the ":" at the end of its name.
  575.                     That was not like AmigaDOS did.
  576.  
  577. V1.18   The little bug of 1.17 corrected. CD should work now.
  578.         KNOWN BUGS: Version (15-2-90)
  579.                     yes, only the executable was buggy, because I linked
  580.                     some obscure _exit and _main modules to it. One BUG
  581.                     was that "whereis" did not leave your memory clean.
  582.                     Just a few bytes, about 20, were not freed.
  583.                     The second BUG: The return-code was wrong if all went ok.
  584.                                     Instead of returning twice 0, some crazy
  585.                                     values were returned.
  586.                     If you recompiled the source with +L (long integers) these
  587.                     bugs would not have occured. Sorry, I think the source is
  588.                     and was clean! My fault: I didn't test it hard enough!!!!
  589.  
  590. V1.18 (27-2-90)
  591.       Just a new executable. Source was not changed. See KNOWN BUGS above.
  592.  
  593. V1.19 (25-05-90)
  594.       New wildcard-routine. The old one was not correct! Try to search for a
  595.       string like this: "A*bak*" would not match "Abatch.bak", because the "b"
  596.       occurs the first time in "batch" and "bat" doesn't match "bak". But this
  597.       is now corrected! Maybe it is now faster code...if you've got any trouble
  598.       with pattern matching, please let me know!
  599.  
  600. V1.20 (14-06-90)
  601.       Killed chkabort-routine. No bug fixes.
  602.  
  603. V1.21 (07-01-91)
  604.       Bug fixed in date-routine. (01-01-XX)
  605.  
  606. ------------------------+---------------------------------------------------+
  607. R o l a n d   B l e s s |Internet: rob@spirits.ka.sub.org                   |
  608.                         |BITNET:   UKG5@DKAUNI2.BITNET                      |
  609. Kriegsstrasse 129       |FAX: +49211623818               BTX:0211623818-0001|
  610. 7500 Karlsruhe - FRG    |---------spirits--in--the--material--world---------|
  611. voice +49 721 857328    |"They built machines that they can't control" STING|
  612. ------------------------+---------------------------------------------------+
  613.