home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: cstrings.icn
- #
- # Subject: Program to print strings in C files
- #
- # Author: Robert J. Alexander
- #
- # Date: September 17, 1990
- #
- ###########################################################################
- #
- # Program to print all strings (enclosed in double quotes) in C source
- # files.
- #
-
- procedure main(arg)
- local c,f,fn,line,lineNbr,s
- if *arg = 0 then stop("Usage: cstrings file...")
- every fn := !arg do {
- f := open(fn) | stop("Can't open \"",fn,"\"")
- lineNbr := 0
- while line := read(f) do line ? {
- lineNbr +:= 1
- while tab(upto('/"\'')) do {
- case move(1) of {
- #
- # Comment -- handled because it could contain something that
- # looks like a string.
- #
- "/": {
- if ="*" then {
- while not tab(find("*/") + 2) do {
- &subject := read(f) | stop("Unexpected EOF in comment")
- lineNbr +:= 1
- }
- }
- }
- #
- # String
- #
- "\"": {
- s := "\""
- while s ||:= tab(upto('"\\')) do {
- s ||:= c := move(1)
- case c of {
- "\\": {
- if not (s ||:= move(1)) then {
- s[-1] := ""
- &subject := read(f) |
- stop("Unexpected EOF in string")
- lineNbr +:= 1
- }
- }
- "\"": {
- break
- }
- }
- }
- write("+",lineNbr," ",fn," ",s)
- }
- #
- # Character constant -- handled because it might contain
- # a double quote, which could be mistaken for the start
- # of a string.
- #
- "'": {
- while tab(upto('\'\\')) do {
- c := move(1)
- case c of {
- "\\": {
- if not move(1) then {
- &subject := read(f) |
- stop("Unexpected EOF in character constant")
- lineNbr +:= 1
- }
- }
- "'": {
- break
- }
- }
- }
- }
- }
- }
- }
- close(f)
- }
- end
-