Subsections

Transput

If you are unclear about the working of Algol 68 transput, consult chapter 9. The function of this section is to document all the transput declarations so that you can use it as a reference manual.

The declarations will be covered in the following order:-

  1. Modes
  2. Standard channels
  3. Standard files
  4. Opening files
  5. Closing files
  6. Transput routines
  7. Interrogating files
  8. File properties
  9. Event routines
  10. Conversion routines
  11. Layout routines

In the sequel, transput errors are mentioned using identifiers whose values appear in the following table:-

Identifiers for transput errors
physical file end not mended255
logical file end not mended254
stand in redirected253
environment string unset252
environment string estab err251
estab invalid parameters250
open invalid parameters249
no program args248
value error not mended247

Transput modes

Only five modes are available:-

FILE
A structure containing details of a a book accessed by the program.
CHANNEL
A structure containing procedures for accessing books.
SIMPLIN
A union of names of all plain modes, rows of plain modes, structures of plain modes and their combinations.
SIMPLOUT
A union of all plain modes, rows of plain modes, structures of plain modes and their combinations.
BUFFER
A synonym for RVC. It is used as the yield of the procedure file buffer (see section 13.7.7).

The mode NUMBER is used as a parameter of the procedures whole, fixed and float, but because it is the union of all number modes, it is unnecessary to specify it and so has not been made available for general use.

Standard channels

For each channel in this section, the general properties are first given, followed by a table giving the properties of books opened on the channel and then a list of specific properties for the following procedures where applicable:-

establish
open
create
close
lock
scratch
set
logical end
reidf
  1. CHANNEL stand in channel
    CHANNEL stand out channel
    CHANNEL stand back channel
    These three channels have similar properties because they use the same access procedures. The standard buffered input channel is stand in channel. Books on this channel have the following properties:-
    stand in channel
    bin possibleTRUE
    put possibleFALSE
    get possibleTRUE
    set possibleTRUE
    reidf possibleFALSE
    and are available as the stand in book.

The stand out channel is the standard buffered output channel. Books on this channel have the following properties:-

stand out channel
bin possibleTRUE
put possibleTRUE
get possibleFALSE
set possibleTRUE
reidf possibleFALSE

and are available as the stand out book.

The stand back channel is the standard buffered input/output channel. Books on this channel have the following properties:-

stand back channel
bin possibleTRUE
put possibleTRUE
get possibleTRUE
set possibleTRUE
reidf possibleTRUE

and are available as the stand back book.

The channels have the following properties:-

establish
You must have write access to the file. If it already exists, it will be truncated to zero length. The default mode is 8r644. If the file cannot be established, the routine will return the value errno (the system error name) refers to.
open
the file will be opened with a default mode of 8r444. If the file cannot be opened, the routine will return the value errno refers to.
create
A zero length file with a unique identification will be created using the default mode of 8r644.
close
The file will be closed. For the stand out channel and the stand back channel, the buffer will be flushed.
lock
The file will be closed and then all permissions will be removed from the file provided you have write access to the directory containing the file.
scratch
The file will be closed and then unlinked.
set
The current position will be set to any legal position in the book (non-negative positions only). If the position is set beyond the current logical end, a sparse file will be created.
logical end
The position will be set to just beyond the last byte in the file.
reidf
For the stand back channel only. When the file is closed, it will be renamed. If the rename fails (an already existing file with that name, for example), an error message will be output on the stand error file giving a description of the error and identifying the file.
  • CHANNEL arg channel
    The arg channel gives access to the program arguments including the actual call of the program which precedes the program arguments. Arguments are separated by a single space. A name of mode REF FILE opened with this channel has blank as the string terminator. The arguments, as a book, have the following properties:-
    arg channel
    bin possibleFALSE
    put possibleFALSE
    get possibleTRUE
    set possibleTRUE
    reidf possibleFALSE
    The channel has the following properties:-
    establish
    Same as open.
    open
    The program arguments will be made available. If the arguments are unavailable, the routine will return no program args.
    create
    Same as open.
    close
    No action.
    lock
    No action.
    scratch
    No action.
    set
    Provided that the required position lies between the beginning and the end of the arguments, the position will be set accordingly.
    logical end
    The position will be set to just beyond the last character of the last argument.
    reidf
    Inapplicable.
    The procedure make term can be used to set the string delimiter to any required value to facilitate searching for quote-delimited or otherwise delimited arguments.
  • CHANNEL env channel
    The env channel gives read-only access to environment strings (which Linux documentation calls "environment variables"). The environment string, as a book, has the following properties:-
    env channel
    bin possibleFALSE
    put possibleFALSE
    get possibleTRUE
    set possibleTRUE
    reidf possibleFALSE
    The channel has the following properties:-
    establish
    Yields an error of value
    environment string estab err.
    open
    If the environment string is the null string or is unset, open yields an error of value
    environment string unset. Otherwise, the string is available as a book.
    create
    Yields an error of value
    environment string estab err.
    close
    No action.
    lock
    The routine will attempt to remove all permissions from a file of the same identification as the environment string identification.
    scratch
    The routine will attempt to unlink a file of the given identification.
    set
    Provided that the required position lies between the beginning and the end of the string, the position will be set accordingly.
    logical end
    The position will be set to just beyond the last character.
    reidf
    Inapplicable.
    The default string terminator is nul ch. You should set the string terminator using make term .
  • CHANNEL kbd channel
    The kbd channel provides access to unechoed keystrokes (also referred to as "non-canonical input"). Be warned that if a file opened with this channel is not closed and the program ends prematurely, none of your keystrokes will be echoed! You can reset to canonical input using the command
       stty sane
    
    The keyboard is made available as a book having the following properties:-
    kbd channel
    bin possibleTRUE
    put possibleFALSE
    get possibleTRUE
    set possibleFALSE
    reidf possibleFALSE
    The channel is usually used to access the characters input by control and function keys as well as normal keystrokes, so it is advisable to use get bin rather than get. The channel has the following properties:-
    establish
    Same as open.
    open
    You should use the null string "" for the identification. The routine checks to see whether stand in has been redirected and yields the error stand in redirected if so. Otherwise, the characteristics of stand in are changed to wait for a single character with no minimum waiting time and with no echo of the input.
    create
    Same as open.
    close
    The routine resets stand in to the condition it was in previously.
    lock
    Same as close.
    scratch
    Same as close.
    set
    Inapplicable.
    logical end
    Inapplicable.
    reidf
    Inapplicable.
  • CHANNEL mem channel
    The mem channel provides a memory buffer with access to all transput facilities. It is similar to the standard Algol 68 associate except that binary transput is also allowed. The buffer behaves as a book with the following properties:-
    mem channel
    bin possibleTRUE
    put possibleTRUE
    get possibleTRUE
    set possibleTRUE
    reidf possibleFALSE
    The channel has the following properties:-
    establish
    If the values of p and l are both 1 and the value of c is a positive integer then c is taken to be the size of the buffer. Otherwise, the routine yields estab invalid parameters as error value. The identification should be "".
    open
    The routine should be called with an identification of mode RVC (see section 2b). The identification will be used as the memory buffer.
    create
    The value estab invalid parameters will be returned.
    close
    No action.
    lock
    Inapplicable.
    scratch
    Inapplicable.
    set
    Provided the position lies in or just beyond the end of the buffer, the position will be set.
    logical end
    The position will be set to just beyond the end of the buffer.
    reidf
    Inapplicable.
    The channel can be used to access individual characters of integers and reals. make term can also be used.
  • CHANNEL client socket channel
    CHANNEL server socket channel
    These channels provide UNIX- or Internet-type sockets in the form of standard Algol 68 files. Sockets behave as books with the following properties:-
    client/server socket channel
    bin possibleTRUE
    put possibleTRUE
    get possibleTRUE
    set possibleFALSE
    reidf possibleFALSE
    The channels have the following properties:-
    establish
    The p should be the family of socket (either af unix or af inet). If the latter, the l should be the port. The c should be the MTU (maximum transport unit). This governs the size of the buffer associated with the socket. No checks are performed on its value. If p is neither af unix nor af inet, the routine returns estab invalid parameters as error value. The server socket should be established before the client socket.
    open
    Yields an error of open invalid parameters for both channels.
    create
    Inapplicable.
    close
    The buffer is flushed and the socket closed.
    lock
    The buffer is flushed, the socket closed and then all access permissions removed (provided that write access is available to the directory containing the socket).
    scratch
    The buffer is flushed, the socket closed and then unlinked.
    set
    Inapplicable.
    logical end
    Inapplicable.
    reidf
    Inapplicable.
    An extra procedure accept, which mirrors the C library procedure, has the following header
       PROC accept = (REF FILE socket)REF FILE:
    
    and is used by the server to accept a client socket, thereby yielding a REF FILE name which can be used to communicate with the client. The example programs client1, server1, client2 and server2 (whose source can be found in the examples directory) demonstrate simple use of sockets.
  • Standard files

    Four standard files are provided:-

    1. REF FILE stand in
      This file corresponds to the C stdin. Books connected via stand in differ from those connected via the channel stand in channel: set possible returns FALSE. Thus this file must be regarded as a simple stream of bytes. When the kbd channel is being used, stand in is unavailable.
    2. REF FILE stand out
      This file corresponds to the C stdout. Books connected via stand out differ from those connected via the channel stand out channel: set possible returns FALSE. Thus this file must be regarded as a simple stream of bytes.
    3. REF FILE stand error
      This file corresponds to the C stderr and behaves like the file stand out.
    4. REF FILE stand back
      This file accesses a workbook which is deleted on termination of the program. All kinds of transput are allowed on this file.

    Opening files

    Three procedures are available for opening files:-

    1. PROC establish=
      (REF FILE f,STRING idf,
      CHANNEL chann,INT p,l,c)INT:
      In standard Algol 68, this procedure creates a new file with p pages, each page containing l lines, each line containing c characters. In the QAD standard prelude, the mem channel (see section 5) takes notice of p, l and c and both p and l must be 1. The socket channels (see section 6) use p for the socket family, l for the port if the family is af inet and c for the size of the MTU. For other channels, the values of p, l and c are ignored. The procedure yields zero on success, otherwise an integer denoting an error (see section 13.7.2).
    2. PROC open=(REF FILE f,
      UNION(CHAR,STRING,RVC) idf,
      CHANNEL chann)INT
      In standard Algol 68, the second parameter of this procedure has mode STRING. The above union ensures that an RVC parameter can be used to open an existing memory buffer with the memory channel. This is particularly useful for performing transput on buffers obtained from C library routines. The procedure yields zero on success, otherwise an integer denoting an error (see section 13.7.2).
    3. PROC create=(REF FILE f,CHANNEL chann)INT:
      Creates a work file with a unique identification in the directory /tmp using the given channel.

    Closing files

    Three procedures are provided:-

    1. PROC close=(REF FILE f)VOID:
      This is the standard procedure for closing a file. It is standard practice to close every opened file. The procedure checks to see whether the file is open. If the reidf procedure has been called, after closing the file, the procedure renames the file to the identification given in the reidf field.
    2. PROC lock=(REF FILE f)VOID:
      The Algol 68 Revised Report requires that the file be closed in such a manner that some system action is required before it can be reopened. In this case, the file is closed and then all access permissions removed. Before the file can be reopened, the user will have to use chmod.
    3. PROC scratch=(REF FILE f)VOID:
      The file is closed and then unlinked.

    Transput routines

    The procedures in this section are responsible for the transput of actual values. Firstly, formatless transput is covered and then binary transput. The a68toc compiler does not support formatted transput. In each section, the shorthand L is used for the various precisions of numbers and bits values.

    Straightening

    The term straightening is used in Algol 68 to mean the process whereby a complex mode is separated into its constituent modes. For example, the mode

       MODE X=STRUCT(INT a,
                     CHAR b,
                     UNION(REAL,VOID) u)
    

    would be straightened into values of the following modes:-

    The mode REF[]X would be straightened into a number of values each having the mode REF X, and then each such value would be further straightened into values having the modes

    However, a value of mode COMPL is not straightened into two values both of mode REAL. Instead, the real part is transput, then an "I" read or written followed by the imaginary part.

    Formatless transput

    Formatless transput converts internal values into strings of characters or strings of characters into internal values.

    1. PROC write=([]UNION(SIMPLOUT,
      PROC(REF FILE)VOID) x)VOID:
      This is equivalent to put(stand out,x) (synonym print).
    2. PROC put=(REF FILE f,
      []UNION(SIMPLOUT,
      PROC(REF FILE)VOID) x)VOID:
      The parameter x is straightened and the resulting values are output. Each plain mode is output as follows:-
      CHAR
      Output a character to the next logical position in the file. For []CHAR, output all the characters on the current line.
      BOOL
      Output flip or flop for TRUE or FALSE respectively. For []BOOL, output flip or flop for each BOOL.
      L BITS
      Output flip for each bit equal to one and flop for each bit equal to zero. l bits width characters are output in all. No newline or newpage is output. For []L BITS, each BITS value is output as above with no intervening spaces.
      L INT
      Output a space character if the logical position is not at the start of a line. Then output the integer using the call
         whole(i,1+l int width)
      
      which will right-justify the integer in
         1+l int width
      
      positions with a preceding sign. For []L INT, each integer is output as described above, preceded by a space if it is not at the beginning of the line. No newlines or newpages are output.
      L REAL
      A space is output if the logical position is not at the start of a line and then the number is output space-filled right-justified in
         l real width+l exp width+3
      
      positions in floating-point format and preceded by a sign. For a value of mode []L REAL, each REAL value is output as described above.
      L COMPL
      The complex value is output as two real numbers in floating-point format separated by i . For []L COMPL, each complex value is output as described above.
      PROC(REF FILE)VOID:
      An lf character is output if the routine is newline and an ff character if the routine is newpage. User-defined routines with this mode can be used.
    3. PROC read=([]UNION(SIMPLIN,
      PROC(REF FILE)VOID) x)VOID:
      This is equivalent to get(stand in,...).
    4. PROC get=(REF FILE f,
      []UNION(SIMPLIN,
      PROC(REF FILE)VOID x)VOID:
      This procedure converts strings of characters into internal values. Inputting data is covered for each plain mode and REF STRING. In each case, if the end of the file is detected while reading characters, the logical file end procedure is called:-
      REF CHAR

      Any characters c where c < blank are skipped and the next character is assigned to the name. If a REF[]CHAR is given, then the above action occurs for each of the required characters of the multiple.
      REF STRING

      All characters, including any control characters, are assigned to the name until any character in the character set specified by the string term field of f is read. The file is then backspaced so that the string terminator will be available for the next get.
      REF BOOL

      The next non-space character is read and, if it is neither flip nor flop, the char error procedure is called with flop as the suggestion. For REF[]BOOL, each \texttt{REF BOOL} name is assigned a value as described above.
      REF L BITS

      The action for REF BOOL is repeated for each bit in the name. For REF[]L BITS, each REF L BITS name is assigned a value as described above.
      REF L INT

      If the next non-control character (ie, a character which is neither a space, a tab character, a newline or newpage character or other control character) is not a decimal digit, then the char error procedure is called with "0" as the suggestion. Reading of decimal digits continues until a character which is not a decimal digit is encountered when the file is backspaced. If during the reading of decimal digits, the value of l max int would be exceeded, reading continues, but the input value is not increased. For REF[]L INT, each integer is read as described above.
      REF L REAL

      A real number consists of 3 parts:-
      • an optional sign possibly followed by spaces
      • an optional integral part
      • a "." followed by any number of control characters (such as newline or tab characters) and the fractional part
      • an optional exponent preceded by a character in the set "Ee\". The exponent may have a sign. Absence of a sign is taken to mean a positive exponent
      The number may be preceded by any number of control characters or spaces. For REF[]L REAL, each REAL value is read as described above.
      REF L COMPL

      Two real numbers separated by "i" are read from the file. Newlines or newpages or other control characters can precede each real. The first number is regarded as the real part and the second the imaginary part. For REF[]L COMPL, each REF L COMPL is read as described above.

    Binary transput

    Binary transput performs no conversion on internal values, thus providing a means of storing internal values in a compact form in books or reading such values into a program.

    1. PROC write bin=([]SIMPLOUT x)VOID:
      This is equivalent to put bin(stand back,x).
    2. PROC put bin=(REF FILE f,
      []SIMPLOUT x)VOID:
      This procedure outputs internal values in a compact form. Then external size is the same as the internal size.
    3. PROC read bin=([]SIMPLIN x)VOID:
      This procedure is equivalent to
            get bin(stand back,x)
      
    4. PROC get bin=(REF FILE f,[]SIMPLIN x)VOID:
      This procedure transfers external values in a compact form directly into internal values.

    In all the above procedures, the transput is direct with no code conversion. It should also be noted that the procedure make term, although usually used with formatless transput, can also be used with binary transput in the QAD standard prelude for inputting a STRING terminated by any of a number of characters. You should note that if set possible for the channel concerned, then the terminator (which will always include the lf character) will not have been read when get bin returns. However, if not set possible for the channel (and neither stand in nor stand out can be set), then no backspace is possible for binary transput and so the terminating character will have been read.

    Other procedures

    A number of miscellaneous procedures fall into this category.

    1. PROC file buffer = (REF FILE f)BUFFER:
      Yields the buffer of a REF FILE value.
    2. PROC flush buffer = (REF FILE f) VOID:
      This procedures empties the buffer if it has been changed by a put or a put bin.
    3. PROC no file end=(REF FILE f)BOOL:
      One of the default procedures in default io procs.
    4. PROC ignore value error = (REF FILE f)BOOL:
      One of the default procedures in default io procs.
    5. PROC ignore char error = (REF FILE f, REF CHAR ch)BOOL:
      One of the default procedures in default io procs.

    Interrogating files

    A number of procedures are available for interrogating the properties of files:-

    1. Properties of the book:-
      1. PROC bin possible=(REF FILE f)BOOL:
        Yields TRUE if binary transput is possible.
      2. PROC put possible=(REF FILE f)BOOL:
        Yields TRUE if data can be sent to the book.
      3. PROC get possible=(REF FILE f)BOOL:
        Yields TRUE if data can be got from the book.
      4. PROC set possible=(REF FILE f)BOOL:
        Yields TRUE if the book can be browsed: that is, if the position in the book for further transput can be set.
      5. PROC reidf possible=(REF FILE f)BOOL:
        Yields TRUE if the identification of the book can be changed.
    2. PROC current pos=(REF FILE f)INT:
      The standard Algol 68 procedure yields a triple giving the page, line and character number. However, the QAD standard prelude does not use pages, lines and characters, so this procedure yields the current character position within the book for the next transput operation.
    3. PROC file buffer=(REF FILE f)BUFFER:
      Yields the memory buffer associated with the file f.
    4. PROC idf=(REF FILE f)RVC:
      Yields the current identification of the book.
    5. PROC logical end=(REF FILE f)INT:
      The current length of the book connected to f.

    File properties

    Three procedures are provided for altering the properties of files:-

    1. PROC make term=(REF FILE f,
      STRING term)VOID:
      Makes term the current string terminator.
    2. PROC reidf=(REF FILE f,STRING new idf)VOID:
      Changes the reidf field of f to the given value so that when the file is closed, the book will be renamed.
    3. PROC set flush after put=(REF FILE f)VOID:
      Ensures that the buffer of a file is flushed whenever data is written to the file.

    Event routines

    Four event routines are provided. For each routine, the default behaviour will be described. In each case, if the user routine yields FALSE, the default action will be elaborated. If it yields TRUE, the action depends on the event.

    1. PROC on char error=(REF FILE f,
      PROC(REF FILE,
      REF CHAR)BOOL p)VOID:
      This procedure assigns the procedure p, which may be an identifier or an anonymous procedure, to the char error mended field of f. The actions on character error are:-
      Default action
      Use the default character for the particular situation.
      User action
      A character may be assigned to the REF CHAR parameter and will be used if it is in the particular character set involved.

      The relevant situations are:-

      1. When reading an integer of any precision, first character, possibly following an optional sign with following spaces, is not a digit. Any decimal digit can be substituted. The default is "0".
      2. When reading a real of any precision, the first non-space character, optionally preceded by a decimal point ".", is not a digit. Any decimal digit can be substituted. The default is "0".
      3. When reading a real of any precision, an exponent is present (the character "e" or "E" or "\" has been read), and the first non-space character is not a digit. Any decimal digit can be substituted. The default is "0".
      4. When reading a complex number, the first non-space character following the first real is not in the set iI. The default is "i".
    2. PROC on logical file end=
      (REF FILE f,PROC(REF FILE)BOOL p)VOID:
      This procedure assigns the procedure p, which may be an identifier or an anonymous procedure, to the logical file mended field of f. The actions on logical file end are:-
      Default action
      The default action is elaborated if the procedure p yields FALSE. If it yields TRUE then it is presumed that the end of the file has been attended to and transput is resumed. On any channel, if the end of the file has been reached or, in unformatted character transput, an eof char is read then the error message logical file end not mended will be issued and the program terminated with the exit value logical file end not mended.
      User action
      Any action as specified. Care should be taken if transput is performed on the file in question as an infinite loop could occur.
    3. PROC on physical file end=
      (REF FILE f,PROC(REF FILE)BOOL p)VOID:
      This procedure assigns the procedure p, whether an identifier or an anonymous procedure, to the
         physical file mended
      
      field of f. The actions on physical file end are:-
      Default action
      If the procedure p yields FALSE then the default action is elaborated, If p yields TRUE then the ending of the file is presumed to be attended to and transput is then re-attempted. On any channel, if there is no more room on the physical medium, the program issues the error message
         physical file end not mended
      
      and then terminates the program with the exit value physical file end not mended.
      User action
      Any action as specified. Care should be taken if transput is performed on the file in question as an infinite loop could occur.
    4. PROC on value error=
         (REF FILE f,PROC(REF FILE)BOOL p)VOID:

      This procedure assigns procedure p to the value error mended field of f. The actions taken on a value error are:-
      Default action
      The program issues the error message value error not mended and then terminates with the same exit value.
      User action
      Transput continues.
      The error occurs in the following situations:-
      1. When an integer on input exceeds max int for the precision concerned.
      2. The size of the exponent of a real number exceeds max int.
      3. An input real number is ± ∞ or greater than max real or is less than min real for the precision concerned.

    Conversion routines

    The conversion routines consist of three procedures converting numbers to strings of characters, one operator and the procedure char in string. All the procedures whole, fixed and float will return a string of error char if the number to be converted is too large for the given width, or, if the number is a real, if it is infinite or otherwise invalid.

    1. PROC char in string=
      (CHAR c,REF INT p,STRING s)BOOL:
      If the character c occurs in the string s, its index is assigned to p and the procedure yields TRUE, otherwise no value is assigned to p and the procedure yields FALSE.
    2. PROC whole=(NUMBER v,INT width)STRING:
      The procedure converts integer values. Leading zeros are replaced by spaces and a sign is included if width>0. If width is zero, the shortest possible string is yielded. If a real number is supplied for the parameter v, then the call fixed(v, width, 0) is elaborated.
    3. PROC fixed=(NUMBER v,
      INT width,after)STRING:
      The procedure converts real numbers to fixed point form, that is, without an exponent. The total number of characters in the converted value is given by the parameter width whose sign controls the presence of a sign in the converted value as for whole. The parameter after specifies the number of required digits after the decimal point. From the values of width and after, the number of digits in front of the decimal point can be calculated. If the space left in front of the decimal point is insufficient to contain the integral part of the value being converted, digits after the decimal point are sacrificed.
    4. PROC float=(NUMBER v,
      INT width,after,exp)STRING:
      The procedure converts reals to floating-point form ("scientific notation"). The total number of characters in the converted value is given by the parameter width whose sign controls the presence of a sign in the converted value as for whole. Likewise, the sign of exp controls the presence of a preceding sign for the exponent. If exp is zero, then the exponent is expressed in a string of minimum length. In this case, the value of width must not be zero. Note that float always leaves a position for the sign. If there is no sign, a blank is produced instead. The values of width, after and exp determine how many digits are available before the decimal point and, therefore, the value of the exponent. The latter value has to fit into the width specified by exp and so, if it cannot fit, decimal places are sacrificed one by one until either it fits or there are no more decimal places (and no decimal point). If it still doesn't fit, digits before the decimal place are also sacrificed. If no space for digits remains, the whole string is filled with error char.
    5. OP HEX=(L BITS v)[]CHAR:
      The operator HEX converts a value of mode L BITS into a row of hexadecimal digits. The total number of digits equals l bits width OVER 4. For example, HEX 4r3 yields 00000003.

    Layout routines

    These routines provide formatting capability on both input and output.

    1. PROC space=(REF FILE f)VOID:
      The procedure advances the position in file f by 1 byte. It does not read or write a blank.
    2. PROC backspace=(REF FILE f)VOID:
      The procedure advances the position in file f by -1 bytes. It does not read or write a backspace. Note that not every channel permits backspacing more than once consecutively.
    3. PROC newline=(REF FILE f)VOID:
      On input, skips any remaining characters on the current line and positions the file at the beginning of the next line. This means that all characters on input are skipped until a linefeed character lf is read. On output, emits a linefeed character. This is non-standard behaviour.
    4. PROC newpage=(REF FILE f)VOID:
      On input, skips any remaining characters on the current page and positions the file at the beginning of the next page. This means that all characters on input are skipped until a formfeed character ff is read. Note that if the character following a number is a formfeed character, then that character will have been read during the read of the number. Hence, the skip to formfeed character will skip the whole of the following page. On output, a formfeed character is emitted immediately.
    5. PROC skip terminators=(REF FILE f)VOID:
      Any STRING terminators are skipped on input and the file positioned at the next non-terminating character. The procedure is usually called after a STRING has been read.

    Sian Mountbatten 2012-01-19