home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rexxlb.zip / SAMPLES / FINDEA.CMD < prev    next >
OS/2 REXX Batch file  |  1993-02-04  |  2KB  |  75 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /* FINDEA: traverse tree of directories, starting at specified directory,    */
  4. /* searching for all files that have extended attributes.                    */
  5. /*                                                                           */
  6. /* Requires Personal REXX or REXXLIB (dosdrive, doscd, dosdir, dosdirpos,    */
  7. /* doseasize, upper, parsefn functions).                                     */
  8. /*                                                                           */
  9. /* Command format: FINDEA <directory>                                        */
  10. /*                                                                           */
  11. /*****************************************************************************/
  12.  
  13. parse arg directory
  14.  
  15. parse value parsedname(directory) with drive ',' path ',' fileid
  16. if drive = '' then
  17.     drive = dosdrive()
  18. if path = '' then do
  19.     path = doscd(drive)
  20.     end
  21. if path \= '\' then
  22.     path = path'\'
  23. if fileid = '' then
  24.     fileid = '*.*'
  25.  
  26. call listea drive':'path, fileid
  27. exit
  28.  
  29. /* recursive procedure to find files in a directory with extended attrs */
  30. listea: procedure
  31. parse arg directory, fileid
  32. name = dosdir(directory||fileid, 'n')
  33. do while name \= ''
  34.     i = doseasize(directory||name);
  35.     if i > 0 then do
  36.         say directory||name 'has' i 'bytes of extended attributes.'
  37.         j = dosealist(directory||name, 'foo')
  38.         if j <= 0 then
  39.             say 'Error reading EAs'
  40.         else
  41.             say '   There are' j 'EAs'
  42.         end
  43.     name = dosdir(, 'n')
  44.     end
  45.  
  46. name = dosdir(directory'*.*','n','d','d')
  47. do while name \= ''
  48.     position = dosdirpos()
  49.     if name \= '.' & name \= '..' then
  50.         call listea directory||name'\', fileid
  51.     name = dosdir(,'n','d','d',position)
  52.     end
  53. return
  54.  
  55. /* parse a file identifier */
  56. parsedname: procedure
  57. x = upper(arg(1))
  58. parsed = parsefn(x)
  59. if parsed = '' then
  60.     parsed = '- - - -'
  61. parse var parsed drive path fn ft
  62. if drive = '-' then
  63.     drive = dosdrive()
  64. if path = '-' then
  65.     path = doscd(drive)
  66. if right(path,1) \= '\' then
  67.     path = path'\'
  68. if fn = '-' then
  69.     fileid = '*.*'
  70. else if ft = '-' then
  71.     fileid = fn
  72. else
  73.     fileid = fn'.'ft
  74. return drive','path','fileid
  75.