Subsections

Writing to books

You should use the establish procedure to create a new book. Here is a program fragment which creates a new book called results:

   FILE outf;

   IF establish(outf,
                "results",
                stand out channel,
                0,0,0)/=0
   THEN
      print(("Cannot establish book results",
             newline));
      exit(1)
   FI

As you can see, establish has a similar header to open. What are the integers used for? The header for establish is

   PROC establish = (REF FILE f,
                     STRING idf,
                     CHANNEL chann,
                     INT p,l,c)INT:

The p, l and c in establish determine the maximum number of pages, lines and characters in the book which is being created. Values of 0 for all three integers mean that the file should be established with zero length. However, they are ignored by the stand out channel in the QAD standard prelude provided with the a68toc compiler.

The procedure used to write data to a book is put. Its header is

   PROC put=(REF FILE f,[]SIMPLOUT items)VOID:

You can examine the source of the standard prelude to see how the mode SIMPLOUT is declared.

Again, newline and newpage can be used independently of put as in the following fragment:

   FILE outf;
   IF establish(outf,
                "newbook",
                stand out channel,
                0,0,0)/=0
   THEN
      put(stand error,
          ("Cannot establish newbook",
           newline));
      exit(2)
   ELSE
      put(outf,("Data for newbook",newline));
      FOR i TO 1000 DO put(outf,i) OD;
      newline(outf);
      close(outf)
   FI

On output, the newline character is written to the book.

newpage behaves just like newline except that a form feed character is searched for on input, and written on output.

The procedure establish can fail if the disk you are writing to is full or you do not have write access (in a network, for example) in which case it will return a non-zero value.

When you have completed sending data to a book, you must close it with the close procedure. This is particularly important with books you write to because the channel is buffered as explained above. Using close ensures that any remaining data in the buffer is flushed to the book.

The procedure print uses the REF FILE name stand out. So

   print(("Your name",newline))

is equivalent to

   put(stand out,("Your name",newline))

Again, stand out is open when your program is started and it should not be closed. Transput via stand out is unbuffered. You cannot read from stand out, nor write to stand in. The procedure write is synonymous with print.


Exercises

9.3
Change the second program in the last set of exercises to put its total into a newly-created book whose identification is result. Ans[*]
9.4
Adapt Eratosthenes' Sieve (see section 5.4.1) to output all the prime numbers less than 10,000 into a book called primes. Ans[*]


Sian Mountbatten 2012-01-19