home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
findstr.icn
< prev
next >
Wrap
Text File
|
2002-03-26
|
2KB
|
79 lines
############################################################################
#
# File: findstr.icn
#
# Subject: Program to find embedded character strings
#
# Author: Robert J. Alexander
#
# Date: March 26, 2002
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# Utility filter to list character strings embedded in data files (e.g.
# object files).
#
# findstr -options file...
#
# -l length minimum string size to be printed (default 3)
# -c chars a string of characters (besides the standard ASCII
# printable characters) to be considered part of a
# string
#
# Icon string escape sequences can be used to specify the -c option.
#
# Multiple files can be specified as arguments, and will be processed
# in sequence.
#
link options,escape
procedure main(arg)
local c, f, fn, header, min_string_size, okchars, opt, s, istring
#
# Process command line options and file names.
#
opt := options(arg,"l+c:")
if *arg = 0 then stop("Usage: findstr -options file..._
\n_
\n-l length\tminimum string size to be printed (default 3)_
\n-c chars\ta string of characters (besides the standard ASCII_
\n\t\tprintable characters) to be considered part of a string_
\n")
#
# Define minimum string size to print.
#
min_string_size := \opt["l"] | 3 # default min string size = 3
#
# Define characters that can be in strings.
#
okchars := cset(&ascii[33:-1]) # normal ASCII printable characters
okchars ++:= istring(\opt["c"]) # additional chars supplied by user
#
# Loop to process files.
#
every fn := !arg do {
f := open(fn,"u") | stop("Can't open input file \"",fn,"\"")
#
# Now find and print the strings.
#
header := if *arg > 1 then fn || ": " else ""
s := ""
while c := reads(f) do {
if any(okchars,c) then s ||:= c
else {
if *s >= min_string_size then write(header,image(s))
s := ""
}
}
#
# Close this file.
#
close(f)
}
end