#FEATURE by stefan
authorStefan Vogel <sv@exept.de>
Mon, 28 Nov 2016 12:40:40 +0100
changeset 4219 7ecd6ba2b202
parent 4217 1dac9014b77a
child 4220 6fe26e7d187f
child 4221 5f270526299c
#FEATURE by stefan class: Archiver first try to support 7z (not finished)
Archiver.st
--- a/Archiver.st	Fri Nov 25 16:45:58 2016 +0100
+++ b/Archiver.st	Mon Nov 28 12:40:40 2016 +0100
@@ -1404,7 +1404,7 @@
 !
 
 isValidOutputLine:line
-    ('[-d][-r][-w][-x]' match:(line copyTo:4)) ifTrue:[^ true].
+    ('[-d][-r][-w][-x]' match:(line copyToMax:4)) ifTrue:[^ true].
     ^ false.
 ! !
 
@@ -1473,22 +1473,31 @@
         template := '"%1" -Z -m -h "%2"'
     ].
     OperatingSystem isMSDOSlike ifTrue:[
-        (cmd asFilename baseName sameAs: 'WinRAR.exe') ifTrue:[
-            headlessCmd := cmd asFilename directory construct:'rar.exe'.
-            headlessCmd exists ifTrue:[
-                cmd := headlessCmd.
-                template := '"%1" l "%2"'
+        |mapping cmdBasename|
+
+        mapping := #('winrar.exe' 'rar.exe'     '"%1" l "%2"'
+"/ does not work yet:
+"/                     '7zFM.exe'   '7z.exe'      '"%1" l "%2"'
+                    ).
+        cmdBasename := cmd asFilename baseName.
+        mapping inGroupsOf:3 do:[:originalBasename :mappedBasename :templ|
+            (cmdBasename sameAs:originalBasename) ifTrue:[
+                headlessCmd := cmd asFilename directory construct:mappedBasename.
+                headlessCmd isExecutableProgram ifTrue:[
+                    cmd := headlessCmd pathName.
+                    template := templ.
+                ].
             ].
-        ] ifFalse:[
-            self halt:'unhandled unzip command'.
-        ]
+        ].
+        template isNil ifTrue:[
+            self halt:'unknown command'
+        ].
     ].
 
     template notNil ifTrue:[
         ^ String streamContents:[:s |
             s nextPutAll:(template 
-                        bindWith:cmd
-                        with:self fileName asString string).
+                            bindWith:cmd with:self fileName asString string).
 
             aColOfFiles notNil ifTrue:[       
                 self breakPoint:#ca.