which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Batchfile
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Batchfile
		
	
	
		
			Executable File
		
	
	
	
	
/*---------------------------------------------------------------------------
 | 
						|
 | 
						|
   zapigrep.cmd  (ye olde REXX procedure for OS/2)
 | 
						|
 | 
						|
   Script to search members of a zipfile for a string and print the names of
 | 
						|
   any such members (and, optionally, the matching text).
 | 
						|
 | 
						|
   This is the zipgrep.cmd program completely rewritten to take advantage
 | 
						|
   of the REXX API.  Among the improvements are:
 | 
						|
        egrep no longer needed.  All work done by API and this script.
 | 
						|
	Added option switches.
 | 
						|
 | 
						|
   Be aware, however, that this script does not support regular expressions
 | 
						|
   as zipgrep does.
 | 
						|
 | 
						|
  ---------------------------------------------------------------------------*/
 | 
						|
 | 
						|
PARSE ARG args
 | 
						|
 | 
						|
nocase = 0
 | 
						|
word = 0
 | 
						|
text = 0
 | 
						|
 | 
						|
DO WHILE Left(args,1) == '-' | Left(args,1) == '/'
 | 
						|
   PARSE VAR args option args
 | 
						|
   option = Translate(SubStr(option,2))
 | 
						|
   DO WHILE option \= ''
 | 
						|
      oneopt = Left(option,1)
 | 
						|
      option = SubStr(option,2)
 | 
						|
      SELECT
 | 
						|
       WHEN oneopt == 'W' THEN
 | 
						|
	  word = 1
 | 
						|
       WHEN oneopt == 'I' THEN
 | 
						|
	  nocase = 1
 | 
						|
       WHEN oneopt == 'T' THEN
 | 
						|
	  text = 1
 | 
						|
       OTHERWISE NOP
 | 
						|
      END
 | 
						|
   END
 | 
						|
END
 | 
						|
 | 
						|
PARSE VAR args string zipfile members
 | 
						|
 | 
						|
IF (string == '') THEN DO
 | 
						|
   SAY 'usage:  zipgrep [-i][-t][-w] search_string zipfile [members...]'
 | 
						|
   SAY '   Displays the names of zipfile members containing a given string.'
 | 
						|
   SAY '   By default it displays filenames only of members containing an'
 | 
						|
   SAY '   exact match of the string.  Options are:'"0a"x
 | 
						|
   SAY '	-i  Ignore case'
 | 
						|
   SAY '	-t  Display matching lines'
 | 
						|
   SAY '	-w  Match words only'
 | 
						|
   EXIT 1
 | 
						|
END
 | 
						|
string = Strip(string,'b','"')
 | 
						|
IF nocase THEN string = Translate(string)
 | 
						|
 | 
						|
CALL RxFuncAdd 'UZLoadFuncs', 'UNZIP32', 'UZLoadFuncs'
 | 
						|
CALL UZLoadFuncs
 | 
						|
 | 
						|
CALL UZUnZipToStem zipfile, 'file.', members
 | 
						|
 | 
						|
DO i = 1 TO file.0
 | 
						|
   ptr = file.i
 | 
						|
   file = file.ptr
 | 
						|
   IF nocase THEN file = Translate(file)
 | 
						|
   IF word THEN DO
 | 
						|
      wp = WordPos(string,file)
 | 
						|
      IF wp>0 THEN
 | 
						|
	 scan = WordIndex(file,wp)
 | 
						|
      ELSE
 | 
						|
         scan = 0
 | 
						|
   END
 | 
						|
   ELSE
 | 
						|
      scan = Pos(string,file)
 | 
						|
   IF scan \= 0 THEN DO
 | 
						|
      SAY file.i':'
 | 
						|
      IF text THEN DO
 | 
						|
	 DO WHILE scan > 0
 | 
						|
	    from = LastPos('0a'x,file,scan)+1
 | 
						|
	    to = Pos('0a'x,file,scan)
 | 
						|
	    IF to = 0 THEN to = Length(file.ptr)
 | 
						|
	    oneline = Strip(SubStr(file.ptr,from,to-from),'T','0a'x)
 | 
						|
	    SAY Strip(oneline,'T','0d'x)
 | 
						|
	    IF word THEN DO
 | 
						|
	       wp = WordPos(string,file,wp+1)
 | 
						|
	       IF wp>0 THEN
 | 
						|
		  scan = WordIndex(file,wp)
 | 
						|
	       ELSE
 | 
						|
	       	  scan = 0
 | 
						|
	    END
 | 
						|
	    ELSE
 | 
						|
	       scan = Pos(string,file,scan+1)
 | 
						|
	 END
 | 
						|
      END
 | 
						|
   END
 | 
						|
END
 | 
						|
 | 
						|
EXIT 0
 |