home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 164.lha / ARexx / Example_ARexx / zooall.rexx < prev    next >
OS/2 REXX Batch file  |  1988-04-28  |  4KB  |  129 lines

  1.  /* zooAll.rexx -  an ARexx program that will ZOO all files within a
  2.                   directory, including subdirectories. It will
  3.                   generate a standard AmigaDOS script file, where
  4.           necessary, that will be included in the .ZOO file. This
  5.           script file, when executed, recreates the original file
  6.           structure, creating any necessary subdirectories.
  7.                    The resultant .ZOO file is given the same NAME of its
  8.           SOURCE directory.
  9.  
  10.     USAGE: rx zooall device:[directory] [device:[directory]] [d]
  11.                          arg1               arg2           arg3*
  12.         where arg1 is the source, 
  13.                and its device the default destination
  14.               arg2 is an optional destination
  15.                arg3 if 'd', deletes the source directory
  16.  
  17.         *arg2 must be in place for arg3 to function
  18.  
  19.              zooAll is based on 'arcall.rexx' By Larry Phillips. 
  20.           zooAll By Dave Wilson, CIS  
  21.  
  22.              Use this code in whatever way you like.
  23.  */
  24.  
  25. parse arg root dest action
  26.  
  27. if words(root) = 0 then root = pragma('d')
  28. if right(root,1) ~= ':' then root = root || '/'
  29. if dest = ':' then dest = ''
  30.  
  31. if right(root,1) = ':' then device = root
  32. else device = delstr(root,pos(':',root)+1)
  33. if words(dest) = 0 then dest = device
  34.  
  35. directory = delstr(strip(root,'T','/'),1,3)
  36.  
  37. if root ~= device then do
  38.     begin = lastpos('/',strip(directory,'L',':'))
  39.     dir = delstr(strip(directory,'L',':'),1,begin)
  40.     source = root
  41.     end
  42. else do 
  43.     dir = 'zoofile.zoo'
  44.     source = root || '*'
  45.     end
  46.  
  47. contents = showdir(root)
  48. do i = 1 to words(contents)
  49.     temp = root || word(contents,i)
  50.     type = statef(temp)
  51.     if word(type,1) = 'DIR' then leave
  52.     if i = words(contents) then do
  53.     address command 'zoo aP' dest || dir source
  54.     if action = 'd' then do
  55.            address command delete strip(root,'T','/') ALL
  56.            end
  57.     exit 0
  58.         end 
  59.     end
  60.  
  61.  
  62. if ~exists(root || 'exec.me') then
  63.   do
  64.    dummy = open(execfile,root || 'Exec.me','write')
  65.    call writeln(execfile,'echo "You may delete the file called EXEC.ME when the prompt comes back."')
  66.    call writeln(execfile,'')
  67.    call writeln(execfile,'if NOT EXISTS' directory)
  68.    call writeln(execfile,'  makedir' directory)
  69.    call writeln(execfile,'endif')
  70.   end
  71. else
  72.   do
  73.    dummy = open(execfile,root || 'Execute.me','write')
  74.    call writeln(execfile,'echo "WARNING:"')
  75.    call writeln(execfile,'echo "This archive contains a file called EXEC.ME"')
  76.    call writeln(execfile,'echo "You will probably need to execute it after this script ends."')
  77.    call writeln(execfile,'echo "You can delete EXECUTE.ME when the prompt comes back."')
  78.    call writeln(execfile,'')
  79.    call writeln(execfile,'if NOT EXISTS' directory)
  80.    call writeln(execfile,'  makedir' directory)
  81.    call writeln(execfile,'endif')
  82.   end
  83.  
  84. call writeln(execfile,'')
  85.  
  86. call renamefiles(root)
  87.  
  88. say
  89. call close(execfile)
  90. address command 'zoo aP' dest || dir source
  91. if action = 'd' then do
  92.    address command delete strip(root,'T','/') ALL
  93.    end
  94. exit 0
  95.  
  96.  
  97. renamefiles: procedure expose root directory subDir
  98.   parse arg x
  99.   contents = showdir(x);
  100.   do i = 1 to words(contents)
  101.     temp = x || word(contents,i)
  102.     temp2 = delstr(temp,1,3)
  103.     type = statef(temp)
  104.     select
  105.       when word(type,1) = 'DIR' then do
  106.     subDir = word(contents,i)
  107.     call writeln(execfile,'')
  108.         call writeln(execfile,'if NOT EXISTS' temp2)
  109.         call writeln(execfile,'  makedir' temp2)
  110.         call writeln(execfile,'endif')
  111.         call writeln(execfile,'')
  112.         call renamefiles(temp || '/')
  113.     end
  114.       when word(type,1) = 'FILE' then do
  115.     if subDir = 'SUBDIR' then subDir = strip(directory,'L',':')
  116.         call writeln(execfile,'rename ' subDir || '_' || word(contents,i) temp2)
  117.         address command rename temp root || subDir || '_' || word(contents,i)
  118.         call writech(stdout,'.')
  119.         end
  120.       otherwise do
  121.         if right(translate(temp),7) = 'EXEC.ME' then break
  122.         if right(translate(temp),10) = 'EXECUTE.ME' then break
  123.         else say 'Error: File' temp 'is neither DIR nor FILE.'
  124.       end
  125.     end
  126.   end
  127.   call writeln(execfile,'')
  128. return 0
  129.