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

  1. *REM This batch file is Freeware, free to use and redistribute unmodified *
  2. *REM Jouni Miettunen * jon@stekt.oulu.fi * Oulu * Finland * Europe * 1992 *
  3.  
  4. REM unixlike file utility. Has more correct guesses than the original one!
  5. REM Timestamp 15-Nov-1992
  6.  
  7. break on^setlocal^unalias *^if %#==0 .or. "%1"=="-?" goto info
  8.  
  9. REM Needs some kind of GREP clone, DOS's FIND should be in every machine..
  10. REM I prefer Christopher J. Dunford's FastGREP 1.72 from SIMTEL-20 mirror.
  11. REM Note: when using FIND u must change "%@line[con,0]" to "%@line[con,2]"
  12. REM Note: In future 4DOS versions %@search[find /i] might generate error
  13.  
  14. REM set TOOL=find/i
  15. set TOOL=fgrep -sx1
  16. iff "%@search[%TOOL]"=="" then^echo Error: Can't find %TOOLn^goto info^endiff
  17.  
  18. REM "extensio.txt" database of file extensions, set *absolute path* below
  19. REM format: (point)(max three chars)(TAB)(description max 63 char) No commas!
  20. REM .txt    text file (ASCII)
  21.  
  22. set DATA=c:\relax\extensio.txt
  23. iff "%@search[%DATA]"=="" then^echo Error: Can't find %DATAn^goto info^endiff
  24.  
  25. REM PLAZA sets the description column (16 is 2 TABs), used in 3 places.
  26. set PLAZA=14
  27.  
  28. REM Get current home directory for recursive listings
  29. set home=%_cwds
  30.  
  31. REM Did the user give any arguments? Is it argument or a file?
  32. if "%@ascii[%1]" != "45" .or. exist %1 goto over^if %#==1 goto info
  33.  
  34. :optiot
  35. set index=%@eval[%index+1]^set %@ascii[%@substr[%1,%index,1]]=1
  36. if %index lt %@eval[%@len[%1]-1] goto optiot^shift
  37.  
  38. iff "%[%@ascii[R]]"=="1" then^set g=global^set h=/qi^endiff
  39. iff "%[%@ascii[a]]"=="1" then^alias for=*for /a-d^if "%h" != "" set h=/qih^endiff
  40. iff "%[%@ascii[*]]"=="1" then^endiff
  41. iff "%[%@ascii[1]]"=="1" then^endiff
  42.  
  43. REM Works correctly with commands like "file -R .. dir1\*.* *fil*.* dir2" etc.
  44. REM thanx to these messy lines below. Don't make any changes, please.
  45. REM ..on the other hand, maybe ls.btm-like filename grouping would be needed?
  46.  
  47. :over
  48. iff isdir %1 then^set do=%1\*.*^else^set do=%1^endiff
  49. if "%@path[%@full[%do]]" != "%home" cd %@path[%@full[%do]]
  50. set do=%@substr[%do,%@len[%@path[%do]]]
  51. %[g]%[h] gosub work^cd ->&nul^shift^if "%1" != "" goto over^goto end
  52.  
  53. :work
  54. REM Shield against empty dir error message; Cannot use "if not exist %do return"
  55. REM to be able to check extensions *without* existing file eg. "file foo.bar".
  56.  
  57. if not exist %do .and. %@index[%do,?] != -1 .or. %@index[%do,*] != -1 return
  58. if "%[%@ascii[R]]"=="1" .and. not exist %do .and. %@index[%do,?]==-1 .and. %@index[%do,*]==-1 return
  59.  
  60. REM Does the directory exist? If yes, then if files to be identified are not
  61. REM in current directory, show their path. Have to show *absolute* path..
  62.  
  63. REM Structure if "0"=="1" iff "1"=="1" then^echo ERROR^endiff does not work,
  64. REM but if "0"=="1" if "1"=="1" echo NO ERROR does work. 4DOS 4.01 revision D.
  65.  
  66. if isdir %@path[%@full[%do]] if "%_cwds" != "%home" echo [%@upper[%_cwds]]
  67.  
  68. REM Identify file type - optimized Stetson Method (linear search in unsorted data)
  69.  
  70. REM Could increase reliability by studying path/directory/file names and other
  71. REM files in current dir and trying to guess kind of files we are dealing with
  72. REM .spl    compressed file archive created by SPLINT (splint.arc)
  73. REM .spl    customized printer driver (Sprint)
  74. REM .spl    print spooling file (MS Windows)
  75.  
  76. REM Files for which u want a description doesn't have to exist and *.* is OK.
  77.  
  78. for /a-d %a in (%do) (
  79. iff "%[%@ext[%a]]" != "1" then
  80.     echos %@name[%a]
  81.     iff "%@ext[%a]"=="" then
  82.         screen %_row %PLAZA ----- No File Extensionn
  83.     else
  84.         echos .%@ext[%a]
  85.         if "%[%@ascii[*]]"=="1" gosub bells
  86.         %TOOL ".%@ext[%a]    " %DATA | set d=%@line[con,0]
  87.         iff %@ascii[%d] != 46 then
  88.             screen %_row %PLAZA ----- Unknown File Typen
  89.         else
  90.             screen %_row %PLAZA %@substr[%d,%@len[.%@ext[%a]]]n
  91.         endiff
  92.         if "%[%@ascii[1]]"=="1" set %@ext[%a]=1
  93.     endiff
  94. endiff
  95. )
  96. return^goto end
  97.  
  98. REM This is highly system dependent, you have to re-configure it before using.
  99. REM You need WordCount with -l (line) switch, "wc-f" is my version of it
  100. REM and gives output as I wish == in the first column.
  101.  
  102. :bells
  103. if "%@search[wc-f]"=="" return
  104. fgrep -sx ".%@ext[%a]    " %DATA | wc-f -l | set d=%@line[con,0]
  105. if "%d" gt "1" screen %_row %@eval[%PLAZA-1] *
  106. return^goto end
  107.  
  108. :info
  109. echo Usage: %@lower[%@name[%0]] [-options] file | directory ..
  110. text
  111.  
  112.     -*    notify when several possible descriptions
  113.     -1    only unique file extensions
  114.     -a    all files (also hidden and system)
  115.     -R    process recursively all subdirectories
  116.  
  117. Identifies DOS files by making a very good guess based on their file
  118. extension. Needs a database file and some kind of GREP clone (FIND).
  119. endtext
  120.  
  121. :end
  122. break off^quit
  123.  
  124. REM In theory we don't need that final "quit", but in practice we do:
  125. REM 4DOS 4.01 revision B
  126.  
  127. REM gosub end
  128. REM echo ERROR
  129. REM :end
  130. REM echo END
  131.