home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Amiga / Workbench / Archivers / LhA2LZX3.lha / lha2lzx / LhA2LZX_v2.7b < prev    next >
Text File  |  1998-02-13  |  15KB  |  339 lines

  1. Resident > NIL: C:RequestChoice PURE        ;Keeps RequestChoice program in memory, so it doesn't need to be loaded off disk each time it is called
  2. Resident > NIL: C:RequestFile PURE
  3. Resident > NIL: C:Eval PURE
  4. Resident > NIL: C:List PURE
  5.  
  6. ; $VER: LhA2LZX v2.7b (13.2.98) Richard Burke    ;This is a version string, to give details of the file's creation date, author and version number
  7.  
  8. Failat 60                    ;Allows errors when using LhA & LZX to be captured
  9.  
  10. lab Beg
  11. if EXISTS env:nl2zdrw1                ;If the file ENV:nl2zdrw1 exists, the script will perform the actions to endif
  12.     cd $nl2zdrw1                ;Current Directory is now that which is stated in the contents of the environmental variable 'nl2zdrw1'
  13.     if EXISTS l2z                ;If the temporary drawer used to store the archive files exists
  14.         delete l2z ALL QUIET FORCE    ;then it is deleted to start freshly
  15.     endif
  16.     delete env:nl2zdrw1 QUIET
  17. endif
  18.  
  19. if NOT EXISTS env:nl2zo                ;If starting, default path of archive is RAM:
  20.     echo RAM: >env:nl2zo            ;If converting several archives, the path of the last archive will be used as the default of the next
  21. endif
  22.  
  23. if NOT EXISTS env:nl2zd                ;If starting, default path of temporary drawer l2z is RAM:
  24.     echo RAM: >env:nl2zd            ;If converting several archives, the previous path of l2z will be used as the default of the next
  25. endif
  26.  
  27. which >env:nl2zwlha lha all            ;Finds the location of the LhA tool
  28. if WARN                        ;If the LhA tool cannot be found
  29.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find 'LhA' tool!*nSee docs for details!" "Quit"
  30.     skip end
  31. endif
  32.  
  33. which >env:nl2zwlzx lzx all            ;Finds the location of the LZX tool e.g. 'C:LZX'
  34. if WARN
  35.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find 'LZX' tool!*nSee docs for details!" "Quit"
  36.     skip end
  37. endif
  38.  
  39. if NOT EXISTS L:lzx.keyfile
  40.     RequestChoice >nil: "LhA2LZX Error Message" "Can't find lzx.keyfile!*nSee docs for details!" "Quit"
  41.     skip end
  42. endif
  43.  
  44. lab Path
  45. RequestFile >env:nl2zorig TITLE "Full path of drawer of archive?" DRAWERSONLY NOICONS DRAWER "$nl2zo"    ;Saves the location of the archive in the environment variable 'orig', with the default path as that of the last archive if converting more
  46. if WARN
  47.     skip end
  48. endif
  49.  
  50. if NOT EXISTS $nl2zorig
  51.     RequestChoice >nil: "! Error !" "PATH does not exist!" "Try again"
  52.     skip Path BACK
  53. endif
  54.  
  55. echo >env:nl2zo $nl2zorig                ;Get rid of quotation marks, and also create default path for next archive if converting more
  56. list >env:nl2zosz env:nl2zo LFORMAT=%L            ;Get size of path name
  57. if $nl2zosz EQ 1                    ;Full path not selected
  58.     RequestChoice > NIL: "! Error !" "Choose FULL path!*n(i.e. start with DEVICE listing)" "Try again"
  59.     skip Path BACK
  60. endif
  61.  
  62. lab File
  63. RequestFile >env:nl2zldfl TITLE "Chose file to convert" POSITIVE Convert ACCEPTPATTERN #?.(lha|lzx|lzh) DRAWER $nl2zorig        ; $nl2zldfl now contains the complete path and filename of the archive
  64. if WARN
  65.     skip More
  66. endif
  67.  
  68. if NOT EXISTS $nl2zldfl
  69.     RequestChoice >nil: "! Error !" "FILE does not exist!" "Try again"
  70.     skip File BACK
  71. endif
  72.  
  73. lab Tilde
  74. search env:nl2zldfl ~ >nil:
  75. if $RC EQ 0
  76.     RequestChoice >nil: "! Error !" "Filename contains a tilde (~)*n*nPlease rename the file without a tilde*n*nSee docs for details" "Okay"
  77.     skip end
  78. endif
  79.  
  80. echo >env:nl2zl $nl2zldfl                ;Get rid of quotation marks
  81. list >env:nl2zlsz env:nl2zl LFORMAT=%L            ;Get size of file name
  82. if $nl2zlsz EQ $nl2zosz                    ;No file selected
  83.     RequestChoice > NIL: "! Error !" "No file chosen!" "Try again"
  84.     skip File BACK
  85. endif
  86.  
  87. list >env:nl2zbnm1 $nl2zldfl LFORMAT=%S            ;Strips the path of the archive to give only the filename with suffix
  88. list >env:nl2zbnm $nl2zldfl LFORMAT=%M            ;Removes .lzx, .lha or .lzh suffix from filename
  89. list >env:nl2zsuf $nl2zldfl LFORMAT=%E            ;Gives suffix only
  90. list >env:nl2zcom $nl2zldfl LFORMAT=%C            ;Gets file comment
  91. list >env:nl2zdat $nl2zldfl LFORMAT=%D DATES        ;Gets file creation date
  92. list >env:nl2ztim $nl2zldfl LFORMAT=%T            ;Gets file creation time
  93. list >env:nl2zcomsz env:nl2zcom LFORMAT=%L        ;Gets size of comment
  94.  
  95. if $nl2zsuf NOT EQ lha                ;If file doesn't have .lha suffix
  96.     if $nl2zsuf NOT EQ lzx            ;If file doesn't have .lzx suffix
  97.         if $nl2zsuf NOT EQ lzh        ;If file doesn't have .lzh suffix (which is de-archived by LhA)
  98.             RequestChoice "! Error !" "File is NOT an LhA or LZX archive!" "Choose again!"
  99.         endif
  100.     endif
  101. endif
  102.  
  103. if $nl2zsuf EQ lha
  104.     echo LZX >env:nl2znsuf            ;Gives the type of file to convert to in a requester later
  105.     echo LhA >env:nl2zsuf
  106. endif
  107.  
  108. if $nl2zsuf EQ lzx
  109.     echo LhA >env:nl2znsuf
  110.     echo LZX >env:nl2zsuf            ;Makes it look better in the requester
  111. endif
  112.  
  113. if $nl2zsuf EQ lzh
  114.     echo LZX >env:nl2znsuf
  115.     echo LZH >env:nl2zsuf
  116. endif
  117.  
  118. lab Temp
  119. RequestChoice >env:nl2zdrw "Default directory" "Where should I store temporary files? A*ntemporary drawer called 'L2Z' will be*ncreated in your selected destination, and*nRAM: will be checked for space if chosen" "RAM:" "Other" "Cancel"
  120. if $nl2zdrw EQ 1                    ;If the left button (i.e. RAM:) is chosen
  121.     echo "RAM:" >env:nl2zdrw1
  122. endif
  123.  
  124. lab Other
  125. if $nl2zdrw EQ 2                    ;If "Other" is chosen
  126.     RequestFile >env:nl2zdrw1 TITLE "Where should 'L2Z' be made?" DRAWERSONLY NOICONS POSITIVE Create DRAWER "$nl2zd"
  127.     if WARN
  128.         skip More
  129.     endif
  130.     echo >env:nl2zd $nl2zdrw1            ;Get rid of quotation marks
  131.     list >env:nl2zdsz env:nl2zd LFORMAT=%L        ;Get size of path name
  132.     if $nl2zdsz EQ 1                ;Full path not selected
  133.         RequestChoice > NIL: "! Error !" "Choose FULL path!*n(i.e. start with DEVICE listing)" "Try again"
  134.         skip Other BACK
  135.     endif
  136.     if NOT EXISTS $nl2zdrw1
  137.         RequestChoice "! Error !" "PATH does not exist!" "Choose again!"
  138.         skip Other BACK
  139.     endif
  140. endif
  141.  
  142. if $nl2zdrw EQ 0                    ;If "Cancel" is chosen
  143.     skip More
  144. endif
  145.  
  146. lab Memchk                    ;This labels the following section as "Memchk" so the script can skip to this point from anywhere in the script if it encounters the line "skip Memchk"
  147. set nl2zmemsz `avail flush total`        ;Saves the result from "avail flush total" (try it in a shell - it gets the total size of available memory) as ENV:nl2zmemsz
  148. cd $nl2zorig                    ;CD's to the directory of the original archive
  149. list >env:nl2zflsz $nl2zldfl LFORMAT=%L        ;Gets size of original archive
  150. eval >env:nl2zflmem $nl2zflsz * 4        ;Multiplies the archive size by 4
  151. if NOT $nl2zmemsz VAL GT $nl2zflmem        ;If your available memory size is less than 4 times the size of the original archive (LZX often decompresses to 3-4 times the size of the archive)
  152.     if $nl2zdrw1 EQ "RAM:"            ;and RAM: has been chosen to store temporary files
  153.         RequestChoice >env:nl2znomem "! Insufficient Memory!" "There may be insufficient memory to store temporary files in RAM:*n(may need at least $nl2zflmem bytes)" "Choose other path" "Continue anyway" "Cancel"
  154.         if $nl2znomem EQ 0        ;"Cancel"
  155.             skip More
  156.         endif
  157.         if $nl2znomem EQ 1        ;"Other"
  158.             skip Temp back
  159.         endif
  160.         if $nl2znomem EQ 2        ;"Continue"
  161.             skip MkTemp
  162.         endif
  163.     endif
  164.     if $nl2zdrw1 EQ "Ram Disk:"        ;If user clicks on RAM: in file requester
  165.         RequestChoice >env:nl2znomem "! Insufficient Memory!" "There may be insufficient memory to store temporary files in RAM:*n(may need at least $nl2zflmem bytes)" "Choose other path" "Continue anyway" "Cancel"
  166.         if $nl2znomem EQ 0        ;"Cancel"
  167.             skip More
  168.         endif
  169.         if $nl2znomem EQ 1        ;"Other"
  170.             skip Temp back
  171.         endif
  172.         if $nl2znomem EQ 2        ;"Continue"
  173.             skip MkTemp
  174.         endif
  175.     endif
  176. endif
  177.  
  178. lab MkTemp
  179. cd $nl2zdrw1
  180. if NOT EXISTS l2z            ;This creates a temporary drawer in which to de-archive the files in the archive
  181.     makedir > NIL: l2z
  182. else                    ;Drawer is emptied if it is already there
  183.     delete l2z/#? FORCE QUIET
  184. endif
  185.  
  186. lab extra
  187. echo "*e[0 p"                ;This clears the display (the output CLI)
  188. RequestChoice >env:nl2zext "Convert $nl2zl to . . ." "Do you want to convert to the other*nfiletype or to the smallest archive?*n*nConvert from $nl2zsuf to:" "$nl2znsuf" "Smallest" "Cancel"
  189. if WARN                    ;If 'Cancel' is selected
  190.     skip beg BACK            ;This skips back to the section labelled 'Beg', at the beginning
  191. endif
  192.  
  193. if $nl2zext EQ 2            ;If the user wants to make the smallest archive
  194.     skip Conv            ;This skips forward to the section labelled 'Conv'
  195. endif
  196.  
  197. if $nl2zext EQ 1            ;If the user wants to convert to the other format - original format is found and is intelligently converted to the other
  198.     if $nl2zsuf EQ lha        ;Means it is an LhA archive
  199.     lab L                ;Label 'L' so the script can skip straight here if told to
  200.         cd $nl2zdrw1
  201.         cd l2z
  202.         "$nl2zwlzx" x -a -F -x -X0 $nl2zldfl    ;As the LZX keyfile is now available, the ability to de-archive LhA files is possible, and also much quicker
  203.         if NOT $RC EQ 0                ;If user aborts it will skip to 'More'
  204.             skip er                ;RC stands for Return Code - the number returned by LhA if the operation fails
  205.         endif
  206.         "$nl2zwlzx" -r -e -3 -X -F a -Qf $nl2zbnm #?
  207.         if NOT $RC EQ 0                    ;If user aborts it will skip to 'More'
  208.             skip er
  209.         endif
  210.         list >env:nl2zold $nl2zldfl LFORMAT=%L        ;Gets the size of the original archive
  211.         list >env:nl2znew $nl2zbnm.lzx LFORMAT=%L    ;Gets the size of the new archive
  212.         eval >env:nl2zdiff $nl2zold - $nl2znew        ;Subtracts the size of the new from the original
  213.         eval >env:nl2zdiff1 $nl2znew - $nl2zold        ;Subtracts the size of the original from the new
  214.         delete $nl2zldfl QUIET                ;Original archive is deleted
  215.         copy $nl2zbnm.lzx TO $nl2zorig QUIET        ;New archive is copied in place of the original
  216.         if NOT env:nl2zcomsz EQ 1            ;If the original archive had a comment...
  217.             filenote FILE "$nl2zo$nl2zbnm.lzx" "$nl2zcom"    ;...copy it to the new archive
  218.         endif
  219.         setdate "$nl2zo$nl2zbnm.lzx" $nl2zdat $nl2ztim    ;Sets the date of the new archive to the old
  220.         if $nl2zold GT $nl2znew VAL            ;Original archive is larger than the new one, so the original is deleted and replaced by the (smaller) new one
  221.             RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.lzx*n  now replaces*n$nl2zl*n  and is $nl2zdiff bytes smaller!" "Nice one!"
  222.         else
  223.             RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.lzx*n  now replaces*n$nl2zl*n  and is $nl2zdiff1 bytes larger" "Okay"
  224.         endif
  225.     else                            ;"If that fails, try this..." - i.e. means it is NOT an LhA archive
  226.         if $nl2zsuf EQ lzh                ;It is an LZH archive (processed by LhA)
  227.             skip L BACK
  228.         endif
  229.         cd $nl2zdrw1                    ;If this line is reached, it is an LZX archive
  230.         cd l2z
  231.         "$nl2zwlzx" x -a -F -x -X0 $nl2zldfl        ;LZX extracts the original archive to temporary drawer 'l2z'
  232.         if NOT $RC EQ 0                    ;If user aborts it will skip to 'More'
  233.             skip er
  234.         endif
  235.         "$nl2zwlha" -2 -a -r -F -y -M -e -x a $nl2zbnm #?    ;LhA archives everything in 'l2z' and saves it as the original name with .lha suffix
  236.         if NOT $RC EQ 0                        ;If user aborts it will skip to 'More'
  237.             skip er
  238.         endif
  239.         list >env:nl2zold $nl2zldfl LFORMAT=%L
  240.         list >env:nl2znew $nl2zbnm.lha LFORMAT=%L
  241.         eval >env:nl2zdiff $nl2zold - $nl2znew
  242.         eval >env:nl2zdiff1 $nl2znew - $nl2zold
  243.         delete $nl2zldfl QUIET                ;Original archive is deleted
  244.         copy $nl2zbnm.lha TO $nl2zorig QUIET        ;New archive is copied in place of the original
  245.         if NOT env:nl2zcomsz EQ 1            ;If the original archive had a comment...
  246.             filenote FILE "$nl2zo$nl2zbnm.lha" "$nl2zcom"    ;...copy it to the new archive
  247.         endif
  248.         setdate "$nl2zo$nl2zbnm.lha" $nl2zdat $nl2ztim    ;Sets the date of the new archive to the old
  249.         if $nl2zold GT $nl2znew VAL
  250.             RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.lha*n  now replaces*n$nl2zl*n  and is $nl2zdiff bytes smaller!" "Nice one!"
  251.         else
  252.             RequestChoice > NIL: "! Operation Successful !" "$nl2zo$nl2zbnm.lha*n  now replaces*n$nl2zl*n  and is $nl2zdiff1 bytes larger" "Okay"
  253.         endif
  254.     endif
  255. endif
  256.  
  257. skip More
  258.  
  259. lab er
  260. RequestChoice >NIL: "! Error !" "An error/user-abort has occured!*n*nSee docs for details" "Okay"
  261. skip more
  262.  
  263. lab Conv                    ;This part until 'lab More' converts the archive to either LhA or LZX, and saves whichever is smaller
  264. if $nl2zsuf EQ lha                ;Means it is an LhA archive
  265.     lab L2
  266.     cd $nl2zdrw1
  267.     cd l2z
  268.     "$nl2zwlzx" x -a -F -x -X0 $nl2zldfl    ;As the LZX keyfile is now available, the ability to de-archive LhA files is possible, and also much quicker
  269.     if NOT $RC EQ 0                ;If user aborts it will skip to 'More'
  270.         skip er    back            ;RC stands for Return Code - the number returned by LhA if the operation fails
  271.     endif    
  272.     "$nl2zwlzx" -r -e -3 -X -F a -Qf $nl2zbnm #?    ;If not aborted, file is archived
  273.     if NOT $RC EQ 0                    ;If user aborts it will skip to 'More'
  274.         skip er back
  275.     endif
  276. else                        ;Means it is not an LhA archive
  277.     if $nl2zsuf EQ lzh            ;Means it is an LZH archive
  278.         skip L2 BACK
  279.     endif
  280.     cd $nl2zdrw1                ;If this line is reached, it is an LZX archive
  281.     cd l2z
  282.     "$nl2zwlzx" x -a -F -x -X0 $nl2zldfl
  283.     if NOT $RC EQ 0                ;If user aborts it will skip to 'More'
  284.         skip er back
  285.     endif
  286.     "$nl2zwlha" -2 -a -r -F -y -M -e -x a $nl2zbnm #?    ;If not aborted, file is archived
  287.     if NOT $RC EQ 0                        ;If user aborts it will skip to 'More'
  288.         skip er back
  289.     endif
  290. endif
  291.  
  292. list >env:nl2zold $nl2zldfl LFORMAT=%L            ;Gets the size of the original archive
  293. list >env:nl2znew $nl2zbnm.$nl2znsuf LFORMAT=%L        ;Gets the size of the new archive
  294. eval >env:nl2zdiff $nl2zold - $nl2znew            ;Subtracts the size of the new from the original
  295. eval >env:nl2zdiff1 $nl2znew - $nl2zold            ;Subtracts the size of the original from the new
  296.  
  297. if $nl2zold GT $nl2znew VAL                                                    ;Original archive is larger than the new one, so the original is deleted and replaced by the smaller new one
  298.     delete $nl2zldfl QUIET
  299.     copy $nl2zbnm.$nl2znsuf TO $nl2zorig QUIET
  300.     if NOT env:nl2zcomsz EQ 1                    ;If the original archive had a comment...
  301.         filenote FILE "$nl2zo$nl2zbnm.$nl2znsuf" "$nl2zcom"    ;...copy it to the new archive
  302.     endif
  303.     setdate "$nl2zo$nl2zbnm.$nl2znsuf" $nl2zdat $nl2ztim        ;Sets the date of the new archive to the old
  304.     list >env:nl2zarc $nl2zo$nl2zbnm.$nl2znsuf LFORMAT=%S%S                                    ;Gets name of new archive
  305.     echo >env:nl2zarc1 $nl2zarc                                                ;Removes quotation marks
  306.     RequestChoice > NIL: "! $nl2zarc1 used !" "Using the new archive because it's $nl2zdiff bytes smaller!" "Nice one!"
  307. else                                                                ;Original archive is smaller than the new one, so the smaller original one is kept
  308.     RequestChoice > NIL: " $nl2zl used" "Using the original archive because it's $nl2zdiff1 bytes smaller!" "Okay"        ;The difference in file sizes is cleverly given
  309.     cd $nl2zdrw1
  310.     delete l2z ALL QUIET FORCE
  311. endif
  312.  
  313. lab More
  314. echo "*e[1;1H*eJ"
  315. RequestChoice >env:nl2zano "Other archives?" "Do you want to convert another archive?" "Yes" "No"
  316. if $nl2zano EQ 0
  317.     skip end
  318. else
  319.     skip beg back
  320. endif
  321.  
  322. lab end
  323. echo "*e[1;1H*eJ"                                ;This clears the output window
  324. echo "*n*n*n                       *e[1;32m  Thank you for using"
  325. echo "                              *e[33m LhA *e[0m*e[3;1m2 *e[0m*e[2mLZX"    ;All the *e[... parts do is change the colour/style of the text - known as ANSI - see "v2.2" in "Program History" in the .guide
  326. echo "*n*n*n"
  327.  
  328. if EXISTS env:nl2zdrw1
  329.     cd $nl2zdrw1
  330.     if EXISTS l2z                ;If a temporary drawer was created to store files temporarily...
  331.         delete l2z ALL QUIET FORCE    ;...delete all the temporary files
  332.     endif
  333. endif
  334.  
  335. c:list >nil: ENV:nl2z#? TO T:l2ztmp LFORMAT "delete %S%S >NIL:"    ;This generates a list of all the environment variables used and deletes them
  336. execute T:l2ztmp >nil:                            ;The variables are actually deleted by this line
  337. delete T:l2ztmp >nil:                            ;The new script generated is deleted here.  Now everything LhA2LZX created during its running has been disposed of.
  338.  
  339. quit                        ;The end of LhA2LZX  :^(