home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / System / EASys / EASys!_update_481_to_482 / EASys! / Programs / ArchiveManager.rexx next >
OS/2 REXX Batch file  |  2000-08-01  |  37KB  |  1,767 lines

  1. /*
  2.   EASys! System © TNE) 1998
  3.  
  4.   ArchiveManager.rexx
  5.   Pack/unpack common archiving formats comfortably and intuitive.
  6.  
  7.   Date:        07/2000
  8.   Author:      Thomas Neidhardt (TNE), Deutschland, Erlangen
  9.  
  10.   InterNet:    thomas.neidhardt@fen-net.de
  11.  
  12.   Needs:       RexxReqTools Package by Rafael D'Halleweyn ( rdhall@rug.ac.be )
  13.                and the EASys! Configuration Environment.
  14.  
  15.   Referenced by:  ${RefTable/ArchiveManager}
  16. */
  17.  
  18. PARSE ARG UserArgs
  19. OPTIONS RESULTS
  20. OPTIONS FAILAT 30
  21.  
  22. CALL Init
  23.  
  24. QuitEasy=0
  25. wbargs=0
  26. cliargs=0
  27. flist=0
  28. fliste=0
  29. startargs=0
  30.  
  31. UserArgs=STRIP(UserArgs,'B',' ')
  32.  
  33. SELECT
  34. WHEN POS('AS_EasyMail:',UserArgs)>0 THEN
  35. DO
  36.  IF GetClip('EasyMail')=1 THEN EXIT 0 /* prevent second startup at EasySave */
  37.  
  38.  EasyMail=1
  39.  CALL SetClip('EasyMail',1)
  40. END
  41.  
  42. WHEN POS('AS_EasyArc:',UserArgs)>0 THEN
  43. DO
  44.  IF GetClip('EasyArc')=1 THEN EXIT 0
  45.  
  46.  EasyArc=1
  47.  CALL SetClip('EasyArc',1)
  48. END
  49.  
  50. WHEN POS('-FList',UserArgs)>0 THEN
  51. DO
  52.  flist=1
  53.  fliste=1
  54.  lefts=''
  55.  rights=''
  56.  PARSE VAR UserArgs lefts'-FList 'rights
  57.  filelist_tmp=STRIP(WORD(rights,1),'B','"')
  58.  rights=RIGHT(rights,LENGTH(rights)-LENGTH(WORD(rights,1)))
  59.  UserArgs=lefts''rights
  60.  IF ReadFileList(filelist_tmp)=0 THEN EXIT 0
  61. END
  62.  
  63. OTHERWISE NOP
  64. END /* SELECT */
  65.  
  66. l=LENGTH(UserArgs)
  67. SELECT
  68.  WHEN EasyMail=1 THEN NOP
  69.  WHEN EasyArc=1 THEN
  70.  DO
  71.   IF ShowMessage('ArchiveManager.15',,,,AppName)=0 THEN
  72.   DO
  73.    QuitEasy=1
  74.    CALL ExitMe
  75.   END
  76.  
  77.   CALL ReadDir('AS_EasyArc:')
  78.   CALL ActionRequest
  79.   CALL ExitMe
  80.  END
  81.  
  82.  WHEN LEFT(UserArgs,5)='-list' THEN
  83.  DO
  84.   PARSE VAR UserArgs '-list 'UserArgs
  85.  
  86.   IF l>6 THEN CLIargs=1
  87.   ELSE WBargs=1
  88.   CALL GetFileSelection()
  89.  
  90.   DO k=1 to Files.count
  91.    CALL ListArc(ftype.k,Files.k)
  92.   END
  93.   CALL ExitMe
  94.  END
  95.  
  96.  WHEN LEFT(UserArgs,5)='-pack' THEN
  97.  DO
  98.   p=POS('-files',UserArgs)
  99.   IF p=0 THEN
  100.    CALL GetSelectedIcons()
  101.   ELSE
  102.   DO
  103.    PARSE VAR UserArgs left'-files 'UserArgs
  104.    CLIargs=1
  105.    CALL GetFileSelection()
  106.    UserArgs=left
  107.   END
  108.  
  109.   autoPack=1
  110.   type=LEFT(UserArgs,8)
  111.  
  112.   IF type='-packLha' THEN
  113.   DO
  114.    methode=lha
  115.    PARSE VAR UserArgs '-packLha 'DestPath
  116.   END
  117.  
  118.   IF type='-packZip' THEN
  119.   DO
  120.    methode=zip
  121.    PARSE VAR UserArgs '-packZip 'DestPath
  122.   END
  123.  
  124.   DestPath=STRIP(DestPath,'B',' ')
  125.   DestPath=STRIP(DestPath,'B','"')
  126.   IF DestPath='' THEN DestPath=Path.1
  127.   IF ~(RIGHT(DestPath,1)='/' | RIGHT(DestPath,1)=':') THEN DestPath=DestPath'/'
  128.   ActualPathArc=DestPath
  129.   DestPath=DestPath''FileName.1
  130.  
  131.   CALL PackBundle
  132.   CALL ExitMe
  133.  END
  134.  
  135.  WHEN LEFT(UserArgs,9)='-unpackTo' THEN
  136.  DO
  137.   p=POS('-files',UserArgs)
  138.   IF p=0 THEN
  139.    CALL GetSelectedIcons()
  140.   ELSE
  141.   DO
  142.    PARSE VAR UserArgs left'-files 'UserArgs
  143.    CLIargs=1
  144.    CALL GetFileSelection()
  145.    UserArgs=left
  146.   END
  147.  
  148.   autoUnpack=1
  149.   PARSE VAR UserArgs '-unpackTo 'DestPath
  150.   DestPath=STRIP(DestPath,'B','"')
  151.  
  152.   IF DestPath='' THEN DestPath=Path.1
  153.   IF ~(RIGHT(DestPath,1)='/' | RIGHT(DestPath,1)=':') THEN DestPath=DestPath'/'
  154.  
  155.   DO k=1 to Files.count
  156.     CALL Unpack
  157.   END
  158.   CALL ExitMe
  159.  END
  160.  
  161.  WHEN WB_port=1 & ~fliste=1 & (POS('-pack',UserArgs)>0 | POS('-unpack',UserArgs)>0 | POS('-sendMail',UserArgs)>0 | UserArgs='' | UserArgs='USERARGS') THEN
  162.  DO
  163.   wbargs=1
  164.   IF GetSelectedIcons()=0 THEN
  165.   DO
  166.    CALL Startup
  167.    CALL ExitMe
  168.   END
  169.   ELSE CALL SetActualPath
  170.  END
  171.  
  172.  WHEN WB_port=0 & ~fliste=1 & (POS('-pack',UserArgs)>0 | POS('-unpack',UserArgs)>0 | POS('-sendMail',UserArgs)>0 | UserArgs='' | UserArgs='USERARGS') THEN
  173.  DO
  174.   CALL StartUp
  175.   CALL ExitMe
  176.  END
  177.  
  178.  WHEN POS(':',UserArgs)>0 | POS('/',UserArgs)>0 THEN cliargs=1
  179.  
  180.  WHEN UserArgs="??" THEN
  181.  DO
  182.   IF EXISTS('EASys!_bin:'Language'/cm.help') THEN ADDRESS COMMAND 'type EASys!_bin:'Language'/cm.help'
  183.   ELSE ADDRESS COMMAND 'type EASys!_bin:english/cm.help'
  184.   EXIT 0
  185.  END
  186.  OTHERWISE NOP
  187. END /* SELECT */
  188.  
  189.  
  190. l=LENGTH(UserArgs)
  191. SELECT
  192.  WHEN UserArgs='' & (FILES.1='' | FILES.1='FILES.1') THEN
  193.  DO
  194.   IF WB_port=1 THEN wbargs=1
  195.   CALL Startup
  196.  END
  197.  OTHERWISE NOP
  198. END /* SELECT */
  199.  
  200. sendmail=0
  201.  
  202. l=LENGTH(UserArgs)
  203. SELECT
  204.  WHEN (LEFT(UserArgs,9)='-sendMail') THEN
  205.  DO
  206.    sendmail=1
  207.    IF l>10 THEN UserArgs=RIGHT(UserArgs,l-10)
  208.  
  209.    /* EasySave directory notification operation by MultiNotify */
  210.  
  211.    IF EasyMail=1 THEN
  212.    DO
  213.     IF ShowMessage('ArchiveManager.16',,,,AppName)=0 THEN
  214.     DO
  215.      QuitEasy=1
  216.      CALL ExitMe
  217.     END
  218.  
  219.     CALL ReadDir('AS_EasyMail:')
  220.    END
  221.  
  222.    destaddr=''
  223.    IF POS('@',WORD(UserArgs,1))>0 THEN
  224.    DO
  225.      destaddr=WORD(UserArgs,1)
  226.    END
  227.  
  228.    SELECT
  229.     WHEN fliste=1 THEN ADDRESS COMMAND 'copy 'filelist_tmp' 'FileList' CLONE QUIET'
  230.     OTHERWISE
  231.     DO
  232.       IF (open(fTMP,FileList,'write')) THEN
  233.       DO
  234.         DO k=1 to Files.count
  235.           r=writeln(fTMP,Files.k)
  236.           r=writeln(fTMP,Path.k)
  237.           r=writeln(fTMP,FileName.k)
  238.           r=writeln(fTMP,Prefix.k)
  239.           r=writeln(fTMP,Suffix.k)
  240.         END
  241.         r=close(fTMP)
  242.       END
  243.     END
  244.    END
  245.  
  246.    IF Files.count>10 | onedir=1 THEN
  247.     CALL QueryPackActions
  248.    ELSE
  249.    DO
  250.     sendarc=1
  251.     sendfiles=2
  252.     CALL mkReqFList(1)
  253.     Action=ShowMessage('ArchiveManager.20',,,,AppName,reqFList)
  254.     SELECT
  255.       WHEN Action=sendarc THEN CALL QueryPackActions
  256.       WHEN Action=sendfiles THEN
  257.       DO
  258.         ADDRESS COMMAND '${RefTable/Net-Start-MailOffl} 'destaddr' -FList 'FileList
  259.         CALL DELAY(400)
  260.       END
  261.       OTHERWISE CALL ExitMe
  262.     END /* SELECT */
  263.    END
  264.  END
  265.  
  266.  WHEN fliste=1 THEN
  267.  DO
  268.    CALL ActionRequest
  269.    CALL ExitMe
  270.  END
  271.  
  272.  WHEN ~(UserArgs='') & (FILES.1='' | FILES.1='FILES.1') THEN
  273.  DO
  274.   CALL FileParser
  275.   DO k=1 to Files.count
  276.       CALL ActionRequest
  277.   END
  278.   CALL ExitMe
  279.  END
  280.  
  281.  OTHERWISE
  282.  DO
  283.     CALL ActionRequest
  284.     CALL ExitMe
  285.  END
  286. END /* SELECT UserArgs */
  287.  
  288. CALL ExitMe
  289.  
  290. /* ---------------------- */
  291. ReadDir:
  292. PARSE ARG Dir
  293.  
  294. /* Dir must end up with '/' or ':' */
  295.  
  296. r=PRAGMA('DIRECTORY',Dir)
  297. ADDRESS COMMAND 'list >T:'TempPath' ALL FILES LFORMAT "%p*n%n"'
  298. IF ~Open(fTMP,'T:'TempPath,'READ') THEN CALL Err_ShowMessage('T:'TempPath)
  299. i=0
  300. l=LENGTH(Dir)
  301. DO FOREVER
  302.  i=i+1
  303.  
  304.  origPath=READLN(fTMP)
  305.  IF EOF(fTMP) THEN LEAVE
  306.  
  307.  fnam=READLN(fTMP)
  308.  IF EOF(fTMP) THEN LEAVE
  309.  
  310.  Files.i=Dir''origPath''fnam
  311.  FileName.i=origPath''fnam
  312.  
  313.  pos=LASTPOS('.',fnam)
  314.  IF pos>1 THEN Prefix.i=LEFT(fnam,pos-1)
  315.  ELSE Prefix.i=fnam
  316.  
  317.  Path.i=Dir
  318.  fType.i=GetType(Files.i)
  319. END
  320. r=Close(fTMP)
  321. Files.count=i-1
  322.  
  323. RETURN
  324. /* ---------------------- */
  325. GetType:
  326. PARSE ARG sz_file
  327.  
  328. IF ~EXISTS(sz_file) | sz_file='' THEN RETURN '???'
  329. IF IsDir(sz_file)=1 THEN RETURN 'DIRECTORY'
  330.  
  331. l=''
  332. r=Open(fFILE,sz_file,'READ')
  333. l=ReadLn(fFILE)'___________'
  334. r=Close(fFile)
  335.  
  336. sfx=UPPER(RIGHT(sz_file,4))
  337. usz_file=UPPER(sz_file)
  338.  
  339. SELECT
  340.  /* archive */
  341.  WHEN LEFT(l,3)='444d53'x THEN type='DMS'
  342.  WHEN UPPER(SUBSTR(l,3,3))='-LH' THEN type='LHA'
  343.  WHEN LEFT(l,3)='4c5a58'x THEN type='LZX'
  344.  WHEN LEFT(l,3)='58504b'x THEN type='XPK'
  345.  WHEN sfx='.TAR' THEN type='TAR'
  346.  WHEN LEFT(l,4)='504b0304'x THEN type='ZIP'
  347.  WHEN sfx='.RUN' THEN type='RUN'
  348.  WHEN sfx='.TGZ' THEN type='TGZ'
  349.  WHEN sfx='.ARJ' THEN type='ARJ'
  350.  WHEN sfx='.ARC' THEN type='ARC'
  351.  WHEN RIGHT(usz_file,7)='.TAR.GZ' THEN type='TGZ'
  352.  
  353.  OTHERWISE type='UNKNOWN'
  354. END /* SELECT */
  355.  
  356. RETURN type
  357. /* ------------------------- */
  358. IsDir:     PROCEDURE
  359. PARSE ARG name
  360.  
  361. IF name='' THEN RETURN -1
  362.  
  363. r=PRAGMA('DIRECTORY',name)
  364. IF ~(r='') THEN
  365.    DirFlag=1
  366. ELSE
  367. DO
  368.  IF ~Exists(name) THEN
  369.    DirFlag=-1
  370.  ELSE
  371.    DirFlag=0
  372. END
  373.  
  374. r=PRAGMA('DIRECTORY','T:')
  375. RETURN DirFlag
  376. /* ---------------------- */
  377. WriteFileList:
  378.  
  379. IF (open(fTMP, FileList, 'write')) THEN
  380. DO
  381.   DO k=1 to Files.count
  382.     r=writeln(fTMP,Files.k)
  383.     r=writeln(fTMP,Path.k)
  384.     r=writeln(fTMP,FileName.k)
  385.     r=writeln(fTMP,Prefix.k)
  386.     r=writeln(fTMP,Suffix.k)
  387.   END
  388.   r=close(fTMP)
  389. END
  390. ELSE
  391.   CALL ExitMe
  392.  
  393. RETURN
  394. /* ---------------------- */
  395. ReadFileList:
  396. PARSE ARG list
  397. i=0
  398.  
  399. IF ~Open(TMP,list,'read') THEN CALL ExitMe
  400. DO UNTIL EOF(TMP)
  401.  i=i+1
  402.  Files.i=READLN(TMP)
  403.  Path.i=READLN(TMP)
  404.  FileName.i=READLN(TMP)
  405.  Prefix.i=READLN(TMP)
  406.  Suffix.i=READLN(TMP)
  407.  
  408.  IF getalltypes=1 THEN
  409.  DO
  410.   ftype.i=getType(Files.i)
  411.   fclass.i=class
  412.   feditor.i=editor
  413.   fprinter.i=printer
  414.   fviewer.i=viewer
  415.  END
  416. END
  417.  
  418. Result=Close(TMP)
  419.  
  420. n=i-1
  421. Files.count=n
  422. Path=Path.n
  423.  
  424. IF ~(Files.1='') THEN RETURN 1
  425. ELSE RETURN 0
  426. /* ---------------------- */
  427. Startup:
  428.  
  429. CALL PlaySample(SampleStartup)
  430.  
  431. Arbeite_Datei=1
  432. Arbeite_GUI_lha=2
  433. Arbeite_GUI_Zip=3
  434. Arbeite_GUI_UU=4
  435. Arbeite_XPK=5
  436. help=6
  437. Cancel=0
  438.  
  439. DO FOREVER  /* for online-Help Support and retrace */
  440.  
  441.   /* Show Action Panel */
  442.   Action=ShowMessage('ArchiveManager.1',,,,AppName)
  443.  
  444.   SELECT
  445.    WHEN Action=Cancel THEN CALL ExitMe
  446.  
  447.    WHEN Action=Arbeite_Datei THEN
  448.    DO
  449.      IF GetFileSelection()=0 THEN EXIT 0
  450.  
  451.      DO k=1 to Files.count
  452.          CALL ActionRequest
  453.      END
  454.      CALL ExitMe
  455.    END
  456.  
  457.    WHEN Action=Arbeite_GUI_lha THEN
  458.    DO
  459.      CALL GUI_lha
  460.      CALL ExitMe
  461.    END
  462.  
  463.    WHEN Action=Arbeite_GUI_Zip THEN
  464.    DO
  465.      CALL GUI_Zip
  466.      CALL ExitMe
  467.    END
  468.  
  469.    WHEN Action=Arbeite_GUI_UU THEN
  470.    DO
  471.      ADDRESS COMMAND '${RefTable/Archive-guiUU}'
  472.      CALL ExitMe
  473.    END
  474.  
  475.    WHEN Action=Arbeite_XPK THEN
  476.    DO
  477.      ADDRESS COMMAND '${RefTable/Archive-xpkDropper}'
  478.      CALL ExitMe
  479.    END
  480.  
  481.    WHEN Action=help THEN ADDRESS COMMAND '${RefTable/Text-ViewGuide} EASys!:Help/'Language'/EASys!_CM.guide'
  482.  
  483.    OTHERWISE NOP
  484.   END /* SELECT Action */
  485.  
  486. END /* FOREVER */
  487. RETURN
  488.  
  489. /* ---------------------- */
  490. GetFileSelection:
  491.  
  492. /*
  493.  RETURN 2  signals that files have been handed over by arguments
  494.  flist or from workbench by wbargs or from cli
  495. */
  496.  
  497. FileName.1=''
  498. Files.1='FILES.1'
  499. Files.count=0
  500. Path.1=''
  501. ContinuedMode=0
  502.  
  503. SELECT
  504.  WHEN cliargs=1 THEN
  505.  DO
  506.   r=FileParser()
  507.   cliargs=0
  508.   IF r=0 THEN StartArgs=SelectFiles()
  509.   ELSE StartArgs=2
  510.  END
  511.  
  512.  WHEN flist=1 THEN
  513.  DO
  514.   r=ReadFileList(filelist_tmp)
  515.   flist=0
  516.   IF r=0 THEN StartArgs=SelectFiles()
  517.   ELSE StartArgs=2
  518.  END
  519.  
  520.  WHEN wbargs=1 THEN
  521.  DO
  522.   r=GetSelectedIcons()
  523.   wbargs=0
  524.   IF r=0 THEN StartArgs=SelectFiles()
  525.   ELSE StartArgs=2
  526.  END
  527.  
  528.  OTHERWISE StartArgs=SelectFiles()
  529. END /* SELECT */
  530.  
  531. IF StartArgs=0 THEN
  532.  RETURN 0
  533. ELSE
  534. DO
  535.  CALL SetActualPath
  536.  RETURN StartArgs
  537. END
  538. /* ---------------------- */
  539. SetActualPath:
  540. i=Files.count
  541. ActualPath=Path.1
  542. Path=Path.i
  543. LastSelected=FileName.1 /* remember */
  544.  
  545. CALL WriteFileList(FileList)  /* Prepare a FileList for external Processes */
  546. ADDRESS COMMAND 'SetEnv Flags/ActualPath "'ActualPath'"'
  547.  
  548. RETURN
  549. /* ---------------------- */
  550. SelectFiles:
  551. wbargs=0
  552. cliargs=0
  553. flist=0
  554.  
  555. Drive=LEFT(ActualPath,POS(':',ActualPath))
  556. ADDRESS COMMAND 'assign >NIL: "'ConvSpecial(Drive)'" EXISTS'
  557.  
  558. IF RC>0 | ActualPath='' THEN ActualPath="SYS:"
  559. ELSE IF ~EXISTS(ActualPath) THEN ActualPath="SYS:"
  560.  
  561. IF ~(firstSelection=1) THEN CALL PlaySample(SampleChooseFiles)
  562. IF LastSelected='LASTSELECTED' THEN LastSelected=''
  563.  
  564. UserArgs=ShowMessage(FileReq,ActualPath,LastSelected,,AppName)
  565. IF UserArgs='' THEN RETURN 0
  566. ELSE ContinuedMode=1
  567.  
  568. CALL FileParser
  569.  
  570. firstSelection=1
  571. RETURN 1
  572. /* ---------------------- */
  573. GetSelectedIcons:
  574. OPTIONS RESULTS
  575.  
  576. ADDRESS WORKBENCH
  577. GETATTR WINDOWS NAME window_list STEM window_list
  578.  
  579. i=1
  580. DO w=0 TO window_list.count-1
  581.  activewin=window_list.w
  582.  IF ~(RIGHT(activewin,1)=':') & w>0 THEN activewin=activewin'/'
  583.  
  584.  GETATTR OBJECT WINDOW.ICONS.SELECTED.COUNT NAME activewin
  585.  numselected=RESULT
  586.  IF numselected>0 & w>0 THEN
  587.  DO
  588.   DO j=0 TO numselected-1
  589.    GETATTR OBJECT WINDOW.ICONS.SELECTED.j.NAME NAME activewin
  590.    Files.i=activewin''RESULT
  591.    CALL Analyze
  592.  
  593.    i=i+1
  594.   END
  595.  END
  596. END
  597. i=i-1
  598. Files.count=i
  599.  
  600. IF ~(Files.1='' | Files.1='FILES.1') THEN RETURN 1
  601. ELSE RETURN 0
  602.  
  603. /* ------------------------- */
  604. FileParser:
  605.  
  606. IF Files.1='' | Files.1='FILES.1' | POS(':',UserArgs)=0 THEN
  607. DO
  608.  i=0
  609.  
  610.  DO forever
  611.   i=i+1
  612.  
  613.   Files.i=''
  614.   PrognameBegPos=0
  615.   DevicePos=0
  616.   DirPos=0
  617.   SfxBegin=0
  618.  
  619.   IF ( POS('"', UserArgs)=0 ) THEN
  620.    PARSE VAR UserArgs Files.i UserArgs
  621.   ELSE
  622.    PARSE VAR UserArgs Files.i '"' UserArgs       /* parse the line */
  623.  
  624.   IF ( Files.i=" ") THEN
  625.   DO
  626.    IF ( POS('"', UserArgs)=0 ) THEN
  627.     PARSE VAR UserArgs Files.i UserArgs
  628.    ELSE
  629.     PARSE VAR UserArgs Files.i '"' UserArgs       /* parse the line */
  630.   END
  631.  
  632.   Files.i=strip(Files.i,'T',' ')
  633.   Files.i=strip(Files.i,'B','"')
  634.  
  635.   IF (Files.i='') THEN
  636.   DO                    /* Break if end of Command-line */
  637.    Files.count=i-1
  638.    LEAVE
  639.   END
  640.  
  641.   DevicePos=LASTPOS(':',Files.i)
  642.  
  643.   IF (DevicePos=0) THEN
  644.   DO
  645.    ADDRESS COMMAND 'cd >ENV:'TempPath
  646.    Path.i=MyGetENV(TempPath)
  647.  
  648.    ADDRESS COMMAND 'delete >NIL: ENV:'TempPath' QUIET'
  649.  
  650.    IF (RIGHT(Path.i,1)=':') THEN
  651.      Files.i=Path.i || Files.i
  652.    ELSE
  653.      Files.i=Path.i || '/' || Files.i
  654.   END
  655.  
  656.   CALL Analyze
  657.  END
  658. END
  659. ELSE
  660. DO i=1 TO Files.count
  661.  PrognameBegPos=0
  662.  DevicePos=0
  663.  DirPos=0
  664.  SfxBegin=0
  665.  
  666.  CALL Analyze
  667. END
  668.  
  669. IF ~(Files.1='' | Files.1='FILES.1') THEN RETURN 1
  670. ELSE RETURN 0
  671.  
  672. /*----------------------------------*/
  673. Analyze:
  674.  
  675. Files.i=STRIP(Files.i,'T','/')
  676. LengF=LENGTH(Files.i)
  677. DevicePos=LASTPOS(':',Files.i)
  678. DirPos=LASTPOS('/',Files.i)
  679.  
  680. IF DirPos>1 THEN
  681. DO
  682.  PrognameBegPos=DirPos
  683.  Path_Dir.i=LEFT(Files.i, DirPos)
  684.  Path.i=strip(Path_Dir.i,'T','/')
  685. END
  686. ELSE
  687. DO
  688.  PrognameBegPos=DevicePos
  689.  Path.i=LEFT(Files.i, DevicePos)
  690.  Path_Dir.i=Path.i
  691. END
  692.  
  693. Numchars=LengF - PrognameBegPos
  694. Device.i=LEFT(Files.i, Devicepos)
  695. FileName.i=RIGHT(Files.i, LengF-PrognameBegPos)
  696.  
  697. SfxBegin=LASTPOS('.',FileName.i)
  698.  
  699. IF SfxBegin=0 THEN
  700. DO
  701.  Prefix.i=FileName.i
  702.  Suffix.i=''
  703. END
  704. ELSE
  705. DO
  706.  Prefix.i=LEFT(FileName.i,SfxBegin-1)
  707.  Suffix.i=UPPER(RIGHT(Files.i, NumChars-SfxBegin))
  708. END
  709.  
  710. ftype.i=getType(Files.i)
  711. IF ftype.i='DIRECTORY' THEN onedir=1
  712.  
  713. Path=Path.i
  714. RETURN 1
  715. /* ---------------------- */
  716. ActionRequest:
  717.  
  718. Aminet=0
  719. IF (UPPER(Left(Path,6))="AMINET" | UPPER(Left(Path,3))="SET") THEN
  720. DO
  721.  CALL ActionsAminet
  722.  RETURN
  723. END
  724.  
  725. IF Files.count=1 & ~(ftype.1='UNKNOWN') & ~(onedir=1) THEN CALL QueryUnpackActions
  726. ELSE CALL QueryPackActions
  727. RETURN
  728.  
  729. /* ---------------------- */
  730. QueryPackActions:
  731.  
  732. CALL PlaySample(SampleAction)
  733.  
  734. /* Create a limited length FileList Text for the Requester */
  735.  
  736. RtFileList='   'Files.1
  737.  
  738. IF Files.count>1 THEN
  739. DO n=2 TO Files.count WHILE n<=8
  740.  RtFileList=RtFileList''CR'   'Files.n
  741. END
  742.  
  743. IF Files.count>8 THEN RtFileList=RtFileList''CR'   ...'
  744.  
  745. DO FOREVER
  746.   Methode=ShowMessage('ArchiveManager.3',,,,AppName,RtFileList)
  747.   If Methode=help THEN
  748.     ADDRESS COMMAND '${RefTable/Text-ViewGuide} EASys!:Help/'Language'/EASys!_CM.guide'
  749.   ELSE
  750.     LEAVE
  751. END
  752.  
  753. If Methode=end THEN CALL ExitMe
  754.  
  755. CALL PackBundle
  756. CALL FurtherPackActions
  757. RETURN
  758.  
  759. /* ------------ Bundle to an Archive */
  760. PackBundle:
  761.  
  762. DO k=1 to Files.count
  763.  CALL Pack
  764.  
  765.  IF(RC>9) THEN
  766.     PackError=1
  767.  ELSE
  768.     CALL AddIcon
  769. END
  770.  
  771. l=LENGTH(Archive)
  772. p=LASTPOS('/',Archive)
  773. q=LASTPOS(':',Archive)
  774. IF p>0 THEN
  775.  ArcName=RIGHT(Archive,l-p)
  776. ELSE
  777.  ArcName=RIGHT(Archive,l-q)
  778.  
  779. CALL UpdateWB(ActualPathArc,ArcName)
  780. RETURN
  781.  
  782. /* ---------------------- */
  783. Pack:
  784.  
  785. Console='>"'ConsoleType''ReqLE'/'ReqTE'/500/40/'AppName' pack: 'FileName.k' ../AUTO/NOCLOSE"'
  786.  
  787. Packer_dms='EASys!_bin:DMS.exe'
  788. Packer_lha='EASys!_bin:lha' console '-aryeZh -H0 -0 -v1 a'
  789. Packer_lzh='EASys!_bin:lha' console '-aryeZh -H0a0f -0 -v1 a'
  790. Packer_tar='EASys!_bin:TAR' console '-rv'
  791. Packer_zip='EASys!_bin:ZIP' console '-ruv -9'
  792. Packer_xpack='EASys!_bin:xpack' console 'METHOD NUKE MINSIZE 640'
  793.  
  794. sfx1=''
  795.  
  796. IF Methode=xpk THEN
  797. DO
  798.    Archive=Files.k
  799.    Packer=Packer_xpack
  800.  
  801.    /* tell, that xpk NUKE will be done in place */
  802.  
  803.    Action=ShowMessage('ArchiveManager.13',,,,AppName,Files.k)
  804.    If Action=end THEN CALL ExitMe
  805.  
  806.    ADDRESS COMMAND Packer '"'Archive'"'
  807.    RETURN 1
  808. END
  809.  
  810. IF ~(autoPack=1) THEN CALL QueryPackToDir
  811.  
  812. r=PRAGMA('DIRECTORY',Path.k)  /* change to Dir */
  813.  
  814. SELECT
  815.  WHEN Methode=zip THEN
  816.  DO
  817.     IF ~(UPPER(RIGHT(DestPath,4))='.ZIP') THEN sfx1='.zip'
  818.     Archive=DestPath''sfx1
  819.     Packer=Packer_zip
  820.  
  821.     ADDRESS COMMAND Packer '"'DestPath'" "'FileName.k'"'
  822.     RETURN 1
  823.  END
  824.  
  825.  WHEN Methode=lha THEN
  826.  DO
  827.     IF ~(UPPER(RIGHT(DestPath,4))='.LHA') THEN sfx1='.lha'
  828.     Archive=DestPath''sfx1
  829.     Packer=Packer_lha
  830.  
  831.     ADDRESS COMMAND Packer '"'Archive'" "'FileName.k'"'
  832.     RETURN 1
  833.  END
  834.  
  835.  WHEN Methode=lzh THEN
  836.  DO
  837.     IF ~(UPPER(RIGHT(DestPath,4))='.LZH') THEN sfx1='.lzh'
  838.     Archive=DestPath''sfx1
  839.     Packer=Packer_lzh
  840.  
  841.     ADDRESS COMMAND Packer '"'DestPath'" "'FileName.k'"'
  842.     RETURN 1
  843.  END
  844.  
  845.  WHEN Methode=tar THEN
  846.  DO
  847.     IF ~(UPPER(RIGHT(DestPath,4))='.TAR') THEN sfx1='.tar'
  848.     Archive=DestPath''sfx1
  849.     Packer=Packer_tar
  850.  
  851.     IF k=1 THEN    /* name only once */
  852.     DO
  853.        TarDir='T:tar_out'ProcessNumber
  854.        TarOutFile=TarDir'/tar.out'
  855.        ADDRESS COMMAND 'makedir >NIL: 'TarDir
  856.  
  857.        r=PRAGMA('DIRECTORY',TarDir)  /* change to TarDir for Taring */
  858.     END
  859.  
  860.     ADDRESS COMMAND Packer '"'Files.k'"'
  861.  
  862.     IF k=Files.count THEN
  863.     DO
  864.        r=PRAGMA('DIRECTORY','T:')  /* leave the TarDir before removing */
  865.  
  866.        ADDRESS COMMAND
  867.        'move 'TarOutFile' "'Archive'" QUIET'
  868.        'delete >NIL: 'TarDir' ALL QUIET'
  869.     END
  870.  END
  871.  
  872.  OTHERWISE NOP
  873. END /* SELECT */
  874.  
  875. r=PRAGMA('DIRECTORY','T:')
  876. RETURN 1
  877.  
  878. /* ---------------------- */
  879. FurtherPackActions:
  880.  
  881. IF sendmail=1 THEN
  882. DO
  883.   ADDRESS COMMAND '${RefTable/Net-Start-MailOffl} 'destaddr' -f "'Archive'"'
  884.   CALL ExitMe
  885. END
  886.  
  887. IF PackError=1 THEN
  888. DO
  889.   ADDRESS COMMAND 'delete >NIL: "'Archive'" QUIET'
  890.   PackError=0
  891.   RETURN
  892. END
  893.  
  894. /* Signal Packing has been completed */
  895.  
  896. CALL PlaySample(SampleAction)
  897.  
  898. DO FOREVER
  899.  IF ~EXISTS(Archive) THEN
  900.  DO
  901.   IF WB_port=1 THEN
  902.   DO
  903.    ADDRESS WORKBENCH
  904.    WINDOW WINDOWS ActualPathArc CLOSE
  905.   END
  906.  
  907.   LEAVE
  908.  END
  909.  
  910.  str_AttrSource=GetFileAttributes(Archive)
  911.  Action=ShowMessage('ArchiveManager.4',,,,AppName,str_AttrSource)
  912.  
  913.  SELECT
  914.   WHEN Action=1 THEN CALL ExitMe
  915.   WHEN Action=2 THEN CALL MoveArc(Archive,'copy')
  916.   WHEN Action=3 THEN CALL MoveArc(Archive,'move')
  917.   WHEN Action=4 THEN ADDRESS COMMAND '${RefTable/File-Trash} "'Archive'"'
  918.   WHEN Action=5 THEN ADDRESS COMMAND '${RefTable/File-Comment} "'Archive'"'
  919.   WHEN Action=0 THEN CALL ListArc(GetType(Archive),Archive)
  920.   OTHERWISE NOP
  921.  END
  922. END
  923.  
  924. CALL ExitMe
  925.  
  926. /* ---------------------- */
  927. QueryPackToDir:
  928.  
  929. IF(k=1) THEN
  930. DO
  931.  /* get, which name to give the archive */
  932.  
  933.  SelectedString=ShowMessage('ArchiveManager.8',,,Prefix.k,AppName)
  934.  IF (Action=0 | SelectedString="") THEN CALL ExitMe
  935.  
  936.  IF sendMail=1 THEN
  937.  DO
  938.   DestPath='T:'SelectedString
  939.   RETURN
  940.  END
  941.  
  942.  /* get, where to pack the archive */
  943.  
  944.  DestPath=ShowMessage('ArchiveManager.7',ActualPathArc,,,AppName,FileName.k)
  945.  IF DestPath='' THEN CALL ExitMe
  946.  
  947.  ActualPathArc=DestPath
  948.  
  949.  ADDRESS COMMAND
  950.  'setenv Flags/ActualPathArc "'DestPath'"'
  951.  'setenv Flags/ActualPath "'DestPath'"'
  952.  
  953.  DestPath=DestPath''SelectedString
  954. END
  955. RETURN
  956.  
  957. /* ---------------------- */
  958. AddIcon:
  959. IF EXISTS(Files.k'.info') & (Methode=lha | Methode=lzh | Methode=zip) THEN
  960. DO
  961.  r=PRAGMA('DIRECTORY',Path.k)  /* change to Dir */
  962.  ADDRESS COMMAND Packer '"'Archive'" "'FileName.k'.info"'
  963. END
  964. RETURN
  965.  
  966. /* ---------------------- */
  967. QueryUnpackActions:
  968.  
  969. k=1  /* Unpacking only with one File as Argument */
  970.  
  971. UnPack=1
  972. ShowContents=2
  973. copy=3
  974. move=4
  975. Delete=5
  976. help=6
  977. Cancel=0
  978.  
  979. CALL PlaySample(SampleAction)
  980.  
  981. /* query actions on selected archive */
  982.  
  983. str_AttrSource=GetFileAttributes(Files.k)
  984.  
  985. DO FOREVER
  986.  
  987.  IF ~EXISTS(Files.k) THEN CALL ExitMe
  988.  
  989.  DO FOREVER
  990.    Action=ShowMessage('ArchiveManager.5',,,,AppName,str_AttrSource)
  991.    If Action=help THEN
  992.      ADDRESS COMMAND '${RefTable/Text-ViewGuide} EASys!:Help/'Language'/EASys!_CM.guide'
  993.    ELSE
  994.      LEAVE
  995.  END
  996.  
  997.  SELECT
  998.   WHEN Action=Copy THEN CALL MoveArc(Files.k,'copy')
  999.   WHEN Action=Move THEN CALL MoveArc(Files.k,'move')
  1000.   WHEN Action=Delete THEN ADDRESS COMMAND '${RefTable/File-Trash} "'Files.k'"'
  1001.   WHEN Action=ShowContents THEN
  1002.   DO
  1003.     CALL ListArc(ftype.k,Files.k)
  1004.     CALL UnArcQuestion
  1005.     RETURN
  1006.   END
  1007.  
  1008.   WHEN Action=UnPack THEN
  1009.   DO
  1010.     CALL UnPack
  1011.     RETURN
  1012.   END
  1013.  
  1014.   WHEN Action=Cancel THEN CALL ExitMe
  1015.   OTHERWISE NOP
  1016.  END
  1017. END
  1018. RETURN
  1019.  
  1020. /* ---------------------- */
  1021. UnArcQuestion:
  1022.  
  1023. Cancel=0
  1024. entpacken=1
  1025. zeigen=2
  1026. copy=3
  1027. move=4
  1028. delete=5
  1029.  
  1030. /* unpack now ?  or what else? */
  1031.  
  1032. DO FOREVER
  1033.  
  1034.  IF ~EXISTS(Files.k) THEN CALL ExitMe
  1035.  
  1036.  Action=ShowMessage('ArchiveManager.6',,,,AppName,str_AttrSource)
  1037.  SELECT
  1038.   WHEN Action=entpacken THEN
  1039.   DO
  1040.      CALL UnPack
  1041.      LEAVE
  1042.   END
  1043.  
  1044.   WHEN Action=zeigen THEN CALL ListArc(ftype.k,Files.k)
  1045.   WHEN Action=Copy THEN CALL MoveArc(Files.k,'copy')
  1046.   WHEN Action=Move THEN CALL MoveArc(Files.k,'move')
  1047.   WHEN Action=delete THEN ADDRESS COMMAND '${RefTable/File-Trash} "'Files.k'"'
  1048.   WHEN Action=Cancel THEN CALL ExitMe
  1049.   OTHERWISE NOP
  1050.  END
  1051. END
  1052. RETURN
  1053.  
  1054. /* ---------------------- */
  1055. UnPack:
  1056.  
  1057. /* Preset Dest */
  1058. IF Aminet=0 THEN DestPath="T:"
  1059.  
  1060. /* Destination Request only, if...*/
  1061. IF (Aminet=0 & ~(ftype.k='UNKNOWN')) THEN
  1062. DO
  1063.  
  1064.  CALL PlaySample(SampleUnpackTo)
  1065.  
  1066.  ActualPath=TestPath(ActualPathUnArc)
  1067.  
  1068.  /* get, where to unpack the archive */
  1069.  
  1070.  DestPath=ShowMessage('ArchiveManager.10',ActualPath,,,AppName)
  1071.  IF DestPath='' THEN CALL ExitMe
  1072.  
  1073.  ActualPathUnArc=DestPath
  1074.  ADDRESS COMMAND 
  1075.  'setenv Flags/ActualPathUnArc "'DestPath'"'
  1076.  'setenv Flags/ActualPath "'DestPath'"'
  1077.  
  1078. END
  1079.  
  1080. r=PRAGMA('DIRECTORY',DestPath)
  1081.  
  1082.  
  1083. /* ---- type detection ---- */
  1084.  
  1085. CALL PlaySample(SampleUnPack)
  1086.  
  1087. Console='>"'ConsoleType ReqLE'/'ReqTE'/500/40/'AppName' unpack: 'FileName.k' .../AUTO/NOCLOSE"'
  1088.  
  1089. UnPacker_arc='EASys!_bin:ARC 'console' x'
  1090. UnPacker_arj='EASys!_bin:unARJ 'console' x'
  1091. UnPacker_dms='EASys!_bin:DMS.exe <'console' write'
  1092. UnPacker_lha='EASys!_bin:LHA 'console' -am x'
  1093. UnPacker_lzh='EASys!_bin:LHA 'console' -am x'
  1094. UnPacker_lzx='EASys!_bin:LZX 'console' -e x'
  1095. UnPacker_TAR='EASys!_bin:TAR 'console' -xvf'
  1096. UnPacker_TGZ='EASys!_bin:unTGZ 'console' '
  1097. UnPacker_zip='EASys!_bin:unZIP 'console' -axoL'
  1098. UnPacker_zoo='EASys!_bin:ZOO 'console' x'
  1099.  
  1100. SELECT
  1101.  WHEN ftype.k="LHA" THEN ADDRESS COMMAND UnPacker_lha '"'Files.k'" "'DestPath'"'
  1102.  WHEN ftype.k="LZH" THEN ADDRESS COMMAND UnPacker_lha '"'Files.k'" "'DestPath'"'
  1103.  WHEN ftype.k="LZX" THEN ADDRESS COMMAND UnPacker_lzx '"'Files.k'" "'DestPath'"'
  1104.  WHEN ftype.k="ZIP" THEN ADDRESS COMMAND UnPacker_zip '"'Files.k'" -d' '"'DestPath'"'
  1105.  WHEN ftype.k="RUN" THEN ADDRESS COMMAND '"'Files.k'"' Console '-x "'DestPath'"'
  1106.  WHEN ftype.k="TGZ" THEN ADDRESS COMMAND UnPacker_tgz '"'Files.k'" "'DestPath'"'
  1107.  WHEN ftype.k="TAR" THEN
  1108.  DO
  1109.   /* tell, that TAR will restore Files to original Path */
  1110.  
  1111.   Action=ShowMessage('ArchiveManager.14',,,,AppName,Files.k)
  1112.   IF Action=0 THEN CALL ExitMe
  1113.  
  1114.   ADDRESS COMMAND UnPacker_TAR '"'Files.k'"'
  1115.  END
  1116.  
  1117.  WHEN ftype.k="ARJ" THEN
  1118.  DO
  1119.    /* tell, where the archive will be unpacked (T:) */
  1120.    Action=ShowMessage('ArchiveManager.11',,,,AppName)
  1121.    If Action=1 THEN ADDRESS COMMAND UnPacker_arj '"'Files.k'"'
  1122.  END
  1123.  
  1124.  WHEN ftype.k="DMS" THEN
  1125.  DO
  1126.    /* tell, that DMS will unpack to DF0: */
  1127.    Action=ShowMessage('ArchiveManager.12',,,,AppName)
  1128.    If Action=1 THEN ADDRESS COMMAND UnPacker_dms '"'Files.k'" DF0:'
  1129.  END
  1130.  
  1131.  WHEN ftype.k="ZOO" THEN ADDRESS COMMAND UnPacker_zoo '"'Files.k'" "'DestPath'"'
  1132.  WHEN ftype.k="ARC" THEN ADDRESS COMMAND UnPacker_arc '"'Files.k'"'
  1133.  OTHERWISE NOP
  1134. END
  1135.  
  1136. CALL UpdateWB(DestPath,'')
  1137.  
  1138. IF autoUnpack=1 | Aminet=1 THEN RETURN
  1139. ELSE CALL FurtherUnpackActions
  1140. RETURN
  1141.  
  1142. /* ---------------------- */
  1143. FurtherUnpackActions:
  1144.  
  1145. Cancel=0
  1146. Copy=1
  1147. Move=2
  1148. Delete=3
  1149. Presentate=4
  1150. FM=5
  1151.  
  1152. str_AttrSource=GetFileAttributes(Files.k)
  1153. CALL PlaySample(SampleAction)
  1154.  
  1155. DO FOREVER
  1156.  
  1157.  IF ~EXISTS(Files.k) THEN CALL ExitMe
  1158.  
  1159.  /* ask further actions for the unpacked archive */
  1160.  
  1161.  Action=ShowMessage('ArchiveManager.9',,,,AppName,str_AttrSource)
  1162.  SELECT
  1163.   WHEN Action=Cancel THEN CALL ExitMe
  1164.   WHEN Action=Copy THEN CALL MoveArc(Files.k,'copy')
  1165.   WHEN Action=Move THEN CALL MoveArc(Files.k,'move')
  1166.   WHEN Action=Delete THEN ADDRESS COMMAND '${RefTable/File-Trash} "'Files.k'"'
  1167.   WHEN Action=FM THEN ADDRESS COMMAND '${RefTable/File-Manager} -DIR "'DestPath'"'
  1168.   WHEN Action=Presentate THEN
  1169.   DO
  1170.     OriginalPath=MyGetENV('Flags/ActualPath')
  1171.  
  1172.     ADDRESS COMMAND
  1173.     'setenv Flags/ActualPath "'DestPath'"'
  1174.     '${RefTable/File-Presentate} -DIR "'DestPath'"'
  1175.     'setenv Flags/ActualPath "'OriginalPath'"'
  1176.   END
  1177.  
  1178.   OTHERWISE NOP
  1179.  END
  1180. END
  1181.  
  1182. RETURN
  1183.  
  1184. /* ---------------------- */
  1185. ActionsAminet:
  1186.  
  1187. Aminet=1
  1188.  
  1189. IF ~EXISTS("RAM:Test") THEN ADDRESS COMMAND 'makedir RAM:Test'
  1190.  
  1191. DestPath='RAM:Test/'
  1192.  
  1193. TalkBefore=TalkToUser
  1194. TalkToUser="0"
  1195.  
  1196. k=1
  1197. CALL UnPack
  1198.  
  1199. OriginalPath=MyGetENV('Flags/ActualPath')
  1200.  
  1201. r=PRAGMA('DIRECTORY','T:')
  1202.  
  1203. ADDRESS COMMAND
  1204. 'EASys!_bin:CopyIcon >NIL: "ENV:sys/def_drawer" "RAM:Test"'
  1205. 'setenv Flags/ActualPath "'DestPath'"'
  1206. '${RefTable/File-Presentate} -DIR "'DestPath'"'
  1207. 'setenv Flags/ActualPath "'OriginalPath'"'
  1208. 'list >'tmpfile' RAM:Test/~(#?.info) LFORMAT "EASys!_bin:IconKill *"%s%s*""'
  1209. 'EASys!_bin:swipe >NIL: RAM:Test FORCE ALL QUIET'
  1210. 'execute 'tmpfile
  1211. 'delete >NIL: 'tmpfile
  1212. 'EASys!_bin:IconKill RAM:Test'
  1213.  
  1214. TalkToUser=TalkBefore
  1215.  
  1216. RETURN 1
  1217.  
  1218. /* ---------------------- */
  1219. GUI_lha:
  1220.  
  1221. ADDRESS COMMAND '${RefTable/Archive-guiLHA}'
  1222. CALL ExitMe
  1223. RETURN 1
  1224.  
  1225. /* ---------------------- */
  1226. GUI_Zip:
  1227.  
  1228. ADDRESS COMMAND '${RefTable/Archive-guiPKAZIP}'
  1229. CALL ExitMe
  1230. RETURN 1
  1231.  
  1232. /* ---------------------- */
  1233. ListArc:
  1234. PARSE ARG type,file
  1235.  
  1236. IF EXISTS(MyGetENV('RefTable/Archive-unarcGUI')) THEN
  1237. DO
  1238.  ADDRESS COMMAND '${RefTable/Archive-unarcGUI} "'file'"'
  1239.  RETURN
  1240. END
  1241.  
  1242. IF EXISTS(ArcListFile) THEN
  1243. DO
  1244.  CALL ShowArcList
  1245.  RETURN
  1246. END
  1247.  
  1248. CALL PlaySample(SampleShowContents)
  1249.  
  1250. list_arc="EASys!_bin:Lister >"ArcListFile" v"
  1251. list_arj="EASys!_bin:unARJ >"ArcListFile" l"
  1252. list_dms="EASys!_bin:DMS.exe >"ArcListFile" view"
  1253. list_lha="EASys!_bin:LHA >"ArcListFile" v"
  1254. list_lzh="EASys!_bin:LHA >"ArcListFile" v"
  1255. list_lzx="EASys!_bin:lzx >"ArcListFile" l"
  1256. list_run="EASys!_bin:LHA >"ArcListFile" v"
  1257. list_tar="EASys!_bin:TAR >"ArcListFile" -tRvf"
  1258. list_tgz="EASys!_bin:untgz -v >"ArcListFile" "
  1259. list_zip="EASys!_bin:unZIP >"ArcListFile" -lv"
  1260. list_zoo="EASys!_bin:ZOO >"ArcListFile" v"
  1261.  
  1262. SELECT
  1263.  WHEN type="LHA" THEN ADDRESS COMMAND List_lha '"'file'"'
  1264.  WHEN type="LZX" THEN ADDRESS COMMAND List_LZX '"'file'"'
  1265.  WHEN type="LZH" THEN ADDRESS COMMAND List_lha '"'file'"'
  1266.  WHEN type="ZIP" THEN ADDRESS COMMAND List_zip '"'file'"'
  1267.  WHEN type="DMS" THEN ADDRESS COMMAND List_dms '"'file'"'
  1268.  WHEN type="ARJ" THEN ADDRESS COMMAND List_arj '"'file'"'
  1269.  WHEN type="ARC" THEN ADDRESS COMMAND List_arc '"'file'"'
  1270.  WHEN type="RUN" THEN ADDRESS COMMAND List_run '"'file'"'
  1271.  WHEN type="TAR" THEN ADDRESS COMMAND List_TAR '"'file'"'
  1272.  WHEN type="TGZ" THEN ADDRESS COMMAND List_TGZ '"'file'"'
  1273.  WHEN type="ZOO" THEN ADDRESS COMMAND List_zoo '"'file'"'
  1274.  OTHERWISE ADDRESS COMMAND List_arc '"'file'"'
  1275. END
  1276.  
  1277. CALL ShowArcList
  1278.  
  1279. RETURN
  1280.  
  1281. /* ---------------------- */
  1282. ShowArcList:
  1283.  
  1284. /* ADDRESS COMMAND '${RefTable/Text-ViewASCII}' ArcListFile */
  1285. ADDRESS COMMAND '${RefTable/Archive-unarcGUI}' ArcListFile
  1286.  
  1287. RETURN
  1288.  
  1289. /* ---------------------- */
  1290. GetFileAttributes:
  1291. PARSE ARG CheckedFile
  1292.  
  1293. BytesTemp='ENV:CM_Bytes'ProcessNumber
  1294. AttrFile='T:CM_Attr_'ProcessNumber
  1295.  
  1296. ADDRESS COMMAND 'list >'AttrFile' "'CheckedFile'" LFORMAT "    %n*n    %p*n    %l Bytes *n    %d   %t*n    %c"'
  1297.  
  1298. IF (open(fTMP, AttrFile, 'read')) THEN
  1299. DO
  1300.    str_Attr=READLN(fTMP)
  1301.    str_Attr=str_Attr CR READLN(fTMP)
  1302.    str_Attr=str_Attr CR LEFT(READLN(fTMP), 85)
  1303.    str_Attr=str_Attr CR READLN(fTMP)
  1304.    str_Attr=str_Attr CR LEFT(READLN(fTMP), 85)
  1305.  
  1306.    Result=Close(fTMP)
  1307.  
  1308.    ADDRESS COMMAND 'delete >NIL: 'AttrFile' QUIET'
  1309. END
  1310.  
  1311. RETURN str_Attr
  1312.  
  1313. /* ------------------------- */
  1314. GetBytes:
  1315. PARSE ARG checkedfile
  1316.  
  1317. BytesTemp='T:FM_Bytes'ProcessNumber
  1318. AttrFile='T:FM_Attr_'ProcessNumber
  1319. DirChecked=0
  1320.  
  1321. aFile=ConvSpecial(CheckedFile)
  1322.  
  1323. IF IsDir(CheckedFile)=1 THEN
  1324.   RETURN 'DIRECTORY'
  1325. ELSE
  1326. DO
  1327.   ADDRESS COMMAND 'list >'BytesTemp' "'aFile'" LFORMAT "%l"'
  1328.  
  1329.   IF RC>0 THEN RETURN "???"
  1330.  
  1331.   IF ~Open(fTMP,BytesTemp,'read') THEN CALL Err_ShowMessage(msg_no_r''BytesTemp)
  1332.   ELSE
  1333.   DO
  1334.     Bytes=VALUE(ReadLn(fTMP))
  1335.     StrBytes=Bytes' Bytes'
  1336.     r=Close(fTMP)
  1337.   END
  1338.  
  1339.   ADDRESS COMMAND 'delete >NIL: 'BytesTemp' QUIET'
  1340.   RETURN Bytes
  1341. END
  1342.  
  1343. /* ------------------------- */
  1344. ShowMessage:
  1345.  
  1346. PARSE ARG Mesg,ReqPath,ReqFile,PresetString,Parameter1,Parameter2,Parameter3,Parameter4,Parameter5,Parameter6
  1347.  
  1348. drop Action
  1349. ReqType=''
  1350.  
  1351. MsgFile='EASys!_rexx:'Language'/'Mesg
  1352. IF ~(Open(fTMP, MsgFile, 'read')) THEN CALL Err_ShowMessage
  1353. ELSE
  1354. DO
  1355.   ReqType=ReadLn(fTMP)  /* read Requester-Type */
  1356.  
  1357.   Line=ReadLn(fTMP)  /* read Title-Line */
  1358.   CALL Substitutions
  1359.   ReqTitle=Line
  1360.  
  1361.   Line=ReadLn(fTMP)  /* free line after Title */
  1362.  
  1363.   Message=''
  1364.  
  1365.   DO UNTIL EOF(fTMP)
  1366.  
  1367.     Line=ReadLn(fTMP)
  1368.     CALL Substitutions
  1369.  
  1370.     IF POS(">>>", Line) > 0 THEN
  1371.     DO
  1372.       rtBtns=STRIP(Line,'L','>')
  1373.       LEAVE
  1374.     END
  1375.     ELSE
  1376.         Message=Message''CR''Line
  1377.   END
  1378.  
  1379.   r=Close(fTMP)
  1380. END
  1381.  
  1382. uReqType=UPPER(ReqType)
  1383. pubname=getpubscreen()
  1384. IF ~(pubname='') THEN r=setpubscreen(pubname' Default')
  1385.  
  1386. SELECT
  1387.  WHEN (uReqType='MULTI REQUEST') THEN
  1388.  DO
  1389.   r=rtezrequest(Message,rtBtns,ReqTitle,PosTags)
  1390.   RETURN r
  1391.  END
  1392.  
  1393.  WHEN (uReqType='GET ONE FILE') THEN
  1394.  DO
  1395.   r=rtfilerequest(ReqPath,ReqFile,ReqTitle,rtBtns,ONEFILE_TAG, Files)
  1396.   RETURN r
  1397.  END
  1398.  
  1399.  WHEN (uReqType='GETFILES') THEN
  1400.  DO
  1401.   r=rtfilerequest(ReqPath,ReqFile,ReqTitle,rtBtns, FILE_TAGS, Files)
  1402.   RETURN r
  1403.  END
  1404.  
  1405.  WHEN (uReqType='GETPATH') THEN
  1406.  DO
  1407.   r=rtfilerequest(ReqPath,,ReqTitle,rtBtns, DIR_TAGS)
  1408.   RETURN r
  1409.  END
  1410.  
  1411.  WHEN (uReqType='GETSTRING') THEN
  1412.  DO
  1413.   r=rtgetstring(PresetString,Message,ReqTitle,rtBtns,GStags,Action)
  1414.   RETURN r
  1415.  END
  1416.  
  1417.  WHEN (uReqType='GETSTRING SIMPLE') THEN
  1418.  DO
  1419.   r=rtgetstring(PresetString,Message,ReqTitle,,GStags,Action)
  1420.   RETURN r
  1421.  END
  1422.  
  1423.  WHEN (uReqType='CONSOLE') THEN
  1424.  DO
  1425.   ShowConsole='CON:'ReqLE'/'ReqTE'/'ConW'/'ConH'/'ReqTitle'/NOCLOSE'
  1426.   IF ~(Open(Con,ShowConsole,'write')) THEN
  1427.   DO
  1428.       MsgFile=ThisConsole
  1429.       CALL Err_ShowMessage
  1430.       ConStat=0
  1431.   END
  1432.  
  1433.   ConStat=1
  1434.   r=WriteLn(Con,Message)
  1435.  
  1436.   RETURN 1
  1437.  END
  1438.  
  1439.  OTHERWISE CALL Err_ShowMessage  /* Error if arrived here */
  1440. END /* SELECT */
  1441.  
  1442. RETURN
  1443.  
  1444. /* ------------------------- */
  1445. Substitutions:
  1446.  
  1447. IF POS("%1", Line) > 0 THEN             /* substitution parameters for each message */
  1448. DO UNTIL POS("%1", Line)=0            /* and per line */
  1449.    parse var Line part1 '%1' part2
  1450.    Line=part1''parameter1''part2
  1451. END
  1452.  
  1453. IF POS("%2", Line) > 0 THEN
  1454. DO UNTIL POS("%2", Line)=0
  1455.    parse var Line part1 '%2' part2
  1456.    Line=part1''parameter2''part2
  1457. END
  1458.  
  1459. IF POS("%3", Line) > 0 THEN
  1460. DO UNTIL POS("%3", Line)=0
  1461.    parse var Line part1 '%3' part2
  1462.    Line=part1''parameter3''part2
  1463. END
  1464.  
  1465. IF POS("%4", Line) > 0 THEN
  1466. DO UNTIL POS("%4", Line)=0
  1467.    parse var Line part1 '%4' part2
  1468.    Line=part1''parameter4''part2
  1469. END
  1470.  
  1471. RETURN
  1472.  
  1473. /* ------------------------- */
  1474. mkReqFList:
  1475. PARSE ARG begincount
  1476. reqFList='   'Files.begincount'        'GetBytes(Files.begincount)' Bytes'
  1477.  
  1478. next=begincount+1
  1479. DO f=next to Files.count UNTIL f-begincount>7
  1480.    reqFList=reqFList CR'   'Files.f'        'GetBytes(Files.f)' Bytes'
  1481. END
  1482.  
  1483. IF Files.count>8 THEN reqFlist=reqFlist''CR'   'Path.1'...'
  1484. RETURN
  1485.  
  1486. /* ---------------------- */
  1487. MakeTab:
  1488. PARSE ARG pos,text,tabappend
  1489. numspace=pos-LENGTH(text)
  1490. DO space=1 TO numspace
  1491.  text=text' '
  1492. END
  1493. RETURN text''tabappend
  1494.  
  1495. /* ---------------------- */
  1496. MoveArc:
  1497. PARSE ARG TheFile,copyFlag
  1498.  
  1499. ADDRESS COMMAND 'setenv Flags/ActualPathDest "'TestPath(MyGetENV('Flags/ActualMoveArc'))'"'
  1500.  
  1501. IF (copyFlag='copy') THEN ADDRESS COMMAND '${RefTable/File-CopyServer} "'TheFile'"'
  1502. ELSE ADDRESS COMMAND '${RefTable/File-MoveServer} "'TheFile'"'
  1503.  
  1504. ADDRESS COMMAND 'setenv Flags/ActualMoveArc "${Flags/ActualPathDest}"'
  1505.  
  1506. RETURN
  1507. /* ---------------------- */
  1508. Err_ShowMessage:
  1509.  
  1510.  Message=AppName':' CR CR "Sorry, an error has occured:" CR CR "    "MsgFile CR CR "... exiting."
  1511.  rtBtns='Oh no!'
  1512.  Action=rtezrequest(Message,rtBtns,ReqTitle,PosTags)
  1513.  CALL ExitMe
  1514.  
  1515. RETURN
  1516. /* ---------------------- */
  1517. PlaySample:
  1518. PARSE ARG Sample
  1519.  
  1520. IF (TalkToUser="0") THEN RETURN
  1521.  
  1522. IF EXISTS('ENV:ProcessTalk') THEN
  1523. DO
  1524.   ProcessTalk=Strip(SubWord(MyGetENV("ProcessTalk"),2),'T',']')
  1525.  
  1526.   ADDRESS COMMAND 'status >ENV:VoiceSTATUS PROCESS 'ProcessTalk
  1527.   VStatus=MyGetENV('VoiceSTATUS')
  1528.  
  1529.   IF POS(Play_Voice_Cmd,VStatus)>0 THEN ADDRESS COMMAND 'break' ProcessTalk 'c'
  1530. END
  1531.  
  1532. ADDRESS COMMAND Play_Voice Sample
  1533.  
  1534. RETURN
  1535. /* ---------------------- */
  1536. MyGetENV:     PROCEDURE
  1537. PARSE ARG name
  1538.  
  1539. TheFile="ENV:"name
  1540. IF (Open(fTMP, TheFile, 'read')) THEN
  1541. DO
  1542.   ENVvalue=ReadLn(fTMP)
  1543.   r=Close(fTMP)
  1544. END
  1545. ELSE
  1546.   ENVvalue=''
  1547.  
  1548. RETURN ENVvalue
  1549. /* ---------------------- */
  1550. TestPath:
  1551. PARSE ARG tstpath
  1552.  
  1553. Drive=LEFT(tstpath,POS(':',tstpath))
  1554. ADDRESS COMMAND 'assign >NIL: "'ConvSpecial(Drive)'" EXISTS'
  1555.  
  1556. IF RC>0 | tstpath='' THEN tstpath="SYS:"
  1557. ELSE IF ~EXISTS(tstpath) THEN tstpath="SYS:"
  1558.  
  1559. RETURN tstpath
  1560.  
  1561. /* ------------------------- */
  1562. ConvSpecial:
  1563. PARSE ARG File
  1564.  
  1565. posi=POS('~',File)
  1566. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1567.  
  1568. posi=POS('(',File)
  1569. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1570.  
  1571. posi=POS(')',File)
  1572. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1573.  
  1574. posi=POS('[',File)
  1575. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1576.  
  1577. posi=POS(']',File)
  1578. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1579.  
  1580. posi=POS('{',File)
  1581. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1582.  
  1583. posi=POS('}',File)
  1584. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1585.  
  1586. posi=POS('+',File)
  1587. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1588.  
  1589. posi=POS('#',File)
  1590. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1591.  
  1592. posi=POS('?',File)
  1593. IF posi>0 THEN File=INSERT("'",File,posi-1)
  1594.  
  1595. RETURN File
  1596.  
  1597. /* ---------------------- */
  1598. UpdateWB:
  1599. PARSE ARG wbpath,selicon
  1600.  
  1601. IF WB_port=1 THEN
  1602. DO
  1603.  /* >= OS3.5 */
  1604.  ADDRESS WORKBENCH
  1605.  WINDOWTOFRONT wbPath
  1606.  
  1607.  IF WORKBENCH.LASTERROR=205 THEN
  1608.  DO
  1609.   ADDRESS WORKBENCH
  1610.   WINDOW wbPath OPEN
  1611.  END
  1612.  ELSE
  1613.  DO
  1614.   ADDRESS WORKBENCH
  1615.   MENU WINDOW wbPath INVOKE WINDOW.UPDATE
  1616.  END
  1617.  
  1618.  ADDRESS WORKBENCH
  1619.  MENU WINDOW wbPath INVOKE WINDOW.SHOW.ALLFILES
  1620. /* MENU WINDOW wbPath INVOKE WINDOW.VIEWBY.NAME */
  1621.  
  1622.  IF ~(selicon='' | selicon='SELICON') THEN
  1623.  DO
  1624.   ADDRESS WORKBENCH
  1625.   ICON WINDOW wbPath NAMES selicon SELECT
  1626.  END
  1627. END
  1628. RETURN
  1629.  
  1630.  
  1631. /* ---------------------- */
  1632. Init:
  1633.  
  1634. AppName='© EASys!) CM'
  1635. FileReq='ArchiveManager.2'
  1636. CR='0a'x
  1637.  
  1638. Language=GetClip('Language')
  1639. IF ~EXISTS('EASys!_rexx:'Language'/ArchiveManager.1') THEN Language='english'
  1640.  
  1641. ProcessNumber=PRAGMA('ID')
  1642.  
  1643. IF SHOW('P','WORKBENCH') THEN WB_port=1
  1644.  
  1645. CALL FORBID
  1646.  
  1647. MaxTitleChars=MyGetENV("RefTable/GUI-ShellTitleChars")
  1648.  
  1649. ConsoleType=MyGetENV("RefTable/GUI-ConsoleType")
  1650. IF (ConsoleType="") THEN ConsoleType="CON:"
  1651.  
  1652. ConsoleSize=MyGetENV("SHELLsize")
  1653. IF (ConsoleSize="") THEN ConsoleSize="40/50/600/200"
  1654.  
  1655. ReqLE=MyGetENV("RefTable/GUI-ReqLE")  /* Main Window */
  1656. ReqTE=MyGetENV("RefTable/GUI-ReqTE")
  1657. ReqHeight=MyGetENV("RefTable/GUI-ReqHeight")
  1658.  
  1659. PosTags="rt_reqpos=reqpos_topleftscr rt_leftoffset=" ReqLE " rt_topoffset=" ReqTE
  1660. EZtags=PosTags
  1661. GLtags=PosTags"rtgl_min=0 rtgl_max=1500 rtgl_backfill=true "
  1662. GStags=PosTags" rtgs_backfill=false rtgs_width=300"
  1663.  
  1664. POINTER_TAGS="rt_reqpos=reqpos_pointer"
  1665. DIR_TAGS=PosTags" rtfi_flags=freqf_nofiles|freqf_save rtfi_height=" ReqHeight
  1666. FILE_TAGS=PosTags" rtfi_flags=freqf_multiselect|freqf_selectdirs rtfi_height=" ReqHeight
  1667.  
  1668. Console='>"'ConsoleType''ConsoleSize'/'AppName' Messages.../AUTO/NOCLOSE/ALT'ReqLE'/'ReqTE'/500/40"'
  1669.  
  1670. /* --------- pathes -------- */
  1671. r=PRAGMA('DIRECTORY', 'T:')
  1672. TempPath='CM-path_'ProcessNumber
  1673.  
  1674. ArcListFile='T:CM_List_'ProcessNumber
  1675. FileList='T:CM_FileList_'ProcessNumber
  1676. AttrSourceFile='T:CM_Attr'ProcessNumber
  1677. tmpFile='T:CM_TMP'ProcessNumber
  1678.  
  1679. ADDRESS COMMAND 'delete >NIL: 'ArcListFile' FORCE QUIET'
  1680.  
  1681. /* ----------- Voice -------- */
  1682. TalkToUser=MyGetENV("Flags/TalkToUser")
  1683. Play_Voice_Cmd=SubWord(MyGetENV('RefTable/Sound-voice'),1,1)
  1684. Play_Voice='run >ENV:ProcessTalk ${RefTable/Sound-voice}'
  1685. SampleDir='EASys!:Voice/'Language'/'
  1686.  
  1687. SampleAction=SampleDir'ArchiveManagerAction.8SVX'
  1688. SampleChooseFiles=SampleDir'ArchiveManagerFile.8SVX'
  1689. SampleShowContents=SampleDir'ArchiveManagerContents.8SVX'
  1690. SampleStartup=SampleDir'ArchiveManagerStartup.8SVX'
  1691. SampleUnpack=SampleDir'ArchiveManagerUnpack.8SVX'
  1692. SampleUnpackTo=SampleDir'ArchiveManagerUnpackTo.8SVX'
  1693.  
  1694. /*-----specials-----*/
  1695.  
  1696. Parameter1=AppName
  1697.  
  1698. ActualPath=MyGetENV("Flags/ActualPath")
  1699. ActualPathArc=MyGetENV("Flags/ActualPathArc")
  1700. ActualPathUnArc=MyGetENV("Flags/ActualPathUnArc")
  1701.  
  1702. ActualPathDest=MyGetENV("Flags/ActualPathDest")
  1703. ActualMoveArc=MyGetENV("Flags/ActualMoveArc")
  1704.  
  1705. /* Packing methods and Request Buttons */
  1706.  
  1707. lha=1
  1708. lzh=2
  1709. zip=3
  1710. xpk=4
  1711. tar=5
  1712. help=6
  1713. end=0
  1714.  
  1715. RETURN
  1716.  
  1717. /* ---------------------- */
  1718. ExitMe:
  1719.  
  1720. IF EXISTS('ENV:ProcessTalk') THEN ADDRESS COMMAND 'delete >NIL: ENV:ProcessTalk quiet'
  1721. IF EXISTS('ENV:VoiceSTATUS') THEN ADDRESS COMMAND 'delete >NIL: ENV:VoiceSTATUS quiet'
  1722. IF EXISTS(FileList) THEN ADDRESS COMMAND 'delete >NIL: 'FileList' QUIET'
  1723.  
  1724. IF EasyMail=1 THEN
  1725. DO
  1726.  IF QuitEasy=0 THEN CALL ShowMessage('EasySave.1',,,,AppName,'EasyMail')
  1727.  ADDRESS COMMAND 'delete >NIL: AS_EasyMail:#? FORCE ALL QUIET'
  1728.  
  1729.  CALL DELAY(300) /* needed so that notification is without effect */
  1730.  CALL SetClip('EasyMail',0)
  1731.  EXIT 0
  1732. END
  1733.  
  1734. IF EasyArc=1 THEN
  1735. DO
  1736.  ADDRESS COMMAND 'delete >NIL: AS_EasyArc:#? FORCE ALL QUIET'
  1737.  
  1738.  CALL DELAY(300)
  1739.  CALL SetClip('EasyArc',0)
  1740.  EXIT 0
  1741. END
  1742.  
  1743. IF ~(Files.1='' | "FILES.1"=Files.1) THEN
  1744. DO
  1745.  ADDRESS COMMAND 'assign >NIL: Profile: EXISTS'
  1746.  IF RC=0 THEN 
  1747.  DO
  1748.   ADDRESS COMMAND 
  1749.   'copy ENV:Flags/ActualPath Profile:ENV/Flags CLONE'
  1750.   'copy ENV:Flags/ActualPathArc Profile:ENV/Flags CLONE QUIET'
  1751.   'copy ENV:Flags/ActualPathUnArc Profile:ENV/Flags CLONE QUIET'
  1752.   'copy ENV:Flags/ActualMoveArc Profile:ENV/Flags CLONE QUIET'
  1753.  END
  1754.  ELSE 
  1755.  DO
  1756.   ADDRESS COMMAND 
  1757.   'copy ENV:Flags/ActualPath EASys!:Flags CLONE'
  1758.   'copy ENV:Flags/ActualPathArc EASys!:Flags CLONE QUIET'
  1759.   'copy ENV:Flags/ActualPathUnArc EASys!:Flags CLONE QUIET'
  1760.   'copy ENV:Flags/ActualMoveArc EASys!:Flags CLONE QUIET'
  1761.  END
  1762. END
  1763.  
  1764. r=setpubscreen('Workbench Default')
  1765. EXIT 0
  1766.  
  1767.