
     "^" has been substituted for the "up arrow"
  (the symbol for the expontiation operator in c64 basic)


                          OXFORD PASCAL
                       For the Commodore 64


                            CONTENTS


1. INTRODUCTION TO OXFORD PAXCAL

2. BEGINNER'S GUIDE TO PASCAL

  2.1     Getting Started

  2.1.1   WRITE statements, strings
  2.1.2   Integer arithmetic, +, -, *, DIV, MOD
  2.1.3   Functions: ABS, SQR, ODD
  2.1.4   Boolean expressions >, <, >=, <=, <>, =, AND, OR, NOT

  2.2     Pascal Statements

  2.2.1   Variables and assignment statements
  2.2.2   FOR statement
  2.2.3   IF statement
  2.2.4   REPEAT and READ statements
  2.2.5   CASE statement
  2.2.6   Error messages and error correction
  2.2.7   WHILE statement

  2.3     More Variable Types

  2.3.1   Real numbers
  2.3.2   Real arithmetic.
  2.3.2   SQRT, SIN, ARCTAN, LN, EXP, ROUND, TRUNC.
  2.3.4   Output formatting and constants
  2.3.5   Characters
  2.3.6   64 graphics
  2.3.7   Arrays
  2.3.8   Enumerated types and subranges ORD, PRED, SUCC
  2.3.9   Sets

  2.4     Procedures And Functions

  2.4.1   Procedures
  2.4.2   VAR parameters
  2.4.3   Functions
  2.4.4   Recursion
  2.4.5   Textfiles
  2.4.6   Strings

  2.5     Advanced Features

  2.5.1   Records
  2.5.2   Pointers and lists
  2.5.3   GOTO statement
  2.5.4   Extensions

  2.6     Disk-based Operation

  2.7     Editor Command Summary

  2.8     Error Messages

  2.9     Sample Programs

  3.  OXFORD PASCAL REFERENCE MANUAL

  3.1     General

  3.1.1   Pascal Keywords
  3.1.2   Pascal Identifiers
  3.1.3   Other Special Symbols
  3.1.4   Comments
  3.1.5   Constants
           integer
           real
           character and string
  3.1.6   Blanks

  3.2     Data Types and Operators

  3.2.1   Integer
  3.2.2   Real
  3.2.3   Char
  3.2.4   User-defined (enumerated) Types
  3.2.5   Subrange Types
  3.2.6   Boolean
  3.2.7   Operator Precedence
  3.2.8   Summary of Arithmetic and Conversion Functions

  3.3     Pascal Declarations and Statements

  3.3.1   Pascal Programs
  3.3.1.1 Constant Declarations
  3.3.2   Type Declarations
  3.3.3   Variable Declarations
  3.3.4   Excutable Statements
  3.3.5   Assignment Statements
  3.3.6   Compound Statements
  3.3.7   "If" Statements
  3.3.8   "Repeat" Statements
  3.3.9   "While" Statements
  3.3.10  "For" Statements
  3.3.11  "Case" Statements
  3.3.12  "Goto" Statements Label declarations

  3.4     Input and Output of Text

  3.4.1   Outputting to Textfiles
  3.4.2   Inputting from Textfiles
  3.4.3   Reading Other Data Types from Textfiles
  3.4.5   Abbreviations
  3.4.6   Manipulating Files

  3.5     Structure Data Types

  3.5.1   Arrays
  3.5.2   Sets
  3.5.3   Records
  3.5.4   Packed Structures
  3.5.5   Pack and Unpack

  3.6     Functions and Procedures

  3.6.1   Function and Procedure Definitions
  3.6.2   Procedure and Function Calls
  3.6.3   Parameters
  3.6.4   Local Declarations
  3.6.5   Recursion and Forward References

  3.7     Dynamic Storage and Pointers

  3.7.1   Pointers
  3.7.2   "New" and "Dispose"

  3.8     Disk Files

  3.8.1   Declarations
  3.8.2   Sequential Writing
  3.8.3   Sequential Reading
  3.8.4   External Files
  3.8.5   Reading and Writing from other Devices
          Disk textfile example
  3.8.6   CLOSE command

  3.9     Extensions to Standard Pascal

  3.9.1   Hexadecimal Constants
  3.9.2   Memory VDU and Port Access
  3.9.3   Added commands for Oxford Pascal V 1.0
  3.9.4   Hexadecimal Input and Output
  3.9.5   Bit Manipulation
  3.9.6   Catching I/O Errors
  3.9.7   Keyboard Interrupts
  3.9.8   Random Number Generator
  3.9.9   Underscore
  3.9.10  The 64 Internal Clock
  3.9.11  Input of String Variables
  3.9.12  Program Chaining

  3.10    64 Pascal Interface Guide

  3.10.1  Assembly Language Format
  3.10.2  Storage Formats


  1. INTRODUCTION TO OXFORD PASCAL

  Pascal is a powerful high level computer language written by
  Niklaus Wirth of Zurich, Switzerland.*

  It can be efficiently implemented on small computers as well as
  large mainframes, offering numerous advantages over other popular
  microcomputer languages such as BASIC.  Some of these advantages
  are:

  ALGOL - like block structure
  Meaningful variable names
  Powerful data structuring techniques
  User-defined data types and constants
  Excellent function and subroutine linkage
  Recursive calls
  Clean, modern flow control
  Runtime error checking
  Dynamic variable allocation
  Greater standardisation
  High speed of execution
  Greater program legibility

  OXFORD Pascal is an implementation of standard Pascal designed
  specially for the CBM 64.  It offers all the features of this
  powerful language together with some useful enhancements for the
  personal computer user.

  OXFORD Pascal has two modes of operation.  In the simplest mode the
  Pascal compiler co-resides in RAM with the user's program.  This is
  ideal for learning the language or writing small programs which do
  not need the disk.  Most Pascal commands are available in this mode
  except those involving diskette files.  For more complex programs
  the disk-based compiler can be used to give the full power of the
  language.

  *PASCAL USER MANUAL AND REPORT BY JENSEN AND WIRTH
  - Springer-Verlag 1975


  Hardware requirements

  CBM 64 computer, plus a model 1541 floppy disk unit or a 4040
  floppy disk unit with an INTERPOD from O.C.S.S.

  Some implementation information

  MAXINT=32767
  type INTEGER=-32768...32767

  type CHAR=the ASCII set (extended to include 64 graphics)

  set values: must be in 0..127 (therefore set of char must be
  between chr(0)..chr(127))

  real numbers: accuracy: to 9 digits
                range: approx 1E-38 to 1E38

  default output formats: integer:  7 characters
                          real   : 12 characters
                          boolean:  6 characters
                          char   :  1 character
                          string : size of string

  program size and complexity: no restriction, apart from exceeding
  the total memory capacity of the system (STACK OVERFLOW is printed)

  identifiers: first 8 characters must be unique

  labels: first 8 digits must be unique

  Extensions to standard Pascal

  Dynamic specification of filenames
  Input of strings
  Hexadecimal numbers and hex I/O
  Bit manipulation
  Machine language interface
  Memory and VDU screen access
  Run-time I/O error detection
  Random number generator
  Program chaining
  64 clock interface
  Seperate compilation (linking)

  PASCAL RAM USAGE

  This is automatically optimised to use all available memory
                  ________________________
                 |                        |
      FFFF HEX   |      Kernal ROM        |
                 |  or graphics bit-map   |
      E000 HEX   |________________________|
                 |                        |
                 |      I/O drivers       |
                 |          or            |
                 | colour graphics memory |
                 |________________________|
      D000 HEX   |                        |
                 |         editor         |
      C000 HEX   |________________________|
      Top of RAM |________________________|
                 |                        |
                 |     run time stack     |
                 |________________________|
                 |                        |
                 |                        |
                 |                        |
                 |________________________|
                 |                        |
                 |   dynamic variables    |
                 |________________________|
                 |                        |
                 |     executable code    |
                 |        (p-code)        |
                 |________________________|
                 |                        |
                 |       edited text      |
       800 HEX   |________________________|

  "Stack overflow" is printed when all memory has been exhausted.


  2. BEGINNER'S GUIDE TO PASCAL

  This section is a straight forward introduction to some of the
  features of Pascal.

  2.1 GETTING STARTED-WRITE STATEMENTS

  Turn your comuter on.  It should be displaying the message.
  ****COMMODORE 64 BASIC V2****
  64K RAM SYSTEMS 38911 BASIC BYTES FREE
  READY

  To run Pascal, turn the disk unit on, insert the Pascal diskette
  into the disk drive (drive 0 for dual drives), and then type:

  LOAD "*",8

  followed by a carriage return.  The computer should reply with:

  SEARCHING FOR *
  LOADING
  READY

  This loads the first program on the diskette into memory, which
  should be the Pascal system.  Now you just type:

  RUN

  followed by a carriage return.

  You should get a clear screen with the PACAL SIGN-ON MESSAGE:

  OXFORD Pascal VX.X

  loading...
  ready.

  Modern computers can be very powerful, but they need to be "told"
  what to do by means of PROGRAMS.  Computers work in a language of
  numbers called MACHINE LANGUAGE, but machine languages are
  generally quite difficult for humans to master, and they differ
  widely depending on the particular computer you are using.

  It's much easier to talk to the computer in a HIGH LEVEL LANGUAGE
  such as COBOL or Pascal.  These languages somewhat resemble
  English, but have stricter rules of grammar to prevent ambiguities.

  Pascal was invented by Niklaus Wirth, of Zurich, Switzerland in
  1968.  (It is named after the 17th century French mathematician
  Blaise Pascal).  Pascal is an ideal language for learning to write
  computer programs.  Your Pascal programs are automatically
  translated by the computer into a machine language which it can
  interpret.

  Let us start right away with a very simple programming example:


  2.1.1 Example 1

  First of all you must enter the program into the computer memory,
  and this is done using the EDITOR.

  Type in the first line of the program, shown below.  Follow it
  with the carriage return key (referred to in this manual as
  <return>):

  10 begin
  20 write('Hello World!')
  30 end.

  Having typed in the first line, the editor should automatically
  prompt you with the next line number; which you should not
  re-type:

  20

  These line numbers have no significance in Pascal - they are
  purely for use by the editor, and they will be assumed in all
  future examples.  Remember, if you make a mistake in typing the
  program you can correct it by using the screen editing commands
  INST, DEL, cursor up, cursor down, cursor left and cursor right,
  just as in BASIC.  Pressing the DEL key, for example, will erase
  the last key you typed.  See the CBM 64 User's Manual for a
  complete description.

  Now enter the remaining two lines of the program, being especially
  careful about punctuation and spelling, and don't forget that full
  stop at the end!

  write('Hello World")
  end.

  When you have finished, type a blank line (just <return>) to turn
  off the line numbers.

  All you have to do to run your program is to type

  r<return>

  If all goes well the computer should reply with something like the
  following:

  Compiling
  Program 0 0909
  0 error(s)
  Compilation complete.

  Do not worry about the details, but what is happening is that the
  computer is scanning your program and converting it into a numeric
  form which it can efficiently execute. (If you don't get the
  message: "0 error(s)", then you probably made a mistake in typing.
  You could try typing "new<return>" and starting again!).

  Now the computer should automatically run your program, and print
  the message:

  Hello World

  Once you program has been compiled, it can be run as many times as
  you like by typing:

  r<return>

  Each time the computer should print:

  Hello World

  Now let us look at the program in more detail.  The main body of a
  Pascal program is always inclosed between the words BEGIN and END
  the final END must be followed by a full stop.  Pascal programs
  consist of a sequence of "statements" which are executed
  sequentially in the order they are written.  Example 1 has one
  statement, a WRITE statement which tells the computer to write
  something on the screen, in this case the message "Hello World".
  The object enclosed in the single quotes is called a STRING
  and may contain any sequence of characters except <return>.
  Also, if a single quote is itself to be included in a string, it
  should be doubled up, so that the Pascal program

  begin
  write('O''Brien''s string')
  end.

  would cause the message

  O'Brien's string

  to be printed on the screen.


  Example 2

  Other things can be printed besides strings.  Try the following
  program.  We will use the same steps as example 1 but we must
  remember to erase example 1 from the computer memory.
  So type:

  new<return>

  now type example 2 into the computer:

  begin write(3+4);
  write(6-2-1)
  end.

  followed by

  r<return> (to compile and run the program)

  When the progran is run the computer should print

  7   3

  Example 2 contains two statements, which must be separate by a
  semicolon.  It has examples of INTEGER (whole number) arithmetic.

  Now try the next example:

  2.1.2 Example 3

  begin
  write(6*7,18 div 4,18 mod 4, -(4+2)*3)
  end.

  The computer should print

  42   4   2   -18

  In Pascal "*" means multiplication, DIV means integer division (ie
  with rounding towards zero), and "18 MOD 4" gives the remainder
  when 18 is divided by 4.

  Note how brackets have been used to change the order of evaluating
  -4+6, or 2.  This is because the computer does multiplications and
  divisions before it does additions and subtractions.

  Any number of items can be printed using a single WRITE statement,
  provided that they are separated by commas.


  2.1.3 Example 4 functions

  begin
  write(sqr(4+5),abs(-44),abs(44),odd(3))
  end.

  The computer should print

  81   44   44   TRUE

  SQR, ABS and ODD are called "functions".  There are many different
  functions in Pascal.

  SQR, followed by a number in brackets, gives the square of the
  number.

  ABS gives the absolute value of the number.

  ODD(3) is TRUE because 3 is odd.

  The last function, ODD, gives a Boolean, or logical result, that is
  it can either be TRUE or FALSE.  Boolean values are used a lot in
  Pascal so let us look at them more closely.


  2.1.4 Example 5 Boolean expressions

  begin
  write(true, false, 3=3,3=4);
  write(3<>4,5<>6,9>=10);
  end.

  Should print:

  TRUE FALSE TRUE FALSE
  TRUE TRUE FALSE

  because: 3 is equal to itself
           3 is not equal to 4
           etc.

  =  means "equal to"
  <  means "less than"
  >  means "greater than"
  >= means "greater than or equal to"
  <= means "less than or equal to"
  <> means "not equal to"

  WRITELN is like WRITE but also generates a new line after printing
  all the values in brackets.


  Example 6 Boolean expressions

  These can get a bit complicated, but the computer evaluates them
  using the rules of logic.

  begin
  write((3=3) and (3<5),(3=4) or (3>11));
  write(not true, not false, not(1=2));
  end.

  Gives the result:

  TRUE FALSE FALSE TRUE TRUE

  because both (3=3) and (3<5) are true, neither (3=4) nor (3>11) are
  true, and (1=2) is false so not (1=2) is true.

  "x and y" is TRUE if both x and y are TRUE

  "x or y" is TRUE if either x or y (or both) are TRUE

  "not x" is TRUE if x is FALSE, and FALSE if x is TRUE


  2.2 PASCAL STATEMENTS

  First a word about symbols.  These are the building blocks of
  Pascal programs, and there are three main kinds:

  1.  Pascal keywords, such as BEGIN and END, which are reserved and
      can't be altered by the user.  A complete list of these is
      given in the reference manual, section 3.1.1.

  2.  Special symbols such as , ; := .. <> etc.

  3.  Identifiers, which are names chosen by the user.  They can be
      any sequence of letters or digits, but must start with a letter.
      For example:

      i
      Henrythe8th
      PI


  Warning

  Identifiers are unique only if they differ in the first 8
  characters, so that Henrythe7the and Henryth8th are the same
  identifier in OXFORD pascal (and many other implementations).

  Upper case letters are equivalent to their lower case counterparts
  so that PI, pi and Pi are all synonymous.

  Some standard identifiers such as WRITE and WRITELN are predeclared
  in every version on Pascal.

  These can be redefined by the user, however (in contrast to Pascal
  keywords).


  Important

  Pascal symbols can't contain imbedded blanks.  "Henry the 8th" is
  not the same as "Henrythe8th", and "30 000" is not equivalent to
  the number 30000.  ("30,000" would also be illegal).
  Note especially that ": =" cannot be used instead of ":=".

  This aside, spaces, tabs and new lines may occur anywhere in a
  Pascal program, and are ignored.

  Now we return to some actual examples of Pascal programs.
  Indentation is used by putting spaces in front of certain lines.
  This is optional but helps to make the program clearer to humans.


  2.2.1 Example 7 Variables and Assignment

  var x,y:integer;
  begin
  x:=3; y:=27;
  writeln(x,y);
  x:=4;
  y:=x+2;
  write(x,y,x+y)
  end.

  Should print:

  3   27
  4    6   10

  The VAR declaration comes before the BEGIN, and informs the compiler
  that the identifiers x and y are "variables" which can take integer
  values.  As the name implies, variables can change in value
  throughout the execution of the program.  In line 3, the value of
  x is set to 3 and the value of y is set to 27.  Then later, x is set
  to 4 and y is set to x+2, or 4+2=6.  Notice that y:=y+2 could also
  have been written setting y to 27+2=29.  Variables can also be
  declared as BOOLEAN and many other types besides INTEGER.


  2.2.2 Example 8 Repetition using "FOR" loops

  var i:integer;
  begin
  writeln('going up');
  for i:=1 to 5 do writeln(i);
  writeln('going down');
  for i:=5 downto -1 do writeln;
  end.

  Should print

  going up
      1
      2
      3
      4
      5
  going down
      5
      4
      3
      2
      1
      0
     -1

  The statement following the "FOR..DO" (in this case a WRITELN
  statement) is repeated once with each value of the variable i.


  2.2.3 Example 9 "if" statements

  var i:integer;
  begin
    for i:=1 to 11 do
      begin
        write(i);
        if odd(i) then writeln(' is odd')
        else writeln(' is even');
      end
  end.

  The result should be:

       1 is odd
       2 is even
       3 is odd
       4 is even
       5 is odd
       6 is even
       7 is odd
       8 is even
       9 is odd
      10 is even
      11 is odd

  "if" statements give the computer a choice of two statements to do,
  depending on the value of the Boolean expression.  (Remember,
  Boolean expressions can either be TRUE or FALSE).  The "else" part
  of a conditional statement is optional but - IMPORTANT - "else"
  is never preceded by a semi-colon.

  The WRITE and IF statements in our example are enclosed in
  BEGIN...END to make them act as a single statement to be repeated
  by the FOR loop.


  2.2.4 Example 10 finding the average

  This example introduces keyboard input, and a more general sort of
  loop.

  Var total, count, x : integer;
  begin
    total:=0; count:=0;
    write('type some numbers:');
    repeat
      read(x);
      total:=total+x;
      if x>0 then count:= count+1;
    until x=0;
    writeln('The average is', total/count);
  end.

  When you run this program, the computer should invite you to type a
  series of numbers.
  Try typing:

  3   47   5   199   0    <return>

  The computer should reply with

  The average is 6.35000E+01

  The statement read(x) tells the computer to accept an integer from
  the keyboard and place its value in the variable x.  If you type
  something the computer doesn't recognise as a integer, you might get
  the message

  INTEGER READ ERROR line 60

  and the program will terminate.

  The "/" operator gives division with a floating point, or REAL
  result (whereas DIV gives an integer result).
  More about REAL arithmetic later.

  The "real" number was printed in "scientific" notation, which will
  be familiar to many calculator users.  The number following the
  "E" represents a power of 10, so that 6.35E+01 means "6.35" (times
  10 to the power of +1) or 63.5.

  The printing format can be changed to make it more legible by
  specifying the total number of characters you would like printed
  and the number of  digits after the Decimal point.  (Rounding is
  done automatically).  Thus:

  Writeln("The average is',total/count : 10 : 3)

  would have printed

  The average is    63.500

  The number is printed with 4 leading blanks to give the
  10-character field you specified.

  The "repeat"..."until"  loop simply executes the enclosed
  statements until the condition at the end turns out to be TRUE.
  In our example the loop is terminated when a zero is read from
  the keyboard.


  2.2.5 Example 11 Case statement

  This sample introduces a slightly more elaborate way of choosing
  one of several statements:

  var verse, i : integer
  begin
    for verse:=1 to 4 do
      begin
        writeln;
        for i:=verse downto 0 do 
          case i of
            3: writeln('three men');
            2: writeln('two men');
            1: writeln('one man);
            0: writeln('and his dog')
          end
      end
  end.

  This should result in the printout:

  one man
  and his dog

  two men
  one man
  and his dog

  three men
  two men
  one man
  and his dog

  case error line 70

  The error message was caused because in the last verse i becomes
  4 and there is no corresponding label in the CASE statement.
  Case labels can also be combined, for example

  4,5,6 : writeln('Many men');


  2.2.6 A Note on Error Messages

  The "CASE ERROR" message is called a "runtime" error message because
  it occurs while the program is actually running.  There are several
  such messages which you may encounter (see section 8).

  By now you may have started to experiment with your own programs.
  (This is probably the best way of finding out what is and is not
  possible in Pascal).  If so, you will sooner or later get one of
  the compiler's error messages.  This may also happen if you make a 
  mistake in typing one of the examples.  The simple program

  var x : boolean;
        : integer;
  begin
    read(x);
    write(x)
  end.

  would cause the following message during compilation:

  compiling
  ---ERROR TYPE 46 LINE 20 NEAR X
  program 0     090d
  1 error(s)
  Compilation complete

  NOTE --- the line number may sometimes be out by 1 line or even
  more, depending on how long the compiler needed to detect the
  error.

  Typing "L" in response to the prompt:

  ready

  displays the program on the VDU as well as compiling it  All the
  line numbers and errors are marked.
  In our example:

  10 var x :boolean;
  20     x<-ERROR 46
  20     x : integer;
  30     begin
  40        read(x);
  50        write(x)
  60     end.

  The full version of line 20 is retyped underneath the error report.

  The computer will not let you run a program if there are any
  compiler errors.


  Correcting Errors

  This can be done using the editor, without having to retype the
  whole program.  To correct the small example above you might type:

  list

  to list the program on the screen:

  10 var x : boolean;
  20     x : integer;
  30 begin
  40   read(x);
  50   write(x)
  60 end.

  To delete the second line, type 20 followed by <return>.
  Typing "list" again should  give:

  10 var x : boolean;
  30 begin
  40   read(x);
  50   write(x)
  60 end.

  Line 10 is still wrong.  We want to read and write integer, so we
  type

  change/boolean/integer/

  which makes the substitution and retypes the line.

  "list" now should print the correct version of the program.

  10 var x : integer;
  30 begin
  40   read(x);
  50   write(x)
  60 end.

  The program doesn't do much, just reads a number from the keyboard
  and prints it out again.

  For a more complete explanation of how the editor works, see the
  command summary (section 7).  This also explains how to load and
  save your Pascal program on diskette.


  2.2.7 While Statement

  There is another sort of loop in Pascal, besides REPEAT and FOR
  loops.

  The WHILE statement is like the REPEAT ststement except that the
  test is done at the beginning of the loop (so that the loop need
  not be executed at all).  Also, like the FOR loop only one
  statement may be repeated (or a sequence of statements enclosed in
  BEGIN and END).

  Example:

    i:=1;
    while i<=5 do
      begin
      writeln(i);
      i:=i+1;
      end;

  Has the same effect as

  for i:=1 to 5 do writeln(i);


  2.3 MORE ABOUT DATA TYPES IN PASCAL


  2.3.1 Example 12 Floating Point Numbers

  begin
    writeln(3.3,33.0,330.0,0.33);
    writeln(-3.3E3,3.3E-1,4.5+2.1)
  end.

  The computer should print

   3.30000E+00 3.30000E+01 3.30000E+02 3.3000e-01
  -3.30000E+03 3.30000E-01 6.60000E+00

  The presence of either a decimal point or an exponent (the "E"
  part) in a number tells Pascal to treat it as a floating point or
  a REAL number.

  3.3E3 means 3.3 times (10 to the power of 3)
  in other words 3.3 x (10x10x10) or 3300

  Floating point numbers in Pascal have an accuracy of 9 digits and
  may range in size from about 1E-38 to 1E38. In contrast to integer,
  you should not expect Pascal real arithemetic to be exact.
  This means, for example, that 4.0 may in fact be printed a 3.999999.
  Also you can't rely on testing real numbers for equality.
  2.0+2.0=4.0 may not always be true!


  2.3.2 Example 13 Floating Point Arithmetic

  var x, y: real;
  begin
    x:=9.1;
    y:=8.7;
    writeln(x+7: 7:2,x-y: 7:2,x*y: 7:2,x/y: 7:2);
    writeln(sqr(x) : 7:2, sqrt(x): 7:2, abs(x): 7:2);
    write(trunc(x), trunc(y), round(x), round(y))
  end.

  Should print:

    17.80   0.40  79.17   1.05
    82.81   3.02   9.10
        9      8      9      9

  We have already met +, -, * and /.  They are used to mean, addition,
  subtraction, multiplication and floating point division (DIV means
  integer division, DIV and MOD shouldn't be used with reals).


  2.3.3 SQRT, SIN, ARCTAN, LN, EXP, ROUND, TRUNC

  SQR(X) means the square of X
  SQRT(X) means the square root of X
  ABS(X) gives the absolute value of X
  TRUNC(X) gives the integer (whole number) part of X
  ROUND(X) rounds X to the nearest integer.

  Some other useful mathematical functions are

  SIN(X) gives the sine on X (X is in radians)
  COS(X) gives the cosine of X (X is in radians)
  ARCTAN(X) gives the angle whose tangent is X (in radians)
  LN(X) gives the natural logarithm (base e) of X (for X>0)
  EXP(X) gives the number e raised to the Xth power.

  1 radian=57.29578 degrees

  e=2.718281

  2.3.4 Example 14 Output Formatting Constants.

  program waves;
  const f1=0.5; f2=0.05; amplitue=19;
  var x1, x2, y ;:real;
  begin
    x1:=0; x2:=0;
    repeat
      x1:=x1+f1;
      x2:=x2+f2;
      y:=sin(x1)*sin(x2)*amplitude;
      writeln('x' : round(y)+amplitude)
    until false
  end.

  The program should print an amplitude-modulated sine wave.

  Because of the REPEAT..UNTIL FALSE loop, example 14 will continue
  printing almost forever (at least until x1 or x2 becomes too large!)
  one way of stopping it would be to turn off the power, but if you
  did that you would lose the program.  A better way is simply to
  press the STOP key.

  The computer should print:

  BREAK AT LINE xxxxxx

  Where xxxxxx is the line it happened to be executing when you
  pressed STOP.  (If  this doesn't happen try again)

  The "Program" header is optional in OXFORD Pascal and in this case
  simply serves to give the program a name: WAVES.  The name has no
  significance to the computer: it's merely there as an aid to
  documentation.

  Any text inclosed between the pairs of symbols (* and *) is also
  ignored by the compiler.  This facility can be used to write
  comments which help human readers to understand the program.
  Constants, introduced by the keyword CONST, are values which don't
  change throughout the program,  It is an error to use a constant
  on the left of an assignment statement or as a parameter in the
  READ statement.

  "CONST" declarations are useful for giving names to special values
  (for example PI=3.1415926), and they make the program easier to
  change later.  Try using the editor to alter the frequencies
  f1 and f2 and the amplitude to give different wave patterns in
  example 14.


  2.3.5 Characters

  Note how the program uses a field width specification (a colon
  followed by an integer value) to tell the computer how many
  characters to allocate to the 'x' when printing.  If too many
  characters are asked for, enough spaces are printed to make up
  the difference.  If not enough are asked for, the string is
  truncated on the right, for example

    write('Hi there' :5)

  would print:

    Hi th

  Numeric values, however, are always printed in full even if too
  few characters are specified.


  2.3.6 Example 15 64 Graphics

  const ncols=40;
  var line, i: integer;
  begin
    page;
    for line:=1 to 24 do
      for i:=1 to ncols do
        if odd(line) and odd(i) or
          not odd(line) and not odd(i) then write(chr(177))
  end.

  This should fill the screen with a pattern.  CHARACTERS in Pascal
  strings of length 1, for example:

  'x' '?' ''''

  They belong to the data type "Char", which has 256 possible values
  in OXFORD Pascal, corresponding to the ASCII character set.

  The function ord(ch) gives the ASCII integer code (between 0 and
  255) for the character ch, while chr(x) gives the character
  represented by the integer x. So ord ('?')=63 and corresponingly
  chr(63)='?'.

  Note - On the 64, the OXFORD Paxscal data type "char" has been
  extended to the range 0..255 to allow the 64 graphics font to be
  used.  Two of these characters were used in the program above.
  Try writing programs to give different patterns, using the
  available characters.  A simple change would be replacing 177 and
  178 by 173 and 174.  The statement "page" simply clears the vdu
  screen.


  2.3.7 Example 16 Arrays

  Suppose you wanted to read in some numbers and print them out in
  reverse order.  You would have to store the numbers somewhere
  because you can't start printing until the  last number has been
  read.  If you knew that there were always going to be three
  values, you could write:

  var x1, x2, x3:integer;
  begin
    write('Type 3 number :');
    read (x1, x2, x3);
    writeln(x3);
    writeln(x2);
    writeln(x1)
  end.

  But for 50 values this would get a bit tedious!

  The answer is to use an array variable:

  const n=3;
  var x : array[1..n] of integer;
    i : integer;
  begin
    write('Type', n:1,'numbers:');
    for i:=1 to n do read(x[i]);
    for i:=n downto 1 do writeln(x[i])
  end.

  Running the program and typing the data:

  463    79    980

  Should give the result:

  980
   79
  463

  The declaration of x really declares n variables which can be
  referred to by giving an index in square brackets.  The elements
  of the array x are thus x[1], x[2], ..., x[n].

  The constant n was used so that the number of values read in by the
  program can easily be changed by altering just one line.

  Array elements can be any valid Pascal data type, including
  another array.  This allows two dimensional (or indeed any
  dimensional) arrays, and a chess-board for example may be
  represented as:

  var chessboard; array[1..8] of array[1..8] of chesspiece;

  Where chesspiece is some suitable data type, probably a user
  defined type (more about this later).  The 5th square of the 3rd
  row of the chess-board could then be referred to as:

  Chessboard [3] [5]

  Because arrays of arrays are use often in Pascal programs, the
  abbreviation "chessboard[3,5]" is allowed, and similarly in the
  declaration:

  var chessboard : array[1..8, 1..8] of chesspiece;

  This can be extended to arrays of any dimension.


  2.3.8 Defining Your Own Data Type

  None of the data types so far mentioned (integer, real, Boolean,
  or even char) would be really suitable for describing a piece on a
  chess-board, so Pascal lets you define your own.  This may be done
  in TYPE DECLARATION, for example:

  type chesspiece=(pawn, knight, bishop, rook, queen, king);

  Then a variable of type CHESSPIECE could take any of these six
  values for example:

  var mypiece, yourpiece:chesspiece
  begin
    :
    :
    mypiece:=rook;
    yourpiece:=queen;
    :

  Type declarations come after constant declarations and before
  variable declarations.  The identifiers used in an 'enumerated'
  data type like CHESSPIECE must be unique, they can't appear in
  other enumerated types or be declared as constants or variables.

  Enumerated types are ordered so that our chess pieces can be
  compared using =, > etc:

  king>queen
  queen>rook

  and so on:
           :
 
  Three functions are also defined: PRED, SUCC and ORD

  pred(x) gives the value preceding x.

  succ(x) gives the value succeeding x>

  ord(x) gives the position of x within the data type.
  (starting with pawn=0)

  so pred(bishop)=knight

  succ(rook)=queen

  but pred(pawn) and succ(king) are both meaningless

  ord(knight)=1

  ord(rook)=3, and so on.


  2.3.9 Example 17 The Sieve of Eratosthenes

  This program finds and prints all the prime numbers between
  2 and 127.

  program Eratosthenes;
  const n=127;
  var sieve : set of 2..n;
    number, i : integer;
  begin
    sieve:=[2..n];
    for number:=2 to n do if number in sieve then
      begin
        writeln(number);
        for i:=2 to n div number do
          sieve:=sieve-[i*number]
      end
  end.

  A prime number is divided only by itself and 1.  Our "sieve" used
  for finding the prime numbers, is a new type of variable called a
  SET variable.

  Sets in Pascal are collections of objects enclosed in square
  brackets.  Either an object is in a set or it is nor, so:

      [1,2,3]
      [2,3,1]
  and [1,1,3,3,2] are all equivalent.

  The abbreviation x..y in a set means all the items between x and y
  inclusive, so:

  [1..4,10]=[1,2,3,4,10]

  We can test whether an item is in a set by using the operator IN.
  Thus "4 in [1..5]" will give the Boolean result:  TRUE.

  The type of a set can be any scalar type (ie not an array or a set)
  except REAL.  Values are restricted to the range 0..127 (so "set of
  char" from chr(0) to chr(127) is acceptable).

  Now back to our sieve program.  Starting with the number 2 and
  working upwards, if a number is still in the sieve then it's a
  prime.  We simply eliminate all multiples of that number from the
  sieve because they are not prime.  Operations allowed on two sets x
  and y are:

  x+Y   which gives the set of all items present in either x or y or
        both.
  x-y   which gives all items present in x which are not also in y.
  x*y   gives all the items present in x and also present in y.
  x=y   tests if two sets are equal.
  x<>y  tests if two sets are not equal.
  x<=y  tests if all items in x are also in y.
  x>=y  tests if all items in y are also in x.


  2.4 PROCEDURES AND FUNCTIONS


  2.4.1 Example 18 Procedures

  var ch: char;
  procedure lineof(wotsit :char);
    var i: integer;
    begin
      for i:=1 to 30 do write(wotsit);
      writeln
    end; (* of procedure "lineof" *)
  begin (* of main program *)
    lineof('?');
    writeln;
    for ch:='a' to 'f' do lineof(ch)
  end.

  you don't need to type the comments (*...*) if you don't want to.
  These are there to help explain the program.

  The computer should print:

  ??????..........

  aaaaaa..........
  bbbbbb..........
  cccccc..........
  dddddd..........
  eeeeee..........
  ffffff..........

  Procedures are used to separate sections of code from the main
  program, either to make what the program does clearer by dividing
  it up functionally, or to allow the same code to be "called" from
  various parts of the program.  The proceure "lineof" has a
  PARAMETER "wotsit" (which takes the data type CHAR).  When lineof
  is called it must be followed by a corresponding actual parameter
  in brackets.  Then "lineof" simply writes a line of wotsit's on
  the screen.

  If a procedure has no parameter then the brackets are omitted.
  The variable I is "local" to the procedure lineof, the main program
  doesn't know about it.  However lineof could if necessary access
  the 'global' variable CH.  Using local variables helps conserve
  storage, since they are destroyed when the procedure finishes.
  Procedures are really mini-programs in their own right.  They can
  have their own constant and data type declarations and even their
  own procedures.

  "WOTSIT" is called a VALUE parameter because a value is substituted
  for it when the procedure is called.  Lineof could change the value
  of wotsit without affecting the main program.  VARIABLE parameters
  on the other hand are substituted with variables when the procedure
  is called.

  2.4.2 Example 19 Variable Parameters

  var x,y : integer;
  procedure swap(var a,b : integer);
    var temp: integer;
    begin
      temp:=a;
      a:=b;
      b:=temp
    end;
  begin
      x:=4; y:=77;
      writeln(x,y);
      swap(x,y);
      writeln(x,y)
  end

  This should give the result

   4    77
  77     4

  Note that it is alright to have local variables, constants and
  parameters with the same names used in the main program.
  For example:

  procedure swap(var x,y : integer);

  The computer won't get confused (but you might!).  The variable
  parameters a and b are used by SWAP as a means of returning a result
  to the main program.  Another way of returning a value is to define
  a function.


  2.4.3 Example 20 Defining a Function

  var i : integer;
  function cube(x : integer) : integer;
    begin
      cube:=x*x*x;
    end;
  begin
    for i:= 1 to 20 do writeln('The cube of',
                    i : 2,'is',cube(i))
  end.

  The program should print some numbers and their cubes.
  Apart from having to specify a return value, functions are just like
  procedures.


  2.4.4 Example 21 Recursion

  A recursive function or procedure is one that calls itself.  Using
  recursion can give neat solutions to mind-bending problems like the
  "Towers of Hanoi".  In this well known puzzle, there are three
  piles of discs.  To start with piles 2 and 3 are empty, and the
  first pile has a number of discs stacked in orer of size, smallest
  at the top.  The game is to get all the discs in the same order
  (smallest on top) over to the 3rd pile, moving only one at a time,
  with no disc ever resting on a smaller disc.

  program Hanoi;
  var ndiscs: integer;
  procedure move(source, destn, spare: 1..3; n:integer);
  begin
    if n>1 then move(source, spare, destn, n-1);
    writeln('Moving from', source : 2,'to', destn :2);
    if n>1 then move(spare, destn, source, n-1)
  end;
  begin 
    write('How many discs?');
    read(ndiscs);
    writeln;
    move(1,3,2,ndiscs)
  end.

  Moving one disc is trivial.  To move n discs we first move the top
  (n-1) to the spare pile and then move the bottom one.  Then the top
  (n-1) are moved using the same technique.

  Recursive programs are not always the most efficient, though.
  They tend to gobble up memory because the computer has to save
  the variables for each call on the stack.  If you make ndiscs
  too large the computer will run out of memory and print
  STACK OVERFLOW - line xxxx.  The same will happen if you declare
  more variables in a program than you have memory available, or if
  you try to compile too large a program.


  2.4.5 Text Files

  Text files are special Pascal variables having the data type TEXT
  which are essentially streams of characters with no fixed size.
  Two are preassigned in OXFORD Pascal.  "Input" and "output" are
  associated normally with the keyboard and the VDU display
  respectively.

  By default, "Input" is implied in READ, READLN, EOLN and EOF and
  "Output" is implied in WRITE, WRITELN and PAGE.  So for example,

  EOF is really short for EOF(INPUT)
  WRITELN('Hi') is really short for WRITELN(OUTPUT,'Hi')

  Each textfile has an associated buffer variable of type CHAR (the
  file name followed by an upward arrow), for example: input^

  The procedure call:

  get(input) reads the next character from the keyboard and puts it
  in the variable input.

  put(output) writes the contents of output to the VDU.  So if X is
  a character variable:

  read(x) is equivalent to x:=input; get(input)

  write(x) is equivalent to output:=x, put(output)

  Newlines are special characters in textfiles,  When a file buffer
  contains one, assignments like

  x:=input

  will set x to a space.  Also, the end of line function EOLN will
  return TRUE.

  READLN is like READ but afterwards skips to the beginning of the
  next line by doing:

  while not eoln do get(input);
  get(input);


  2.4.6 Example 22 Strings

  program revwords;
  const linesize=64
  type string=packed array[1..LINESIZE] of char;
  var word:string;
    nchars, i:integer;

  procedure skipblanks;
    begin while(input='') and not eoln do
      get(input) end;

  procedure swap(var s:string;i,j:integer);
  var temp:char;
  begin
    temp:=S[i];
    S[i]:=S[j];
    S[j]:=temp
  end;

  begin
    repeat if eoln then readln;
      skipblanks;
      while not eoln do
        begin
          nchars:=0;
          repeat
            nchars:=nchars+1;
            read(word[nchars]);
          until input='';
          for i:=1 to nchars div 2 do
            swap(word,i,nchars-i+1);
          write(word:nchars,'');
          skipblanks
        end;
      writeln;
    until false
  end.

  The program reads words and writes them out with the letters
  reversed.  For example:

  Mary had a little lamb<return>

  would print.

  yraM dah a elttil bmal

  To stop the program, hit<stop>.

  Strings of size n in Pascal are treated as "packed array[1..n] of
  char".  Packed arrays are like ordinary arrays but are compressed
  to optimize storage.  Packed array ELEMENTS can't be used directly
  as VAR - parameters (but whole arrays can, as in the example).

  Examples of string operations in Pascal:

  var str: packed array[1..4] of char;
  begin
    str:='when';
    writeln(str>'what')
  end.

  Would print TRUE because "when" is greater than "what"
  (Lexicographically, i.e. dictionary order).


  2.5 ADVANCED FEATURES


  2.5.1 Example 23 Records

  Program clock;
  const delay= 1600; (* approx, for 64 *)
  var i:integer;
    clock:record
      hrs: 0..23;
      mins, secs :0..59;
    end;
  begin
    write('Enter the time, in hours minutes seconds :');
    read(clock.hrs,clock.mins, clock.secs);
    with clock do repeat
      for i:= 1 to delay do (* nothing *)
      secs=0 then
      begin
          mins:=(mins+1)mod 60;
          if mins=0 then
            hrs:=(hrs+1)mod 24;
        end;
      writeln(hrs:1,':',mins:1,':',secs:1)
    until false
  end.

  The program should print out the time roughly every second,
  for example:

  Enter the time, in hours minutes seconds : 1 39 56

  Should print:

  1 : 39 : 57
  1 : 39 : 58
  1 : 39 : 59
  1 : 40 :  0
      etc

  This example is intended to be a demonstration of the use of records
  in Pascal, not a replacement for the 64 built-in clock!  See the
  Reference Manual (3.9.10) for how to access the clock.

  Records are a way of combining several conceptually relate variables
  into one structure.  The record can then be treated as a whole or
  the parts can be accessed individually using the dot notation.

  The WITH..DO statement tells the computer to treat the elements of
  "clock" as though they were locally defined individual variables for
  that statement, removing the need for the "clock." prefix.

  Record elements can be any type (for example other records or
  arrays), and in addition an optional "variant" part is allowed
  (see reference manual).


  2.5.2 Example 24 Pointers

  var p,q: integer;
  begin
    new(p); new(q);
    p:=3;
    q:=4;
    write(p,q)
  end.

  Should print

  3    4

  The variables p and q are not integers but 'pointers' to integer
  variables.  The actual space for the variables to be stored at is
  created "dynamically" (in other words while the program is running)
  by the procedure NEW.  This allows programs to create variables as
  required.  A major use of pointers is in processing linked lists:


  Example 25 Reversing a Line of Characters Using a List.

  program revchars;
  type itempointer=item;
    item=record
      value:char;
      next: itempointer
    end;
  var list,p: itempointer;
  begin
    list:=nil;
    repeat
      new(p);
      read(p.value);
      '.next:=list;
      list:=p
    until eoln;
    repeat
      write(p.value);
      p:=p.next
    until p=nil
  end.

  The input: Mary had a little lamb.

  Should give the result: bmal elttil a dah yraM

  This program defines a record containing a pointer to itself.
  (a recursive definition).  Linked lists give very flexible storage
  but you have to keep careful track of what points to what.

  In standard Pascal the procedure DISPOSE(P) releases the storage
  assigned to the pointer p and can be used when p is no longer
  needed.

  In resident mode OXFORD Pascal, dispose has no effect. (However it
  is usually possible for programs themselves to implement some sort
  of "free list" of unwanted items).  The Pascal keyword "nil" is a
  pointer value which points to no variable.


  2.5.3 Example 26 "goto" Statements

  label 294, 33;
  begin
    33: writeln('This should be printed');
      goto 294;
      writeln('This shouldn''t');
    294: writeln('Stuck in a loop');
      goto 33
  end.

  This should print:

  This should be printed
  Stuck in a loop
  This should be printed
  Stuck in a loop
  etc.

  "labels" used with goto statements must be integers and should be
  declared before constants, data types and variables.  GOTO'S should
  be avoided where possible because they destroy the structure of the
  program.  A common use, however, is for "disaster" exits from nested
  procedures or statements.  Jumping INTO a loop or a procedure will
  cause unpredictable results.


  2.5.4 Extensions to Standard Pascal

  These are described in the Reference Manual (3.10).
  One useful procedure is VDU:


  Example 27 "poking" the VDU Screen

  var i:  integer;
  begin page;
    for i:=1 to 40 do vdu(i mod 4,i,'x')
  end.

  This should produce a pattern of x's on the screen.
  Vdu(i,j,ch)  stores the character ch at row i, column j.

  Remember, PAGE clears the VDU screen.


  2.6 DISK BASED OPERATION


  So far this manual has been concerned only with using the resident
  compiler, which is always in RAM.  While this may provide an ideal
  environment for learning Pascal, it necessarily restricts the
  number of commands available, and the space remaining for user
  programs.

  As you become familiar with Pascal, you will probably want to write
  larger programs.  Using the disk-based compiler and linker, Pascal
  programs of 6000 lines or more may be run, and this may be extended
  even further by using program chaining.

  You may also want to write programs which access diskette files.
  While this is possible in resident mode by opening channels to the
  disk unit, in disk mode the full Pascal file syntax is available,
  permitting files of any data type.

  Disk mode is entered automatically by typing:

  DISK

  This removes the resident compiler from memory, making the space
  available for editing.

  Once your program is edited, it MUST be saved on disk, for example:

  put prog or put 0:prog

  saves it in a file called "prog" on drive 0.
  To compile the program type:

  comp prog

  The compiler output should be something like:

  Insert your system disk followed by a <return>

  loading compiler...

  Insert your data disk followed by a <return>

  Pascal compiler vx.x
  program  0  0009
  0 error(s)
  compilation complete.

  There are various compiler options for generating listings etc.
  If all goes well the compiler will put the object code in a file
  "prog.obj" which can then be executed.  If there are any errors
  during compilation then the Pascal source must be corrected using
  the editor and re-compiled.  (Use the command "get prog" to read
  your Pascal text back into memory).

  Finally, type:

  ex prog

  to execute the object file (prog.obj).

  The name of each procedure or function is printed out as it is
  compiled, together with its static nesting level (0 for the main
  program, 1 for outer level functions and procedures, and so on).
  A hexadecimal address is also printed, giving a rough idea of its
  relative position in memory.


  The following table summarises the differences between resident
  and disk mode:


  RESIDENT MODE

  Compiler always in RAM

  Pascal source and object code in RAM

  Language differences (see Reference Manual for details)

  Text files only

  DISPOSE is a no-op


  DISK MODE

  Compiler only in RAM during a compilation

  Source and object code held in disk files

  All file types supported

  Disk files fully supported

  PACK, UNPACK implemented

  DISPOSE fully implemented

  Program chaining allowed



  2.7 EDITOR COMMAND SUMMARY

  Line numbers

  A command beginning with a number is recognised by the editor as a
  new program line, and is inserted in the program text in the
  position corresponding to that number.

  For example:

  10 end.
   5 begin (* this command comes first *)

  A line containing just a number has the effect of deleting that
  line from the program.


  Auto

  Enables or disables automatic generation of line numbers.

  Examples:

  auto 20 <return> - enables auto numbering with an encrement of 20.
  auto <return> - disables auto line numbering.

  default - auto 10.


  List

  lists the program currently in memory.

  Examples:
  list         - lists entire program
  list 330     - lists line 330
  list 100-    - lists lines 100 onwards
  list 100-200 - lists lines 100 through 200
  list -200    - lists up to and including line 200

  Note: The STOP key pressed during a listing will halt it completely,
  while pressing any other key freezes the listing until a second
  key is pressed.


  Upper, Lower

  Set upper or lower case display mode (The contents of the program
  memory are unaffected).  Default: lower.

  Switching between upper and lower case can also be performed
  alternately by holding down the shift key whilst depressing the
  CBM key.


  Basic

  Return to BASIC, reverting to upper case display.


  New

  Erase the program memory.


  Disk

  Enter disk compiler mode.


  Resident

  Re-load the resident compiler.


  Number

  Renumber the program lines in memory.
  for example:

  number 1000,2000,30

  renumbers lines 1000 onwards, starting the new numbers at 2000 and
  with an increment of 30.

  Note that the new starting number must be greater than or equal to
  the old starting number.


  Find

  Find and print occurrences of a string in the program.

  find/function/ - finds all occurrences of "function"

  find/function/,100-250 - finds all occurrences in lines 100 through
  250.

  The "/" can in fact be any delimiting character not contained in
  the search string.

  See note under "list" command to halt execution.


  Change

  As find, but substitutes a second string for all occurrences found
  of the first.
  For example:

  change/function/procedure/,150

  Changes all occurrences of "function" in line 150 to "procedure".

  See note under "list" to halt command execution.


  Delete

  Deletes program lines (parameters as with LIST).  "Delete" with no
  parameter is equivalent to NEW.


  Put

  Saves the program on diskette.  For example:

  put 0:sara - saves in a file called "SARA" on drive 0.
  (drive must be initialised).

  put @1:jim - saves in an existing file called "JIM" on disk 1.
  (drive must be initialised).

  Note: the drive defaults to the last drive accessed.


  Get

  Reads a program from diskette.  For example:

  get sara (searches both disks if required).

  R (or Run) Resident mode only.

  Run the program in memory (compiling first if necessary).

  L (Resident mode) - compile, and display the program in the VDU.

  P (Resident mode) - compile and list on the printer.

  COMP (Disk mode) - compile a program

  comp sara - compiles file "sara" giving a relocatable object file
  "0:SARA.OBJ"

  comp sara,l - "l" option gives a listing on the VDU.

  Other options:
    P - list on printer
    N - no object code
    C - no range checking or line numbers in the object file
        (giving slightly faster and more compact code)
    1 - object file on drive 1

  Ex (Disk mode) - executes an object file

  ex sara - executes SARA.OBJ

  Note - COMP and EX both clear the text buffer.

  Set sets the printer device number, printer type (Ascii/64), auto
  line feed flag and is menu driven.

  Hex      converts from decimal to hexadecimal.
           hex 32 <return> gives the result 0020

  Decimal  converts from hexadeximal to decimal.
           decimal 7f <return> gives the result 127

  Dump     list a program on the printer
           The DUMP command has the same syntax as LIST.

  Cold     cold-start 64 BASIC.


  BASIC commands

  Any of the BASIC direct-mode commands below may be used in the
  editor:

  PRINT (or ?)
  PRINT#
  OPEN
  CLOSE
  CMD
  POKE
  SYS
  FOR
  LET
  LOAD
  PEEK

  examples:

  let ti$= "120000"  - set clock to mid-day
  ?ti$               - print time
  ?fre(0)            - print the number of bytes free
  for i=1 to 20: ?i, i*i: next i


  Link (disk mode)

  For large programs it is desirable, (and often physically necessary)
  to have some form of modularization.  Several Pascal source files
  with inter dependent functions and procedures may be compiled
  separately and their object files later "linked" into one file.
  The linker may also be used to produce directly executable 64 files

  Examples:

  link 0:prog=myprog,yourprog,anyprog

  links the files MYPROG.OBJ, YOURPROG.OBJ and ANYPROG.OBJ
  into one object file PROG.OBJ on disk drive 0.

  Note - "link" clears the text buffer.

  Restrictions

    (a) The program being linked must have indentical variable
        declarations at the outer program level.

    (b) Each outer-level function or procedure may only be defined
        in one file.

    (c) If the other files need to refer to this function or
        procedure, a duplicate header should be included, with the
        body replaced by the keyword "extern".

    (d) The first file in the list is assumed to contain the main
        program. (The other files would normally just contain a
        dummy main program:

        begin
        end.)

  Linker example:

  file f1:
        Program test(input, output);
        var i: integer;
        procedure x; extern;  (* x is defined in the other file *)
        procedure y;
          begin
            write (i)
          end;
        begin  (* main program *)
          x
        end.

  file f2:
        program testpart2(input, output);
        var i: integer;  (* var's must be identical to f1 *)
        procedure y; extern;  (* y is defined in f1 *)
        procedure x;
          begin
            i:=3;
            write('three=');y;
          end;
        begin
        end.

  The command sequence might be

  comp f1
  comp f2
  link 0:test=f1,f2
  ex test

  The program should print "three= 3"


  Including other files in a compilation (disk mode only)

  If the character "#", followed immediately by a diskette file name,
  is placed at the beginning of a Pascal source line, then this
  indicates to the compiler that the contents of the specified file
  are to be included at that point in the program.

  This is extremely useful when program segments are to be linked,
  as global declarations (which need to be the same in each segment)
  can be kept in a seperate file thus simplifying any alterations.

  The facility cannot be nested (the included file must itself
  contain no #filenames).

  Locate (disk mode) - makes an acceptable file which can then be
  loaded under BASIC and executed by just typing "RUN".

  example: locate 0:xyz=jane

  Creates an executable file xyz on drive 0 from JANE.OBJ

  NOTE - "locate" clears the text buffer.


  2.8 ERROR MESSAGES

  ?Syntax error - editor command is mis-spelled or has invalid
  parameters.

  ?Out of memory error - There is insufficient memory left to do the
  command you specified, for example inserting a new program line or
  "GETTING" a file.

  ?Illegal quantity error - bad numeric input to an editor command,
  for example "NUMBER".

  ?File data error - one of the Pascal library files is not present
  on the disk or else has been corrupted.

  Compiler not resident - The L, P and R commands may only be used in
  resident mode.

  No source program - You typed L or R with no program text present
  in the computer's memory.


  RUNTIME ERRORS

  1. STACK OVERFLOW      - (during compilation) program is too big
                         - (during execution) program needs too much
                           variable space or uses to many levels of
                           recursion.

  2. INTEGER READ ERROR  - an integer was expected from the keyboard.

  3. INTEGER OVERFLOW    - overflow when multiplying two integers, or
                           DIVing or MODing by zero, or TRUNcating or
                           ROUNDing too large a number.

  4. ARRAY INDEX ERROR   - an expression used to index an array is
                           outside the declared range.

  5. VARIABLE OUT OF     - a variable, or a procedure or function
     RANGE                 parameter has been given a value outside
                           the allowed range for that data type.

  6. CASE ERROR          - there is no label in a case statement
                           corresponding to the value of the
                           selection expression.

  7. BAD PCODE           - your program has been corrupted,
                           or (hopefully not) a system bug.
                           Occurring at random, this may indicate
                           a memory fault.

  8. SET VALUE ERROR     - a set element has gone outside the range
                           0..127

  9. FLOATING POINT      - may occur if the result of +-x/SQR or EXP
     OVERFLOW              is too large.

  10. FLOATING POINT     - a floating point constant was expected
      READ ERROR           from the keyboard.

  11. UNDEFINED GOTO     - a GOTO statement referenced a
                           non-existent label.

  12. COMPLEX LOG OR     - attempt to take the log or square root
      SQUARE ROOT          of a negative number, or the log of zero.

  13. FILE NOT OPEN FOR  - READ or GET without a reset first.
      READING

  14. FILE NOT OPEN FOR  - WRITE or PUT without a rewrite first.
      WRITING

  15. END OF FILE        - attempt to read a file with EOF true.

  16. NO FREE I/O        - 64 operating system only allows ten files
      CHANNELS             to be open at one time.

  17. DEVICE READ ERROR  - bad status byte encountered while reading
                           data from the IEEE bus.

  20 to 72. DISK ERROR   - an error status has been detected on the
                           floppy disk unit.  Returns the error type
                           and if possible the offending file name.


  2.9 SAMPLE PROGRAMS


  Example 1

  The character 'o' should appear to "bounce" around the VDU screen.
  As a variation, try deleting line 13 to produce a pattern on the
  screen.

  program bounce (input, output);
  const thecowscomehome=false;
           DELAY=30;
  var row, col, i, j, d : integer;
  begin
    row:=0;
    col:=0;
    i:=1; j:=1;
  page;
  repeat
    for d:=1 to DELAY do;
    vdu(row, col,' ');
    row:=col+j;
    row:=row+i;
    if(row>23) or (row<0) then begin
      begin
        i:=-i;
        row:=row+i+i;
      end;
    if (col>39) or (col<0) then
      begin
        j:=-j;
        col:=col+j+j;
      end;
    vdu(row, col, 'o');
  until thecowscomehome
  end.


  Example 2 The game of Nim

  program nim (input, output);
  const nrows = 25;
        delay = 1000;
        coin = 168;
  var   pile : array [1..3] of 0..nrows;
        move : record
          ntaken, pileno : integer;
        end;
        i : integer;
        key : char;
  function gameover : boolean;
  begin gameover := (pile [1] + pile [2] + pile [3] = 0) end;
  function asc (n : integer) : char;
  begin asc := chr (n+ord ('0')) end;
  procedure display;
    var p, row, col, firstcol : integer;
  begin
    page;
    for p := 1 to 3 do
      begin
        firstcol := p*10;
        for row := 0 to NROWS-1 do 
          if pile [p] >= NROWS-row then 
            for col := firstcol+3 to firstcol+5 do
              vdu (row, col , chr (COIN));
          if pile [p] >= 10 then 
            vdu (NROWS-1, firstcol, asc (pile[p] div 10));
            vdu (NROWS-1, firstcol+1,asc(pile[p] mod 10));
       end;
  end; (* display *)
  procedure signon;
    begin
    page;
    writeln ('                  ***  NIM  ***');
    writeln;
    writeln;
    writeln ('  I will set up three piles of coins.');
    writeln ('To move, take any number of coins away');
    writeln ('from any pile.  The player who clears the');
    writeln ('screen wins. ');
    writeln;
    write ('  Now hit any key to start : ');
    while getkey = chr (0) do;
    end; (* signon *)
  procedure hismove; 
    var ok : boolean;
    begin
      writeln ('Now enter your move :');
      with move do repeat
        writeln;
        write ('Pile (1 to 3) ? ');
        read (pileno);
        ok := pileno in [1..3];
        if ok then
          begin
            write ('Number to take away ? ');
            read (ntaken);
            ok := ntaken in [1..pile [pileno]];
            end;
        if not ok then writeln ('What ??');
      until ok;
    with move do pile [pileno] := pile [pileno]
    -ntaken;
    end;  (* of hismove *)
  procedure mymove;
  var bit : array [1..3, 1..4] of boolean;
      parity : array [1..4] of boolean;
      firstbit, x, i, j : integer;
      begin
        for i := 1 to 3 do
        begin
          x := pile [i];
          for j := 4 downto 1 do 
            begin
              bit [i,j] := odd (x);
              x := x div 2;
            end;
        end;
      for i := 1 to 4 do parity [i] := 
               bit [1,i] <> (bit [2,i] <> bit [3,i]);
        move.pileno := 1;
        move.ntaken := 0;
        with move do
        if not (parity [1] or parity[2] or parity [3] or
                parity [4]) then
          begin
            while pile [pileno] = 0 do pileno :=
                  pileno+1;
            if pile [pileno] = 1 then  ntaken :=1
            else
            ntaken := random mod (pile [pileno]-1)+1;
          end
        else
        begin
          firstbit := 1;
          while not parity [firstbit] do 
            firstbit := firstbit + 1;
            while not bit [pileno , firstbit] do
              pileno := pileno + 1;
              for i := firstbit to 4 do
                begin
                  x := 1;
                  for j := 3 downto i do x := x*2;
                    if parity [i] then
                    if bit [pileno, i] then
                    ntaken := ntaken + x
                    else ntaken := ntaken - x;
                  end;
        end;
      with move do pile [pileno] := pile [pileno] - ntaken;
    end; (* of mymove *)
  begin
  signon;
  repeat
    for i := 1 to 3 do pile [i] := random mod 10 + 6;
    display;
    repeat
      hismove;
        if gameover then writeln ('Congratulations...',
                                   ' you win !')
      else begin
        display;
        mymove;
        for i := 1 to delay do ;
        display;
        writeln ('My move was', move.ntaken : 3,
                  ' from pile', move.pileno:2);
        if gameover then writeln ('*** I win.');
        writeln;
        writeln;
      end;
    until gameover;
    write ('Another game ? ');
    while input^ = ' ' do get (input);
    read (key);
    while not eoln do get (input);
  until key = 'n';
  page;
  end.


  3. OXFORD PASCAL REFERENCE MANUAL

  This manual is intended to be used for quick reference by those
  familiar with Pascal or a similar programming language.


  3.1 GENERAL


  3.1.1 Pascal Keywords

  These are reserved words in Pascal and cannot be redefined.
  They must be written without embedded spaces or newlines.
  A complete list is:

  and         do          function    nil         program     type
  array       downto      goto        not         record      until
  begin       else        if          of          repeat      var
  case        end         in          or          set         while
  const       file        label       packed      then        with
  div         for         mod         procedure   to


  3.1.2 Pascal Identifiers

  These are names chosen by the programmer for variables, constants
  etc., and should consist of at least one letter, followed by zero
  or more letters or digits.  Upper and lower case letters are
  equivalent.  Identifiers should be unique in the first 8
  characters, and must not contain embedded blanks.

  The following identifiers are standard (but may be redefined):

  abs          eoln         new          read         sqrt
  arctan       exp          odd          readln       succ
  boolean      false        ord          real         text
  char         get          output       reset        true
  chr          integer      pack         rewrite      trunc
  cos          input        page         round        unpack
  dispose      in           pred         sin          write
  eof          maxint       put          sqr          writeln

  (see also section 3.9 - extensions).


  3.1.3 Other Special Symbols

  +            <            '(apostrophe) [           :=
  -            <=           .             ]           ;
  *            >=           ..            (           ,
  /            >            (*            )           :
  =            <>           *)

  These symbols should not contain embedded blanks.


  3.1.4 Comments

  Pascal comments are enclosed by the symbols (* and *).

  Comments are totally ignored by the compiler.  They can contain
  any characters except the closing delimiter "*)".


  3.1.5 Constants


  Integer Constants

  These consist of a sequence of digits, for example;

  33 0001 0

  No check is made to ensure that the value is less than 2**15.
  Integer constants must not contain embedded blanks or commas
  (see also section 3.9.1 on hex constants).


  Real Constants

  These are of the form:

     <integer part>.<fractional part>
  or <integer part>E<exponent>
  or <integer part>.<fractional part>E<exponent>

  The integer and fractional parts are non-null strings of digits.
  The "E" may be in upper or lower case in OXFORD Pascal.
  The exponent is a digit string which may be preceded by a sign
  [+ or -].

  Real constants must not contain ANY embedded blanks.

  Examples:

  3.14159     4E-9        -387.4E11   1E+30

  A real constant which is out of range (greater than about 1E38)
  will cause an error.


  Character and String Constants

  These are enclosed in single quotes, and may contain any character
  except a newline.  Single quotes are included in a string by writing
  them twice.

  Examples:

  'c', '$', '''' (character constants)
  'Hi there!', 'Fred''s string' (string constants)

  (see also section 3.9.1 on hex constants).


  3.1.6 Blanks

  Any number of spaces or newlines may separate two keywords,
  identifiers, constants or other symbols, but at least one blank
  is required between adjacent keywords, identifiers and numbers.


  3.2 DATA TYPES AND OPERATORS


  3.2.1 Integer

  Pascal integers are whole numbers in the range -MAXINT to +MAXINT
  where MAXINT is an implementation defined constant (32767 in OXFORD
  Pascal).

  OXFORD Pascal stores integers in 16-bit 2's complement form,
  so integers may range from -32768 to +32767.

  Integer operators are

  +   addition
  -   subtraction
  *   multiplication
  div Integer division (result is rounded towards zero)
  mod remainder operator
  -   (unary operator) negation

  + and - complement results mod 2**16.
  *, div and mod are defined only on values in the range
  -MAXINT..MAXINT, and the result must be in this range
  (otherwise an error occurs).

  Division by zero causes an error.

  x mod y=x-((x div y)*y)


  3.2.2 Real

  Real numbers in OXFORD Pascal are held in floating point binary
  form with a 32-bit mantissa (9 digits).  The exponent can range
  from -38 to +38.

  The operators +, -, * behave as for integers, but produce a REAL
  result.  (Which will cause an error if it is out of range).

  The operator / denotes floating point divdsion.  Division by zero
  will cause an error.

  Integer expressions and constants can be used wherever a real
  expression is accpetable,  but real values can't be used with
  DIV or MOD.

  Conversion from real to integer is done by the functions TRUNC and
  ROUND (sections 2.8).


  3.2.3 Char

  The Pascal data type "char" operates on an ordered set of
  characters.  In OXFORD Pascal the 128 character ASCII set is used.
  (Extended to 256 characters to include 64 graphics).

  In all implementations of Pascal the digits '0' to '9' are
  guaranteed to be ordered and continuous, and the letters 'A' to 'Z'
  are ordered (but not necessarily contiguous).

  The standard function ORD and CHR converts from character to integer
  and back. For example, in OXFORD Pascal:

  ord('A')=65
  chr(36) ='$'

  Also, succ(x) gives the next character after x, and pred(x) gives
  the character before x, for example:

  succ('3')='4'
  pred('1')='0'

  Note that in OXFORD Pascal succ(chr(255)) and pred(chr(0)) are
  undefined, and chr (x) with x outside the range 0..255 is not
  allowed.


  3.2.4 User-Defined (enumerated) Types

  These are usually defined by means of a type declaration (section
  3.2) for example:

  type day=(monday, tuesday, wednesday, thursday, friday, saturday,
            sunday);

  colour=(RED, GREEN, BLUE);

  The data type "day" then has seven ordered values represented by
  the identifiers MONDAY, TUESDAY, etc.

  The type "colour" has three values.  The function ORD, SUCC and
  PRED may be used of these types (see the previous section).
  For example:

  succ(wednesday) = thursday
  pred(green)     = red
  ord(monday      = 0
  ord(green)      = 1
  ord(sunday      = 6

  3.2.5 Subrange Types

  The user may define subranges over any scalar type except REAL.

  Examples:

    type year = 1970..1990;
    weekday   = monday..friday;

  These types have the same properties as their parent types, but
  often occupy less storage space, and values are checked at runtime
  to see that they fall in the required range. They also act as a
  convenient means of documentation.


  3.2.6 Boolean

  Boolean values in Pascal are represented by the standard identifiers
  TRUE and FALSE.  In fact the data type Boolean may be thought of as
  resulting from the  declaration:

  type boolean=(false, true)

  so true > false.  The Boolean operators defined in Pascal are:

  and - logical "and" operation
  or  - logical "or" operation
  not - (unary operator) logical negation.

  The relational operators

     <  less than
     >  greater than
     =  equal to
    <=  less than or equal to
    >=  greater than or equal to
    <>  not equal to

  may be used with any scalar data type (integer, real, Boolean, char,
  user-defined), and give a Boolean result.  They may also be used to
  compare strings (section 5.)


  3.2.7 Operator Precedence

  The relational operators

  < > <= >= = <> in (section 5)

  have lowest precedence, followed by

  + - or

  then

  * / div mod and

  and finally the unary operator

  not

  Evaluation is otherwise left to right, and can be changed by using
  parentheses.  Particular care should be taken with expressions like:

  (x>3) and (y=2)

  This would be illegal if the parentheses were ommitted.


  3.2.8 Summary of Arithmetic and Conversion Functions

  Function   Parameter         Result      Meaning

  abs(x)     integer           integer     absolute value
  abs(x)     real              real        absolute value
  sqr(x)     integer           integer     square
  sqr(x)     real              real        square
  sqrt(x)    real or integer   real        square root (x>=0)
  ln(x)      real or integer   real        natural logarithm (x>0)
  exp(x)     real or integer   real        e raised to the xth power
  sin(x)     real or integer   real        sine (x in radians)
  cos(x)     real or integer   real        cosine (x in radians)
  arctan(x)  real or integer   real        arctangent (0 to PI
                                           radians)
  trunc(x)   real              integer     convert real to integer by
                                           truncation towards zero                                             
  round(x)   real              integer     converts real to integer
                                           by rounding
  chr(x)     integer           char        convert ASCII value
  odd(x)     integer           Boolean     TRUE if x is odd
  ord(x)     scalar*           integer     position within a data type                                             
  pred(x)    scalar*           scalar      preceding value in a data
                                           type
  succ(x)    scalar*           scalar      next value in a data type

  *can't be real


  The function "x to the power of y" may be calculated (for x>0)
  using the expression:

  exp(y*ln(x))


  3.3 PASCAL DECLARATIONS AND STATEMENTS


  3.3.1 Pascal Programs

  A Pascal program takes the form:

  program header
  label declaration
  constant declaration part
  type declaration part
  variable declaration part
  function and procedure declarations
  BEGIN
  executable statements
  END.

  The declarations are all optional.  Label declarations are
  discussed in 3.3.12, functions and procedures in 3.6.

  The program header is optional in OXFORD Pascal.  If it is included
  it consists of the keyword PROGRAM followed by a name (which can be
  any valid identifier) followed by a list of identifiers in brackets,
  for example:

  program joe(input, output);

  "Input" and "Output" are external files used by the program "joe".
  The header is terminated by a semicolon.

  The final full stop after the program "end" is always required.


  3.3.1.1 Constant Declarations

  These are used to assign values to identifiers which will not change
  throughout the program.  They facilitate modifications to the
  program and provide a means of documentation.

  The key word "const" is followed by one or more declarations of the
  form:

  identifier=value;

  "value" may be a signed or unsigned integer, real, a Boolean,
  character, string, a member of an enumerated type or a previously
  defined constant identifier.

  Examples:

  const   message = 'hi there!';
          ch      = '$';
          PI      = 3.14;
          MINUSPI = -PI


  3.3.2 Type Declarations

  These are used to make an identifier synonymous with a given data
  type.  The keyword "type" is followed by one or more declarations:

  identifier=datatype;

  Examples:

  type   suit = (SPADES, HEARTS, DIAMONDS, CLUBS);
         int  = integer;
         byte = 0..255;


  3.3.3 Variable Declarations

  In Pascal all variables must be declared explicitly.  This is
  sometimes annoying but makes the programmer's intention clearer and
  helps the compiler to detect errors.

  The word "var" is followed by one or more declarations:

  identifier list: datatype;

  Examples:

  type day=(monday, tuesday, wednesday, thursday, friday);
  var x, y:real;
  i: integer;
  switch : Boolean;
  today, tomorrow, payday:day;
  favouritecolour : (BLUE, RED, GREEN, PINK);
  date : 1970..1990;

  The variables denoted by these identifiers can then take any of the
  allowed values for the corresponding data type.


  3.3.4 Executable Statements

  The executable part of a Pascal program inclosed by the keywords
  BEGIN and END, consists of zero or more sequentially executed
  statements separated by semicolons.  Redundant semicolons are always
  accepted and generate no code.  There is no need for any
  correspondence between the logical structure of statements and their
  physical layout.  Well formatted programs with one statement per
  line are easier to read, however.


  3.3.5 Assignment Statements

  The form of this statement is:

  variable:=expression

  Where the left and right hand sides must have compatible data types.
  This means that they must arise from the same type identifier, or be
  declared as variables in the same declaration.  Exceptions are if
  the variable type is a subrange of the expression type, or they are
  sets with compatible base types, or if the left hand side is real
  and the right handside is integer.

  The value of the variable is set to the value of the expression, and
  future references to the variable will yield this value.

  Examples:

  x:=3/sqrt(36)
  Y:=x+4
  y:=y-2

  x and y are "real" variables;

  x is set to 0.5
  y is set to 4.5
  y is set to 2.5


  3.3.6 Compound Statements

  The construction:

  BEGIN
  Sequence of statements separated by semicolons
  END

  behaves as a single statement, which when executed causes the
  execution of all the enclosed statements in sequence.


  3.3.7 "If" Statements

  The statement "IF Boolean expression THEN statement 1" causes 1 to
  be executed only if the expression is TRUE.  Alternatively,
  "IF Boolean expression THEN statement 1 ELSE statement 2" causes
  statement 2 to be executed instead if the expression is FALSE.

  IMPORTANT - no semicolon may be placed before the ELSE.

  Statement 1 and statement 2 can be any Pascal statement, including
  another IF statement.  For example:
  if x then if y then s1 else s2 - is taken to mean:

  if x then
  begin
    if y then s1 else s2
  end


  3.3.8 "Repeat" Statement

  REPEAT
  sequence of statements separated by semicolons
  UNTIL Boolean expression

  causes the sequence to be executed repeatedly (at least once) until
  the expression evaluates to TRUE when it is checked at the end of a
  loop.


  3.3.9 "While" Statement

  WHILE Boolean expression DO statement 1

  Statement 1 is repeated zero or more times until the expression
  turns out to be FALSE.


  3.3.10 "For" Statement

  FOR variable:=e1 TO e2 DO statement 1

  The variable can be any scalar type except real.  e1 and e2 are
  expressions of the same type as the variable.  Statement 1 is
  execute exactly ord(e2)-(e1)+1 times (zero times if e2<e1).
  On successive loops the value of the variable is e1, succ(e1),
  succ(succ(e1)),...,e2

  An alternative form is:

  FOR variable:=e2 DOWNTO e1 DO statement 1

  Where statement 1 is executed with successively decreasing values
  of the variable.
 
  Statement 1 should not try to alter the variable, as in:

  for i:=1 to 10 do i :=i+1 (* WRONG *).

  Structure members (sections 5) can't be used as control variables
  in FOR loops.

  Also, control variables must be local to the current block
  (section 6.4).


  3.3.11 "Case" Statement

  CASE expression OF
  constant list : statement;
  constant list : statement;
  :
  :
  constant list : statement;
  END

  A redundant semicolon may be included before the END, as shown.

  Each constant list consists of one or more constants (which must be
  the same data type as the case expression), separated by commas.
  The case expression must be a scalar type (and can't be real).
  Each label in the case statement should be unique, and indicates
  that the statement it prefixes is the one to be executed if the case
  expression has that value.  If no case labels match the expression
  value when the case statement is executed, a CASE ERROR occurs.

  WARNINGS - Case statements with a wide spread of values should be
  avoided, for example:

  Case n of
  1 : statement 1;
  44255 : statement 2
  end

  This will generate a large jump table in memory with null entries
  for all the intermediate values (2,3 etc.).  Generally, case
  statements are an efficient way of choosing one of many similar
  statements to execute.


  3.3.12 "Goto" Statement

  Pascal statements may be prefixed by a label thus:

  label : statement

  The label is an unsigned integer which should differ from all other
  labels in the first 8 digits in OXFORD Pascal (4 digits in standard
  Pascal).  Control can then be transferred to this statement from
  another part of the program by means of the "goto" statements.

  GOTO label

  All labels must be declared before use (see below).

  The effects of jumping into a structured statement (FOR, WHILE,
  REPEAT, IF, CASE, WITH) or into a function or procedure is
  undefined.

  The use of GOTO's is not recommended if it can be avoided, since
  programs quickly become unreadable and error detection becomes very
  difficult.

  Jumping to an undefined (as against undeclared) label is signalled
  as a runtime error in OXFORD Pascal.

  GOTO's can be used to exit from nested functions an procedures.


  Label Declaration

  This takes the form:

  LABEL list of labels;

  The labels are separate by commas.


  3.4 INPUT AND OUTPUT OF TEXT

  a file is a pascal structure variable which (unlike an array) has
  no fixed size.  Its elements are normally accessed sequentially and
  either reside on a disc or are associated with some physical I/O
  device such as the keyboard or display.

  In this part we look mainly at textfiles,  which are essentially
  files of characters (Pascal data type CHAR), but which give special
  treatment to the newline character.  In particular the standard
  textfiles INPUT and OUTPUT, which are usually the keyboard and
  display, are discussed.  Disc files are covered later
  in 3.8 and 3.9.


  3.4.1 Outputting to Textfiles

  A textfile is a variable declared as type TEXT.  Associated with any
  Pascal file f is a buffer variable f^ which is used in transferring
  data to and from the file.
  The standard proceure call:

  write(f,ch)

  is equivalent to:

  f^:=ch; put(f)

  writeln(f)

  sends a newline character (ASCII carriage return followed by a line
  feed) to the file f.

  page(f)

  sends a form-feed (or clears the screen in the case of the display).


  3.4.2 Inputting From Textfiles

  get(f)

  reads the next item from the file f into f^.

  read(f,ch)

  for a character variable ch is equivalent to:

  ch:=f^; get(ch)

  If the result of a GET is a newline character (a carriage return -
  linefeeds are ignored in textfiles), then f^ appears to contain a
  space and the standard function EOLN(f) is set to TRUE.
  Otherwise EOLN(f) is FALSE.

  If the end of the file has been reached then get(f) will cause the
  standard function EOF(f) to become true, and f^ will be undefined.
  Doing a get(f) while EOF(f) is TRUE will cause an error.

  readln(f)

  skips to the start of the next line.  It means:

  begin while not eoln(f) do get(f); get(f) end


  3.4.3 Reading Other Data Types From Textfiles

  Syntax

  read(f, variable list)

  each variable in the list can be of type CHAR, INTEGER or REAL.

  char     :reads one character into the variable, as above.

  integer  :reads any valid (signed or unsigned) integer constant into
            the variable, skipping leading blanks and newlines.
  real     :reads any valid integer or real constant into the
            variable, skipping leading blanks and newlines.

  f^ is set in each case to the next character after the data read.


  3.4.4 Writeing Other Data Types to Textfiles

  Syntax:

  write(f,expression list).

  each expression can be of a type CHAR, REAL, BOOLEAN, INTEGER or a
  string, and may be qualified by a field width

  expression : w

  where w is a non-negative integer expression giving the total number
  of characters to write to the file.

  Character or string: Write sufficient spaces to give a total of w
                       characters, then write the character or string.
                       If w is too small then the string is truncated
                       on the right.  Default w=the size of the
                       string.

  Boolean:             As with string, but one of 'TRUE' or 'FALSE'
                       is written.  Default w=6.

  Integer              Write sufficient spaces first to give a total
                       of w characters.  Then write the number without
                       leading zeros, precede by a minus sign if it is
                       negative.  If w is too small print out the
                       entire number with no spaces.  Default w=7.

  Real:                There are two formats:
                       (i) Floating point - write a sign character
                       (space or '-') followed by a digit, followed by
                       a decimal point, followed by enough digits to
                       give a total of w characters, followed by a
                       4-character exponent.  If w is too small, at
                       least one digit is still printed after the
                       decimal point.  Default w=12.

                       (ii) Fixed point - the number of decimal places
                       must be specified:

                       expression : w : d

                       Enough spaces are first printed to give a total
                       of w characters, followed by a minus sign if
                       negative, followed by a decimal point and d
                       fractional digits, with roundings if necessary.
                       If w is too small, no spaces are printed but
                       the entire number is still output.


  3.4.5 Abbreviations

  write(f,...) is short for write(f,...);writeln(f)
  read(f,...) is short for read(f,...);readln(f)
  write(...) is short for write(output,...)
  read(...) is short for read(input,...)
  writeln is short for writeln(output)
  readln is short for readln(input)
  eoln is short for eoln(input)
  eof is short for eof(input)
  page is short for page(output)


  3.4.6 Manipulation Files

  there is no problem in passing files as variable parameters.
  In OXFORD Pascal (but not in standard Pascal) assignment and
  passing as value parameters is also allowed.
  For example:

  var sourcefile : text
      :
      :
  Begin
    sourcefile := input;
       :
       :
    read(source file,x); (* reads from keyboard *)


  3.5  STRUCTURED DATA TYPES


  3.5.1 Arrays

  The syntax of array types is:

  ARRAY(indextype) OF elementtype.

  Where "indextype" can be any scalar or subrange type except real.
  If indextype has values ranging from m to n, say, then this defines
  an array of ord(n)-ord(m)+1 values of type "elementtype", which are
  referenced using the subscripts [m], [succ(m)],...,[n].

  Alternatively arrays can be accessed as a whole:

  Examples:

  var x,z : array[1..64] of integer;

  y : array[0..3] of array[-4..21] of real;
  begin

  x[1] := 0;
  x[5] := x[1]+2;
  y[3] [1] := 3.345;
  z := x;  (* Transfer whole array *)

  "elementtype" may be any Pascal data type.  N-dimensional arrays may
  be abbreviated as follows:

  array[t],t2,...,tn] of sometype

  which is equivalent to:

  array[t] of array[t2] of .. array[tn] of sometype

  example:

  var x: array[1..7,4..9,boolean] of char;

  reference to n-dimensional arrays may also be abbreviated,

  x[i,7,false] := '$';


  3.5.2 Sets

  The syntax is:

  SET OF elementtype

  where "elementtype" should be a scalar or subrange type, but not
  REAL.  Sets are constructed from a collection of values in square
  brackets, for example:

  var x : set of 0..127;
      y : set of (RED, GREEN, BLUE);
  begin
      x:= [1,sqr(2),6..74];
      y:= [BLUE,GREEN];

  where 6..74 gives all the values between 6 and 74 inclusive.
  Set elements must have ordinal values between 0 and 127 inclusive.
  If their base types are compatible, then two sets are said to be
  compatible. sets are:

  *
  + and -
  = <> <= >=

  Intersection (highest precedence)
  Union and difference
  Equality, inequality and inclusion tests.

  The IN operator tests membership of a set.  The left hand side
  should be a scalar compatible with the sets base type.  IN has the
  same precedence as the relational operators <>, = etc.

  Examples:

  Assuming

  var x, y : set of (APPLES, PEARS, ORANGES, BANANAS, FIGS);
  begin
    x:=[APPLES, PEARS, BANANAS];
    Y:=[BANANAS, FIGS];

  Then

  x+y is [APPLES, PEARS, BANANAS, FIGS]
  x-y is [APPLES, PEAR]
  x*y is [BANANAS]
  x=y, x<=y and x>=y are false
  x<>y is true
  y<=[APPLES, FIGS, BANANAS] is true
  y<=y is true
  y>=y is true
  y=[BANANAS, FIGS] is true
  BANANAS IN y is true
  ORANGES IN x+y is false


  3.5.3 Records

  The basic syntax is:

  RECORD

  identifier list : data type;
  identiefer list : data type;
  :
  identifier list : data type
  END

  An optional semicolon may be placed before the END.  The fields may
  be accessed by the field name preceded by a dot, for example:

  var x,y:record
      a,b:integer
      c:real
  end;
  begin
      x.b:=-33;
      x.c:=9E-20;
      x.a:=x.b+2;

  Entire records may also be assigned:

  x:=y;


  Several different record definitions may be combined using the
  following syntax:

  RECORD
  any field common to all variants
  CASE identifier:datatype OF
    constant list : (field list)
    constant list : (field list)
    :
    :
    constant list : (field list)
  END

  Again there can be a redundant semicolon before the END.
  The variant "field lists" may themselves contain nested variants,
  for example:

  type date=record
    year:integer;
    month : (JAN, FEB, MAR, APR, MAY, JUN, JLY, AUG, SEP, OCT, NOV,
             DEC);
    DAY : 1..31;
  end;
  person=record
    name: packed array[1..30] of char;
    birthday : date;
    case status: (EMPLOYED, UNEMPLOYED, RETIRED, STUDENT) of
      UNEMPLOYED: (registered : date);
      EMPLOYED : (case selfemployed : boolean of
        true : (numberofemployees:integer);
        false : (employer:packed array[1..30] of char;
        dateemployed : date))
  end;
  var his:person;
  begin
    his.name:='Harry Johnson';
    his.birthday.year:=1983;
    his.birthday.month:=DEC;
    his.birthday.day:=12;
    his.status:=EMPLOYED:
    his.employer:=
      :
      etc.

  WITH statements have the effect of declaring the fields of a record
  as local variables for that statement.  For example:

    with his birthay do
      begin
        month:=DEC:

      year:=1983;
      day:=12;
    end;

  The record cannot however be referenced as a whole from inside the
  WITH statement.

  WITH r1, r2, ..., m DO statement

  is equivalent to:

  WITH r1 DO WITH r2 DO ... WITH m DO statement


  3.5.4 Packed Structures

  Records, arrays, sets and files may be preceded by the word
  "packed".  This is a command to the compiler to optimise storage
  space for that structure, possibly at the expense of speed in
  accessing individual components of the structure.  In OXFORD Pascal,
  "packed" has little effect on speed, but may cut storage by half in
  arrays of enumerated values, characters and subranges (0..255 and
  less).  The disadvantage is that packed array elements can't be used
  as VAR parameters to procedures or functions (but whole packed
  arrays can).

  Packed arrays[1..n] of type CHAR are special in pascal because they
  are considerded to be string variables of length n.

  Examples:

  var x,y : packed array[1..4] of char;
      z : packed array[1..10] of char;
  begin
    x:='how';
    y:='when';
    z:='Hi there!';

  y=x is false, y>x, y>= and y<>x are true.
  y>'what' is true, x<'why' is true.

  But note:

  x and z are incompatible (different lengths)
  x and 'hello' are incompatible.
  z and 'who' are incompatible.


  3.5.5 Pack and Unpack (not available in resident mode)

  Access to individual components of packed arrays may be costly, and
  the programmer is advised to pack or unpack a packed array in a
  single operation.

  If U and P are array variables, for example:

  type t=(some data type);
  var U : array[m..n] of t;
      P : packed array[a..b] of t;

  where(n-m)>=(b-a) then:

  pack(U,i,P)

  is equivalent to:

  for j:=a to b do U[j-a+i]:=P[j]


  3.6 FUNCTIONS AND PROCEDURES


  3.6.1 Function and Procedure Definitions

  The syntax for each definition is the same as the syntax for a
  program, except that a function or procedure header is used
  instead of a program header, and also a semicolon appears at the
  end instead of a full stop:

  procedure or function header
  label declarations
  const definitions
  type definitions
  variable declarations
  procedure and function definitions
  BEGIN
  excutable code for this procedure or function
  END;

  Any number of procedures or functions may be defined in a program.
  The definitions should occur between the variable declarations and
  the main "BEGIN" of the program.

  A procedure header has the form:

  PROCEDURE procedurename;

  or

  PROCEDURE procedurename(formal parameter list);

  A function header has the form:

  FUNCTION functionname : datatype;

  or

  FUNCTION functionname(formal parameter list) : datatype;


  3.6.2 Procedure and Function Calls

  Procedure calls are statements having the form:

  procedurename

  or

  procedurename(parameters)

  The effect is to excute any code between the BEGIN and the END of
  the procedure definition, and then return to continue the program
  normally, from the statement after the call.

  Function calls are expressions  which have the data type specified
  in the function header.  To evaluate the function, any code between
  the BEGIN and the END of the  definition is executed, and the value
  returned by a function must be a scalar or a pointer.

  Examples:

     procedure x;
     begin
       writeln('xxxxx')
     end;
     begin x;
       writeln('yyyyy');
       x
     end.

  Is equivalent to 

     begin
       writeln('xxxxx');
       writeln('yyyyy');
       writeln('xxxxx')
     end.

  The following example will set i to the value of 4:

     var i : integer;
     function xyz : integer;
       begin
         xyz:=2;
         xyz:=4
       end;
     begin
       i:=xyz
     end.


  3.6.3 Parameters

  The usefulness of procedure and function calls can be extended by
  passing parameters.  If these are used they must correspond in
  number, position and type with the formal (dummy) parameters in
  the definition.

  The formal parameter list contains one or more parts separated by
  semicolons.  Each part has one of the forms:

  identifier list : datatype
  VAR identifier : datatype
  FUNCTION identifier list : datatype
  PROCEDURE identifier list

  These correspond to four different classes of parameters,
  identifiers, variables, FUNCTION and PROCEDURE parameters which
  are substituted with expression values, variables, function and
  procedure names respectively when the function or procedure is
  called.

  Examples:

  const SIZE=20;
  type vec=array[1..SIZE] of integer;
  var v:vec; i:integer;
  function tan(x:real):real;
  begin
      tan:=sin(x)/cos(x)
  end;

  procedure zero(var a:vec);
  begin
      for i:=1 to SIZE do a[i]:=0
  end;
  function square(x:integer):integer;
  begin
      square:=sqr(x)
  end;
  function sigma(function f:integer; n,m:integer):integer;
  var sum, i:integer;
  begin
      sum:=0;
      for i:=n to m do sum:=sum+f(i);
      sigma:=sum;
  end;

  Given the above definitions

  tan(0.5) would give the tangent of 0.5 radians
             (sin(0.5)/cos(0.5))
  zero(v) would set the array v to be all zeros.

  Note that passing large arrays (and records) as VAR parameters is
  a good idea, because the computer does not then have to copy the
  array.

  sigma(square,1,20)

  evaluates 1+4+9+16+...+400.

  OXFORD Pascal (and many other Pascal systems) will not let you
  pass standard function and procedure names as parameters, hence
  the need for the function "square".

  WARNING - Functions and procedures passed as parameters can
  themselves only have value parameters, and these are not checked.

  So:

  procedure x(a:real);
  begin
  :
  end;
  procedure y(procedure b);
  begin
     b(4)
  end;
  :
  begin
  y(x)

  will lead to disaster because x expects a real and gets an integer
  parameter (4).


  3.6.4 Local Declarations

  Any variables, constants, labels, types, procedures and functions
  declared within a  procedure or function are local to that proceure
  or function and cannot be referred to from outside it.

  "Global" identifiers defined outside a function or procedure may
  also be referenced inside it, unless they have been redefined by
  local definitions.

  Examples:

  program example;
  var i:integer;  (* may be referenced by main prog, P1 and P2 *)
      j:real;     (* may be referenced by main prog and P3 *)
      k: boolean; (* may be referenced anywhere *)
  procedure P1;
       var j:integer; (*may be referenced by P1 and P2 only *)
       procedure P2;
       var m:char; (* may be referenced by P2 only *)
       begin
       :
       end;
  begin
  :
  end; (* of P1 *)
  procedure P3;
  const i=49; (* may be referenced by P3 only *)
  :

  P1 and P3 may be called from anywhere.
  P2 may be called from P1 or P2.


  3.6.5 Recursion and Forward References

  Functions and procedures can call themselves recursively:

  function factorial(x:integer):integer;
  begin
     if x=0 then factorial:=1
     else factorial:=factorial(x-1)*x
  end;

  factorial(4) gives 4*3*2*1=24


  Sometimes it is helpful for a procedure to be able to call
  another procedure before the procedure being called is defined.
  The undefined procedure must previously have been declared with
  name and parameter list, together with "forward" - see example.
  The parameter list is not required on subsequent declaration of
  the procedure.

  Example:

  procedure x(parameters for x); forward;
  procedure y(parameters for Y);
  begin
       (* calls x *)
  end;

  procedure x;
  begin
       (* calls y *)
  end;

  x and y call one another (they are "mutually recursive").


  3.7 DYNAMIC STORAGE AND POINTERS


  3.7.1 Pointers

  Variables of a pointer type take as values the memory address of
  other variables.  This can be used in Pascal to create variables
  as required while the program is running, since the compiler does
  not need to know the memory address in advance if it can be
  stored in a pointer.  The syntax of a pointer type is:

  type pointed to

  where "type pointed to" is an identifier which is the name of some
  data type (which could be declared later, allowing recursive
  definitions such as linked lists and trees).

  Examples:

  type treepointer=tree;
      tree=record
         leftbranch, rightbranch : treepointer;
         data : sometype;
      end;
  var oak : tree;
      p   : integer;

  The only way of giving a pointer a value in standard Pascal is to
  assign it the value "nil"  (which is guaranteed to point to no
  variable) or to use the procedure "NEW".

  In OXFORD Pascal, "nil" is the address 0000.

  Pointers can, once assigned a value, be tested for quality
  (<> and =).


  3.7.2 "New" and "Dispose"

  NEW allocates a new variable from the available storage (if any)
  and stores a pointer to it in the specified variable.

  The variable created may then be referenced by the pointer
  variable followed by a.

  DISPOSE destroys the variable pointed to by the specified pointer
  and makes the storage available for other use.  Of course you must
  be sure that the variable being DISPOSED is never referenced again.

  Examples:

  var p: real;
  begin
     new(p)
     p := 103.7;
     write(p*p*p);
     dispose(p)
  end.

  Would print the cube of 103.7 and then destroy the space used to
  store it.  P means the variable whose address is in p.


  3.8 DISK FILES

  (sections 8.1 to 8.4 do not apply to resident mode)


  3.8.1 Declarations

  Disk files are declared as Pascal variables of type "file of X"
  where X is the base type of the file, and can be any structures
  or unstructured data type.  For example:

  type patient=record
       name : packed array[1..2] of char;
       wordnumber : integer
    end;
  var f: file of integer;
      g,h:file of patient;

  Every file f declared in Pascal has an associated buffer variable
  f^ whose type is the base type of the file.  Disk files can also
  be textfiles, for example:

  var f1, f2 :test; (see section 3.4.1)


  3.8.2 Sequential Writing

  Before they can be read or written, disk files must be opened
  using one of the standard procedures RESET and REWRITE.
  Up to 5 sequential disk files may be open at any time.

  rewrite(f)

  creates an empty file which is then open for sequential writing.
  The end-of-file eof(f) will return TRUE in this mode.
  The call put(f) writes the data in the file buffer (the
  variable f^) to the file.

  The sequence:

  begin f^ :=expr; put(f) end

  may be abbreviated to:

  write(f,expr)

  IMPORTANT NOTE - in OXFORD Pascal, assignments should not be made
  to the buffer variable f^ before a reset(f) or rewrite(f) has
  been done.


  3.8.3 Sequential Reading

  The procedure call:

  reset(f)

  opens the file f for sequential reading.  f must previously have
  been written by a REWRITE command, otherwise the error message
  FILE DOES NOT EXIST will be printed.  The first record in the
  file will be placed in the variable f^. (Or if f is  empty, f^
  will be undefined and eof(f) will be true).

  Successive records can be read into the buffer variable f^ by
  the procedure call:

  get(f)

  read(f,x) is equivalent to x:=f^; get(f)

  The function eof(f) returns TRUE when there are no more records
  in the file.  Attempts to read past an end-ot-file will cause
  an error.

  As an example the following program writes a file containing the
  numbers 1 to 10, and then reads them back displaying them on the
  64 screen:

  var i: integer;
      testfile : file of integer;
  begin
      rewrite(testfile);
      for i:=1 to 10 do write(testfile,i);
      reset(testfile);
      while not eof(testfile) do
        begin
          read(testfile,i);
          writeln(i)
        end
  end.


  3.8.4 External Files

  The files described above are "internal" files, in other words
  temporary files which are normally deleted when the program (or
  procedure or function) in which they are defined finishes.
  Permanent diskette files may be created and/or accessed by giving
  a filename parameter to RESET or REWRITE.  (The parameter may be
  either a string constant or a string variable).  This is an
  extension to standard Pascal allowing specification of filenames,
  which can be useful in interactive programs.

  Note that the filename cannot contain any imbedded spaces.
  If the filename is a string variable, it should be terminated
  by at least one space.

  Examples:

  var fname : packed array[1..15] of char;
      f, g : file of sometype;
  begin
      reset(f,'datafile')
      fname:='0:TEMP,HEX ';  (* drive must be speciied *)
      rewrite(g,fname);


  3.8.5 Reading and Writing From Other Devices

  Any device on the IEEE bus may be accessed by using RESET or
  REWRITE with the syntax:

     reset(f,devicenumber,secondaryaddress)
  or reset(f,devicenumber,secondaryaddress,filename)

  where device number and secondary address are integer expressions.
  This syntax can also be used in resident mode.

  var printer:text;
  begin
     rewrite(printer,4,0);
     writeln(printer,'Message with UPPER case!');

  The rewrite command may be used to send commands to the floppy disk
  unit, for example:

  const DISK=8; (* disk unit physical device # *)
        CC=15;  (* command channel secondary address *)
  var f:text;
  begin
     rewrite(f,disk,xx,'11'); (* Initialize drive 0 *)
     rewrite(f,disk,cc,'RO:NEWNAME=OLDNAME');(* rename a file *)
     rewrite(f,disk,cc,'C1!COPY=0;FILE1,0:FILE2');(*Copy disk files*)


  3.8.6 CLOSE command

  This command is an extension to standard Pascal.  It may be used
  to explicitly close a file (without resetting or rewriting) if
  required.  The syntax is:

  close(f)


  Disk Textfile Example

  The following example program prompts the user for a disk file
  name, and then outputs an upper-and-lower-case textfile to the
  64 printer.

  program printfile;
  var fname : packed array[1..80] of char;
      ch : char;
      f,printer : text;
  begin
     writeln;
     writeln(Filename?');
     read(f,fname);
     reset(f,fname);
     rewrite(printer,4,0);
     while not eof(f) do
       begin
          while not eoln(f) do
             begin
               read(f,ch);
               write(printer,ch);
             end;
          readln(f);
          writeln(printer);
       end
  end.


  3.9 EXTENSIONS TO STANDARD PASCAL


  The features described in this section are specific to OXFORD
  Pascal and might not be implemented on other systems.

  3.9.1 Hexadecimal Constants

  These are introduced by the symbol $ (for integer constants or a
  backslash (for character constants).

  Their main application is probably in machine language and I/O
  interfacing

  Examples:

  const portA=$e84f;
        linefeed='a';
  var chardata:char;
  begin
      .
      .
      .
      charadata:=linefeed; (*linefeed is a constant of type CHAR*)
      poke (portA,$3f);

  (writes the data 3f hex to an imaginary VIA port "A" mapped at
  hex memory address E84F)


  3.9.2 Memory VDU and Port Access

  The Standard functions/procedures PEEK, POKE, ORIGIN, GETKEY
  and VDU are provided for this purpose.

  peek (x:integer):0..255

  is a function which gives the contents of the physical memory
  location x, while the procedure:

  poke (x:integer; Y:0..255)

  is used to change the contents of location x to the byte y.
  Poke should, of course, be used with great care to avoid
  corrupting your program.

  origin (x:sometype; y:integer)

  sets the pointer x to point at the physical memory location y.
  x can be any pointer type.  This should be used with care
  (see section 3.10).

  The procedure VDU (x,y :integer; c :char) stores the character c
  in the VDU memory row x, column y.

  Finally, the function

  getkey:char

  returns a character read directly from the keyboard port.
  Chr(0) is returned if no character is ready.

  Examples:

  var x:0..255;

  begin poke($014c,$33);   - stores the byte 33 (hex) at address
                             14c (hex)
  x:=peek(47)              - sets x to the contents of decimal
                             memory address 47
  page;                    - clears the VDU screen

  VDU(0,3,'?');            - writes a question mark to the VDU
                             row 0, column 3
  while getkey=chr(0) do;  - waits for someone to press a key


  3.9.3 Added Commands for OXFORD Pascal V1.0

  SOUND COMMANDS.

  There are three sound commands available as pre-declared procedures
  in OXFORD Pascal.  These allow use of all three voices and envelope
  generators.

  PROCEDURE NAME    ENVEL(V,A,D,S,R);

    PARAMETER                TYPE      RANGE
  V is the voice number.    Integer     1-3
  A is the attack rate.     Integer     0-15
  D is the decay rate.      Integer     0-15
  S is the sustain rate.    Integer     0-15
  R is the release rate.    Integer     0-15


  PROCEDURE NAME    VOICE(V,F,W,D);

    PARAMETER                TYPE      RANGE
  V is the voice number.    Integer     1-3
  F is the frequency.       Integer   0-65535
  W is the wave type.       Integer     0-3
  D is the duration.        Integer   0-65535

  N.B.

  The wave types are triangle, sawtooth, pulse, noise.  The pulse
  length of the pulse signal has been preset to an equal mark space
  ratio.

  The frequency is as defined in the COMMODORE 64 Handbook and is
  determined by the formula Fout=(F*0.059604645)Hz

  The duration is a constant used in an internal delay loop and
  denotes the delay from the signal reaching its sustain level till
  the start of the release cycle.  Realistic effects can be obtained
  by making the duration a factor of the sustain level multiplied by
  some constant.

  The ENVEL command must preceed the VOICE command since the latter
  acts as the trigger for the voice.


  PROCEDURE NAME    VOLUME(L);


    PARAMETER                TYPE      RANGE
  L is the volume level.    Integer     0-15

  The volume command controls the master volume of the SID chip in
  the 64.  It can be set to any level at any time.


  GRAPHICS COMMANDS

  OXFORD Pascal provides various pre-declared procedures and functions
  for use of the graphics on the 64.  These can be split into
  commands for normal screen use, and hi-resolution commands.


  Normal screen commands.

  Set the border colour.

  BORDER(C);


  Set the screen colour.

  SCREEN(C);


  Set the colour for the text to print in.

  PEN(C);

  C is an integer in the range 0-15 and determines the colour as
  defined in the COMMODORE 64 HANDBOOK.


  Hi-Resolution commands.


  Set the background colour to plot on.

  PAPER(C);


  Set the colour to plot in.

  INK(C);


  Hi-Resolution screen switch. (0=OFF/1=ON).

  HIRES(C);


  Examine a point. (0=OFF/1=ON).

  P:=EXAMINE(X,Y);


  Multi-purpose hi-resolution command.

  PLOT(F,X,Y,X1,Y1);

  All parameters are integers.

  F=0  clear background to paper colour.

  F=1  clear all points on hi-resolution screen.

  F=2  plot a line from X,Y to X1,Y1

  F=3  clear a line from X,Y to X1,Y1

  F=4  fill an area around point X,Y till nearest boundaries

  F=5  clear an area around point X,Y till nearest boundaries

  To plot or clear a point make X1,Y1=X,Y


  Create a Text window on Hi-Resolution screen starting at top of
  screen and terminating at line U.

  WINDOW(U);


  3.9.4 Hexadecimal Input and Output

  The procedure WRHEX and WRHEX2, and the function RDHEX are
  provided.

  wrhex(f:text; x:integer)

  writes x as four hex digits on the textfile f.


  wrhex2(f:text; x:0..255)

  writes the byte x as two hex digits.


  Examples:

  rewrite (printer,4,0);

  wrhex(printer,-1); wrhex2(output, 3)

  prints FFFF on the printer and 03 on the 64 screen.


  The function,

  rdhex(f:text):integer

  reads a 16 bit value from the file f, skipping any leading blanks
  and discarding all but the last four digits read.


  3.9.5 Bit Manipulation

  ANDB, ORB, XORB, NOTB, SHL, and SHR are functions operating on
  integers but treated as 16 bit logical data.  The first four do
  bitwise AND, inclusive OR, exclusive OR and 1's complement.

  SHL(x,y) shifts x left by y bits (zeros are shifted in)

  SHR(x,y) shifts x right by y bits

  SHL(x,-y) is equivalent to SHR(x,y)


  Examples:
  andb($fff0,$00ff)=$00f0

  orb($ff00,$000f)=$ff0f

  xorb($ff00,$0ff0)=$f0f0

  notb($f0f0)=$0f0f

  shl(4,4)=$40

  shl(4,-1)=$4000

  shl(4,0)=shr(4,0)=4

  shr($4444,4)=$444


  3.9.6 Catching I/O Errors

  Occasionally it is necessary for a program to protect itself
  against unexpected termination due to invalid input.
  The procedure call:

  iotrap(false)

  turns off PASCAL error messages for real and integer read
  operations and disk I/O:

  iotrap(true)

  turns checking back on again.  After each integer or floating
  point or hex read operation the function IOERROR may be used
  giving an integer error number:

  ioerror=  0  - No error
            2  - Integer read error
            10 - Floating point read error
            etc. see (section 2.8 for a complete list of I/O
            runtime errors).

  3.9.7  Keyboard Interrupts

  The calls:

  restore(true)
  restore(false)

  enable and disable the restore key respectively.

  The default is restore(true).


  3.9.8 Random Number Generator

  The function random:0..255 gives a random no. between 0 and 255.
  A pseudo-random generating sequence is used but this is initialised
  by timing all keyboard inputs and is also "kicked" frequently by
  the PASCAL interpreter.

  The construction

  random+(random mod 128)*256

  generates a ranom no. between 0 and MAXINT, while

  random mod+1

  generates an (almost) random no. in the range 1..n if is not too
  large.


  3.9.9 Underscore

  The character '_' (CBM Key and @ Key) is allowed as a letter in
  identifiers giving improved readability.


  3.9.10 The 64 Internal Clock

  The clock may be examine by using the three functions:

  hours   : integer
  minutes : integer
  Seconds : integer

  and may be set using the procedure settime (h,m,s : integer).

  Example:

  settime(12,47,00);

  Sets the clock to 47 minutes past midday and

  writeln(hours,':',minutes,':',seconds);

  would print:

  12: 47: 0


  3.9.11 Input of String Variables

  String variables (ie packed arrays [1..n] of (char) may be read
  from textfiles in a similar manner to characters, integers and
  reals.  Any leading spaces or newlines are first skipped, then
  an entire line of characters is read from the file into the
  string variable.  If the string is too long, it is truncated on
  the right, if it is too short it is padded out with spaces.

  A major application is for inputting file names from the console.


  3.9.12 Program Chaining (disk mode only)

  The OXFORD Pascal command:

  chain(filename)

  stops execution of the current program and invokes the program
  named.  The value of GLOBAL variables will be preserved only if
  declarations are identical in the old and new programs.
  All files are closed.

  The filename can be either a string or a string variable. (If a
  string variable, at least one space must be used as terminator).

  When used under the EX command, a ".obj" extension is implied.

  Example:

  file "prog1" (object code in "prog1.obj");

        begin
          writeln('First program');
          chain('Prog2')
        end.

  file "prog2" (object code in "prog2.obj"):

        begin
          writeln('Second program');
          chain('Prog1')
        end.

  The command

  ex prog1

  would cause the following to be printed:

  First program
  Second program
  First program
  Second program
  :

  until the stop key is pressed.

  Program chaining is a useful technique for splitting up large
  prograns, or for menu-driven applications.


  3.10 OXFORD PASCAL INTERFACE GUIDE

  The purpose of this section is to provide all the necessary
  information to write 6502 machine language subroutines for
  OXFORD Pascal programs.


  3.10.1 Assembly Language Format

  Assembly language routines are declared as Pascal functions or
  procedures but the body is replace by the word "extern" followed
  by an integer constant (the routine address).  Any parameters are
  passed on the stack and should be removed by the assembly language
  routine.  The routine should also push a return value on the stack
  if it is declared as a function.  The best way to describe this is
  by example, so here is a simple function to add two integers:

  program test;
  function addxy(x,y:integer):integer;
      extern$C000;
  begin
      write(addxy(3,4))
  end.

  This should result in the output:

  7

  Provided that the assembly language routine is correctly located
  at memory address C000h:

  sptr    = $2A            ; Pascal stack ptr
  *       = $C000
  addxy     clc
            ldy#0
            lda(sptr),y    ; low byte y
            ldy#2          ; low byte x
            adc(sptr),y
            sta(sptr),y    ; low byte result
            dey
            lda(sptr),y    ; hi byte y
            ldy#3
            adc(sptr),y    ; hi byte x
            sta(sptr),y    ; hi byte result
            clc
            lda sptr       ; pop y, leave result
            adc#2
            sta sptr
            bcc addrts
            inc sptr+1
  addrts    rts

  Note: the top-of-memory pointer at locations $37-38 should first
  be set to $C000 or below to prevent Pascal from overwriting these
  locations.


  3.10.2 Storage Formats

  All scalar and subrange types (except REAL), and pointers are
  passed as 16-bit words in the usual low-high format.

  Reals are passed as 6 bytes; in 64 BASIC format.

  loc n+5: unused
  loc n+4: LS mantissa
  loc n+3: .
  loc n+2: .
  loc n+1: MS mantissa
  loc n  : exponent

  Arrays are stored row-by-row (the oposite to FORTRAN), the lowest
  element has the lowest address.

  arrays are byte-packed if their elements are scalars in the range
  0..255 (eg. char), and "packed" was specified.  In this case the
  size is always rounded up to an even number of bytes.

  Records are stored with their fields in reverse order (first
  declared has highest address).  Sets are passed as a 128-bit map,
  a "one" indicates membership.
  Odd and even bytes are reversed:

  loc n+15
  loc n+14
    :
  loc n+1
  loc n

  bit 15 .... bit 8
  bit 7 ..... bit 0

  bit 127 ... bit 120
  bit 119 ... bit 112

  IMPORTANT - pointers always point to the location above the highest
  byte used by the actual data.  This also applies to VAR parameters,
  Which are passed as addresses.

  Example:

  const VDUSIZE= 1000; (* 25 rows of 40 chars *)
  type screen= packed array[1..VDUSIZE] of char;
  var vduptr : screen;
  begin
      orgin(vduptr,$0400+VDUSIZE)
      :
      :

  This declares an array based on the 64 vdu address 0400h.
  vduptr[1] is the first vdu location.


  ADDENDA

  Directories

  A disk directory may be obtained from the editor using the BASIC
  command:
    LOAD"$0",8 for drive 0
    LOAD"$1",8 for drive 1
  Warning - this will overwrite any program text in memory.


  LOCATE command

  Be careful not to give the BASIC runnable file the same name as
  your source file (or any other Pascal file on the same disk) as the
  Commodore will not overwrite a file with one of a different type.


  Compiling Errors

  Error reporting in resident mode now produces the appropriate error
  message and not an error number.  Be prepared to look several lines
  back in you program for an error as it may take this long to confirm
  an error.  Also one error may produce a series of other errors
  which will disappear when the first error is corrected.


  High Resolution Graphics - extra notes

  1.  Screen boundaries; The x,y coordinates range from 0-255 and
      0-200 respectively.  The origin 0,0 is at the bottom left hand
      corner of the screen area.  Any point plotted out of range of
      these bounds will not be performed.

  2.  HIRES(1) defaults at power up to a complete screen equivalent
      to the command WINDOW(25).

  3.  It is advised that a HIRES(0) statement is used before
      terminating a program using he-res graphics, unless it is
      desired to leave a window showing a particular display.
      If a program exits or is stopped without this being done the
      command KILL can be typed from the editor (blind, if necessary).
      KILL disables the hi-res screen and removes the graphics wedge
      from the interrupt routine.

  4. To enable a clean display in hi-res mode both functions 0 and 1
     of the plot command should be used.

  5. OXFORD Pascal uses standard bitmap mode for high resolution
     graphics and therefore, whilst having access to 16 different
     colours, any character location on the screen can only have one
     foreground (ink) and one background (paper) colour.  A character
     location consists of an 8*8 array of points.  The effects of
     this are noticeable when two lines of different colours are made
     to cross when part of the line being crossed around the
     intersection changes to the colour of the line crossing it.


  Demonstration Graphics Program

  (* this should produce a circle filled with pretty patterns *)

  var z,x,y,1 : integer;
      a,b,c,r,p : real;
  begin
    WINDOW(14)
    R:=40;
    Z:=1;
    C:=1;
    PAPER(10);
    INK(3);
    PLOT(0,0,0,0,0);
    PLOT(1,0,0,0,0);
    HIRES(1);
    for 1:=0 to 359 do
    begin
      p:=c*1;
      a:=r*COS(p);
      b:=r*SIN(p);
      x:=ROUND(a);
      y:=ROUND(b);
      INK(Z);
      z:=z+1;
      PLOT(2,y+150,x+150,x+150,y+150);
    end;
  end.


  Demonstration Sound Program

  (* this should make some interesting modulated sounds *)

  var t : integer;
  begin
    ENVEL(1,0,0,13,15);
    for t:=15 downto 0 do
    begin
      VOICE(1,1000*t,7000);
      VOICE(1,1000*t,7000);
      VOLUME(t);
    end;
  end.


  Useful Memory Locations

  Hex   DEC    USE

  C000  49152  Printer device number in editor mode - default 4

  C001  49153  Printer type - default 1  0=Pet or 64 type  1=Ascii

  C002  49154  Line feed flag - default auto line feed
               0=auto line feed disabled  1=auto line feed


=====================================================================



.d64 of OXFORD Pascal
(patched to load, seems to work but...)
zipped then UUencoded


_=_ 
_=_ Part 001 of 001 of file OxPascal.zip
_=_ 

begin 666 OxPascal.zip
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
M`*L"``P````````````@`+:!`````$]X4&%S8V%L+F0V-%!+!08``````0`!
+`#H```#R]```````
`
end

