The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*---------------------------------------------------------------------------

   zipgrep.cmd  (ye olde REXX procedure for OS/2)

   Script to search members of a zipfile for a string or regular expression
   and print the names of any such members (and, optionally, the matching
   text).  The search is case-insensitive by default.

   History:
     original Bourne shell version by Jean-loup Gailly
     modified by Greg Roelofs for Ultrix (no egrep -i) and zipinfo -1
     OS/2 REXX script by Greg Roelofs

   Last modified:  19 Jul 93

  ---------------------------------------------------------------------------*/

PARSE ARG string zipfile members

if (string == '') then do
    say 'usage:  zipgrep search_string zipfile [members...]'
    say '   Displays the names of zipfile members containing a given string,'
    say '   in addition to the matching text.  This procedure requires unzip'
    say '   and egrep in the current path, and it is quite slow....'
    exit 1
end

/* doesn't seem to work...
newq = RXQUEUE("Create",zipgrep_pipe)
oldq = RXQUEUE("Set",newq)
 */

/* flush the queue before starting */
do QUEUED()
    PULL junk
end

/* GRR:  can also add "2>&1" before pipe in following external command */
'@unzip -Z1' zipfile members '| rxqueue'

do while QUEUED() > 0
    PARSE PULL file
    '@unzip -p' zipfile file '| egrep -is' string
    if rc == 0 then do
        SAY file':'
        /* can comment out following line if just want filenames */
        '@unzip -p' zipfile file '| egrep -i' string
    end
end

/*
call RXQUEUE "Delete",newq
call RXQUEUE "Set",oldq
 */

exit 0