zgrepapi.cmd
上传用户:andy_li
上传日期:2007-01-06
资源大小:1019k
文件大小:2k
源码类别:

压缩解压

开发平台:

MultiPlatform

  1. /*---------------------------------------------------------------------------
  2.    zapigrep.cmd  (ye olde REXX procedure for OS/2)
  3.    Script to search members of a zipfile for a string and print the names of
  4.    any such members (and, optionally, the matching text).
  5.    This is the zipgrep.cmd program completely rewritten to take advantage
  6.    of the REXX API.  Among the improvements are:
  7.         egrep no longer needed.  All work done by API and this script.
  8. Added option switches.
  9.    Be aware, however, that this script does not support regular expressions
  10.    as zipgrep does.
  11.   ---------------------------------------------------------------------------*/
  12. PARSE ARG args
  13. nocase = 0
  14. word = 0
  15. text = 0
  16. DO WHILE Left(args,1) == '-' | Left(args,1) == '/'
  17.    PARSE VAR args option args
  18.    option = Translate(SubStr(option,2))
  19.    DO WHILE option = ''
  20.       oneopt = Left(option,1)
  21.       option = SubStr(option,2)
  22.       SELECT
  23.        WHEN oneopt == 'W' THEN
  24.   word = 1
  25.        WHEN oneopt == 'I' THEN
  26.   nocase = 1
  27.        WHEN oneopt == 'T' THEN
  28.   text = 1
  29.        OTHERWISE NOP
  30.       END
  31.    END
  32. END
  33. PARSE VAR args string zipfile members
  34. IF (string == '') THEN DO
  35.    SAY 'usage:  zipgrep [-i][-t][-w] search_string zipfile [members...]'
  36.    SAY '   Displays the names of zipfile members containing a given string.'
  37.    SAY '   By default it displays filenames only of members containing an'
  38.    SAY '   exact match of the string.  Options are:'"0a"x
  39.    SAY ' -i  Ignore case'
  40.    SAY ' -t  Display matching lines'
  41.    SAY ' -w  Match words only'
  42.    EXIT 1
  43. END
  44. string = Strip(string,'b','"')
  45. IF nocase THEN string = Translate(string)
  46. CALL RxFuncAdd 'UZLoadFuncs', 'UNZIP32', 'UZLoadFuncs'
  47. CALL UZLoadFuncs
  48. CALL UZUnZipToStem zipfile, 'file.', members
  49. DO i = 1 TO file.0
  50.    ptr = file.i
  51.    file = file.ptr
  52.    IF nocase THEN file = Translate(file)
  53.    IF word THEN DO
  54.       wp = WordPos(string,file)
  55.       IF wp>0 THEN
  56.  scan = WordIndex(file,wp)
  57.       ELSE
  58.          scan = 0
  59.    END
  60.    ELSE
  61.       scan = Pos(string,file)
  62.    IF scan = 0 THEN DO
  63.       SAY file.i':'
  64.       IF text THEN DO
  65.  DO WHILE scan > 0
  66.     from = LastPos('0a'x,file,scan)+1
  67.     to = Pos('0a'x,file,scan)
  68.     IF to = 0 THEN to = Length(file.ptr)
  69.     oneline = Strip(SubStr(file.ptr,from,to-from),'T','0a'x)
  70.     SAY Strip(oneline,'T','0d'x)
  71.     IF word THEN DO
  72.        wp = WordPos(string,file,wp+1)
  73.        IF wp>0 THEN
  74.   scan = WordIndex(file,wp)
  75.        ELSE
  76.           scan = 0
  77.     END
  78.     ELSE
  79.        scan = Pos(string,file,scan+1)
  80.  END
  81.       END
  82.    END
  83. END
  84. EXIT 0