home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / disk / directory / dopuslharexx / arexx / delfileslha.rexx < prev    next >
OS/2 REXX Batch file  |  1995-02-27  |  6KB  |  331 lines

  1. /*rx
  2.  *
  3.  * DelFilesLhA.rexx - Delete selected files from an LhA archive previously
  4.  *                    listed in a DOpus window by ListLha.rexx
  5.  *
  6.  * $VER: DelFilesLhA 40.7 (03/01/94) by Geoff Seeley
  7.  *
  8.  * Usage: ARexx command DelFilesLhA.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. DeleteList   = 'T:lha_file_list'
  17. ListLhARexx  = 'RX DOpus:ARexx/ListLhA.rexx'
  18.  
  19. /*--------------------------------------------------------------------------*/
  20.  
  21. /* misc. variables */
  22.  
  23. DOpusPort = 'DOPUS.1'
  24.  
  25. LhaDeleteCmd = '-x -m d '
  26.  
  27. /* make sure we've got somebody to talk to */
  28.  
  29. if showlist('Ports', DOpusPort) = 0 then do
  30.    say 'Directory Opus ARexx port not found. Aborting.'
  31.    call CleanUp
  32. end
  33.  
  34. address 'DOPUS.1'
  35. options results
  36.  
  37. TopText "Delete Files From an LhA Archive Buffer"
  38.  
  39. Busy on
  40.  
  41. /* get the path/name of the LhA archive file */
  42.  
  43. 'Status 14 -1'
  44. LhaArchive = result
  45.  
  46. /* make sure it's an LhA archive listing buffer */
  47.  
  48. if (IsLhAFile(LhaArchive) = 0) then do
  49.  
  50.    /* try other window */
  51.  
  52.    OtherWindow
  53.    'Status 14 -1'
  54.    LhaArchive = Result
  55.  
  56.    if (IsLhAFile(LhaArchive) = 0) then do
  57.  
  58.       Notify "Sorry, no LhA archive buffer found.\You must use the ListLha button first."
  59.       call CleanUp
  60.  
  61.    end
  62.  
  63. end
  64.  
  65. /* get path to archive */
  66.  
  67. call FindLhaPath
  68. LhaArchive = LhaPath || LhaArchive
  69.  
  70. /* check for existance of archive */
  71.  
  72. if ~exists(LhaArchive) then do
  73.  
  74.    Notify "Can't seem to find '" || LhaArchive || "'\Aborting."
  75.    call CleanUp
  76.  
  77. end
  78.  
  79. /* check if LhA archive is empty */
  80.  
  81. call GetFileCount
  82.  
  83. if NumFiles = 0 then do
  84.  
  85.    call AskDelArchive
  86.    TopText "LhA archive deleted."
  87.    call CleanUP
  88.  
  89. end
  90.  
  91. /* get list of selected entries */
  92.  
  93. GetSelectedAll
  94. SelectedEntries = result
  95.  
  96. if SelectedEntries = 'RESULT' then do
  97.  
  98.    Notify "Please Select File(s) to Delete First..."
  99.    call CleanUp
  100.  
  101. end
  102.  
  103. NumberOfEntries = words(SelectedEntries)
  104.  
  105. /* make sure user wants it */
  106.  
  107. Status 26
  108. OldOkay = result
  109.  
  110. Status 27
  111. OldCancel = result
  112.  
  113. Status 26 set 'Delete'
  114. Status 27 set 'Cancel'
  115.  
  116. Request "Are You *SURE* You Want to DELETE the Selected File(s)?"
  117.  
  118. DoDelete = Result
  119.  
  120. /* reset previous values */
  121.  
  122. Status 26 set OldOkay
  123. Status 27 set OldCancel
  124.  
  125. Busy on
  126.  
  127. if DoDelete = "1" then do
  128.  
  129.    /* delete the files */
  130.  
  131.    call DeleteFileList
  132.  
  133.    /* call ListLhA to re-list the LhA archive in the window */
  134.  
  135.    address command ListLhARexx
  136.  
  137.    Busy on
  138.  
  139.    /* get number of files left in archive */
  140.  
  141.    call GetFileCount
  142.  
  143.    if NumFiles = 0 then
  144.  
  145.       call AskDelArchive
  146.  
  147. end
  148. else do
  149.  
  150.    TopText "Deleting File(s) Aborted..."
  151.  
  152.    call CleanUp
  153.  
  154. end
  155.  
  156. TopText "Finished Deleting Selected File(s) From LhA Archive."
  157.  
  158. call CleanUp
  159.  
  160. exit
  161.  
  162. /*---------------------------------------------------------------------------*/
  163.  
  164. DeleteFileList: /* build a list of selected files, delete list */
  165.  
  166.    /* toast possible old list */
  167.  
  168.    if exists(DeleteList) then
  169.  
  170.       delete(DeleteList)
  171.  
  172.    if ~open(FileList, DeleteList, 'W') then do
  173.  
  174.       Notify "Can't open file " || DeleteList
  175.       call CleanUp
  176.  
  177.    end
  178.  
  179.    TopText "Creating File(s) List... Please Wait."
  180.  
  181.    do EntryNumber = 1 to NumberOfEntries
  182.  
  183.       /* get entry */
  184.  
  185.       Index = word(SelectedEntries, EntryNumber)
  186.  
  187.       GetEntry Index + 1
  188.       Entry = result
  189.  
  190.       /* grab file name/path, protect in quotes */
  191.  
  192.       File = substr(Entry, 10)
  193.       File = '"' || File || '"'
  194.  
  195.       /* make sure user see's the entry */
  196.  
  197.       ScrollToShow Index
  198.  
  199.       /* put it in the file list */
  200.  
  201.       call ReplaceMetaChars
  202.       writeln(FileList, File)
  203.  
  204.       /* deselect this entry */
  205.  
  206.       selection = Index ||' '|| 0 ||' '|| 1
  207.       SelectEntry selection
  208.  
  209.    end
  210.  
  211.    close(FileList)
  212.  
  213.    /* form CLI command and delete the file(s) */
  214.  
  215.    TopText "Deleting File(s) From LhA Archive... Please Wait."
  216.  
  217.    CliCommand = LhaCommand || OutputWindow || LhaDeleteCmd || LhaArchive
  218.    CliCommand = CliCommand || ' @' || DeleteList
  219.  
  220.    address command CliCommand
  221.  
  222. return
  223.  
  224. /*---------------------------------------------------------------------------*/
  225.  
  226. ReplaceMetaChars: /* replace special wildcards with ? */
  227.  
  228.    File = translate(File, '???', '()`', '?')
  229.  
  230. return
  231.  
  232. /*---------------------------------------------------------------------------*/
  233.  
  234. IsLhAFile: procedure   /* look at extension, return 1 if right, else 0 */
  235.  
  236.    parse arg AFileName
  237.  
  238.    lps = lastpos(".", AFileName)               
  239.    if lps = 0 then                           
  240.       return 0
  241.  
  242.    FileExt = upper(right(AFileName,length(AFileName)-lps))
  243.  
  244.    if FileExt ~= "LHA" & FileExt ~= "LZH" then
  245.       return 0
  246.    else
  247.       return 1
  248.  
  249. return 0
  250.  
  251. /*---------------------------------------------------------------------------*/
  252.  
  253. FindLhAPath: /* grab invisible file path to archive */
  254.  
  255.    /* find number of entries, path is the last one */
  256.  
  257.    'Status 6 -1'
  258.  
  259.    GetEntry Result
  260.    LhaPath = Result
  261.  
  262. return
  263.  
  264. /*---------------------------------------------------------------------------*/
  265.  
  266. GetFileCount: /* get the number of files in the LhA archive */
  267.  
  268.    /* number of files is the second to last line */
  269.  
  270.    'Status 6 -1'
  271.  
  272.    Idx = Result - 1
  273.  
  274.    GetEntry Idx
  275.  
  276.    NumFiles = word(Result, 2)
  277.  
  278. return
  279.  
  280. /*---------------------------------------------------------------------------*/
  281.  
  282. AskDelArchive: /* ask user if they wish to delete the archive */
  283.  
  284.    Status 26
  285.    OldOkay = result
  286.  
  287.    Status 27
  288.    OldCancel = result
  289.  
  290.    Status 26 set 'Delete'
  291.    Status 27 set 'Cancel'
  292.  
  293.    Request "This LhA archive is now empty. Do you want to DELETE it?"
  294.  
  295.    DeleteArchive = Result
  296.  
  297.    /* reset previous values */
  298.  
  299.    Status 26 set OldOkay
  300.    Status 27 set OldCancel
  301.  
  302.    Busy on
  303.  
  304.    if DeleteArchive = 1 then do
  305.  
  306.       if exists(LhaArchive) then
  307.          delete(LhaArchive)
  308.  
  309.       /* buffer is toast, so clear it and scan in directory */
  310.  
  311.       'ClearWin -1'
  312.       ScanDir LhaPath
  313.  
  314.    end
  315.  
  316. return
  317.  
  318. /*---------------------------------------------------------------------------*/
  319.  
  320. CleanUp: /* clean up files and exit */
  321.  
  322.    if exists(DeleteList) then
  323.       delete(DeleteList)
  324.  
  325.    Busy off
  326.  
  327.    exit
  328.  
  329. return
  330.  
  331.