home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / opus / v4 / arexx / viewlhafile.rexx < prev   
OS/2 REXX Batch file  |  1977-12-31  |  8KB  |  333 lines

  1. /*rx
  2.  *
  3.  * ViewLhAFile.rexx - Extract and view a file from an LhA archive previously
  4.  *                    listed in a DOpus window by ListLha.rexx.
  5.  *
  6.  * $VER: ViewLhAFile 40.1 (23/05/94) by Geoff Seeley
  7.  *
  8.  * Usage: ARexx command ViewLhAFile.rexx (from DOpus)
  9.  *
  10.  */
  11.  
  12. /*----- Configuration Variables (change these to suit your setup) ----------*/
  13.  
  14. LhaCommand   = 'XFH_Work:C/Archivers/File/LhA '
  15. OutputWindow = '>CON:30/145/640/100/LhA_Output/CLOSE/SCREENDOPUS.1 '
  16. TmpDir       = 'T:'
  17.  
  18. TextViewer    = 'XFH_Work:C/Text/Viewers/Most '
  19. GuideViewer   = 'Sys:Utilities/MultiView '
  20. IFFViewer     = 'XFH_Work:C/Graphics/Viewers/VT '
  21. JPGViewer     = 'XFH_Work:C/Graphics/Viewers/FJPEG_ECS '
  22. GIFViewer     = 'XFH_Work:C/Graphics/Viewers/VT '
  23. ANIMPlayer    = 'XFH_Work:C/Graphics/Viewers/VT '
  24. MPEGPlayer    = 'XFH_Work:C/Animation/Players/mp -dither gray '
  25. SNDPlayer     = 'XFH_Work:C/Sound/Players/OPlay '
  26. InfoViewer    = 'IconInfo '
  27. DefaultViewer = 'XFH_Work:C/Text/Viewers/xMore '
  28.  
  29. /*--------------------------------------------------------------------------*/
  30.  
  31. /* misc. variables */
  32.  
  33. DOpusPort = 'DOPUS.1'
  34.  
  35. LhaExtractCmd  = '-x x '
  36.  
  37. if ~show(l,"rexxsupport.library") then        
  38.     call addlib("rexxsupport.library",0,-30,0)
  39.  
  40. /* make sure we've got somebody to talk to */
  41.  
  42. if showlist('Ports', DOpusPort) = 0 then do
  43.    say 'Directory Opus ARexx port not found. Aborting.'
  44.    call CleanUp
  45. end
  46.  
  47. address 'DOPUS.1'
  48. options results
  49. signal on failure
  50.  
  51. TopText "View File(s) From an LhA Archive Buffer"
  52.  
  53. Busy on
  54.  
  55. /* get the path/name of the LhA archive file */
  56.  
  57. 'Status 14 -1'
  58. LhaArchive = result
  59.  
  60. /* make sure it's an LhA archive listing buffer */
  61.  
  62. if (IsLhAFile(LhaArchive) = 0) then do
  63.  
  64.    /* try other window */
  65.  
  66.    OtherWindow
  67.    'Status 14 -1'
  68.    LhaArchive = Result
  69.  
  70.    if (IsLhAFile(LhaArchive) = 0) then do
  71.  
  72.       Notify "Sorry, no LhA archive buffer found.\You must use the ListLha button first."
  73.       call CleanUp
  74.  
  75.    end
  76.  
  77. end
  78.  
  79. /* get path to archive */
  80.  
  81. call FindLhaPath
  82. LhaArchive = LhaPath || LhaArchive
  83.  
  84. /* check for existance of archive */
  85.  
  86. if ~exists(LhaArchive) then do
  87.  
  88.    Notify "Can't seem to find '" || LhaArchive || "'\Aborting."
  89.    call CleanUp
  90.  
  91. end
  92.  
  93. /* get list of selected entries */
  94.  
  95. GetSelectedAll
  96. SelectedEntries = result
  97.  
  98. if SelectedEntries = 'RESULT' then do
  99.    Notify "Please Select File(s) to View First..."
  100.    call CleanUp
  101. end
  102.  
  103. /* extract and view the files */
  104.  
  105. NumberOfEntries = words(SelectedEntries)
  106. call ViewFileList
  107.  
  108. TopText "Finished Viewing Selected File(s) From LhA Archive."
  109.  
  110. call CleanUp
  111.  
  112. exit
  113.  
  114. /*---------------------------------------------------------------------------*/
  115.  
  116. ViewFileList: /* extract and view each file */
  117.  
  118.  
  119.    do EntryNumber = 1 to NumberOfEntries
  120.  
  121.       /* get entry */
  122.  
  123.       Index = word(SelectedEntries, EntryNumber)
  124.  
  125.       GetEntry Index + 1
  126.       Entry = result
  127.  
  128.       /* grab file name/path, protect in quotes */
  129.  
  130.       File = substr(Entry, 10)
  131.  
  132.       /* make sure user see's the entry */
  133.  
  134.       ScrollToShow Index
  135.  
  136.       /* put it in the file list */
  137.  
  138.       call ReplaceMetaChars
  139.       ExtractFile = File
  140.  
  141.       /* deselect this entry */
  142.  
  143.       selection = Index ||' '|| 0 ||' '|| 1
  144.       SelectEntry selection
  145.  
  146.       /* form CLI command and delete the file(s) */
  147.  
  148.       TopText 'Extracting "'||GetFileInPath(ExtractFile)||'"... Please Wait.'
  149.  
  150.       /* toast possible old file */
  151.  
  152.       pragma(Directory, TmpDir)
  153.  
  154.       if exists(ExtractFile) then
  155.          delete(ExtractFile)
  156.  
  157.       CliCommand = LhaCommand||LhaExtractCmd||Quote(LhaArchive)
  158.       CliCommand = CliCommand||' '||Quote(ExtractFile)
  159.  
  160.       address COMMAND CliCommand
  161.  
  162.       /* view the file */
  163.  
  164.       TopText 'Viewing "'||GetFileInPath(ExtractFile)||'"... Please Wait.'
  165.  
  166.       FEx = GetFileExt(File)
  167.       FBs = upper(GetFileInPath(ExtractFile))
  168.  
  169.       select  /* pick a viewer */
  170.  
  171.       when FEx='GUIDE' then
  172.          address COMMAND GuideViewer||Quote(TmpDir||ExtractFile)
  173.  
  174.       when FEx='DOC'|FEx='README'|FEx='MAN'|FEx='TEXT'|FEx="TXT"|FEx="ME"|FBs="README" then
  175.          address COMMAND TextViewer||Quote(ExtractFile)
  176.  
  177.       when FEx='IFF'|FEx='HAM'|FEx='PIC'|FEx='BRUSH'|FEx='ILBM' then
  178.          address COMMAND IFFViewer||Quote(ExtractFile)
  179.  
  180.       when FEx='JPG'|FEx='JPEG'|FEx='JFIF' then
  181.          address COMMAND JPGViewer||Quote(ExtractFile)
  182.  
  183.       when FEx='GIF'|FEx='JIF' then
  184.          address COMMAND GIFViewer||Quote(ExtractFile)
  185.  
  186.       when FEx='INFO' then
  187.          address DOPUS.1 'IconInfo '||Quote(TmpDir||ExtractFile)
  188.  
  189.       when FEx='SND'|FEx='8SVX' then
  190.          address COMMAND SNDPlayer||Quote(ExtractFile)
  191.  
  192.       when FEx='ANIM' then
  193.          address COMMAND ANIMPlayer||Quote(ExtractFile)
  194.  
  195.       when FEx='MPG'|FEx='MPEG' then
  196.          address COMMAND MPEGPlayer||Quote(ExtractFile)
  197.  
  198.       otherwise
  199.          address COMMAND DefaultViewer||Quote(ExtractFile)
  200.  
  201.       end /* select */
  202.    end
  203.  
  204. return
  205.  
  206. /*---------------------------------------------------------------------------*/
  207.  
  208. GetFileExt: procedure /* return file extension, or null */
  209.  
  210.    parse arg BFileName
  211.  
  212.    lps = lastpos(".", BFileName)               
  213.  
  214.    BFileName = StripQuotes(BFileName)
  215.  
  216.    if lps ~= 0 then                           
  217.       return(upper(right(BFileName,length(BFileName)-lps)))
  218.  
  219. return ""
  220.  
  221.  
  222. /*---------------------------------------------------------------------------*/
  223.  
  224. GetFileInPath: procedure /* return file from path */
  225.  
  226.    parse arg FilePath
  227.    if lastpos('/', FilePath) = 0 then
  228.       return FilePath
  229.    DivPos = max(lastpos(':', FilePath),lastpos('/', FilePath)) +1
  230.    parse var FilePath PathSpec =DivPos FileName
  231.    Filename = StripQuotes(Filename)
  232.  
  233. return Filename
  234.  
  235. /*---------------------------------------------------------------------------*/
  236.  
  237. IsLhAFile: procedure   /* look at extension, return 1 if right, else 0 */
  238.  
  239.    parse arg AFileName
  240.  
  241.    FileExt = GetFileExt(AFileName)
  242.  
  243.    if FileExt ~= "LHA" & FileExt ~= "LZH" then
  244.       return 0
  245.    else
  246.       return 1
  247.  
  248. return 0
  249.  
  250. /*---------------------------------------------------------------------------*/
  251.  
  252. DeletePath: procedure
  253.  
  254.    parse arg FilePath
  255.  
  256.    x = pos('/', FilePath)
  257.  
  258.    if x = 0 then
  259.       return
  260.  
  261.    CliCommand = 'C:Delete '||Quote(substr(FilePath, 1, x))||' ALL'
  262.    address COMMAND CliCommand
  263.  
  264. return
  265.  
  266. /*---------------------------------------------------------------------------*/
  267.  
  268. ReplaceMetaChars: /* replace special wildcards with ? */
  269.  
  270.    File = translate(File, '?????', '()`', '?')
  271.  
  272. return
  273.  
  274. /*---------------------------------------------------------------------------*/
  275.  
  276. FindLhAPath: /* grab invisible file path to archive */
  277.  
  278.    /* find number of entries, path is the last one */
  279.  
  280.    'Status 6 -1'
  281.  
  282.    GetEntry Result
  283.    LhaPath = Result
  284.  
  285. return
  286.  
  287. /*---------------------------------------------------------------------------*/
  288.  
  289. Quote: procedure /* add quotes to string */
  290.  
  291.    parse arg string
  292.  
  293. return '"'||string||'"'
  294.  
  295. /*---------------------------------------------------------------------------*/
  296.  
  297. StripQuotes: procedure /* strip quotes from string */
  298.  
  299.    parse arg string
  300.  
  301. return strip(string,, '"')
  302.  
  303. /*---------------------------------------------------------------------------*/
  304.  
  305. failure: /* most likely a failed COMMAND */
  306.  
  307.    Notify "View command failed. The archive is probably corrupt."
  308.  
  309.    Busy off
  310.  
  311.    exit
  312.  
  313. return
  314.  
  315. /*---------------------------------------------------------------------------*/
  316.  
  317. CleanUp: /* clean up files and exit */
  318.  
  319.    ExtractFile = StripQuotes(ExtractFile)
  320.  
  321.    pragma(Directory, TmpDir)
  322.    if exists(ExtractFile) then do
  323.       delete(ExtractFile)
  324.       call DeletePath(ExtractFile)
  325.    end
  326.  
  327.    Busy off
  328.  
  329.    exit
  330.  
  331. return
  332.  
  333.