FORTRAN Carriage Control Alternatives


The Unix implementation of Fortran-77 does not handle the ANSI-standard carriage control codes. These codes are:
	space	 	single space before printing
	0		double space before printing
	1		eject page before printing
	+		overprint the previous line
By default, Unix Fortran-77 automatically adds a newline after the last record of a formatted sequential write. In addition, all carriage control characters are output in column 1 instead of being interpreted by your terminal.

You can direct the output of your fortran program through an output filter, fpr, which interprets the carriage control characters output by your program. Use this command:

a.out | fpr
You can direct output to a file like this:
a.out | fpr > filename
If you want, you can then send the filename file to a printer to get a printed copy of your output.

Try compiling the sample program below. Then use the commands above to demonstrate how the fpr filter implements carriage control.

The Unix implementation of Fortran-77 also allows you to use the non-standard format specifier $ to suppress the newline at the end of the last record of a formatted sequential write operation. This is useful when implementing a prompting interface. This is an example of a prompting interface:


	       write(6,10)
	10     format(1x,"Please enter data here: ",$)
	       read(5,*) variable
For more information on this topic and the Unix implementation of Fortran-77, you should read the documents A Portable Fortran 77 Compiler and Introduction to the f77 I/O Library. These documents are part of the Unix Programmer's Guide, which is in the Athena Reference Collection in Hayden or Barker libraries (by the public Athena clusters there), or in the Consultants' Office (11-115). Sample program:

C     This is a sample program for 'f77' carriage control.
C     Output should be run through the 'fpr' filter.

      write(6,10)
10    format(1x, "[space] means single space before printing")

      write(6,20)
20    format("0","0 means double space before printing")

      write(6,30)
30    format("1","1 means eject page before printing")

      write(6,40)
40    format(1x,"+ means overprint the previous line")

      write(6,50)
50    format("+","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

      stop
      end