summaryrefslogtreecommitdiff
path: root/ipl/progs/cstrings.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/cstrings.icn')
-rw-r--r--ipl/progs/cstrings.icn93
1 files changed, 93 insertions, 0 deletions
diff --git a/ipl/progs/cstrings.icn b/ipl/progs/cstrings.icn
new file mode 100644
index 0000000..56d62ca
--- /dev/null
+++ b/ipl/progs/cstrings.icn
@@ -0,0 +1,93 @@
+############################################################################
+#
+# File: cstrings.icn
+#
+# Subject: Program to print strings in C files
+#
+# Author: Robert J. Alexander
+#
+# Date: September 17, 1990
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# 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