home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: nocr.icn
- #
- # Subject: Program to convert MS-DOS text files to UNIX
- #
- # Author: Richard L. Goerwitz
- #
- # Date: December 30, 1991
- #
- ###########################################################################
- #
- # 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
-