aboutsummaryrefslogtreecommitdiff
path: root/sys/fio/glongline.x
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fio/glongline.x')
-rw-r--r--sys/fio/glongline.x73
1 files changed, 73 insertions, 0 deletions
diff --git a/sys/fio/glongline.x b/sys/fio/glongline.x
new file mode 100644
index 00000000..6350cb3e
--- /dev/null
+++ b/sys/fio/glongline.x
@@ -0,0 +1,73 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+# GETLONGLINE -- Get a long line, i.e., a logical line possibly spanning
+# several physical lines with the newlines escaped at the ends. Skip
+# comment lines and .help sections. Blank lines are not skipped.
+# Lines not terminated by newlines are joined to form a longer line.
+# MAXCH must be at least SZ_LINE characters greater than the size of the
+# longest line to be read.
+
+int procedure getlongline (fd, obuf, maxch, linenum)
+
+int fd #I input file
+char obuf[ARB] #O output buffer
+int maxch #I max chars out
+int linenum #U line number counter
+
+int op, status
+int getline(), strncmp()
+errchk getline
+
+begin
+ op = 1
+
+ while (maxch - op + 1 >= SZ_LINE) {
+ # Get next non-comment line.
+ repeat {
+ status = getline (fd, obuf[op])
+ if (status > 0 && obuf[op+status-1] == '\n')
+ linenum = linenum + 1
+
+ if (status == EOF) {
+ break
+ } else if (obuf[op] == '#') {
+ next
+ } else if (obuf[op] == '.') {
+ # Skip help sections.
+ if (strncmp (obuf[op], ".help", 5) == 0) {
+ repeat {
+ status = getline (fd, obuf[op])
+ linenum = linenum + 1
+ if (status == EOF)
+ break
+ if (strncmp (obuf[op], ".endhelp", 8) == 0)
+ break
+ }
+ } else
+ break
+ } else
+ break
+ }
+
+ if (status == EOF) {
+ if (op == 1)
+ return (EOF)
+ else
+ return (op - 1)
+ } else
+ op = op + status
+
+ # If the last physical line read ends in a newline we are done,
+ # unless the newline is escaped. If there is no newline we get
+ # another line, thereby reconstructing long lines broken by the
+ # SZ_LINE limit of getline().
+
+ if (obuf[op-1] == '\n')
+ if (obuf[op-2] == '\\')
+ op = op - 2
+ else
+ break
+ }
+
+ return (op - 1)
+end