home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / dfc131.exe / DFC.BTM < prev    next >
Text File  |  1992-11-15  |  14KB  |  435 lines

  1. @echo off
  2. :
  3. :   DFC Dave's Floppy Cataloguer Version 1.31
  4. :
  5. :   original program TFC - Tobi's Floppy Cataloguer Version 1.0
  6. :                          (C) 4-01-92, 2:31 PM  by Tobi Oetiker
  7. :                              (no joke !)
  8. :
  9. :   This program is released into the Public Domain.
  10. :   Feel free to make changes but don't remove my name and address.
  11. :   Let me know if you have any useful enhancements or if you find errors ...
  12. :
  13. :   (C)  3 Oct 92 by David Frey & Itamar-Even Zohar
  14. :
  15. :   P.S: ^^^^ means: adapt to your needs
  16. :
  17. :   Revision changes:
  18. :   -----------------
  19. :   Ver 1.1: . highlighted menu
  20. :            . adapted to 4DOS 4.01 (unset /q etc.)
  21. :            . sort of %DISKSDB incorporated.
  22. :   Ver 1.2: . Itamar Even-Zohar's Findall has been added.
  23. :            . Some minor corrections have been made.
  24. :   Ver 1.3: . Corrections suggested by Itamar Even-Zohar's have
  25. :              been implemented.
  26. :            . Customizing is now done by setting environment variables,
  27. :              so you have to edit DFC.BTM only at one place.
  28. :   Ver 1.31 . ANSI detection implemented, you need not to install ANSI.SYS,
  29. :              although it's recommended when using directory colorization.
  30.  
  31. cls
  32. setlocal
  33. unalias *
  34.  
  35. set fg=%_fg
  36. set bg=%_bg
  37.  
  38. iff %@index[%1,?] ge 0 .or. %@index[%1,help] ge 0 .or. %1 == h .or. %1 == /h .or. %1 == -h then
  39.  gosub help
  40.  goto /i exit
  41. endiff
  42.  
  43. echo DFC - Dave's File Cataloguer by David Frey         Version 1.31   10-NOV-92
  44. echo                          and Itamar Even Zohar
  45. echo based on TFC by Tobi Oetiker (oetiker@iis.ethz.ch)
  46. echo.
  47.  
  48. iff %_env LT 170 then
  49.  if %monitor == color color bright %fg on %bg
  50.  echos ** ABORTED
  51.  if %monitor == color color %fg on %bg
  52.  text
  53.  
  54.   You need approx. 170 bytes of free environment space after DFC
  55.   has started. (depends on your configuration). Use
  56.  
  57.    unset var
  58.  
  59.   to make space or raise the environment value in your 4dos.ini file.
  60.  
  61.   * var stands for any environement variable. You get a list of your
  62.     variables by typing `set` at the command prompt. Using the command
  63.     `memory` you can check how much space is left.
  64.  endtext
  65.  quit
  66. endiff
  67.  
  68. :customize
  69. :^^^^^^^^^
  70. :
  71. : In older versions of DFC (previous 1.3) you had to edit DFC.BTM at
  72. : various places to get a pleasant appearance (favourite editor, list,...).
  73. : This isn't necessary anymore; set the appropriate environment variables
  74. : below.
  75. :
  76. : set edt=%@search[<your favorite editor>]
  77. : set desced=%@search[<a 4DOS description editor>]
  78. : set ff=%@search[<a file finder>]
  79. : set grep=%@search[< a GREP grogram (GNU's grep preferred>]
  80. : set list=<a file lister - for example 4DOS internal "list">
  81. :
  82. : * Use GNU's grep whenever possible, or you may have to change the
  83. :   command line switches...
  84. : * The directory where your application resides in will be determined
  85. :   by 4DOS' %@search, that means that your application must be included
  86. :   in the PATH!
  87. :   (Of course, there is the possibility to write the whole path e.g.
  88. :    C:\TOOLS\tpe.exe, but I think that is not a good idea. Why ? I, for
  89. :    myself, have copied the files I often use to a RAM-disk - this
  90. :    minimizes hard disk accesses and speeds up your work. By using
  91. :    %@search, DFC will find the versions on the RAM-disk first. If
  92. :    you have removed your RAM disk - to save memory - DFC will still find
  93. :    the versions on your hard disk. (Assuming that your path is set to
  94. :    <RAM-disk>;C:\...)
  95.  
  96. : my configuration:
  97. :
  98. set edt=%@search[tpe.exe]
  99. set desced=%@search[4desc.exe]
  100. set ff=%@search[ff.exe]
  101. set grep=%@search[grep.exe]
  102. set list=list
  103. : (Turbo Power's Public Domain editor, my own 4DOS Description Editor and
  104. :   file finder, 4DOS' built in list, and GNU's GREP (recommended!))
  105.  
  106. : Itamar's configuration:
  107. :
  108. : set edt=%@search[ped.exe]
  109. : set desced=%@search[4edit.exe]
  110. : set ff=%@search[whereis.exe] %& -o"&f &m" -a
  111. : set grep=%@search[grep]
  112. : set list=%@search[list]
  113. : (Bob Foley's editor, 4edit, Keith Ledbetters SST, GNU's grep and list )
  114.  
  115. :check_temp
  116. :
  117. :    If "temp" is not defined, it will be defined as your "last disk"
  118. :    (C:, or D:, etc.). If it *is* defined, but no trailing backslash is
  119. :    found, then it will be added. This will also add a trailing backslash
  120. :    to the 'temp" just defined (it will then become C:\, or D:\, etc.).
  121.  
  122. iff "%temp"=="" then set temp=%_lastdisk:\
  123. elseiff "%@substr[%temp,0,-1]" != "\" then set temp=%temp\
  124. endiff
  125.  
  126. :check_ansi
  127. iff %_ansi == 1 then
  128.  set clrtoeol=e[K
  129. else
  130.  set clrtoeol=                                               %@chr[13]
  131. endiff
  132.  
  133. :check_diskdb
  134. :
  135. :    Sets %DISKDB to the directory where DFC.BTM resides
  136.  
  137. iff "%diskdb" == "" then
  138.  set diskdb=%@path[%@search[dfc.btm]]disks.db
  139. :     Change file name as necessary  ^^^^^^^^
  140.  
  141.  iff "%@search[%diskdb]" == "" then
  142.   echo Disk database ("%diskdb") not found!
  143.   echo.
  144.   quit
  145.  endiff
  146. endiff
  147.  
  148. :setup_and_search_GREP
  149. set tempdiskdb=%temp%%@name[%diskdb].%@ext[%diskdb]
  150. iff "%grep" ne "" then ^ set tempfile=%temp%dfctemp.$$$ ^ endiff
  151.  
  152. iff "%1" == "scan" then
  153.  set disk=%2
  154.  set oldlabel=%@label[%disk]
  155.  
  156.  :waitfordisk
  157.  :
  158.  : Wait for a disk to be inserted.
  159.  
  160.  echos %@char[13]> please INSERT disk and press any key... or ESC to EXIT%clrtoeol%
  161.  unset /q t
  162.  inkey  %%t >& NUL:
  163.  if %t == %@char[27] goto /I exit
  164.  if %@ready[%disk] == 0 goto /I waitfordisk
  165.  gosub scan
  166.  
  167.  :change
  168.  echos %@char[13]=> please REMOVE disk ... or press ESC to EXIT%clrtoeol%
  169.  unset /q t
  170.  inkey  %%t >& NUL:
  171.  iff %t != %@char[27] then ^ goto /I waitfordisk ^ endiff
  172. elseiff "%1" == "find" .or. "%1" == "get" then
  173.  set file=%2
  174.  gosub get
  175. elseiff "%1" == "compare" .or. "%1" == "findall"  then
  176.  set file=%2
  177.  gosub findall
  178. else
  179.  
  180.  :menuloop
  181.  
  182.  iff %_monitor == mono then
  183.   echo   1) Scan disk
  184.   echo   2) Find an entry
  185.   echo   3) Compare entries on harddisk with your disk database.
  186.   echo   7) Sort database '%diskdb' alphabetically
  187.   echo   8) Edit database '%diskdb'
  188.   echo   9) View database '%diskdb'
  189.   echo   ?) Help screen
  190.   echo.
  191.   echo   0) Exit
  192.  else
  193.   echos 1)
  194.   color bright white on %bg ^ echos  S ^ color %fg on %bg
  195.   echo can disk.
  196.   echos 2)
  197.   color bright white on %bg ^ echos  F ^ color %fg on %bg
  198.   echo ind an entry.
  199.   echos 3)
  200.   color bright white on %bg ^ echos  C ^ color %fg on %bg
  201.   echo ompare entries on harddisk with your disk database.
  202.   echos 7) S
  203.   color bright white on %bg ^ echos o ^ color %fg on %bg
  204.   echo rt database '%diskdb' alphabetically.
  205.   echos 8)
  206.   color bright white on %bg ^ echos  E ^ color %fg on %bg
  207.   echo dit database '%diskdb'.
  208.   echos 9)
  209.   color bright white on %bg ^ echos  V ^ color %fg on %bg
  210.   echo iew database '%diskdb'.
  211.   echos ?)
  212.   color bright white on %bg ^ echos  H ^ color %fg on %bg
  213.   echo elp screen
  214.   echo.
  215.   echos 0) E
  216.   color bright white on %bg ^ echos x ^ color %fg on %bg
  217.   echo it
  218.  endiff
  219.  echo.
  220.  
  221.  :dochoice
  222.  inkey /K"0123789SFCOEV?HX[ESC]" Your choice:  %%ans
  223.  set ans=%@upper[%ans]
  224.  iff %ans == %@char[27] .or. %ans == 0 .or. %ans == X then goto /i exit
  225.  elseiff %ans == 1 .or. %ans == S then
  226.   inkey /K"ABCDEFGH" Disk drive to scan: (A-%_lastdisk) %%disk
  227.   set disk=%disk:
  228.   set oldlabel=%@LABEL[%disk]
  229.   dir %disk
  230.   echo.
  231.   input /K"YN" Shall the disk be labelled   ? (Y/N) %%ans2
  232.   iff %ans2 == y then ^ label %disk ^ endiff
  233.   input /K"YN" Are the descriptions correct ? (Y/N) %%ans2
  234.   iff %ans2 == n then ^ %desced %disk ^ endiff
  235.   input /K"YN" Shall this disk be scanned   ? (Y/N) %%ans2
  236.   iff %ans2 == y then
  237.    gosub scan
  238.    echo.
  239.    echo.
  240.    echo The floppy catalog: "%diskdb" is now up to date
  241.    pause
  242.   endiff
  243.  elseiff %ans == 2 .or. %ans == F .or. %ans == G then
  244.   unset /q file
  245.   gosub get
  246.  elseiff %ans == 3 .or. %ans == C then
  247.   unset /q file
  248.   input What file are your searching for ? %%file
  249.   gosub findall
  250.  elseiff %ans == 7 .or. %ans == O then
  251.   echos Sorting %diskdb alphabetically, please wait...
  252.   sort < %diskdb > %tempdiskdb
  253.   del /q %diskdb
  254.   move /q %tempdiskdb %diskdb
  255.   echo done.
  256.  elseiff %ans == 8 .or. %ans == E then %edt  %diskdb
  257.  elseiff %ans == 9 .or. %ans == V then gosub list
  258.  elseiff %ans == ? .or. %ans == H then gosub help
  259.  endiff
  260.  
  261.  cls
  262.  echo DFC - Dave's File Cataloguer by David Frey         Version 1.31   10-NOV-92
  263.  echo                             and Itamar Even Zohar
  264.  echo based on TFC by Tobi Oetiker (oetiker@iis.ethz.ch)
  265.  echo.
  266.  goto /i menuloop
  267. endiff
  268.  
  269. :exit
  270. if "%diskdb" != "" .and. "%@descript[%diskdb]" == "" describe %diskdb "updated file database"
  271.  
  272. if exist %tempfile   del /q %tempfile
  273. if exist %tempdiskdb del /q %tempdiskdb
  274.  
  275. echo.
  276. echo Thank you for using DFC ...
  277. echo.
  278. color %fg on %bg
  279. endlocal
  280. quit
  281.  
  282. : ---------------------------------- Subroutines
  283.  
  284. :scan
  285. :
  286. : Scans a disk
  287.  
  288. : When grep is around, remove Info from previous scanning
  289. : from the Database File
  290. :
  291. iff "%grep" ne "" .and. exist %diskdb then
  292.  echos %@char[13]** Removing old entries for "%oldlabel"%clrtoeol%
  293.  %grep -v -i "^%oldlabel" %diskdb > %tempdiskdb
  294. endiff
  295.  
  296. :add_data
  297.  
  298. :
  299. : ADD DATA FROM DISK TO DATABASE
  300. :
  301.  
  302. echos %@char[13]** Adding new entries from Disk "%@label[%disk]"%clrtoeol%
  303. dir /djmkla:-d-h %disk > %tempfile
  304. set n=%@lines[%tempfile]
  305. set l=0
  306. iff %n gt -1 then
  307.  :echoloop1
  308.  echos %@upper[%@label[%disk]] >> %tempdiskdb
  309.  echos %@substr[             ,0,%@eval[12-%@len[%@label[%disk]]]] >> %tempdiskdb
  310.  echos %_date >> %tempdiskdb
  311.  echo  %@line[%tempfile,%l] >> %tempdiskdb
  312.  set l=%@eval[%l+1]
  313.  if %l le %n goto /i echoloop1
  314. endiff
  315.  
  316. move /q %tempdiskdb %diskdb
  317. del  /q %tempfile
  318. return
  319.  
  320. :get
  321. :
  322. : Search for a file in the database.
  323.  
  324. iff "%file" == "" then
  325.  input What are you searching for: %%file
  326. endiff
  327.  
  328. echo.
  329. echos Searching for: »
  330. if %_monitor == color color bright white on blue
  331. echos %file
  332. if %_monitor == color color %fg on %bg
  333. echo.
  334. echo Please wait...
  335. (echo Disk        Scanned  File             Size      Date   Time Description      ^
  336.  echo ──────────────────────────────────────────────────────────────────────────── ^
  337.  %grep -i "%file" %diskdb) >%tempfile
  338.  
  339. :  The original routine piped the finding to screen via '|list /s'.
  340. :  However, in order to be able to check whether any match was found,
  341. :  a file had to be opened, then 3rd line checked. If '*EOF*' is found
  342. :  in that line, this means that there was no match.
  343.  
  344. iff %@index[%@line[%tempfile,2],*EOF*] ge 0 then
  345.  echo.
  346.  echo No match found in %diskdb for "%file"
  347.  echo.
  348.  pause
  349. else
  350.  %list %tempfile
  351. endiff
  352. del /q %tempfile
  353. return
  354.  
  355. :list
  356. :
  357. : List disk database
  358.  
  359. (echo Disk        Scanned  File             Size      Date   Time Description      ^
  360.  echo ──────────────────────────────────────────────────────────────────────────── ^
  361.  type %diskdb) > %tempfile
  362. %list %tempfile
  363.  
  364. : Original line was: (echo ... ^ type %diskdb)|list/s
  365. : Piping via '|list/s' works only with 4DOS's internal list. In order
  366. : to use external list programs, a temporary file must be created.
  367. del /q %tempfile
  368. Return
  369.  
  370. :findall
  371. :
  372. : By Itamar Even-Zohar (slightly changed by David Frey)
  373. : Looks for specified files, or a string thereof, using %ff, then searches diskette
  374. : catalogue and displays results to screen by %list
  375.  
  376. echo.
  377. echos Searching for: »
  378. if %_monitor == color color bright white on blue
  379. echos %file
  380. if %_monitor == color color %fg on %bg
  381. echo «
  382. echo Please wait...
  383. <
  384. (echo.^echo Files found on disk
  385.  echo ──────────────────────────────────────────────────────────────────────────── ^
  386.  %ff  %file) >%temp%find.Tmp
  387.  
  388. (echo.^
  389.  echo Files found in Catalogue of Diskettes: ^
  390.  echo Disk        Scanned  File             Size      Date   Time Description      ^
  391.  echo ──────────────────────────────────────────────────────────────────────────── ^
  392.  %grep -i "%file" %diskdb) >>%temp\find.Tmp
  393.  
  394. %list %temp%find.tmp
  395. del /q %temp%find.tmp
  396. return
  397.  
  398. :help
  399. :
  400. : Shows a help screen.
  401.  
  402. cls
  403. if %_monitor == color color bright yellow on %bg
  404. echo Dave's File Cataloguer by David Frey and Itamar Even Zohar  Ver 1.31  10-NOV-92
  405. echo based on TFC by Tobi Oetiker (oetiker@iis.ethz.ch)
  406. if %_monitor == color color %fg on %bg
  407. text
  408.  
  409. DFC creates and maintains a directory-styled database.  The database contains
  410. information of all the files on the floppies you scan: disklabel, filesize,
  411. creation date, filename, 4DOS file description and scanning date.
  412.  To use DFC as a floppy cataloging system, label your disks with `LABEL' and
  413. describe the files on it (or use  menu point 1!). It is a good idea to write
  414. the disk labels on the cover for future recognition...
  415.  If GNU's GREP.EXE (available from Simtel) lives on your system, and you scan
  416. a floppy which was previously processed, the database entries of the previous
  417. scan will be replaced by the new ones.
  418.  
  419. Usage  : DFC scan <drive>|find|compare  <drive> is the drive you want to scan.
  420.  
  421.          DFC will use the catalog file stored in the environment variable
  422.          "diskdb" or "DISKS.DB" as default, when diskdb is empty.
  423.  
  424. Example: dfc scan a:   --> scan drive a:
  425.          dfc get  4DOS --> search for 4dos.* files
  426.  
  427. Written by David Frey, Urdorferstrasse 30, CH-8952 Schlieren
  428.        and Itamar Even-Zohar, Tel Aviv University
  429. Original program and idea by Tobi Oetiker (oetiker@iis.ethz.ch)
  430. endtext
  431. echos                            Gallusstrasse 25, CH-4600 Olten, FAX +41 62 32 61 78
  432. unset /q ans2
  433. inkey %%ans2
  434. return
  435.