home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / rmd200.exe / RMD.DOC < prev   
Text File  |  1994-02-01  |  20KB  |  535 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                     R M D
  19.  
  20.                           Safe Directory Tree Deleter
  21.  
  22.                                  version 2.00
  23.  
  24.                             (C) 1994 Richard Schaaf
  25.  
  26.  
  27. RMD V2.00                         2                        1 Feb 94
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.                                 TABLE OF CONTENTS
  37.  
  38.          1. Copyright Stuff and Disclaimer........................ 3
  39.          2. Introduction.......................................... 3
  40.          3. System Requirements................................... 3
  41.          4. Installation.......................................... 3
  42.          5. Usage................................................. 4
  43.               5.1 Syntax.......................................... 4
  44.               5.2 Disabling/Enabling Individual Checks............ 4
  45.               5.3 Optimization.................................... 5
  46.               5.4 Move Up Mode.................................... 5
  47.               5.5 Verbosity Levels................................ 6
  48.               5.6 Help System..................................... 7
  49.               5.7 Environment Variables........................... 7
  50.                    5.7.1 The NO_RMD variable...................... 7
  51.                    5.7.2 The RMD_SW variable...................... 7
  52.          6. Command Line Parsing.................................. 8
  53.          7. Hints/Tips............................................ 8
  54.          8. Author................................................ 9
  55.          9. Planned Enhancements.................................. 9
  56.         10. History...............................................10
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87. RMD V2.00                         2                        1 Feb 94
  88. RMD V2.00                         3                        1 Feb 94
  89.  
  90. 1. Copyright Stuff and Disclaimer
  91. =================================
  92.  
  93. This program is freely distributable provided that all files in
  94. this archive are distributed together. Please keep in mind that the
  95. author is the exclusive copyright holder. You may use this program
  96. as you seem fit but you are not allowed to make modifications to it
  97. without the explicit consent from the author.
  98.  
  99. The author cannot be held responsible for damage (including lost
  100. files) incurred, either direct or indirect, by using the files in this
  101. archive. The author also does not guarantee the program will work
  102. as indicated in this file although every effort has been made to
  103. make sure it does. If you find an instance where it does not work
  104. as documented, please report it to the author at the address stated
  105. in section 8.
  106.  
  107. 2. Introduction
  108. ===============
  109.  
  110. This command recursively removes directory trees. The idea behind
  111. using RMD and not "alias rmd=del /s/x/z" or "alias rmd=del /s/x/y/z"
  112. is that the former always asks for acknowledgment (leading to an
  113. automatic "Y" answer after some time) and the latter never asks anything
  114. (leading to unintended deletes).
  115.  
  116. RMD tries to predict whether the directory it is about to delete is
  117. a directory that the user actually wants to delete. If it thinks the
  118. operation is suspect, it will ask the user for confirmation, otherwise
  119. it will just go ahead and delete it.
  120.  
  121. If you find RMD useful, please send me a postcard at the address in
  122. section 8.
  123.  
  124. IN ANY CASE, SEND ME EMAIL IF YOU CAN. THAT IS THE ONLY WAY YOU WILL
  125. BE KEPT INFORMED ABOUT UPDATES AND GET SWIFT REPLIES TO BUG REPORTS AND
  126. ENHANCEMENT REQUESTS.
  127.  
  128. 3. System Requirements
  129. ======================
  130.  
  131. A PC running DR/PC/MS-DOS 3.3 or higher and 4DOS5.0c or later.
  132.  
  133. 4. Installation
  134. ===============
  135.  
  136. Start "install.btm". This program will guide you through the installation
  137. process.
  138.  
  139. Finally, decide where you would like RMD to put its temporary file. RMD
  140. uses the following algoritm for determining where to put its temporary
  141. file:
  142.     if 4DOSTEMP is set then use it
  143.     else if TEMP is set then use it
  144.     else if TMP is set then use it
  145.     else use the root directory of the boot drive
  146.     end if
  147.  
  148. RMD V2.00                         3                        1 Feb 94
  149. RMD V2.00                         4                        1 Feb 94
  150.  
  151. 5. Usage
  152. ========
  153.  
  154. 5.1 Syntax
  155. ----------
  156. RMD [del flags] [answer flags] [/o<123>] [/u<012>] [/v[v]] [/c] [/h] [/?] dirs
  157. Where : delete flags = flags that are passed to the "del" command
  158.                        (all flags that rmd does not recognize are
  159.                        passed to the del command)
  160.         answer flags = assume yes for certain checks (section 5.2)
  161.         /o1 /o2 /o3  = optimize directories (section 5.3)
  162.         /u0 /u1 /u2  = move up flags (section 5.4)
  163.         /v and /vv   = verbosity level; will give more information
  164.                        (section 5.5)
  165.         /c           = display copyright and version information
  166.         /h and /?    = starts the on-line help system (section 5.6)
  167.         dirs         = one or more directories that should be deleted
  168.  
  169. RMD will warn the user if a directory is suspect, or better:
  170.     - if the directory is not on the current drive, and/or
  171.     - the directory is the root directory of a drive, and/or
  172.     - the directory is "higher" than the current directory, and/or
  173.     - the delete would delete a directory in the NO_RMD variable
  174.       (section 5.7.1)
  175. (This is only true if the check has not been disabled, see section 5.2)
  176.  
  177. If a directory is suspect the user will be asked for confirmation.
  178. At that point the user has the following options:
  179.     Y = Delete this directory
  180.     N = Skip this directory
  181.     A = Always delete (don't check for suspect directories)
  182.     Q = Quit (don't delete anything)
  183.     H = Help
  184.     ! = Shell out to 4DOS (COMSPEC has to be set for this to work)
  185.  
  186. An argument is always skipped if:
  187.     - the argument is on a drive that is not ready
  188.     - the argument does not exist
  189.     - the argument exists but is not a directory
  190.     - the argument is a directory on a CD-ROM
  191.     - the argument is a directory on a network drive (unless overridden with
  192.       /y+w:<drives>)
  193.  
  194. 5.2 Disabling/Enabling Individual Checks
  195. ----------------------------------------
  196.  
  197. Individual checks can be disabled or enabled with the "answer flags".
  198.  
  199. The answer flags disable (/y+) or enable (/y-) individual check for
  200. specific drives. Checks that can be disabled or enabled are:
  201.  
  202.      The different drive check  (type=D)
  203.      The root directory check   (type=R)
  204.      The higher directory check (type=H)
  205.      The NO_RMD check           (type=N)
  206.      The network drive check    (type=W)
  207.  
  208. The complete definition of the answer flags is as follows:
  209. RMD V2.00                         4                        1 Feb 94
  210. RMD V2.00                         5                        1 Feb 94
  211.  
  212. answer flags = [/y+<type>[:drives]] [/y-<type>[:drives]] [/yes] [/fd]
  213. where   /yes = /y+d/y+r/y+h/y+n
  214.         /fd  = /y+d:AB/y+r:AB
  215.  
  216. If no drives are specified, the flag applies to all drives.
  217.  
  218. Example: /y+d/y-d:c       disabled the different drive check unless
  219.                           that other drive is drive C
  220.  
  221. 5.3 Optimization
  222. ----------------
  223.  
  224. There are two kinds of optimization. The first kind (/o1) removes directories
  225. that will be deleted anyway from the list of directories. For example:
  226. "rmd /yes .. ..\q" in "c:\tmp" will be translated to "del /s/x/y/z c:\ c:\q",
  227. but "c:\q" will have been deleted already by the "del /s/x/y/z c:\". If you
  228. specify the "/o1" flag, rmd will execute "del /s/x/y/z c:\"
  229.  
  230. Note that specifying the "/o1" flag does not only reduce the number of
  231. parameters to the "del" command but also prevents some accidental deletes.
  232. Assume there is a file "c:\test\q. Consider "rmd q q" in "c:\". This will
  233. be translated to "del /s/x/y/z q q". The first "q" will delete the directory
  234. "c:\q", as expected and as probably intended. The second "q", however, will
  235. remove all files named "q" on drive C, including "c:\test\q" !!!
  236.  
  237. Now consider "rmd /o1 q q". In this case, RMD will notice that the intended
  238. delete is "del /s/x/y/z q" and not "del /s/x/y/z q q". Therefore it will
  239. delete the directory "c:\q" and not the file "c:\test\q".
  240.  
  241. The second kind of optimization (/o2) does not modify which directories
  242. are passed to the "del" command, but does modify the way they are passed
  243. to that command. When "/o2" is not given, all directories will be fully
  244. expanded before they are passed to the "del" command. For instance, issuing
  245. "rmd ." in "c:\tmp" will be translated to "del /s/x/y/z c:\tmp". This may
  246. lead to command lines that are too long to be handled.
  247.  
  248. When the "/o2" flag is given, RMD will try to make the parameters as short
  249. as possible. To do this it will try whether specifying a directory relative
  250. to the current directory is more efficient than specifying it fully expanded.
  251. When issuing "rmd /o2 ." in "c:\tmp", rmd will issue the command
  252. "del /s/x/y/z .". Note that "rmd /o2 c:\tmp" in "c:\tmp" will also be
  253. translated to "del /s/x/y/z ."
  254.  
  255. The "/o3" flag is equivalent to "/o1/o2".
  256.  
  257. 5.4 Move Up Mode
  258. ----------------
  259.  
  260. The moveup mode determine what happens if you delete a directory that is
  261. higher than the current directory.
  262.  
  263.      /u0 : don't move up the directory tree
  264.      /u1 : move up unless the directory starts with "."
  265.      /u2 : always move up the directory tree
  266.  
  267.      (See example below)
  268.  
  269.  
  270. RMD V2.00                         5                        1 Feb 94
  271. RMD V2.00                         6                        1 Feb 94
  272.  
  273. When using "/u0" (the default), all files will be deleted but the directories
  274. leading to the current directory will be left as they were before the delete
  275. operation.
  276.  
  277. Using "/u2", everything below the highest directory parameter that is in the
  278. list of directories leading to the current directory is deleted.
  279.  
  280. Option "/u1" is an intermediate. It does the same as "/u2" unless the
  281. directory parameter starts with ".". In that case, this directory will be
  282. left on the disk. (Any help with clarifying this paragraph is greatly
  283. appreciated!)
  284.  
  285. Example: assume the directory structure of drive C is as follows:
  286.          C:\
  287.          └───A
  288.              ├───B
  289.              │   └───D
  290.              └───C
  291.          and the current directory is "c:\a\b\d"
  292.  
  293.          For n=0,1,2, the command "rmd /yes/u<n> .. ..." will delete
  294.          all files in "\a", "\a\b", "\a\c" and "\a\b\d". Furthermore, the
  295.          resulting directory tree and the current directory are listed in
  296.          the following table:
  297.  
  298.          ┌────────┬────────────────┬───────────────────┐
  299.          │ switch │ directory tree │ current directory │
  300.          ╞════════╪════════════════╪═══════════════════╡
  301.          │ /u0    │ C:\            │ c:\a\b\d          │ 
  302.          │        │ └───A          │                   │ 
  303.          │        │     └───B      │                   │ 
  304.          │        │         └───D  │                   │ 
  305.          │        │                │                   │ 
  306.          │ /u1    │ C:\            │ c:\a              │ 
  307.          │        │ └───A          │                   │ 
  308.          │        │                │                   │ 
  309.          │ /u2    │ C:\            │ c:\               │ 
  310.          └────────┴────────────────┴───────────────────┘
  311.  
  312.          However, "rmd /yes/u1 c:\a\b c:\a" gives the same result
  313.          as "rmd /yes/u2 .. ...".
  314.  
  315. 5.5 Verbosity Levels
  316. --------------------
  317.  
  318. There are two verbosity levels:
  319.     /v  : - display the directory that is currently being looked at
  320.           - display "performing optimization" when optimization is enabled
  321.           - before the del operation, display the number of
  322.             directories that have been skipped
  323.           - display the del command that will be performed
  324.     /vv : - display the /y+ options in effect for the directory
  325.             that is currently being looked at
  326.           - display the directory that is currently being looked at
  327.           - display "performing optimization" when optimization is enabled
  328.           - before the del operation, display the number of
  329.             directories that have been skipped
  330.           - display the del command that will be performed
  331. RMD V2.00                         6                        1 Feb 94
  332. RMD V2.00                         7                        1 Feb 94
  333.  
  334. 5.6 Help System
  335. ---------------
  336.  
  337. The help system consists of a number of screens that contain an extract of
  338. the information in this document. At any time you can jump to any page by
  339. pressing the page number. Furthermore, <Page Up> takes you to the next
  340. page, <Page Down> to the previous page, <Home> to the first page, and
  341. <End> to the last page. Press <escape> to exit the help system.
  342.  
  343. 5.7 Environment Variables
  344. -------------------------
  345.  
  346. 5.7.1 The NO_RMD variable
  347.  
  348. If you want to protect certain directories against accidental removal
  349. you can include them in the "NO_RMD" environment variable. The format
  350. of this variable is "<directory(1)>;.....;<directory(n)>". All directories
  351. in the "NO_RMD" variable should end with a "\" character. For instance,
  352. "c:\tmp\" is a valid value for the "NO_RMD" variable whereas "c:\tmp" IS NOT!
  353.  
  354. If rmd would delete a directory that is in the NO_RMD variable, RMD will
  355. warn you. 
  356.  
  357. Note that this is different from previous versions of RMD. Previous versions
  358. only warn if you tell it to delete a directory in the NO_RMD variable, not 
  359. if the deletion is caused by the deletion of a directory that is higher in
  360. the directory tree. For example, assume that "NO_RMD=c:\a\b\". In this
  361. situation, RMD versions previous to this one would warn if you entered
  362. "rmd c:\a\b", but not it you entered "rmd c:\a". From now on, RMD will warn
  363. in both cases.
  364.  
  365. 5.7.1 The RMD_SW variable
  366.  
  367. The "RMD_SW" environment variable contains default switches for RMD. The
  368. advantage is that "RMD_SW" is parsed before the command line. The difference
  369. of defining default switches with "RMD_SW" and not with
  370. "alias rmd=c:\4dos\rmd.btm <options>" will be further explained in the
  371. section "Command Line Parsing".
  372. RMD V2.00                         7                        1 Feb 94
  373. RMD V2.00                         8                        1 Feb 94
  374.  
  375. 6. Command Line Parsing
  376. =======================
  377.  
  378. The usage of RMD is not as rigid as mentioned above. In reality, switches
  379. and directories can be mixed almost arbitrarily. Not all flags apply to the
  380. entire commandline. To determine which flags apply, RMD uses the following
  381. algorithm.
  382.  
  383.     parse the flags in "RMD_SW"
  384.     max_parameter := #of parameters
  385.     parse all flags at the end of the command line (assume there are n
  386.                         parameters with flags at the end of the command line)
  387.     max_parameter := max_parameter - n
  388.     for i = 1 to max_parameter
  389.         if parameter(i) contains flag(s) then     #  f.i. /fd  or  ./yes
  390.             parse the flag(s)
  391.         end if
  392.         if parameter contains a directory then
  393.             perform checks on directory using current options
  394.             if OK to remove then
  395.                 add it to the list
  396.             end if
  397.         end if
  398.     next i
  399.  
  400. Note that all flags apply from where they occur up until the end of the
  401. command line. There are exceptions to every rule, therefore let me state
  402. the exceptions to this rule:
  403.  
  404.     - flags that are passed to the DEL command are applied to the entire
  405.       command line
  406.     - the /o1, /o2 and /o3 apply to the entire command line
  407.  
  408. WARNING: using the "/u0", "/u1" and "/u2" flags can produce unpredictable
  409.          results when used after the first directory.
  410.  
  411. Because of the way RMD parses the parameters, it may be better to define
  412. default options in the "RMD_SW" environment variable and not in an alias.
  413. Let me give an example:
  414.  
  415. Personally I want the following default options: "/fd/u1/o3". If we define
  416. "alias rmd=c:\4dos\rmd.btm /fd/u1/o3" everything works fine until we
  417. want to override the "/u1" by using "rmd . /u2". The "/u2" is parsed first,
  418. setting the "move up mode" to 2. Next the "/fd/u1/o3" is parsed, resetting
  419. the "move up mode" to 1.
  420.  
  421. Alternatively, we could define "alias rmd=c:\4dos\rmd.btm %& /fd/u1/o3", but
  422. again, if we try "rmd . /u2", the "/u2" will be overridden.
  423.  
  424. Now consider using "RMD_SW=/fd/u1/o3". In this case, the "/u1" will be parsed
  425. before the "/u2" flag, thus the "/u2" will override the "/u1" as intended.
  426.  
  427. 7. Hints/Tips
  428. =============
  429.  
  430. Instead of using the "rmd.btm" file directly, you can define an alias "rmd"
  431. that calls "rmd.btm" and includes your favorite switches. Personally I have
  432. defined "rmd=c:\4dos\rmd.btm /fd/u1/o3"
  433. RMD V2.00                         8                        1 Feb 94
  434. RMD V2.00                         9                        1 Feb 94
  435.  
  436. 8. Author
  437. =========
  438.  
  439. While I could tell all sorts of interesting stories about myself, let me
  440. keep it with name and address for now. If you have any requests for
  441. enhancements or bug reports (seems impossible :) please email or write:
  442.  
  443.         Richard Schaaf
  444.         Walcherenstraat 2
  445.         1025 PN Amsterdam
  446.         the Netherlands
  447.         internet: rscha@ctp.com
  448.  
  449. In any case, SEND ME A POSTCARD!
  450.  
  451. Also: If you have an urge to give me money, CDs (Simtel?), Games,
  452.       or anything else, please don't hesitate! :-))
  453.  
  454. 9. Planned Enhancements
  455. =======================
  456.  
  457. At this point, the "/o2" flag always leaves directories on drives other
  458. than the current one fully expanded. I'm currently considering how useful
  459. it is to change this.
  460.  
  461. RMD currently does not support include lists ("c:\a;b"). This may or may
  462. not be implemented in a future release.
  463.  
  464. I would like to, somehow, integrating the RMD help with the 4DOS help
  465. system. As soon as JP software sends me the 4DOS utility disk I ordered,
  466. I will see whether this is possible with the help compiler on that disk.
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494. RMD V2.00                         9                        1 Feb 94
  495. RMD V2.00                        10                        1 Feb 94
  496.  
  497. 10. History
  498. ===========
  499.  
  500. v2.00   Feb. 1, 1994     Corrected some errors in the manual
  501.                          Added warning if RMD would delete a directory in the
  502.                               NO_RMD variable but that directory is not one
  503.                               of the parameters
  504.                          Added RMD_SW variable
  505.                          Changed command line parsing
  506.                          Added /o1, /o2, /o3 flags
  507.                          Added "Shell out" capability at warning messages
  508.                          /vv no longer displays the individual checks
  509.                          /v and /vv display "performing optimization" when
  510.                               the /o1, /o2 or /o3 flag is given
  511.                          /noenv is ignored (obsolete)
  512.                          change in behavior of /u1 flag
  513. v1.10   Jan. 25, 1994    (internal beta version)
  514.                          Total rewrite of time-critical parts in C
  515.                          Separate versions for 8088/8086/80186/V20/V30,
  516.                                                80286 and 80386/80486/80586
  517.                          Added installation program
  518.                          Minor bugfixes
  519. v1.02   Jan. 19, 1994    (Never released)
  520.                          <esc> is now equivalent to "Q" at the warnings
  521.                          Minor performance enhancement
  522. v1.01   Jan. 17, 1994    Added environment space checking
  523.                          Added the /noenv flag
  524.                          Added drive ready check
  525.                          Added CD-ROM checking
  526.                          Added network checking
  527.                          Added /y+w flag
  528.                          Added /u0 /u1 /u2 flags
  529.                          Fixed some spelling errors
  530. v1.00   Jan. 12, 1994    First released version
  531. v0.99   Jan.  4, 1994    Final test version. Thanks to Michael
  532.                          Schaap (mscha@ctp.com) for helping me with
  533.                          testing and debugging this one!
  534.  
  535.