home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / mav120.exe / MAV.BTM
Text File  |  1992-10-29  |  12KB  |  357 lines

  1. @echo off
  2. setlocal
  3. unalias *
  4. goto env_space
  5.  
  6. :          ┌───────────────────── Information ──────────────────────┐
  7. :          │                                                        │
  8. :          │  This is Mally's Archive Viewer. The purpose of this   │
  9. :          │  program is to facilitate viewing the contents of a    │
  10. :          │  so called archive without having to remember the      │
  11. :          │  parameters and without having to clean up the mess    │
  12. :          │  after you finish.                                     │
  13. :          │                                                        │
  14. :          │  This is a Batch To Memory (btm) file,                 │
  15. :          │  which means that it is a very fast batch file that    │
  16. :          │  will only run if 4DOS is your command interpreter.    │
  17. :          │  Moreover, it is assumed that you use 4DOS version     │
  18. :          │  4.0 or later. 4DOS is a shareware program, available  │
  19. :          │  at almost every BBS and `anonymous FTP' site.         │
  20. :          │                                                        │
  21. :          │  Of course, you are free to make as many changes in    │
  22. :          │  this program as you like. If you do, please change    │
  23. :          │  the name of the file and remove my name (%MYNAME).    │
  24. :          │                                                        │
  25. :          │  If you have any remarks, questions or suggestions,    │
  26. :          │  E-mail me at                                          │
  27. :          │                   MALLY@eco.rug.nl                     │
  28. :          │                                                        │
  29. :          └────────────────────────────────────────────────────────┘
  30.  
  31. :installation
  32.  
  33. :          ┌───────────────────── Installation ─────────────────────┐
  34. :          │                                                        │
  35. :          │  Fill in the path to your archivers, e.g.              │
  36.                 set ARCPATH=y:;g:\utils\zip;g:\utils\arj
  37. :          │  (Only needed if not already in path)                  │
  38. :          │                                                        │
  39. :          │  Fill in the archive extensions known to your system   │
  40. :          │  ( any of [arc,arj,lzh,zip,zoo] ), e.g.                │
  41.                 set ARCTYPES=arc;arj;lzh;zip;zoo
  42. :          │  MAV uses the following programs to handle archives:   │
  43. :          │    arc : PKUNPAK      (PKWARE Inc.)                    │
  44. :          │    arj : ARJ          (Robert K. Jung)                 │
  45. :          │    lzh : LHA          (Haruyasu Yoshizaki)             │
  46. :          │    zip : PKUNZIP      (PKWARE Inc.)                    │
  47. :          │    zoo : ZOO          (Rahul Dhesi)                    │
  48. :          │                                                        │
  49. :          │  Fill in the working directory, i.e. the directory     │
  50. :          │  where some temporary files will be written            │
  51.                 set WORKINGDIR=g:\mav
  52. :          │                                                        │
  53. :          │  Define the parameter DOCU, i.e. indicate the          │
  54. :          │  files to `show only' if this parameter is used        │
  55.                 set DOCU=*.doc *.txt *.me *.man *.bat *.btm
  56. :          │                                                        │
  57. :          │  Colors used in selection windows are set by the       │
  58. :          │  HistWinColor directive in 4DOS.INI.                   │
  59. :          │                                                        │
  60. :          └────────────────────────────────────────────────────────┘
  61.  
  62. :          ┌────────────────────── History ─────────────────────────┐
  63. :          │                                                        │
  64. :          │  v1.2  Changed name to MAV.                            │
  65. :          │        Minimized amount of free environment space      │
  66. :          │        needed at start-up.                             │
  67. :          │        Check on existence of WORKINGDIR added.         │
  68. :          │        Can now handle full pathnames in ZIP files.     │
  69. :          │        Parameter DOCU added.                           │
  70. :          │  v1.1  Several improvements. Donated to the            │
  71. :          │        public domain.                                  │
  72. :          │  v1.02 Changed listing technique of archives           │
  73. :          │        (much faster)                                   │
  74. :          │  v1.01 Minor alterations and bug fixes                 │
  75. :          │  v1.00 First release for very small public             │
  76. :          │                                                        │
  77. :          └────────────────────────────────────────────────────────┘
  78.  
  79. goto continue
  80.  
  81. :env_space
  82. : This is a trick to assure enough environment space under almost all
  83. : circumstances. MAV needs 20 bytes of environment space to start but
  84. : approximately 512 bytes to run. If not enough space is available,
  85. : MAV reloads itself in a secondary shell.
  86. : Under exceptional circumstances it is possible that 512 bytes are not 
  87. : enough to run. The solution is to increase the value of ES, set below.
  88.   if %_env LT 20 goto error_memory
  89.   set ES=512 >& nul
  90.   if "%1"=="/run" goto installation
  91.   if %_env GE %ES goto installation
  92.   %COMSPEC //EnvFree=%ES /c %0 /run %& >&> nul
  93.   goto end
  94.  
  95. :continue
  96.  
  97. set VERSION=v1.2
  98. set MYNAME=Mally
  99. iff "%1"=="/run" then
  100.   if %#==1 goto syntax
  101.   shift 1
  102. else
  103.   if %#==0 goto syntax
  104. endiff
  105.  
  106.  
  107. if "%_4ver"=="" set _4ver=0
  108. iff %_4ver LT 4.0 then
  109.   echo.
  110.   echo   Sorry, need 4DOS version 4.0 or higher to run.
  111.   goto end
  112. endiff
  113.  
  114. keystack !
  115.  
  116. if "%ARCPATH" NE "" path %ARCPATH%;%PATH%
  117.  
  118. set ARCHIVE=%1
  119. iff %@eval[%@index[%ARCHIVE,.]+1]==%@len[%ARCHIVE] then
  120.   set ARCHIVE=%@substr[%ARCHIVE,0,%@index[%ARCHIVE,.]]*.*
  121. endiff
  122.  
  123. set SHOWONLY=%2&
  124. if "%@upper[%SHOWONLY]"=="DOCU" set SHOWONLY=%DOCU
  125.  
  126. if "%@substr[%WORKINGDIR,0,-1]" NE "\" set WORKINGDIR=%WORKINGDIR%\
  127. iff NOT isdir %WORKINGDIR then
  128.   echo.
  129.   echo The working directory %@upper[%WORKINGDIR] does not exist.
  130.   inkey /K"YyNn" Should it be created? (y/n) %%CHAR
  131.   iff "%@upper[%CHAR]"=="N" then
  132.     echo Directory NOT created.
  133.     shift -1
  134.     echo See file %@upper[%@search[%0]] for installation directives.
  135.     quit
  136.   endiff
  137.   md %WORKINGDIR
  138. endiff
  139.  
  140. set LIST=%@unique[%WORKINGDIR]
  141. set LISTING=%@unique[%WORKINGDIR]
  142. set DELFILES=%LIST %LISTING
  143.  
  144. pushd
  145. cdd %@path[%ARCHIVE] >& NUL
  146. set ARCDIR=%_cwds
  147.  
  148. set ARCHIVE=%@name[%ARCHIVE]%.%@ext[%ARCHIVE]
  149. if "%@ext[%ARCHIVE]"=="*" set ARCHIVE=%@name[%ARCHIVE]
  150. iff "%@ext[%ARCHIVE]"=="" then
  151.   if %@index[%ARCTYPES%,arc] GE 0 set ATYPES=%ARCHIVE%.arc;
  152.   if %@index[%ARCTYPES%,arj] GE 0 set ATYPES=%ATYPES%%ARCHIVE%.arj;
  153.   if %@index[%ARCTYPES%,lzh] GE 0 set ATYPES=%ATYPES%%ARCHIVE%.lzh;
  154.   if %@index[%ARCTYPES%,zip] GE 0 set ATYPES=%ATYPES%%ARCHIVE%.zip;
  155.   if %@index[%ARCTYPES%,zoo] GE 0 set ATYPES=%ATYPES%%ARCHIVE%.zoo;
  156.   set ARCTYPES=%ATYPES%
  157.   set ATYPES=
  158.   dir %ARCTYPES /bfOn > %LISTING >&> NUL
  159. else
  160.   dir %ARCHIVE /bfOn > %LISTING >&> NUL
  161. endiff
  162.  
  163.  
  164. :more
  165.   iff %@lines[%LISTING] GE 1 then
  166.     set ARCHIVE=%@select[%LISTING,0,0,25,80, Mally's Archive Viewer %VERSION ]
  167.     set MORE=more
  168.   else
  169.     set ARCHIVE=%@line[%LISTING,0]
  170.   endiff
  171.  
  172.   if "%ARCHIVE"=="" goto thanks
  173.   if "%ARCHIVE"=="**EOF**" goto no_archives
  174.   if "%ARCHIVE"=="*.*" goto no_archives
  175.  
  176. iff "%@ext[%ARCHIVE]"=="arc" then
  177.   set ARCHIVER=pkunpak
  178.   set VIEW=-v
  179.   set POSITION=0
  180.   set LENGTH=,13
  181.   set EXTRACT=-e
  182.   set KEYSTACK=down down down down down down down down
  183.   goto main
  184. endiff
  185.  
  186. iff "%@ext[%ARCHIVE]"=="arj" then
  187.   set ARCHIVER=arj
  188.   set VIEW=l
  189.   set POSITION=0
  190.   set LENGTH=,13
  191.   set EXTRACT=e
  192.   set KEYSTACK=down down down down down down down
  193.   goto main
  194. endiff
  195.  
  196. iff "%@ext[%ARCHIVE]"=="lzh" then
  197.   set ARCHIVER=lha
  198.   set VIEW=-l
  199.   set POSITION=2
  200.   set LENGTH=,13
  201.   set EXTRACT=e
  202.   set KEYSTACK=down down down down down
  203.   goto main
  204. endiff
  205.  
  206. iff "%@ext[%ARCHIVE]"=="zip" then
  207.   set ARCHIVER=pkunzip
  208.   set VIEW=-v
  209.   set POSITION=61
  210.   set LENGTH=
  211.   set EXTRACT=-e
  212.   set KEYSTACK=down down down down down down down down down
  213.   goto main
  214. endiff
  215.  
  216. iff "%@ext[%ARCHIVE]"=="zoo" then
  217.   set ARCHIVER=zoo
  218.   set VIEW=-list
  219.   set POSITION=49
  220.   set LENGTH=,13
  221.   set EXTRACT=-extract
  222.   set KEYSTACK=down down down down
  223.   goto main
  224. endiff
  225.  
  226. goto error
  227.  
  228. :main
  229.   cdd %WORKINGDIR >& NUL
  230.   del %LIST >& NUL
  231.   %ARCHIVER %VIEW %ARCHIVE %SHOWONLY > %LIST >&> NUL
  232.   if ERRORLEVEL 1 goto error_unarchive
  233.   :again
  234.   keystack %KEYSTACK
  235.   set SHOW=%@substr[%@select[%LIST,0,0,25,80, Mally's Archive Viewer %VERSION ],%POSITION%%LENGTH]
  236.   :slash
  237.     iff %@index[%SHOW,/] GE 0 then
  238.       set SHOW=%@substr[%SHOW,0,%@eval[%@index[%SHOW,/]]]\%@substr[%SHOW,%@eval[%@index[%SHOW,/]+1],256]
  239.       goto slash
  240.     endiff
  241.   iff "%SHOW" NE "" then
  242.     set SHOWFILE=%@name[%SHOW].%@ext[%SHOW]
  243.     iff NOT exist %ARCDIR%%SHOW then
  244.       iff NOT exist %SHOWFILE then
  245.         %ARCHIVER %EXTRACT %ARCHIVE %SHOW >& NUL
  246.         set DELFILES=%DELFILES %@full[%SHOWFILE]
  247.       endiff
  248.     endiff
  249.     goto list
  250.   endiff
  251.   goto %MORE
  252.   goto thanks
  253.  
  254. :list
  255.   iff NOT exist %ARCDIR%%SHOWFILE then
  256.     list %SHOWFILE
  257.   else
  258.     iff exist %ARCDIR%%SHOWFILE then
  259.       list %ARCDIR%%SHOWFILE
  260.     else
  261.       goto error
  262.     endiff
  263.   endiff
  264.   cls
  265.   goto again
  266.  
  267. :thanks
  268.   echo.
  269.   echos Thanks for using` `
  270.   scrput %_row %_column bright white on red  %MYNAME's Archive Viewer %VERSION` `
  271.   echo.
  272.   goto end
  273.  
  274. :syntax
  275.   echo.
  276.   echos Syntax of` `
  277.   scrput %_row %_column bright white on red  %MYNAME's Archive Viewer %VERSION` `
  278.   echo.
  279.   echo.
  280.   echo %@upper[%@name[%0]] archive[.ext] [showonly.xtn [showonly.xtn] [DOCU]]
  281.   echo.
  282.   echo where
  283.   echo - archive is a filename
  284.   echo - ext is one of %ARCTYPES
  285.   echo - showonly is a filename
  286.   echo - xtn is an extension
  287.   echo - DOCU may be used to show only files with
  288.   echo.  mask in %DOCU
  289.   echo.
  290.   echo Wildcards: * is allowed everywhere,
  291.   echo            ? everywhere except in ext
  292.   echo.
  293.   echo See file %@upper[%@search[%0]] for installation directives
  294.   goto end
  295.  
  296.  
  297. :error
  298.   gosub error_screen
  299.   del %DELFILES >& NUL
  300.   iff %@diskfree[%_disk,K] LT 200 then
  301.     echo Most likely, the error occurred because of insufficient free disk
  302.     echo space on your working drive %_disk: (there is only %@diskfree[%_disk,K]K free).
  303.     echo.
  304.     echo Otherwise, the reason is that
  305.   endiff
  306.   echo %@upper[%ARCHIVE] does not exist, is corrupted,
  307.   echo is not an archive, or its archive method is unknown.
  308.   goto end
  309.  
  310. :error_unarchive
  311.   iff "%@search[%ARCHIVER]"=="" then
  312.     gosub error_screen
  313.     echo The program %@upper[%ARCHIVER%], needed to handle archives with extension .%@upper[%@ext[%ARCHIVE]],
  314.     echo was not found.
  315.     echo.
  316.     goto end
  317.   endiff
  318.   iff "%MORE" NE "" then
  319.     cls
  320.     drawbox 0 10 3 70 1 bri whi on red fill red
  321.     scrput 1 15 bri whi on red %@upper[%ARCHIVE] 
  322.     scrput 2 15 bri whi on red does not contain a file with extension %@upper[%@ext[%SHOWONLY]]
  323.     screen 4 10
  324.     pause
  325.     cls
  326.     goto %MORE
  327.   else
  328.     gosub error_screen
  329.     echo %@upper[%ARCHIVE] does not contain a file with extension %@upper[%@ext[%SHOWONLY]]
  330.     echo.
  331.     goto end
  332.   endiff
  333.   
  334. :no_archives
  335.   gosub error_screen
  336.   echo No archives in directory %@path[%1]
  337.   goto end
  338.  
  339. :error_memory
  340.   echo.
  341.   echo  Not enough environment space. MAV needs 20 bytes to start.
  342.   echo.
  343.   goto end
  344.  
  345. :error_screen
  346.   echo.
  347.   echos Error reported by` `
  348.   scrput %_row %_column bright white on red  %MYNAME's Archive Viewer %VERSION` `
  349.   echo.
  350.   echo.
  351.   return
  352.  
  353. :end
  354.   cdd %WORKINGDIR >& NUL
  355.   del %DELFILES >& NUL
  356.   popd >& NUL
  357.