summaryrefslogtreecommitdiff
path: root/ipl/progs/nocr.icn
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
commit6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1 (patch)
tree926065cf45450116098db664e3c61dced9e1f21a /ipl/progs/nocr.icn
downloadicon-6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1.tar.gz
Initial upstream version 9.4.3upstream/9.4.3
Diffstat (limited to 'ipl/progs/nocr.icn')
-rw-r--r--ipl/progs/nocr.icn135
1 files changed, 135 insertions, 0 deletions
diff --git a/ipl/progs/nocr.icn b/ipl/progs/nocr.icn
new file mode 100644
index 0000000..cde499b
--- /dev/null
+++ b/ipl/progs/nocr.icn
@@ -0,0 +1,135 @@
+############################################################################
+#
+# File: nocr.icn
+#
+# Subject: Program to convert MS-DOS text files to UNIX
+#
+# Author: Richard L. Goerwitz
+#
+# Date: December 30, 1991
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Version: 1.4
+#
+############################################################################
+#
+# This program simply converts \r\n to \n in each line of each of the
+# files supplied as command-line arguments, thereby effecting conversion
+# of MS-DOS format text files to the corresponding UNIX format.
+#
+# usage: nocr file1 [file2 [etc.]]
+#
+# No check done to see whether the file is in fact a text file.
+#
+############################################################################
+#
+# Requires: UNIX or MS-DOS
+#
+# See also: yescr.icn
+#
+############################################################################
+
+procedure main(a)
+
+ local fname, infile, outfile, line, temp_name
+
+ # Static variables, initial clause not really necessary in main().
+ static slash, l, ms, DOSos, nok, ok
+ initial {
+
+ nok := string(~&letters)
+ ok := repl("X",*nok)
+
+ # Find us a place to put temporary files.
+ if find("UNIX",&features) then {
+ slash := "/"
+ l := 10
+ ms := ""
+ }
+ else if find("MS-DOS", &features) then {
+ slash := "\\"
+ l := 8
+ ms := "u"
+ DOSos := 1
+ }
+ # Don't take this out unless you're sure of what you're doing.
+ else stop("nocr: tested only under UNIX and MS-DOS")
+ }
+
+ # Check to see if we have any arguments.
+ *a = 0 & stop("usage: nocr file1 [file2...]")
+
+ # Start popping filenames off of the argument list.
+ while fname := pop(a) do {
+
+ # Open input file.
+ infile := open(fname,"r") | (er_out(fname), next)
+ # Get temporary file name.
+ every temp_name :=
+ pathname(fname, slash) ||
+ map(left(basename(fname,slash),l,"X"), nok, ok) ||
+ "." || right(0 to 999,3,"0")
+ do close(open(temp_name)) | break
+ # Open temporary file.
+ outfile := open(\temp_name,"w"||ms) | (er_out(fname), next)
+
+ if \DOSos then {
+ # Infile above was opened in translate mode (removing the CR),
+ # while outfile was opened in untranslate mode (automatically
+ # writing the line in UNIX format).
+ while write(outfile,read(infile))
+ }
+ else {
+ # If not running under DOS, then we're under UNIX (unless
+ # we've been hacked). Trim CR manually, then write.
+ while line := read(infile) do {
+ if line[-1] == "\x0D" then
+ line[-1] := ""
+ write(outfile, line)
+ }
+ }
+
+ # Close opened input and output files.
+ close(infile) | stop("nocr: cannot close, ",fname,"; aborting")
+ close(outfile) | stop("nocr: cannot close, ",temp_name,"; aborting")
+
+ # Remove physical input file.
+ remove(fname) | stop("nocr: cannot remove ",fname,"; aborting")
+
+ # Give temp name the same name as the input file, completing the
+ # conversion process.
+ rename(temp_name,fname) |
+ stop("nocr: Can't find temp file ",temp_name,"; aborting")
+ }
+
+end
+
+
+procedure er_out(s)
+ write(&errout,"nocr: cannot open ",s," for reading")
+ return
+end
+
+
+procedure basename(s,slash)
+ s ? {
+ while tab(find(slash)+1)
+ return tab(0)
+ }
+end
+
+
+procedure pathname(s,slash)
+ local s2
+
+ s2 := ""
+ s ? {
+ while s2 ||:= tab(find(slash)+1)
+ return s2
+ }
+end