summaryrefslogtreecommitdiff
path: root/ipl/progs/yescr.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/yescr.icn')
-rw-r--r--ipl/progs/yescr.icn141
1 files changed, 141 insertions, 0 deletions
diff --git a/ipl/progs/yescr.icn b/ipl/progs/yescr.icn
new file mode 100644
index 0000000..65e6d8b
--- /dev/null
+++ b/ipl/progs/yescr.icn
@@ -0,0 +1,141 @@
+############################################################################
+#
+# File: yescr.icn
+#
+# Subject: Program to convert UNIX files to DOS format
+#
+# Author: Richard L. Goerwitz
+#
+# Date: December 30, 1991
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Version: 1.2
+#
+############################################################################
+#
+# This program simply inserts MS-DOS carriage-return+linefeed
+# sequences in place of UNIX newlines. Effects conversion from the
+# native UNIX text file format to its DOS correspondent.
+#
+# usage: yescr file1 [file2 [etc.]]
+#
+# Bug: Doesn't check to see whether the input files are in fact
+# text files.
+#
+############################################################################
+#
+# Requires: UNIX or MS-DOS
+#
+# See also: nocr.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("yescr: tested only under UNIX and MS-DOS")
+ }
+
+ # Check to see if we have any arguments.
+ *a = 0 & stop("usage: yescr file1 [file2...]")
+
+ # Start popping filenames off of the argument list.
+ while fname := pop(a) do {
+
+ # Open input file.
+ infile := open(fname,"r"||ms) | (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(temp_name), next)
+
+ if \DOSos then {
+ # Read in blocks of 80 chars.
+ while line := reads(infile,80) do {
+ line ? {
+ # Replace ASCII LF with CR+LF, effecting a translation
+ # from UNIX to DOS format.
+ while writes(outfile, tab(find("\x0A")), "\x0D", move(1))
+ writes(outfile, tab(0))
+ }
+ }
+ }
+ else {
+ # I presume I'm running under UNIX (unless I've been hacked).
+ # Convert lines into DOS format by appending a carriage return,
+ # and then write()'ing (which automatically adds a newline).
+ every line := !infile do {
+ if line[-1] == "\x0D"
+ then write(outfile, line)
+ else write(outfile, line || "\x0D")
+ }
+ }
+
+ # Close opened input and output files.
+ close(infile) | stop("yescr: cannot close, ",fname,"; aborting")
+ close(outfile) | stop("yescr: cannot close, ",temp_name,"; aborting")
+
+ # Remove physical input file.
+ remove(fname) | stop("yescr: cannot remove ",fname,"; aborting")
+
+ # Give temp name the same name as the input file, completing the
+ # conversion process.
+ rename(temp_name,fname) |
+ stop("yescr: Can't find temp file ",temp_name,"; aborting")
+ }
+
+end
+
+
+procedure er_out(s)
+ write(&errout,"yescr: 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