DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦790562e34⟧ RcTekst

    Length: 192768 (0x2f100)
    Types: RcTekst
    Names: »99110141.WP«

Derivation

└─⟦7fab0c8ae⟧ Bits:30005866/disk3.imd Dokumenter i RcTekst format (RCSL 99-1-*)
    └─⟦this⟧ »99110141.WP« 

RcTekst


╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆┆0b┆┆05┆↓
┆b0┆┆a1┆1. INTRODUCTION↲
↲
┆b0┆┆a1┆1.1 Goals↲
↲
The principle goal of Real-Time Pascal is to be a ↓
programming tool particularly well-suited in situations ↓
characterized by the following two requirements:↲
↲
- ┆84┆the software must provide rapid response to external ↓
┆19┆┆82┆┄┄events ("real-time"),↲
- ┆84┆programmers wish to utilize the organization of software ↓
┆19┆┆82┆┄┄into parallel cooperating processes as a fundamental ↓
┆19┆┆82┆┄┄structuring tool.↲
↲
The major use of Real-Time Pascal has been and is foreseen ↓
to remain in the basic software of distributed processing ↓
systems and data communication network nodes:↲
↲
- terminal emulation,↲
- layered protocol handling,↲
- local area networking services.↲
↲
In these kinds of situations the two above-mentioned ↓
requirements are inherently present.↲
↲
The programming of end-user applications, and in particular: ↓
programming by the end user, are not goals of Real-Time ↓
Pascal. High level run-time support functions, such as a ↓
general high level input/output system, are not included in ↓
the language. However, provided suitable tools are furnished ↓
along with support for the language itself, it may prove to ↓
be well suited for applications programming as well as ↓
systems programming.↲
↲
Although Real-Time Pascal aims at low level programming it ↓
is very much a high level language. This is true in terms of ↓
syntax, in terms of programming facilities, and in ↓
particular in terms of the amount of consistency enforcement ↓
which is emboided in the language.↲
↲
┆8c┆┆83┆┆e0┆↓
Real-Time Pacal has not been designed specifically for any ↓
particular machine. However, the feasibility and usefulness ↓
of a planned implementation on the Intel iAPXn86 processor ↓
series have been absolute requirements. One type of machine ↓
dependency is built into the languageø in order that ↓
descriptive types (cf. section 3.11) be correctly ↓
implemented, the memory of the target machine must be ↓
addressable at the level of 8-bit bytes, and the ↓
significance of individual bytes within multi-byte entities ↓
(e.g. 16-bit words) must increase with increasing addresses.↲
↲
↲
┆b0┆┆a1┆1.2 Main Features↲
↲
In many respects Real-Time Pascal is, as one might ↓
anticipate, similar to standard Pascal (1, 2). The major ↓
difference is that Real-Time Pascal includes facilities for ↓
starting and controlling multiple processes as well as for ↓
the orderly synchronization and intercommunication between ↓
such processes. Features which are basic to Real-Time Pascal ↓
but well-known from standard Pascal are not discussed in ↓
this section.↲
↲
↲
┆b0┆┆a1┆1.2.1 Processes↲
↲
As in standard Pascal, a Real-Time Pascal ┆a1┆program┆e1┆ consists ↓
of declarations and definitions of data to be manipulated, ↓
and a description of actions to perform the desired ↓
manipulations. The execution of a Real-Time Pascal program ↓
is called a ┆a1┆process┆e1┆. A process is said to be an ┆a1┆incarnation┆e1┆ ↓
of the program which is executed.↲
↲
Real-Time Pascal is intended for compilation. The major ↓
ingredient of an implementationis the compiler which will ↓
transform source programs into object code executable on ↓
some target machine. Throughout this document reference is ↓
made to ┆a1┆compiletime┆e1┆, the time when a source text is being ↓
┆8c┆┆83┆┆c8┆↓
manipulated by a compiler, and ┆a1┆run-time┆e1┆, the time when a ↓
dynamic system consisting of a number of cooperating ↓
processes is operative.↲
↲
In addition to declarations of data and descriptions of ↓
actions a program (and this is where Real-Time Pascal ↓
departs from standard Pascal) may contain sub-programs, and ↓
a process may create, start and control incarnations of sub-↓
programs of the program of which it is itself an ↓
incarnation. Sub-programs may be nested to any depth. In ↓
order words a number of Real-Time Pascal programs may ↓
constitute a ┆a1┆program tree┆e1┆. The encloser relation between a ↓
program and a sub-program is carried directly over to the ↓
┆a1┆parent┆e1┆ relation that exists between a process and a ┆a1┆child┆e1┆ ↓
process which it has created. Thus the dynamic set of active ↓
processes will exhibit a control structure reflecting the ↓
nested structure of the program tree.↲
↲
An essential feature of Real-Time Pascal is that a number of ↓
special types and operations on variables of these types are ↓
directly tailored to perform syncrhonization and exchange of ↓
access to shared data between processes in a well-defined ↓
and secure fashion. In particular one important invariant is ↓
maintained a priori (i.e. without the programmer needing to ↓
worry about it): to every ┆a1┆buffer┆e1┆ there exists at any given ↓
time precisely one ┆a1┆reference┆f0┆┆e1┆, allowing at most one process ↓
to access the buffer contents. Exchange of access to a ↓
buffer is achieved by passing the (contents of the) buffer ↓
as a message via a ┆a1┆mailbox.↲
↲
The operations for process synchronization and message ↓
passing are available in Real-Time Pascal as predefined ↓
routines. This implies that an implementation of Real-Time ↓
Pascal will involve the construction of either:↲
↲
- ┆84┆a software nucleus, i.e. a small operating system, which ↓
┆19┆┆82┆┄┄performs the message passing and process synchronization ↓
┆19┆┆82┆┄┄and scheduling functions, typically in a highly dedicated ↓
┆19┆┆82┆┄┄manner, or↲
↲
┆8c┆┆83┆┆e0┆↓
- ┆84┆a run-time system providing a bridge to a general ↓
┆19┆┆82┆┄┄operating system which lends itself to supporting the type ↓
┆19┆┆82┆┄┄of process synchronization and inter-communication ↓
┆19┆┆82┆┄┄functions defined as part of Real-Time Pascal.↲
↲
An operating system to be used for the latter kind of ↓
implementation must support the execution of multiple ↓
processes either in true parallel on a single processor. The ↓
operating system must perform process scheduling; it must ↓
also support the exchange of messages via mailboxes. In ↓
general it is necessary to critically evaluate a given ↓
operating system before it is used as a foundation for an ↓
implementation of Real-Time Pascal.↲
↲
When a suitable general operating system is used to perform ↓
the Real-Time Pascal functions of process synchronization ↓
and message passing, the ability is opened up for Real-Time ↓
Pascal processes to cooperate with processes written in ↓
other, typically low-level, languages supported under that ↓
operating system. In order to make this possibility ↓
practically useful, the data formats and operating system ↓
calling sequences used by the Real-Time Pascal compiler in ↓
question must be well-documented.↲
↲
One area in which the use of other languages in conjunction ↓
with Real-Time Pascal is particularly important is the ↓
direct interaction with peripheral devices and the ↓
processing of interrupts. So-called driver processes which ↓
perform tasks of these types will always be machine ↓
dependent and may be programmed in assembler or PL/M-type ↓
languages. Consequently no input/output instructions or ↓
interrupt syncrhonization functions have been incorporated ↓
into Real-Time Pascal. It is a simple matter, however, to ↓
extend a particular implementation with these functions.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆1.2.2 Data Typing↲
↲
Like standard Pascal, Real-Time Pascal is a stronly typed ↓
language. Types, in the abstract, provide important ↓
assitance to structured programmer thinking, and the ↓
enforcement of strong typing is a useful tool in the ↓
detection of many kinds of errors. A particular class of ↓
types, the so-called descriptive types, on the other hand, ↓
may be used in a very concrete fashion to describe the ↓
precise interpretation of bit-strings in the memory of the ↓
machine executing a Real-Time Pascal program. This feature ↓
is particularly useful when the precise representation of ↓
data is prescribed as part of the external specifications of ↓
a software project, e.g. a standard protocol for some aspect ↓
of a data communication function.↲
↲
Another feature which stands apart from the class room style ↓
of standard Pascal is that Real-Time Pascal allows the ↓
definition of families of conformant types, differing only ↓
in the values of type parameters which may determine e.g. ↓
the length of an array, but having the same structure. Types ↓
are also allowed to be dynamic, e.g. by having parameters ↓
which cannot be evaluated at compile-time. Both of these ↓
features support the construction of dynamically ↓
configurable software.↲
↲
↲
┆b0┆┆a1┆1.2.3 Data Access↲
↲
The data items manipulated by a process may be allocated as ↓
┆a1┆private┆e1┆ to the process, or they may be allocated as ┆a1┆shared┆e1┆, ↓
implying that access to the data may be shared among several ↓
processes, as described above.↲
↲
The handling of ┆a1┆variables┆e1┆ is based on the concepts of ↓
objects and types which are described in chapter 3. A ↓
private variable may be declared, in which chase allocation ↓
and deallocation of memory for the variable is performed ↓
automatically in a ┆a1┆stack┆e1┆ according to the well-known ↓
discipline for block structured languages. A declared ↓
┆8c┆┆83┆┆e0┆↓
variable is accessed directly by name. A private variable ↓
may also be allocated dynamically in the so-called ┆a1┆heap┆e1┆ by ↓
an invocation of the predefined routine new. In this case ↓
the variable must be accessed through a pointer.↲
↲
Each process has its own stack and heap, which are thus ↓
well-suited for private variables. However, a variable in ↓
the stack may be declared as shared, implying that it can ↓
only be accessed in a so-called ┆a1┆region┆e1┆. A shared variable ↓
can be made accessible to a child process as a process ↓
parameter.↲
↲
A variable is said to be ┆a1┆owned┆e1┆ by the process in whose stack ↓
or heap it is allocated. A variable may become known to ↓
processes other than the owner by being passed as a process ↓
parameter.↲
↲
Buffers are allocated neither in the stack nor in the heap ↓
of a process, but separate from both of these. Buffers are ↓
organized in ┆a1┆pools┆e1┆. a pool may contain a number of buffers ↓
of equal size.↲
↲
A buffer is not in itself a variable, but like an object it ↓
occupies a number of consecutive bytes of memory, and a ↓
buffer may be treated as a variable by superimposing a type ↓
onto it in a lock statement.↲
↲
Buffers are accessed through variables of the predefined ↓
type reference. A number of operations involving buffers are ↓
available as predfined routines taking references as ↓
parameters. In particular it is possible to build ┆a1┆buffer ↓
┆19┆┄┄┆84┆stacks┆e1┆ (not to be confused with process stacks) and ┆a1┆buffer ↓
┆19┆┄┄┆84┆chains┆e1┆.↲
↲
Associated with a buffer is a set of buffer ┆a1┆attributes┆e1┆, one ↓
of which is the buffer size, i.e. the number of bytes it ↓
occupies. The values of some of the buffer attributes are ↓
accessible, and some may also be modified. A buffer of size ↓
┆8c┆┆83┆┆c8┆↓
0, called an ┆a1┆empty buffer┆e1┆, may be used meaningfully in ↓
connection with buffer stacks, and/or for simple ↓
synchronization purposes. An empty buffer has a full set of ↓
buffer attributes. Fig. 1 gives a sketch of how memory might ↓
be organized in an implementation of Real-Time Pascal. ↓
Clearly an architecture supporting segmentation will be ↓
helpful.↲
↲
↲
┆b0┆┆a1┆1.2.4 Distributed Systems↲
↲
A principal area of intended use of Real-Time Pascal is the ↓
construction of distributed systems according to the general ↓
architectural principles described in (4).↲
↲
A resident module, in the sense of (4), may consist of a ↓
number of cooperating Real-Time Pascal processes. ↓
Intercommunication at the so-called level i, may then take ↓
place using the Real-Time Pascal facilities for inter-↓
process communication.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆06┆┆a1┆          ┆e1┆ ┆05┆┆a1┆buffers   ↲
   ↓
↲
┆a1┆          ┆e1┆               ┆a1┆          ┆e1┆ stack↲
╞	┆05┆┆a1┆          ↲
                         ┆a1┆          ┆e1┆ heap↲
┆a1┆          ┆e1┆                                        ┆a1┆┆05┆↲
code of program A        ┆a1┆          ↲
                         stack and heap↲
                         of process A             ┆a1┆          ↲
↲
↲
↲
╞	╞	╞	 ┆a1┆          ┆e1┆┆05┆┆a1┆          ↲
┆a1┆         ┆e1┆╞	╞	 ┆a1┆          ┆e1┆↲
┆a1┆↲
                         ┆a1┆          ┆e1┆               ┆a1┆ ┆05┆↲
                                                  ┆a1┆┆05┆↲
                         ┆a1┆          ↲
┆a1┆         ┆e1┆                stack and heap↲
code of program B        of process B┆82┆1            ┆81┆┆a1┆ ┆05┆↲
↲
↲
┆06┆┆a1┆         ↲
↲
┆06┆┆a1┆         ↲
↲
┆06┆┆a1┆         ↲
↲
┆06┆┆a1┆         ↲
╞	╞	╞	  stack and heap↲
╞	╞	╞	  of process B┆82┆2↲
↲
Figure 1: Example of memory organization.↲

════════════════════════════════════════════════════════════════════════
↓
To support inter-module communication (at the so-called ↓
level d) the predinfed type ┆a1┆port┆e1┆, representing the concept ↓
of port as described in (4) has been included in the ↓
language along with a set of predefined routines to perform ↓
inter-module communication (IMC) functions (5).↲
↲
Implementations may exist which support only a limited set ↓
of IMC functions or none at all.↲
↲
↲
┆b0┆┆a1┆1.2.5 Faults↲
↲
The term ┆a1┆fault┆e1┆ is used throughout the following chapters to ↓
refer to violations of semantic rules which cannot be ↓
completely enforced at compile-time, i.e. violations which ↓
can in some cases only be detected when a program is ↓
executed.↲
↲
The language allows partly programmer-defined handling of ↓
faults. By default the occurrence of a fault will cause the ↓
output of suitable diagnostic information.↲
↲
↲
┆b0┆┆a1┆1.2.6 Extensibility↲
↲
The general representation of built-in functions of the ↓
language is that of predefined routines working on ↓
parameters of predefined, and often shielded, types.↲
↲
When a desire for extensions to the defined language arises, ↓
it will be both natural and usually also easy to define such ↓
extensions in terms of one or more types and routines ↓
operating on parameters of these types. For example, a ↓
general high-level input/output system may be implemented in ↓
this way.↲
↲
The distinction between built-in functions and such ↓
extensions will not appear very sharp at all, nor is it ↓
┆8c┆┆83┆┆c8┆↓
intended to. The only missing feature will be compiler ↓
supported protection of types one might wish to shield. ↓
Supporting a larger number of shielded types, however, ↓
requires very little in the way of compiler modification, ↓
and thus a future evolution of the language, e.g. toward ↓
supporting application programming, is at least feasible.↲
↲
↲
┆b0┆┆a1┆1.3 Syntax Diagrams↲
↲
Each ┆a1┆syntax category┆e1┆ of the context-free syntax of Real-Time ↓
Pascal is defined by a ┆a1┆syntax diagram┆e1┆. A syntax diagram ↓
consists of:↲
- ┆84┆the name of the defined syntax category followed by a ↓
┆19┆┆82┆┄┄colon,↲
- arrows, which may include branching,↲
- ┆84┆indications of occurrences of syntax categories, in the ↓
┆19┆┆82┆┄┄form of rectangular boses containing the category names,↲
- language symbols enclosed in rounded boxes.↲
↲
┆a1┆Example:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
A source text or substring of a source text is ↓
asyntactically correct occurrence of a syntax category if it ↓
┆8c┆┆83┆┆c8┆↓
can be obtained by traversing the diagram defining that ↓
category, following the arrows. When an indication of an ↓
occurrence of a syntax category is encountered (must be ↓
entered through an arrow), the traversal diagramis the ↓
sequence of lexical elements which have ultimately been ↓
encountered.↲
↲
The names of syntax categories are used frequently in the ↓
descriptionsof the semantics of language consructs to refer ↓
to particular occurrences of syntax categories. To make it ↓
clear that a sequence of words in the text is indeed a ↓
reference to such an occurrence it may be enclosed in single ↓
quotes.↲
↲
Prefixes terminated by underscores are also used in names of ↓
syntax categories to make it easier to refer to a particular ↓
occurrence of a syntax category. They have no significance ↓
in the context-free syntax. For example 'bound-type_name7 ↓
and 'parameterized-type_name' are syntactically equivalent ↓
and both defined by the diagram for 'name'. Hyphens and ↓
spaces are used exculisvely as reading aids.↲
↲
A prefix which occurs in several syntax diagrams may be ↓
understood as an indication of a context-sensitive syntax ↓
rule. Such rules, however, are all explained in the text ↓
describing the semantics of the relevant constructs.↲
↲
A complete set of syntax diagrams is collected in appendix ↓
B.↲
↲
↲
┆b0┆┆a1┆1.4 Organization of this Manual↲
↲
A rigorous definition of the Real-Time Pascal programming ↓
language is given in the following chapters. Each chapter is ↓
divided into sections, each dealing with a particular aspect ↓
of the language. The contents of a section are in general as ↓
follows:↲
↲
┆8c┆┆83┆┆d4┆↓
- introductory remarks,↲
- syntax diagrams (some sections contain no diagrams),↲
- ┆84┆description in natural language of the semantics of the ↓
┆19┆┆82┆┄┄particular part of the language,↲
- ┆84┆optional notes, where specific consequences of the syntax ↓
┆19┆┆82┆┄┄or semantics may be pointed out,↲
- examplex.↲
↲
The notes and examples do not constitute part of the ↓
definition of the language.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆2. LEXICAL ELEMENTS↲
↲
A Real-Time Pascal source program is a string of characters ↓
which can be (uniquely) parsed as consisting of a sequence ↓
of suitably separated lexical elements. Separators are ↓
comments and nonprinting symbols. There are five categories ↓
of lexical elements:↲
↲
- names,↲
- character literals,↲
- character strings,↲
- numbers, and↲
- language symbols.↲
↲
Of these only names are defined in terms of syntax diagrams; ↓
the others are verbally described. All language symbols, ↓
some of which are keywords similar to names, as well as som ↓
additional names, are predefined as part of the language. ↓
The remaining lexical elements are programmer-specified.↲
↲
No separator may occur within a single lexical element. At ↓
least one separator must appear between any pair of ↓
consecutive lexical elements whenever this is necessary to ↓
provide unique delimitation.↲
↲
An alphabetic character, a through z, is an occurrence of ↓
the category 'letter' which is referred to in the following. ↓
No destinction is made between the upper and lower case ↓
forms of the same letter, except in character literals or ↓
character strings.↲
↲
↲
┆b0┆┆a1┆2.1 Names↲
↲
All declared entitites, whether programs, routines, types, ↓
variables or merely constants, have a name.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆b4┆↓
All characters in a name are significant. However, names ↓
used in conjunction with external linking may be abbreviated ↓
in an implementation/installation dependent fashion.↲
↲
The keywords (cf. subsection 2.5.1) satisfy the syntax for ↓
'name', but are explicitly excluded from the catagory. In ↓
addition a number of routines,types and constants exist (cf. ↓
Appendix C) with predefined names, i.e. these names can be ↓
redefined.↲
↲
┆a1┆Examples:↲
↲
step  usage_count  process_117  Very_Long_Identifier_Name↲
↲
↲
┆b0┆┆a1┆2.2 Character Literals↲
↲
Character literals denote characters, which are values of ↓
the predefined type char. They are described in subsection ↓
3.4.2.↲
↲
↲
┆b0┆┆a1┆2.3 Character Strings↲
↲
Character strings denote values of string types. They are ↓
described in subsection 3.9.4.↲
↲
↲
┆b0┆┆a1┆2.4 Numbers↲
↲
A number is a sequence of digits, possibly prefixed by a ↓
radix specification. A digit is a decimal digit, 0 through ↓
9, or one of the letters A through F.↲
↲
Numbers without a radix prefix are integer numbers in ↓
standard decimal notation; they denote values of the ↓
predefined type integer, cf. subsection 3.4.3.↲
↲
┆8c┆┆83┆┆c8┆↓
Numbers prefixed with a radix specification are interpreted ↓
as follows:↲
↲
 B╞	binary, digits must be 0,1↲
 O╞	octal, digits must be 0..7↲
 D╞	decimal, digits must be 0..9↲
 H╞	hexadecimal, digits must be 0..9, A..F↲
↲
If the number of digits following the radix specificationis ↓
less than or equal to 8, for binary, or 2, for other ↓
radices, then the type of the number is the predefined ↓
machine type byte; otherwise it is word. Cf. section 3.5.↲
↲
┆a1┆Examples:↲
↲
 B1010 - a byte↲
 0777   HCAFE   D255    D37913    - four words↲
↲
↲
┆b0┆┆a1┆2.5 Language Symbols↲
↲
The predefined language symbols fall in two classes: ↓
keywords and special symbols.↲
↲
↲
┆b0┆┆a1┆2.5.1 Keywords↲
↲
Keywords are reserved names, i.e. it is illegal to use them ↓
as names in declarations. Throughout this document some ↓
keywords are rendered in small case letters and some in ↓
capitals, merely as a matter of style. The keywords are:↲
↲

╱04002d4e0a0006000000000301413100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
AND        ARRAY     AS         BEGIN    boolean╞	 byte↲
CASE       chan      char       CONST    CONTINUELOOP  create↲
DIV        DO        DOWNTO     ELSE     END           ENDLOOP↲
EXIT       EXITLOOP  EXTERNAL   FOR      FORWARD       FUNCTION↲
GOTO       IF        IN         INSPECT  integer       link↲
LOCK       LOCKBUF   LOOP       mailbox  MOD           NOT↲
┆8c┆┆83┆┆c8┆↓
OF         OR        OTHERWISE  PACKED   pool          port↲
PROCEDURE  process   PROGRAM    RECORD   reference     REGION↲
REPEAT     SET       SHARED     SHIFT    THEN          TO↲
TYPE       typesize  unlink     UNTIL    VAR           varsize↲
WHILE      WITH      word       XOR↲
↲
↲

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a0006000000000301413100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
┆b0┆┆a1┆2.5.2 Special Symbols↲
↲
The special symbols are special graphic symbols or short ↓
sequences of such symbols. The following special symbols are ↓
defined as part of the language:↲
↲
+  -  *   <    >  <>  <=  >=  (   )   (.  .)  (:  :)↲
`  =  :=  :=:  .  ,   ;   :   .. ***  !    ?  &↲
↲
↲
┆b0┆┆a1┆2.6 Comments↲
↲
Comments may be inserted in a source program in three forms:↲
↲
1. (* comment *)↲
   ┆84┆All characters between the delimiters (* and *) are part ↓
┆19┆┆83┆┄┄of the comment, including any non-printing characters.↲
↲
2. <* comment *>↲
   ┆84┆All characters between the delimiters <* and *> are part ↓
┆19┆┆83┆┄┄of the comment, including any non-printing characters.↲
↲
3. -- comment end-of-line↲
   ┆84┆All characters from the delimiter -- up to the first ↓
┆19┆┆83┆┄┄occurence of a carriage return, line feed, or form feed ↓
┆19┆┆83┆┄┄character are part of the comment.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆f0┆┆a1┆Examplex:↲
↲
<* this is (* ... *) one comment *>↲
↲
(* this is -- another↲
   comment *)↲
↲
-- a third comment↲
↲
↲
┆b0┆┆a1┆2.7 Non-printing Characters↲
↲
Non-printing characters which are not part of a comment are ↓
separators on threir own. Any Real-Time Pascal compiler ↓
should allow space, tabulation, line and form feed, and ↓
carriage return characters.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆3. TYPES AND OBJECTS↲
↲
An ┆a1┆object┆e1┆ is a data entity, manifest during the execution of ↓
a program as occupying some amount of memory. With one ↓
exception (irregular sub-objects of objects of a descriptive ↓
type, cf. section 3.11) an object always occupies an ↓
integral number of successive bytes of memory. The number of ↓
bytes is called the ┆a1┆size┆e1┆ of the object and the address of ↓
the lowest addressed byte is called the ┆a1┆address┆e1┆ of the ↓
object. The ┆a1┆value┆e1┆ of an object is at any given time ↓
represented by the bit pattern present in the part of memory ↓
occupied by the object. An object may be a declared, and ↓
thus named, constant, variable, or parameter, or it may be a ↓
temporary anonymous object which exists only during the ↓
evaluation of some expression or the execution of certain ↓
kinds of statements.↲
↲
Every object has a ┆a1┆type┆e1┆. A type comprises a set of values ↓
which may be assumed by objects of the type. A number of ↓
predefined types exist as part of the language and ↓
additional types may be defined in type declarations. In ↓
particular it is possible to define structured types. ↓
Objects of structured types are composed of ┆a1┆sub-objects┆e1┆ of ↓
other (simpler) types. All objects of a type have the same ↓
size, called the size of the type.↲
↲
Associated with a type is a set of ┆a1┆operations┆e1┆ applicable of ↓
values of the type. In the case of a structured type some of ↓
the operations provide access to the sub-objects of objects ↓
of the type.↲
↲
An important relation between types is ┆a1┆compatibility┆e1┆ which ↓
playes a key role in determining when the assignment, ↓
explicit or by parameter passing, of a value to an object of ↓
some type is legal.↲
↲
The structural aspects of a type are always obtainable from ↓
(the text of) the definition. However, the size of a type ↓
┆8c┆┆83┆┆c8┆↓
may be given by expressions which in general can only be ↓
evaluated at tun-time. A type is said to be ┆a1┆established┆e1┆ when ↓
all expressions in the definition are evaluated and the ↓
actual layout of objects of the type and thus also the ↓
representation of values of the type, are determined. A type ↓
in whose definition all expressions are constant expressions ↓
and which can therefore be established at compile-time, is ↓
called a ┆a1┆static┆e1┆ type.↲
↲
All tpes, whether explicitly specified or implicitly given ↓
by the context, are ┆a1┆classified┆e1┆ as:↲
↲
- ordinal types,↲
- machine types,↲
- set types,↲
- pointer types,↲
- shielded types, or↲
- structured types.↲
↲
Each class of types is described in a separate section of ↓
this chapter.↲
↲
The language includes no "real" types. It is a simple matter ↓
to extend the language or an implementation with a class ↓
containing one or more real types.↲
↲
Pointer types and shielded types are called ┆a1┆protected┆e1┆ types. ↓
The same is true of certain structured types, cf. section ↓
3.9. Protected types cannot be used in conjunction with ↓
retyping (type conversion) in with statements.↲
↲
↲
┆b0┆┆a1┆3.1 Specification of Types↲
↲
Type specifications, which include type definitions, are ↓
used in type declarations, in object declarations, in with ↓
statements, and in the formal parameter lists of routine and ↓
program headings and of declarations of parameterized types. ↓
┆8c┆┆83┆┆c8┆↓
The forms of type specification which may occur differ ↓
depending on the use.↲
↲
The form of type specification used in type declarations is ↓
called a defining type specification. This form rules out ↓
alias types, i.e. the definition of a named type simply by ↓
reference to another (bound) type name.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The form of type specification most commenly used, e.g. in ↓
object declarations, in with statements, and in formal type ↓
parameter lists, is called a common type specification. This ↓
form covers all types with no unbound parameters.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
An augmented form of type specification is used in formal ↓
parameter lists of routines and programs where unbound ↓
parameterized types are allowed.↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆83┆┆e0┆↓
A type definitionis the ultimate definition of any type ↓
which is not predefined.↲
↲
↲
↲
↲
↲
↲
↲
The form 'defined type' may be used in the specification of ↓
a type as either predefined or defined, bound, and named.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The missing details in the above description are given in ↓
the following sections:↲
↲
┆a1┆syntactic category            section number↲
bound-type_name╞	╞	3.2↲
parameterized-type_name╞	╞	3.2↲
parameterized-type binding╞	3.3↲
ordinal-type definition╞	   ╞	3.4↲
predifined ordinal type ╞	3.4↲
machine type╞	╞	╞	3.5↲
set-type definition╞	╞	3.6↲
pointer-type definition╞	╞	3.7↲
shielded type╞	╞	╞	3.8↲
structured-type definition╞	3.9↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Note:↲
Of the six classes of types machine types are shielded types ↓
can only be predefined.↲
↲
↲
┆b0┆┆a1┆3.2 Declaration of Types↲
↲
Types may be named and defined in type declarations:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The rules for defining types allow several types of use of ↓
(forward, bound, or parameterized) type names in 'defining ↓
type specifications'. However, no type name may be used on ↓
the right hand side of a 'single type declaration' until it ↓
has been introduced in a preceding declaration. In ↓
particular no type name may be used in its own 'defining ↓
type specification'.↲
↲
A 'forward-type_name' may only be used in the definitionof ↓
pointer types and for every 'forward type_name' occurring in ↓
a 'type declaration', the same name must be given a ↓
definition (bound or parameterized) later within the ↓
declaration part of the same block.↲
↲
┆8c┆┆83┆┆e0┆↓
These rules exclude recursion in the definition of ↓
structured types, but allow objects of a structured type to ↓
contain pointers to objects of the same type and also allow ↓
mutual pointers between several structured types.↲
↲
A single type declaration without parameters associates the ↓
'bound-type_name' with the type specified on the right hand ↓
side, called ┆a1┆the defining type┆e1┆. That is, when the 'bound-↓
type_name' is itself used as a type specification, e.g. in ↓
the declaration of an object, the type thus specified ↓
inherits the value set, the representation of values, the ↓
object layout, the applicable operations and the ↓
classification of the defining type. However, the type ↓
specified by the 'bound-type_name' is ┆a1┆not┆e1┆ compatible with ↓
the defining type. An exception to the latter rule occurs ↓
when the defining type is a set type (cf. 3.10). The ↓
defining type is established when the type declaration is ↓
elaborated (cf. chapter 6).↲
↲
A parameterized 'single type declaration' introduces the ↓
'parameterized-type_name' as denoting a family of mutually ↓
conformant types. The 'formal type parameters', i.e. the ↓
'type-parameter_names' may be used on the right hand side of ↓
the declaration. The types specified for formal type ↓
parameters must be ordinal types. Specification of a ↓
particular type in a parameterized family of types is ↓
described in the next section. No type is established when a ↓
parameterized type declaration is elaborated.↲
↲
A typesize call is similar in form to a function call, but ↓
the "parameter" is the name of a type. The construct allows ↓
the size of a type to be used in computations.↲
↲
↲
↲
↲
The 'bound-type_name' must be the name of a bound (not ↓
parameterized) type. The value of a typesize call is the ↓
┆8c┆┆83┆┆c8┆↓
size (number of bytes) of the named type as computed when ↓
the type was established. The type of a typesize call is ↓
integer.↲
↲
┆a1┆Example:↲
↲
TYPE↲
  ptr_type;  -- forward announcement↲
  bound_type=ARRAY(1..10) OF integer;↲
  rec_type=RECORD               -- Note:↲
    f1: bound_type;             -- type of f1 not compatible↲
    f2: ARRAY(1..10) OF integer -- with type of f2↲
  END(*RECORD*);↲
  ptr_type= `rec_type;↲
  mask_type= PACKED ARRAY(1..typesize(bound_type)) OF byte↲
↲
↲
┆b0┆┆a1┆3.3 Parameterized Types↲
↲
A family of parameterized types may be defined in a type ↓
declaration (see the preceding section). A particular type ↓
in such a family, called a ┆a1┆bound parameterized type┆e1┆, is ↓
obtained by binding values to the formal type parameters.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The 'parameterized-type_name' must occur in a preceding ↓
parameterized type declaration, i.e. it must denote a type ↓
family. The number of formal parameters in this declaration ↓
must equal the number of 'actual type parameters', and each ↓
┆8c┆┆83┆┆c8┆↓
actual parameter must be assignable to the type of the ↓
corresponding formal parameter.↲
↲
The type specified by a 'parameterized type binding' is ↓
established according to the right hand side of the ↓
parameterized type declaration, i.e. the defining type ↓
specification, after all occurrences of the formal type ↓
parameters have been replaced with the values of the ↓
corresponding actual parameters. The properties of the ↓
defining type are inherited in the same fashion as in the ↓
case of a 'bound-type_name', cf. the preceding section.↲
↲
The actual parameter values used to establish a bound ↓
parameterized type are attached to objects of the type. The ↓
parameter values are accessible whenever the object to which ↓
they are attached is visible.↲
↲
↲
↲
↲
↲
The type of the denoted object must be a bound parameterized ↓
type. The 'type-parameter_name' must occur among the 'formal ↓
type parameters' of this type. The type of a 'selected type ↓
parameter' is the (ordinal) type specified for the 'type-↓
parameter_name' and its value is the value of the ↓
corresponding actual parameter as evaluated when the object ↓
type was established.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example:↲
TYPE↲
  column(rows: 1..100)= ARRAY(1..rows) OF integer;↲
  matrix(rows: 1..100)= ARRAY(1..rows) OF column(rows);↲
  matrix_10= matrix(10);↲
  ...↲
PROCEDURE invert(a:matrix);↲
VAR↲
  local_copy: matrix(a!rows);↲
  ...↲
  FOR i:=1 TO a!rows DO↲
    ...↲
↲
↲
┆b0┆┆a1┆3.4 Ordinal Types↲
↲
Ordinal types are abstract types. For any ordinal type there ↓
exists a one-to-one mapping from the set of values of the ↓
type onto a finite interval of the integral numbers, ↓
yielding the ┆a1┆ordinal value┆e1┆ corresponding to each value of ↓
the type. It follows that the value set of an ordinal type ↓
is ordered by ordinal value and that every such value set ↓
has a first and a last element. By the ordering, every ↓
value, except the last one, has a ┆a1┆successor┆e1┆ and every value, ↓
except the first one, has a ┆a1┆predecessor┆e1┆. Similarly, the ↓
relations ┆a1┆greater than┆e1┆ and ┆a1┆smaller than┆e1┆ are defined for ↓
pairs of values by the ordering.↲
↲
The relational operators which produce results of the ↓
predefined type boolean apply to pairs of operands of any ↓
ordinal type. i.e. the two operands must be of the same ↓
ordinal type. Let oleft and oright denote the ordinal values ↓
of left and right operand, respectively. The relational ↓
operators are then defined in the following table:↲
↲

╱04002d4e0a0006000000000301413100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓

════════════════════════════════════════════════════════════════════════
↓
┆a1┆operator  result┆05┆┆05┆↲
 =╞	      true if oleft equals oright, otherwise false↲
 <>╞	      false if oleft equals oright, otherwise true↲
 >╞	      true if oleft is greater than oright, otherwise false↲
 <=╞	      false if oleft is greater than oright, otherwise true↲
 <╞	      true if oleft is smaller than oright, otherwise false↲
 >=╞	      false if oleft is smaller than oright, otherwise true↲
↲

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a0006000000000301413100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
For every ordinal type otype, there exist theree predefined ↓
functions as described below:↲
↲
FUNCTION succ(v: otype): otype↲
The result of a call of succ is the successor of the value ↓
of the parameter v, except if this value is the last one, in ↓
which case the call causes a fault.↲
↲
FUNCTION pred(v: otype): otype↲
The result of a call of pred is the predecessor of the value ↓
of the parameter v, except if this value is the first one, ↓
in which case the call causes a fault.↲
↲
FUNCTION ord(v: otype): integer↲
The result of a call of ord is the ordinal value ↓
corresponding to the value of the parameter v.↲
↲
There are three predefined ordinal types and two ways to ↓
define new ordinal types. These are described in detail in ↓
the following subsections.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆3.4.1 The Type Boolean↲
↲
The type boolean has two values which correspond to truth ↓
values and are denoted by the predefined value names ┆a1┆false┆e1┆ ↓
and ┆a1┆true┆e1┆. The ordinal values are: ord(false)=0 and ↓
ord(true)=1.↲
↲
There are two dyadic operators which take boolean operands ↓
and produce a boolean result: AND and OR. There is one ↓
monadic operator which takes a boolean operand and produces ↓
a boolean result: NOT. The results produced by these ↓
operators are in accordance with standard logical truth ↓
tables for conjunction, disjunction and negation, ↓
respectively. In addition the dyadic operator XOR is ↓
provided for boolean operands. Its result, which is also ↓
boolean, is defined by the formula↲
   b1 XOR b2=(b1 AND NOT b2) OR (NOT b1 AND b2).↲
↲
↲
┆b0┆┆a1┆3.4.2 The Type Char↲
↲
the values of type char are characters belonging to a ↓
character set derived from ISO-646 (3), i.e. an ASCII-like ↓
character code set.↲
↲
The ordinal values of the type char span the interval ↓
0..255. The characters with the ordinal values 0..32 are ↓
denoted by the predefined value names NUL, SOH, STX, ETX, ↓
EOT, ENQ, ACK, BEL, BS, HT, LF, VT, FF, CR, SO, SI, DLE, ↓
DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FS, ↓
GS, RS, US, SP. The character with the ordinal value 127 is ↓
denoted by the predefined value name DEL. The characters ↓
with ordinal values in the range 32..126 are graphic ↓
charcters and are denoted by character literals, i.e. the ↓
graphic symbol (letter, digit etc.) in question, between ↓
single quotes. The set of available graphic characters and ↓
the corresponding ordinal values is implementation and/or ↓
installation dependent. No notation exists for characters ↓
with ordinal values in the range 128..255.↲
↲
┆8c┆┆83┆┆e0┆↓
The graphic character symbols supported by an ↓
implementation/installation may also be used in character ↓
strings (cf. subsection 3.9.4).↲
↲
There exists a predefined function which yields a character ↓
result:↲
↲
FUNCTION chr(n: 0..255): char↲
The result of a call of chr is the character whose ordinal ↓
value equals the value of the parameter n.↲
↲
┆a1┆Example:↲
CONST  single_quote=''';↲
TYPE   small_letter='a'..'z'↲
↲
↲
┆b0┆┆a1┆3.4.3 The Type Integer↲
↲
The values of type inteer are integral numbers. The ordinal ↓
value of such a number is the number itself. The range of ↓
the type integer, i.e. the interval spanned by its values is ↓
implementation dependent. Positive integer values are ↓
denoted by integer numbers, cf. section 2.4.↲
↲
There are five dyadic operators which take integer operands ↓
and produce integer results:↲
↲
┆a1┆operator  description┆05┆↲
  +╞	      addition↲
  -       subtraction↲
  *       multiplication↲
 DIV      integer division (quotient truncated toward zero)↲
 MOD      remainder of integer division, i.e.↲
          a MOD b = a-b*(a DIV b)↲
↲
+ and - may also be used as monadic operators, implying an ↓
implicit left operand with value 0. When the result produced ↓
by an arithmetic operation falls outside the range of ↓
┆8c┆┆83┆┆c8┆↓
integer values supported by the implementation a fault ↓
occurs.↲
↲
The result of the predefined function abs:↲
↲
FUNCTION abs(n: integer): 0..maxint↲
is the absolute value of the parameter value. If this value ↓
falls outside the supported range the call causes a fault.↲
↲
The predefined value names maxint and minint denote the ↓
largest and the smallest integer value, respectively, ↓
supported by the implementation.↲
↲
↲
┆b0┆┆a1┆3.4.4 Enumeration Types↲
↲
An enumeration type is defined by explicitly naming its ↓
values:↲
↲
↲
↲
↲
↲
The names given int he definition are used to denote the ↓
values of the type thus defined. Consider an enumeration ↓
type defined as (e┆82┆0┆81┆, e┆82┆1┆81┆, ..., e┆82┆n┆81┆). This type has precisely ↓
n+1 distinct values with ordinal values in the interval ↓
0..n. The ordinal value corresponding to e┆82┆i┆81┆ is i, for ↓
i=0,1,...,n.↲
↲
┆a1┆Example:↲
TYPE  colours= (red, blue, green, yellow, pink)↲
↲
↲
┆b0┆┆a1┆3.4.5 Subrange Types↲
↲
a subrange specifies a type compatible with an existing ↓
type, but with a constrained range of values:↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆84┆↓
The lower and upper bound expressions must be of the same ↓
ordinal type, called the ┆a1┆base type┆e1┆ of the defined subrange ↓
type. The bounds are evaluated when the subrange type is ↓
established.↲
↲
The number of elements in the value set of the subrange is ↓
ord(upper bound)-ord(lower bound)+1. the number may be zero ↓
in which case the subrange is empty, but it may not be ↓
negative. In the latter case a fault occurs.↲
↲
The same set of operators and predefined functions apply to ↓
values of the subrange type as to values of the base type, ↓
but objects of the subrange type are constrained to assume ↓
values in the range between the lower and upper bound values ↓
(inclusively).↲
↲
┆a1┆Note┆e1┆:↲
A subrange definition is the only place where an expression ↓
can occur in a type definition. Thus all dynamic types are ↓
built from subranges. Conversely, if all expressions in the ↓
subrange definitions of a type definition are constant ↓
expressions, then the defined type is static.↲
↲
┆a1┆Example┆e1┆:↲
TYPE↲
  pos_int= 0..maxint;↲
  neg_int= minint..-1;↲
  codes= (nocode, ..., dummy_last_code);↲

╱04002d4e0a0006000000000301443100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
  conv_table= ARRAY(succ(nocode)..pred(dummy_last_code)) OF codes↲

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a0006000000000301443100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
↲
↲
┆b0┆┆a1┆3.5 Machine Types↲
↲
Machine types allow a style of programming in which the ↓
machine instructions to be executed are specified in a very ↓
direct manner.↲
↲
┆8c┆┆83┆┆bc┆↓
Only predefined machine types exist. The repertoire of ↓
machine types depends on the implementation. However, tye ↓
types ┆a1┆byte┆e1┆ (8-bit quantity) and ┆a1┆word┆e1┆ (16-bit quantity) are ↓
mandatory.↲
↲
Values of machine types are denoted by numbers with a radix ↓
specification, cf. section 2.4.↲
↲
The operators applicable to machine types are intended to ↓
translate directly into machine instructions. Machine ↓
dependent extensions may therefore occur. The following ↓
operators are mandatory:↲
↲
┆8c┆┆81┆┆9c┆↓
┆0e┆↓
┆a1┆operator left op. right op. result description┆05┆↲
 +╞	     byte     byte      byte   unsigned addition↲
 +       word     byte      word   unsigned addition↲
 +       byte┆07┆    word      word   unsigned addition↲
 +╞	     word┆07┆    word      word   unsigned addition↲
 -       byte     byte      byte   unsigned subtraction↲
 -       word     byte      word   unsigned subtraction↲
 -       byte     word      word   unsigned subtraction↲
 -       word     word      word   unsigned subtraction↲
 *       byte     byte      word   unsigned multiplication↲
 *       word     byte      word   unsigned multiplication↲
 *       byte     word      word   unsigned multiplication↲
 *       word     word      word   unsigned multiplication↲
 DIV     byte     byte      byte   unsigned division↲
 DIV     word     byte      word   unsigned division↲
 DIV     byte     word      byte   unsigned division↲
 DIV     word     word      word   unsigned division↲
 MOD     byte     byte      byte   unsigned remainder↲
 MOD     word     byte      word   unsigned remainder↲
 MOD     byte     word      byte   unsigned remainder↲
 MOD     word     word      word   unsigned remainder↲
 AND     byte     byte      byte   bitwise logical and↲
 AND     word     word      word   bitwise logical and↲
 OR      byte     byte      byte   bitwise logical or↲
 OR      word     word      word   bitwise logical or↲
 XOR     byte     byte      byte   bitwise exclusive or↲
 XOR     word     word      word   bitwise exclusive or↲
 NOT     none     byte      byte   bitwise negation↲
 NOT     none     word      word   bitwise negation↲
 SHIFT   byte     integer   byte   logical shift toward more↲
 SHIFT   word     integer   word   significant positions↲
┆0f┆↓
↲
For arithemtic operations values of machine types are ↓
treated as unsigned binary numbers. There is no checking for ↓
overrun, however division by zero (DIV or MOD) will cause a ↓
fault.↲
↲
┆8c┆┆83┆┆bc┆↓
There are predefined procedures to increment and decrement ↓
variables of machine types (by 1, modulo 2┆81┆n┆82┆, where n is the ↓
number of bits used for the type):↲
↲
PROCEDURE inc(VAR v: mtype)↲
PROCEDURE dec(VAR v: mtype)↲
where mtype may be any machine type.↲
↲
Also for every machine type mtype there is a predefined ↓
function:↲
↲
FUNCTION int(v: mtype): integer↲
which yields the (implementation dependent) value obtained ↓
by extending (by zero bits) or truncating the value of the ↓
parameter v to the number of bits used to represent integers ↓
and then interpreting the resulting bit pattern as an ↓
integer value.↲
↲
The inverse functions are also predefined:↲
↲
FUNCTION byt (v: integer): byte↲
A call of byt extracts the 8 least significant bits from the ↓
(implementation dependent) integer representation.↲
↲
FUNCTION wrd (v: integer): word↲
A call of wrd extracts the 16 least significant bits from ↓
the (implementation dependent) integer representation.↲
↲
Moreover, two values of the same machine type may be ↓
compared, using the relational operators which are described ↓
in section 3.4. Comparison applies to the unsigned binary ↓
values.↲
↲
↲
┆b0┆┆a1┆3.6 Set Types↲
↲
The set of values of a set type is the power set of the set ↓
of values of some ordinal type, called the element type of ↓
┆8c┆┆83┆┆c8┆↓
the set type. The available operators for sets correspond to ↓
the standard operators of mathematical set theory.↲
↲
↲
↲
↲
↲
The common type specification specifies the element type ↓
which must be an ordinal type.↲
↲
Values of set types are denoted by lists of set elements.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
All expressions occurring in a 'set denotation' must be of ↓
the same ordinal type. The type of the 'set denotation' is a ↓
set type whose element type is the type of the expressions.↲
↲
The value of a 'set denotation' is evaluated by evaluating ↓
all the expressions. Their values determine the members of ↓
the set value. When an 'element interval' occurs all values ↓
in the closed interval from the value of 'lower_expression' ↓
to the value of 'uipper_expression' are members. If the ↓
value of 'lower-expression' is greater than the value of ↓
'upper-expression' the interval is empty.↲
↲
When no expressions are present in a 'set denotation', i.e. ↓
(..), the value is the empty set. The empty set may occur ↓
whereever an operator of a set type is required. Occurring ↓
as an expression on its own, the empty set is assignable to ↓
any set type.↲
↲
┆8c┆┆83┆┆e0┆↓
The operators applicable to values of set types are ↓
described in the following table, where st means some set ↓
type, et means the element type of st, lop means left ↓
operand, and rop means right operand. Notice that multiple ↓
occurrences of st in any one line of the table refer to ↓
compatible set types.↲
┆0e┆↓
↲
oper-   type of   type of   type of    ↲
┆a1┆ator    lop       rop       result     result┆05┆↲
 +       st        st         st       lop rop↲
 *       st        st         st       lop rop↲
 -       st        st         st       lop rop↲
 IN      et        st       boolean    true if lop rop,↲
         ╞	╞	╞	     false otherwise↲
 <=      st        st       boolean    true if lop rop↲
╞	╞	╞	╞	     false otherwise↲
 >=      st        st       boolean    true if rop lop,↲
╞	╞	╞	╞	     false otherwise↲
 =       st        st       boolean    true if lop rop↲
╞	╞	╞	╞	     and rop lop,↲
 ╞	╞	╞	 ╞	     false otherwise↲
 <>      st        st       boolean    NOT lop=rop↲
┆0f┆↓
↲
┆a1┆Note:↲
There is no operator to test for strong set inclusion.↲
↲
┆a1┆Examples:↲
  digits= (. '0'..'9' .)↲
  letters= (. 'a'..'z', 'A'..'Z' .)↲
↲
↲
┆b0┆┆a1┆3.7 Pointer Types↲
↲
The values of a pointer type are NIL (no pointer) and ↓
pointers to heap-allocated variables of a specified type, ↓
called the base type of the pointer type. A pointer may be ↓
used to access the variable it points to.↲
↲
↲
↲
↲
┆8c┆┆83┆┆ec┆↓
The common type specification specifies the base type of the ↓
defined pointer type. The initial value of a pointer ↓
variable is NIL, i.e. it does not point to any variable.↲
↲
A variable accessed through a pointer is called a designated ↓
variable.↲
↲
↲
↲
↲
The type of the denoted object must be a pointer type. The ↓
type of the designated variable is the base type of this ↓
pointer type. If the value of the denoted pointer object is ↓
NIL a fault occurs when an attempt is made to access the ↓
designated variable.↲
↲
The comparison operators = and <> may be applied to pairs of ↓
operands of compatible pointer types. The result produced by ↓
the = operator is true if both pointers designate the same ↓
object, or if both have value NIL. Otherwise it is false. ↓
The result produced by the <> operator is the negation of ↓
the result of =.↲
↲
There is a predefined function to test whether a pointer, of ↓
any pointer type ptrtype, is NIL.↲
↲
FUNCTION nil(ptr: ptrtype): boolean↲
The result of a call of nil is true if the value of the ↓
parameter is NIL and false otherwise.↲
↲
A variable is allocated on the heap and a pointer to it ↓
assigned to a pointer variable by a call of the predefined ↓
procedure new, where the parameter type ptrtype may be any ↓
pointer type.↲
↲
PROCEDURE new(VAR ptr: ptrtype)↲
A call of new causes memory for a variable of the base type ↓
of the type of the parameter ptr to be allocated on the heap ↓
┆8c┆┆83┆┆c8┆↓
of the calling process. If an initial value is defined for ↓
the variable or any components of it, the initialization ↓
takes place immediately after allocation. The value of the ↓
parameter becomes a pointer to the allocated variable.↲
↲
┆a1┆Example:↲
TYPE↲
  comp; comp1_type; -- forward declarations↲
  comp1_type= RECORD↲
    number: integer;↲
    comp1_chain: `comp1_type;↲
    comp_chain: `comp↲
  END(*RECORD*);↲
  comp= ARRAY(x..y) OF `comp1_type;↲
VAR↲
  structure_start: `comp;↲
  ...↲
  new(structure_start);↲
  new(structure_start`(X));↲
  new(structure_start`(x)`.comp1_chain)↲
  ...↲
↲
↲
┆b0┆┆a1┆3.8 Shielded Types↲
↲
Shielded types are used in conjunction with control of ↓
offspring processes and with inter-process and inter-module ↓
communication. In order that the integrity of buffers and of ↓
the data structures needed to administer muliple cooperating ↓
processes be preserved it is only possible to manipulate ↓
objects of shielded types by means of predefined routines. ↓
Accordingly, details of the representation of these types ↓
are not part of the reference definition of the language. ↓
Only predefined shielded types exist, six in all.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆84┆↓
Constants of shielded types do not exist. Variables of ↓
shielded types, except reference, can only be declared at ↓
the outer block level of a program, cf. subsection 6.2.1.↲
↲
An object of type process may be used to control a child ↓
process, i.e. an incarnation of a sub-program. The value of ↓
a process object is either NIL or a reference to a child ↓
process, the initial value being NIL. Process objects may be ↓
manipulated by the predefined routines create, start, stop ↓
and remove, as described in chapter 9.↲
↲
The predefined function nil may be used to test whether a ↓
process variable has value NIL.↲
↲
FUNCTION nil(VAR pr: process): boolean↲
The result of a call of nil is true if the value of the ↓
parameter pr is NIL, and false otherwise.↲
↲
An object of type mailbox may be used to transfer access to ↓
a buffer stack from one process to another, using the ↓
predefined routines signal, wait and return, as described in ↓
chapter 9. The initial state of a mailbox is passive.↲
↲
An object of type port may be used in conjunction with ↓
intermodule communication as described in chapter 11. The ↓
initial state of a port is closed.↲
↲
Buffers are allocated using pools and accessed by means of ↓
objects of type reference. The value of a reference to a ↓
buffer stack, called the ┆a1┆designated stack┆e1┆. The top buffer of ↓
the designated stack is called the ┆a1┆designated buffer┆e1┆. Buffer ↓
stacks, and the predefined procedures push and pop working ↓
on them, are described in detail in chapter 10.↲
↲
The predefined function nil may be used to test whether a ↓
reference is NIL.↲
↲
FUNCTION nil(VAR ref: reference): boolean↲
┆8c┆┆83┆┆c8┆↓
The result of a call of nil is true if the value of ref is ↓
NIL, and false otherwise.↲
↲
Every buffer has fourteen attributes which are present even ↓
if the buffer is empty:↲
↲
- home pool: the pool to which the buffer belongs,↲
- ┆84┆return address: mailbox to which the buffer may be ↓
┆19┆┆82┆┄┄returned,↲
- ┆84┆u1, u2, u3, u4: objects of type 0..255 which may be read ↓
┆19┆┆82┆┄┄and written,↲
- size of the buffer, i.e. number of bytes,↲
- ┆84┆offset, top, byte count: objects of type 0..maxint which ↓
┆19┆┆82┆┄┄may be read and written; they describe the data area of ↓
┆19┆┆82┆┄┄the buffer, see below,↲
- ┆84┆event kind: indicates how and why the buffer was placed in ↓
┆19┆┆82┆┄┄the mailbox from which it has last been received or that ↓
┆19┆┆82┆┄┄the buffer was removed from a pool; see details under the ↓
┆19┆┆82┆┄┄predefined function eventkind below,↲
- ┆84┆connection index, credit count, reason: used in ↓
┆19┆┆82┆┄┄conjunction with IMC functions, cf. chapter 11.↲
↲
The values of the buffer attributes offset and top define an ↓
area within the buffer, called the ┆a1┆data area┆e1┆, which ↓
comprises the (byte) locations from offset through top-1 ↓
relative to the beginning of the buffer.↲
↲
╞	buffer↲
╞	   ┆a1┆                               ↲
       ┆a1┆!    ! data area !            !↲
           offset       top↲
↲
The byte count attribute is used to indicate the size of a ↓
unit of data which is located from the beginning of the data ↓
area, but which does not necessarily occupy the whole data ↓
area.↲
↲
┆8c┆┆83┆┆bc┆↓
In order for the data area description to be consistent, ↓
offset must be less thanor equal to top, which in turn must ↓
be less than or equal to the size of the buffer. In ↓
particular, if the buffer is empty, all three attributes ↓
must be zero.↲
↲
In a buffer stack the size and data area description ↓
attributes of the top buffer will refer to the top non-empty ↓
buffer, cf. section 10.1.↲
↲
The concept of data area is used in conjunction with the IMC ↓
functions, cf. chapter 11, and is also intended as a basis ↓
for the establishment of practical conventions for the use ↓
of the language.↲
↲
FUNCTION releasepool)VAR p: pool;↲
         no_of_bufs: 1..maxint): 0..maxint↲
↲
The number of buffers indicated by the value of no_of_bufs ↓
are released from the pool p and become free memory. If the ↓
requested number of buffers is not present in the pool fewer ↓
buffers may be released. The actual number of released ↓
buffersis returned as the result of the function call.↲
↲
A buffer is taken out from a pool by a call of the ↓
predefined procedure getbuf:↲
↲
PROCEDURE getbuf(VAR p: pool; VAR ra: mailbox; VAR r: ↓
          reference)↲
↲
At the time of call the value of the parameter r must be ↓
NIL, otherwise a fault occurs. If the pool p is empty, i.e. ↓
all buffers have been removed, the calling process will wait ↓
until a buffer becomes available. This occurs when a buffer ↓
is put back to the pool by another process (call of putbuf, ↓
see below), or when additional memory is allocated for the ↓
pool (call of allocpool, see above). When severalprocesses ↓
attempt to take out buffers from an empty pool waiting takes ↓
place in a FIFO queue.↲
↲
┆8c┆┆83┆┆e0┆↓
When a buffer i available it is removed from the pool, its ↓
return address becomes the mailbox indicated by the ↓
parameter ra, and r will designate a buffer stack consisting ↓
only of the removed buffer.↲
↲
When a buffer has just been removed from its home pool its ↓
data area will be the whole buffer, i.e. offset=zero and ↓
top=size of the buffer. The attributes u1, u2, u3, u4 and ↓
byte count will all be zero. The value of the event kind ↓
attribute will be not_event, indicating the buffer does not ↓
represent a system event.↲
↲
It is possible to specify a maximum time which a process is ↓
willing to wait for a buffer. This can be done by calling ↓
getbufdelay instead of getbuf, cf. subsection 9.2.2.↲
↲
A buffer is put back in its home pool by a call of the ↓
predefined procedure putbuf:↲
↲
PROCEDRUE putbuf(VAR r: reference)↲
At the time of call the parameter must not be locked (cf. ↓
section 5.9), and its value must not be NIL, nor may the ↓
designated stack contain more than one buffer; otherwise a ↓
fault occurs. The buffer is put back in its home pool, and ↓
the value of r becomes NIL.↲
↲
It can be tested whether a buffer belongs to a particular ↓
pool.↲
↲
FUNCTION hometest(VAR p: pool; VAR ref: reference): boolean ↓
The value of ref must not be NIL when hometest is called. If ↓
it is, a fault occurs. The result of a call of hometest is ↓
true if p is the home pool of the buffer designated by ref, ↓
otherwise it is false.↲
↲
The event kind attribute of a buffer may be read in order to ↓
determine the kind of event which the buffer represents.↲
↲
┆8c┆┆83┆┆c8┆↓
FUNCTION eventkind(VAR r: reference): event_type↲
↲
If eventkind is called with a parameter with value NIL a ↓
fault occurs, otherwise the result is the value of the event ↓
kind attribute of the designated buffer. The result type is ↓
the predefined enumeration type↲
↲
  event_type=(not_event, message_event, answer_event↲
╞	╞	process_removed, port_closed, disconnected,↲
╞	╞	letter_sent, letter_arrived, local_connect,↲
╞	╞	remote_connect, reset_indication, ↓
╞	╞	reset_completion, credit, data_sent, ↲
╞	╞	data_arrived, data_overrun, dummy_letter,↲
╞	╞	dummy_lcnct, dummy_rcnct, dummy_rindic,↲
╞	╞	dummy_rcmpl, dummy_credit, dummy_sent,↲
╞	╞	dummy_arrived).↲
↲
The value not_event indicates the buffer thas been obtained ↓
from a pool or its event kind has been reset. The value ↓
message_event indicates the buffer has been signalled from a ↓
process, cf. subsection 9.2.2. The value answer_event ↓
indicates the buffer has been returned by a process, cf. ↓
subsection 9.2.2. The value process_removed indicates the ↓
buffer has been returned from a process which was removed, ↓
cf. section 9.1. The remaining values indicate IMC events, ↓
cf. chapter 11.↲
↲
The only way a process can modify the event kind attribute ↓
of a buffer while retaining access is by resetting it.↲
↲
PROCEDURE resetevent(VAR r: reference)↲
↲
If resetevent is called with a parameter with value NIL a ↓
fault occurs, otherwise the value of the event kind ↓
attribute of the designated buffer becomes not_event.↲
↲
The u-attributes of a buffer may be read using the following ↓
four predefined functions:↲
↲
┆8c┆┆83┆┆d4┆↓
FUNCTION u1(VAR r: reference): 0..255↲
FUNCTION u2(VAR r: reference): 0..255↲
FUNCTION u3(VAR r: reference): 0..255↲
FUNCTION u4(VAR r: reference): 0..255↲
↲
If one of these functions is called with a parameter with ↓
value NIL a fault occurs. Otherwise the result is the ↓
indicated u-attribute of the designated buffer.↲
↲
The size of a buffer may be read using the predefined ↓
function bufsize:↲
↲
FUNCTION bufsize(VAR r: reference): 0..maxint↲
If bufsize is called with a parameter with value NIL a fault ↓
occurs. Otherwise the size of the designated buffer is ↓
returned as result.↲
↲
The following six predefined routines may be used to read ↓
and set the values of the attributes offset, top and byte ↓
count.↲
↲
FUNCTION offset(VAR r: reference): 0..maxint↲
FUNCTION top(VAR r: reference): 0..maxint↲
FUNCTION bytecount(VAR r: reference): 0..maxint↲
↲
If one of these three functions is called with a parameter ↓
with value NIL a fault occurs. Otherwise the result is the ↓
value of the indicated attribute of the designated buffer.↲
↲
PROCEDURE setooset(VAR r: reference; val: 0..maxint)↲
PROCEDURE settop(VAR r: reference; val. 0..maxint)↲
PROCEDURE setbytecount(VAR r: reference; val. 0..maxint)↲
↲
If one of these three functions is called with a reference ↓
parameter with value NIL a fault occurs. Otherwise the value ↓
of the val parameter is assigned to that attribute of the ↓
designated buffer which is indicated by the procedure name.↲
↲
┆8c┆┆83┆┆c8┆↓
Chain (linked lists) of buffer stacks may be built and ↓
manipulated by means of objects of the types reference and ↓
chain and the predefined routines chaininsert, chainextract, ↓
chainup, chaindown, chainstart, chainreset and described in ↓
section 10.2. A chain object serves as a handle to such a ↓
list. Access to a list cannot be transferred via a mailbox.↲
↲
The routines eventkind, resetevent, u1, u2, u3, u4, setu1, ↓
setu2, setu3, setu4, bufsize, offset, top, bytecount, ↓
setoffset, settop, and setbytecount may also be called with ↓
a parameter of type chain instead of reference. In this ↓
case the relevant attribute of the current buffer is ↓
accessed. The chain must not be empty; if so a fault occurs.↲
↲
↲
┆b0┆┆a1┆3.9 Structured Types↲
↲
An object of a structured type is a structured collection of ↓
subobjects of other (simpler) types. The value of such an ↓
object is a structured collection of values of the sub-↓
objects. Structures may be arbitrarily deep, i.e. sub-↓
objects of a structured object may themselves be of ↓
structured types. The typesof the subobjects of objects of a ↓
structurted type are called the ┆a1┆constituent types┆e1┆. Sub-↓
objects which are not of structured types are called ↓
┆a1┆components┆e1┆. The total set of components of a structured ↓
object are: those sub-objects which are themselves ↓
components plus the components of the remaining sub-objects.↲
↲
If any component type of a structured type is protected ↓
(pointer or shielded) the structured tye is also said to be ↓
protected.↲
↲
The comparison operators = and <> may be applied to pairs of ↓
operands of the same structured type, provided they apply to ↓
all components. The result produced by the = operator is ↓
true if all component values are pairwise equal, otherwise ↓
false. The result prodcued by <> is just the opposite, i.e. ↓
true if any pair of component values are not equal.↲
↲
┆8c┆┆83┆┆e0┆↓
A structure type is an array type or a record type, ↓
depending on the way it is built.↲
↲
↲
↲
↲
↲
If the keyword PACKED is present the defined type is called ↓
a packed type. objects of the type are also called packed. ↓
Packed types constitute a sub-class of the class of ↓
structured types. Packing indicates that the code generated ↓
by a compiler to access objects of the defined type should ↓
be optimized for compactness of object representation rather ↓
than execution time. An important sub-class of packed types ↓
is the descriptive types, cf. section 3.11.↲
↲
A packed object may contain components which either do not ↓
start on a byte boundary or do not occupy a multiple of 8 ↓
bits (or both). Such a component is called an irregular ↓
object. It may not be used for retyping in a with statement ↓
(cf. section 5.8) or as an actual parameter to be ↓
transferred by address (cf. section 6.2).↲
↲
Array and record types are described in the following two ↓
subsections.↲
↲
┆a1┆Note:↲
Unless a packed type is descriptive, cf. section 3.11, the ↓
precise effect of packing is not defined. In particular, if ↓
the type has constituent types which are not static, packing ↓
cannot be expected to have any effect.↲
↲
↲
┆b0┆┆a1┆3.9.1 Array Types↲
↲
The sub-objects of an array are called elements. The ↓
elements are organized by indexing.↲
↲
↲
↲
↲
┆8c┆┆83┆┆ec┆↓
The type specified between the parantheses is called the ↓
index type. It must be an ordinal type. All elements of an ↓
object of the defined array type are of the type specified ↓
following OF, called the element type. Every object of the ↓
array type has precisely one element associated with each ↓
value of the index type.↲
↲
The syntax ARRAY(t┆82┆1┆81┆, t┆82┆2┆81┆, ..., t┆82┆n┆81┆) OF element_type↲
is permissible as shorthand for↲
ARRAY(t┆82┆1┆81┆) OF ARRAY(t┆82┆2┆81┆) OF ... ARRAY(t┆82┆n┆81┆) OF element_type.↲
Similarly PACKED ARRAY(T┆82┆1┆81┆, t┆82┆2┆81┆, ..., t┆82┆n┆81┆) OF element_type↲
is legal shorthand for PACKED ARRAY(t┆82┆1┆81┆) OF PACKED ARRAY(t┆82┆2┆81┆) ↓
OF ... PACKED ARRAY(t┆82┆n┆81┆) OF element type.↲
↲
The elements of an array object are accessed by indexing.↲
↲
↲
↲
↲
The type of the denoted object must be an array type. The ↓
index expression must be assignable to the index type of ↓
this type. It is evaluated when access is made to the ↓
indexed element. the indexed element is that element of the ↓
array object whichis associated with the value of the ↓
expression. The type of the indexed element is the element ↓
type of the array type.↲
↲
The syntax a(i┆82┆1┆81┆, i┆82┆2┆81┆, ..., i┆82┆n┆81┆), where a denotes an array ↓
object, is permissible as shorthand for a(i┆82┆1)(i┆82┆2) ... (i┆82┆n┆81┆).↲
↲
┆a1┆Note:↲
The above description implies that in general a range check ↓
is performed when an array element is accessed by indexing. ↓
A compiler may optionally allow index checking to be ↓
suppressed.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example┆e1┆: (cf. section 3.3)↲
VAR↲
  amatrix: matrix_10;↲
  temp_column: column(10);↲
  ...↲
  temp_column:=amatrix(i); -- assignment of complete column↲
  amatrix(i,j):=amatrix(j,i); -- single component↲
  ...↲
↲
↲
┆b0┆┆a1┆3.9.2 Record Types↲
↲
The sub-objects of a record are called fields. The fields ↓
are organized by naming.↲
↲
↲
↲
↲
↲
↲
↲
All the field names in a record type definition must be ↓
dcistinct. Each field name introduces and identifies a ↓
field. The type of the field, called the field type, is ↓
specified by the common type specification following :. A ↓
field type may not be specified by an 'enumeration-type ↓
definition'.↲
↲
The fields of a record are accessed by selection by name.↲
↲
↲
↲
↲
The tye of the denoted object must be a record type. The ↓
field name must occur in the definitionof the record type. ↓
The selected field is that field of the record object which ↓
is identified by the field name. Its type is the specified ↓
field type.↲
↲
┆8c┆┆83┆┆d4┆↓
An abbreviated syntax for field access may be used in with ↓
statements, cf. section 5.8.↲
↲
┆a1┆Example:↲
VAR↲
  rec: RECORD↲
    f1,f2: integer;↲
╞	f3: boolean↲
  END(*RECORD*);↲
  ...↲
  rec.f1:=rec.f1+rec.f2↲
  or↲
  WITH rec DO f1:=f1+f2↲
↲
↲
┆b0┆┆a1┆3.9.3 Notation for Values of Structured Types↲
↲
Values of a structured type may be denoted by lists of ↓
element or field values.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The 'bound-type_name' or 'parameterized type binding' ↓
specifies the type of the structured value, which must be a ↓
structured type. The construct between (: and :) is ↓
evaluated to a list of values, by evaluating the expressions ↓
in the order of occurrence. If the type is specified by a ↓
'parameterized tye binding' it is established before the ↓
value list is evaluated.↲
↲
┆8c┆┆83┆┆c8┆↓
If the structured type is an array type the values in the ↓
list are the element values in index order. The number of ↓
values must equal the number of elements and the type of ↓
each value must be assignable to the element type; otherwise ↓
a fault occurs. a 'repeated value', if present, is ↓
equivalent to a number ofrepeated occurrences of its ↓
'value_expression'; however, the expression is only ↓
evaluated once. the number is given by the ordinal value ↓
corresponding to the value of the 'repetition_expression' ↓
which must be a non-negative integer. if the number is ↓
negative a fault occurs.↲
↲
If the structured type is a record type the values in ↓
thelist are the field values in the order in which the field ↓
names occur in the definition of the record type. The number ↓
of values must equal the number of fields and the type of ↓
each value must be assignable to the corresponding field ↓
type; otherwise a fault occurs. If the record type contains ↓
unused fields (cf. section 3.11) no value should be given ↓
for these. They are implicitly set to value zero. In the ↓
case of a record type a 'repeated value' must not occur.↲
↲
The type specification may be omitted when the type it ↓
specifies can be inferred from the context, i.e. in the ↓
following two situations:↲
↲
1. ┆84┆The 'structured value' occurs as a 'value_expression' ↓
┆19┆┆83┆┄┄within a larger 'structured value'↲
↲
2. ┆84┆The 'structured value' occurs as an ↓
┆19┆┆83┆┄┄'initialization_expression' in a variable declaration.↲
↲
┆a1┆Example┆e1┆: (cf. section 3.3)↲
CONST↲
  identify_3=matrix_3(:(:1,0,0:), (:0,1,1:), (:0,0,1:):);↲
  nul_list= list(:length***0:);↲
VAR↲
  a4: matrix(4):= (:4***(:4***0:):); -- initially null↲
↲
↲
┆8c┆┆83┆┆e0┆↓
┆b0┆┆a1┆3.9.4 String Types↲
↲
The family of one-dimensional character string (array) types ↓
is predefined:↲
↲
string(length: 0..255)= ARRAY(1..length) OF char↲
↲
Values of types from the string family may be denoted by ↓
character strings. A character stringis a string of graphic ↓
symbols, each representing a character value, enclosed in ↓
double quotes. The double quote character may itself be part ↓
of a character string. In this case it must be indicated by ↓
two adjacent occurrences of the " graphic symbol. Individual ↓
non-graphic characters may be included in a character string ↓
by means of the concatenation operator &.↲
↲
The specific type of a character string, i.e. the particular ↓
member of the string family of which it denotes a value, is ↓
determined by its length, i.e. the number of characters it ↓
consists of.↲
↲
As an implementation feature character strings may be ↓
truncated or extended with NUL characters when appropriate ↓
in the context, e.g. when occurringon the right hand side of ↓
an assignment statement where the corresponding component on ↓
the left hand side is of a string type with different ↓
length.↲
↲
┆a1┆Examples:↲
"this is a string"↲
"x""x" (* a string of length 3 *)↲
"*** illegal input message" & BEL & CR & LF -- string(28)↲
↲
↲
┆b0┆┆a1┆3.10 Type Compatibility↲
↲
The compatibility relations defined in this section are used ↓
to determine when a value may be assigned to an object, ↓
┆8c┆┆83┆┆c8┆↓
either explicitly when an assignment statement is executed ↓
or implicitly in connection with parameter passing.↲
↲
The essential relation is ┆a1┆assignment compatibility┆e1┆. However, ↓
the basis for that relation is the compatibility relation ↓
between types which is therefore defined first. The ↓
compatibility relation applies to established types.↲
↲
Two types are said to be the same if:↲
- both are the same predefined type, or↲
- both are specified as the same bound-type_name, or↲
- ┆84┆both are specified as a binding of the same parameterized-↓
┆19┆┆82┆┄┄type_name and the values of the actual type parameters are ↓
┆19┆┆82┆┄┄pairwise equal.↲
↲
Two objects are said to be of the same type if their types ↓
are the same (cf. above), if they are variables introduced ↓
in the same list of variable names, cf. subsection 3.12.2, ↓
or if they are formal parameters of kind value introduced in ↓
the same formal name list, cf. section 6.1.↲
↲
Two types are said to be compatible if:↲
- they are the same type (cf. above), or↲
- ┆84┆one is a subrange of the other (or both are subranges of ↓
┆19┆┆82┆┄┄the same type), or↲
- both are set types and the base types are compatible, or↲
- both are specified as `tname, where tname is a type name.↲
↲
Type computation rules are defined for expressions (cf. ↓
chapter 4) so as to associate every expression with a type, ↓
either an explicitly specified type, or a predefined type ↓
determined implicitly by the structure of the expression. An ↓
expression exp of type t┆82┆2┆81┆ is defined to be assigment ↓
comptable with the type t┆82┆1┆81┆ if:↲
↲
- ┆84┆t┆82┆1┆81┆ and t┆82┆2┆81┆ are compatible ordinal types and the value of ↓
┆19┆┆82┆┄┄exp is within the range specified for t┆82┆1┆81┆, if any, or↲
┆8c┆┆83┆┆bc┆↓
- ┆84┆t┆82┆1┆81┆ and t┆82┆2┆81┆ are compatible set types and all members of the ↓
┆19┆┆82┆┄┄value of exp are within the range specified for t┆82┆1┆81┆, or↲
- ┆84┆t┆82┆1┆81┆ and t┆82┆2┆81┆ are compatible machine pointer, shielded, or ↓
┆19┆┆82┆┄┄structured types, or↲
- t┆82┆1┆81┆ and t┆82┆2┆81┆ are both string types, cf. subsection 3.9.4.↲
↲
Throughout this manual the shorthand form "assignable to" ↓
may be used instead of "assignment compatible with".↲
↲
┆a1┆Example:↲
In each line below the types of a and b are compatible.↲
a: boolean;╞	╞	b: boolean;↲
a: def_type;╞	╞	b: def_type;↲
a: param_type(7);╞	b: param_type(7);↲
a: 1..10;╞	╞	b: 2..15;↲
a: SET OF 1..10;╞	b: SET OF 2..15;↲
a: `ptrtype;╞	╞	b: `ptrtype;↲
↲
↲
┆b0┆┆a1┆3.11 Object Layout↲
↲
In general the definition of the language does not prescribe ↓
any specific layout for objects, and thus the way objects ↓
are laid out in memory and the way their values are ↓
represented depend on the implementation in question. In ↓
order to allow cooperation with processes whose programs are ↓
not written in Real-Time Pascal these aspects of an ↓
implementation must always be documented carefully.↲
↲
By specifying a ┆a1┆descriptive type┆e1┆, however, it is possible ↓
within certain limits for the programmer to explicitly ↓
determine the layout of objects. Descriptive types ↓
constitute a subclass of packed types, recursively defined ↓
as having constituent types which are all either machine or ↓
static ordinal types, or themselves descriptive.↲
↲
This definition implies that all component types of a ↓
descriptive tye are ordinal or machine types. Components of ↓
┆8c┆┆83┆┆c8┆↓
machine types are laid out as machine bytes or words (cf. ↓
section 3.5), and the representation of ordinal type ↓
components is presently described. Notice that the ↓
description only covers sub-objects of objects of ↓
descriptive types.↲
↲
A component of an ordinal type is represented as a binary ↓
number in a maximum of 16 bits. If the type includes ↓
negative values the two's complement representation is used. ↓
The number of bits used to represent objects of some type ↓
depends on the range of values. Let minval and maxval be the ↓
ordinal values corresponding to the first and last value of ↓
the type, respectively. Then the number of bits used for ↓
objects of the type is:↲
↲
minval<0, maxval<0: log┆82┆2┆81┆(-minval)+1↲
minval<0, maxval>0: max  log┆82┆2┆81┆(-minval), log┆82┆2┆81┆(maxval+1)  +1↲
minval>0, maxval>0: log┆82┆2┆81┆(maxval+1)↲
↲
The numbers obtained by these formulae must be rounded up to ↓
obtain integral numbers.↲
↲
As sub-objects of an object of a descriptive type need not ↓
occupy whole bytes the total object is considerd as a ↓
bitstring rather than as a bytestring. The orderingof bits ↓
within such a bitstring is defined as follows:↲
↲
- bits within separate bytes are ordered by byte address,↲
- ┆84┆bits within the same byte are ordered by significance, ↓
┆19┆┆82┆┄┄i.e. least significant bits first.↲
↲
This implies that the whole bitstring will be ordered by ↓
significance, see Fig. 2.↲
↲

════════════════════════════════════════════════════════════════════════
↓
               bit number↲
           ┆a1┆ 0 1 2 3 4 5 6 7 ↲
         0 ┆a1┆!               !┆e1┆   When viewed in this fashion,↲
relative 1 ┆a1┆!               !┆e1┆   i.e. the significance of bit↲
  byte   . ┆a1┆!               !┆e1┆   i is the ith power of 2, bits↲
 address . ┆a1┆!               !┆e1┆   are ordered as the characters↲
         n ┆b0┆┆f0┆┆a1┆!               !┆e1┆   on a text page.↲
↲
Figure 2: Bitstring ordering.↲
↲
An ordering is also defined for the sub-objects of an object ↓
of a structured type: in the sace of an array type by index; ↓
in the case of a record type by the order of the field names ↓
in the record type definition.↲
↲
The following simple rule defines the layout of objects of a ↓
descriptive type: within the bitstring occupied by the ↓
object subobjects are located contiguously and in order. ↓
Notice that this rule, like the definition of a descriptive ↓
type, is recursive. The following points complete the rule:↲
↲
- ┆84┆every definition of a descriptive type is implicitly ↓
┆19┆┆82┆┄┄extended with an unused component and the end so that ↓
┆19┆┆82┆┄┄objects of the type occupy an integral number of bytes, if ↓
┆19┆┆82┆┄┄this property is not already satisfied by the type as ↓
┆19┆┆82┆┄┄stated,↲
- ┆84┆no component may cross two byte boundaries. When possible, ↓
┆19┆┆82┆┄┄an unused component is inserted to fill up a byte so that ↓
┆19┆┆82┆┄┄this situation is avoided.↲
↲
An unused field of a descriptive record type may be ↓
specified explicitly in order to adjust the positioning of ↓
subsequent fields.↲
↲
↲
↲
↲
┆8c┆┆83┆┆bc┆↓
An unused-specificationis equivalent to the declaration of a ↓
field of the specified type which must be a static ordinal ↓
type. The field is not accessible, i.e. it cannot be ↓
selected. Assignment to an unused field can only be made by ↓
assigning a value to the record object as a whole.↲
↲
┆a1┆Note:↲
If the comparison operator = and <> are applied to objects ↓
of structured types with unused components they are also ↓
applied to unused fields.↲
↲
┆a1┆Example:↲
Consider the types↲
  rec_type= RECORD↲
    a: integer;↲
    b: 0..255;↲
    c: 0..7;↲
    d: -3..4;↲
    e: -1000..1000;↲
    f: char;↲
    g: boolean;↲
    h: integer↲
  END(*RECORD:)↲
↲
  arr_type =ARRAY(1..4) OF 0..2000 (* 11 bits *)↲
↲
Typical layouts for objects of these types are shown to the ↓
left in the figure below; note that this representation is ↓
not specified by the language. However, if the keyword ↓
PACKED had been present before RECORD/ARRAY, the types would ↓
have been descriptive and their layout prescribed to be as ↓
shown to the right.↲
↲

════════════════════════════════════════════════════════════════════════
↓
rec_type:↲
          ┆a1┆ 0 1 2 3 4 5 6 7 ┆e1┆          ┆a1┆ 0 1 2 3 4 5 6 7 ↲
        0 ┆a1┆!┆e1┆               ┆a1┆!┆e1┆        0 ┆a1┆!┆e1┆               ┆a1┆!↲
        1 ┆a1┆!       a       !┆e1┆        1 ┆b0┆┆f0┆┆a1┆!       a       !↲
        2 ┆a1┆!       b       !┆e1┆        2 ┆a1┆!       b       !↲
        3 ┆a1┆!       c       !┆e1┆        3 ┆a1┆!  c  !   d   !?!↲
        4 ┆a1┆!       d       !┆e1┆        4 ┆a1┆!     e-10      !↲
        5 ┆a1┆!┆e1┆               ┆a1┆!┆e1┆        5 ┆a1┆! e-hi!  f-10   !↲
        6 ┆a1┆!       e       !┆e1┆        6 ┆a1┆! f-hi!g!   ?   !↲
        7 ┆a1┆!       f       !┆e1┆        7 ┆a1┆!┆e1┆               ┆a1┆!↲
        8 ┆a1┆!       g       !┆e1┆        8 ┆a1┆!      h        !↲
        9 ┆b0┆┆f0┆┆a1┆!┆e1┆               ┆a1┆!↲
       10 ┆a1┆!       h       !↲
↲
arr_type:↲
          ┆a1┆ 0 1 2 3 4 5 6 7 ┆e1┆          ┆a1┆ 0 1 2 3 4 5 6 7 ↲
        0 ┆a1┆!┆e1┆               ┆a1┆!┆e1┆        0 ┆a1┆┆e1┆!   (1┆a1┆)         !↲
        1 ┆a1┆!     (1)       !┆e1┆        1 ┆a1┆!     !┆e1┆     ┆a1┆    !↲
        2 ┆a1┆!┆e1┆               ┆a1┆!┆e1┆        2 ┆a1┆!       (2) !  ?!↲
        3 ┆a1┆!     (2)       !┆e1┆        3 !   (3┆a1┆)         !↲
        4 ┆a1┆!┆e1┆               ┆a1┆!┆e1┆        4 ┆a1┆!     !┆e1┆ (4) ┆a1┆    !↲
        5 ┆a1┆!     (3)       !┆e1┆        5 ┆a1┆!           !  ?!↲
        6 ┆a1┆!┆e1┆               ┆a1┆!↲
        7 ┆a1┆!     (4)       !↲
↲
Figure 3: Example of object layout.↲
↲
↲
┆b0┆┆a1┆3.12 Object Declarations↲
↲
Declarations of objects may occur in the declaration part of ↓
a program or routine block, cf. chapter 6.↲
↲
An object declaration inctroduces and names an object which ↓
may be used in the remainder of the block.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆3.12.1 Constant Declarations↲
↲
A constant declaration serves to name a constant object, ↓
i.e. an object whose value can be computed at compile-time ↓
and which cannot be altered dynamically by assignment.↲
↲
↲
↲
↲
↲
Each constant name introduced in a constant declaration ↓
denotes a constant object the type and value of which is ↓
determined by the expression following =. The expression ↓
must be a constant expression as described in chapter 4. The ↓
type of a constant must not be protected.↲
↲
↲
┆a1┆3.12.2 Variable Declarations↲
↲
A variable or shared declaration serves to name one or more ↓
stack-allocated private or shared variables and optionally ↓
to specify initial values for instances of such variables.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The variables introduced in a 'variable declaration' are ↓
private variables, i.e. they can only be accessed by the ↓
┆8c┆┆83┆┆e0┆↓
process in whose stack they are allocated. The variables ↓
introduced in a 'shared declaration' are shared variables ↓
which can only be accessed in region statements.↲
↲
The type of each variable named in a variable or shared ↓
declaration is given by the first following type ↓
specification and the initial value by the expression ↓
following :=, if present. The type of the expression must be ↓
assignable to the specified type of the variable. When ↓
several variable names are listed, separated by commas, each ↓
name introduces a variable of the specified type. The type ↓
of a shared variable must not be process, reference, or ↓
chain; nor may these types occur as component types in the ↓
types of shared variables.↲
↲
When a variable or shared declaration is elaborated the ↓
specified types are established; memory is allocated on the ↓
stack for an instance of each of the named variables; the ↓
initialization expressions, if present, are evaluated; and ↓
the values of the expressions become initial values of the ↓
variables. An initialization expression must not contain ↓
function calls. However, the predefined functions abs, byt, ↓
chr, int, ord, pred, succ, and wrd may be used.↲
↲
Variables of components for which initial values or states ↓
are predefined are initialized accordingly. The initial ↓
value of a variable for which an initial value is neither ↓
predefined nor specified is undefined.↲
↲
In a structured value occurring in an initialization ↓
expression the notation ? may be used for components of ↓
protected types. This makes it possible to combine the ↓
predefined initialization of these components with an ↓
explicitly specified initialization of the remaining ↓
components.↲
↲
A varsize call is similar in form to a function call. It ↓
allows the size of a variable to be used in computations.↲
↲
↲
↲
↲
┆8c┆┆83┆┆f8┆↓
The 'variable_name' must be the name of a variable. It must ↓
have been introduced in a variable declaration. The value of ↓
a varsize call is the size (number of bytes) of the variable ↓
as computed whenits type was established. The type of a ↓
varsize call is integer.↲
↲
↲
┆a1┆┆b0┆3.13 Notation for Objects and Values↲
↲
An object which is declared or part of a (larger) declared ↓
object or accessed through a declared pointer, may be ↓
referred to by denotation.↲
↲
↲
↲
↲
↲
↲
↲
The denoted object is said to be ┆a1┆accessed┆e1┆ when: an ↓
assignment statement in which it appears on the left hand ↓
side is executed; or the factor which it constitutes in some ↓
expression is evaluated.↲
↲
If the 'object denotation' is an 'object_name' its type is ↓
the type of the named object as determined by its ↓
declaration. The types of the other forms of denoted objects ↓
are described in previous sections of this chapter.↲
↲
The targetof an assignment may either be a variable object ↓
or the implicit result object associated with a function ↓
call.↲
↲
↲
↲
↲
↲
┆8c┆┆83┆┆bc┆↓
When an object denotation occurs as a variable denotationit ↓
must denote an object which is a variable or part of a ↓
variable in the stack or heap of a process, or superimposed ↓
on a buffer in a lock statement. It must not be a constant ↓
or part of a constant.↲
↲
When a function name occurs as a variable denotation it ↓
denotes the implicitly declared result object of an ↓
activation of the function it names. A function name may be ↓
used in this fashion only in the action part of the ↓
function, i.e. not in inner blocks.↲
↲
The type of a variable denotationis the type of the denoted ↓
object or the result type of the function, whichever ↓
applies.↲
↲
Values which are not the values of objects or sub-objects ↓
may be used in expressions.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
A value denotation denotes the value of an anonymous object, ↓
the type and value of which is as described for the relevant ↓
one of the possible forms.↲
↲

════════════════════════════════════════════════════════════════════════
↓

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆┆0b┆↲
┆a1┆┆b0┆4. EXPRESSIONS↲
↲
An expression describes either an object to be addressed or ↓
some computation to be performed by applying operators and ↓
functions, predefined as well as programmer-defined, to ↓
values of objects as they are at the time of computation and ↓
to constant values which may be denoted directly in the ↓
expression.↲
↲
The operators of the language are divided in groups with ↓
different precedence. In order of increasing precedence the ↓
groups are: relational operators, addition-type operators, ↓
multiplication-type operators, and the negation operator.↲
↲
All operators are described in chapter 3 in conjunction with ↓
the description of the types of the operands they apply to. ↓
Some operators exist in several semantically distinct ↓
versions, applicable to different types of operands and ↓
producing results in different ways depending on the operand ↓
types, e.g. <= may be used for integer (or in general: ↓
ordinal value) comparison, as well as for set comparison ↓
(inclusion).↲
↲
In section 4.1 reference is given, for each opeator, to all ↓
sections where a version of that operator is described. The ↓
following selection rule is used in the application of ↓
operators occurring in expressions: If the types of the ↓
operand(s) provided for an operator correspond to one of the ↓
versions of that operator, then that version of the operator ↓
is selected. Otherwise the expression is illegal. The type ↓
of the result is determined according to the description of ↓
the selected version of the operator. The result may again ↓
be used as an operand of another operator and the selection ↓
rule may then be applied repeatedly.↲
↲
An expression which is used as an actual parameer where the ↓
kind of the corresponding formal parameter is variable, ↓
shared or inspect (cf. chapter 6) must have the form of an ↓
┆8c┆┆83┆┆c8┆↓
'object denotation'. Such an expressionis called an ┆a1┆object ↓
┆19┆┄┄┆84┆expression┆e1┆. The evaluation of an object expression stops ↓
when the address of the denoted object has been computed. In ↓
all other cases the evaluation of an expression proceeds ↓
until a value has been obtained, as described in the ↓
following section.↲
↲
↲
┆b0┆┆a1┆4.1 Evaluation of Expressions↲
↲
The evaluation of an expression yields a type and a value. ↓
This section describes how the tye and value are obtained ↓
from the types and values of the parts of the expression ↓
which constitute the operands at the various stages of ↓
computation.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The expression is evaluated by evaluating the simple ↓
expression(s) in the order of occurrence. Then, if no ↓
operator is present, the type and value of the expression ↓
are the type and value of the (only) simple expression. ↓
Otherwise the appropriate version of the operator is applied ↓
to the values of the simple expressions; the result is the ↓
value of the expression, its type being boolean for all ↓
relational operators.↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆a8┆↓
A leading + or - implies an implicit left term with type ↓
integer and value 0.↲
↲
┆06┆versions (section)↲
↲
↲
↲
↲
↲
↲
↲
↲
The evaluation of a simple expression proceeds from left to ↓
right. The leftmost term (possibly an implicit 0) is ↓
evaluated, yielding a ┆a1┆preliminary result┆e1┆. The following is ↓
then performed repeatedly:↲
↲
The preliminary result is used as left operand of the ↓
leftmost remaining operator. The leftmost remaining term is ↓
evaluated and used as right operand. The appropriate version ↓
of the operator is then applied and produces a new ↓
preliminary result.↲
↲
When no more operators and terms are left the simple ↓
expression has been completely evaluated; the final type and ↓
value of the preliminary result constitute the type and ↓
value of the simple expression.↲
↲
There is one exception to the rule described above: if the ↓
left operand of the OR-operator is of type boolean and has ↓
value true, then the evaluation of the right operand is ↓
omitted; however, its type must still be boolean.↲
↲
↲
↲
↲
↲
↲
┆8c┆┆83┆┆c8┆↓
┆06┆version (section)↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The evaluation of a term proceeds from left to right in the ↓
same fashion as for a simple expression (i.e. substitute ↓
'factor' for 'term' and 'term' for 'simple expression' in ↓
the above description).↲
↲
There is one exception to the general rule: if the left ↓
operand of the AND-operator is of type boolean and has value ↓
false, then the evaluation of the right operand is omitted; ↓
however, its type must still be boolean.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The type and value of a factor are obtained as described ↓
below for each of the possible forms:↲
↲
object denotation:↲
The value of the factor is the value of the denoted object ↓
at the time of evaluation. The type of the factor is the ↓
┆8c┆┆83┆┆c8┆↓
type of the denoted object, except if this type is a ↓
subrange in which case the type of the factor is the base ↓
type of the subrange. If the value of the object is ↓
undefined (not initialized) the effect of evaluating the ↓
factor is not defined.↲
↲
value denotation:↲
The type and value of the factor are the type and value of ↓
the denoted value, cf. section 3.13.↲
↲
function call:╞	4.2↲
typesize call:╞	3.2↲
varsize call:╞	╞	3.12.2↲
link call:╞	╞	9.1↲
unlink call:╞	╞	9.1↲
create call:╞	╞	9.1↲
↲
The type and value of the factor are the type and value of ↓
the call, as described in the indicated section.↲
↲
(expression):↲
The factor is evaluated by evaluating the expression. The ↓
tye and value of the factor are the type and value of the ↓
expression.↲
↲
NOT neg_factor:↲
the type and value of the factor are obtained by evaluating ↓
the neg_factor and applying the appropriate version of the ↓
NOT-operator to the result. The versions of the NOT-operator ↓
are described in subsection 3.4.1 and section 3.5.↲
↲
┆a1┆Note:↲
The precedence rules of Real-Time Pascal are those of ↓
standard Pascal which differ from the rules of other ↓
programming languages (e.g. ALGOL and PL/M languages).↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example:↲
As a consequence of the precedence rules the following is ↓
not a legal expression:↲
 ╞	0<x AND x<10↲
The expression should be written as:↲
╞	(0<x) AND (x<10)↲
↲
↲
┆b0┆┆a1┆4.2 Function Call↲
↲
A function call causes a value to be computed by an ↓
activation of the indicated function.↲
↲
↲
↲
↲
↲
The function name must be the name of a function, either ↓
predefined or programmer-defined. Evaluation of a function ↓
call takes place in two steps:↲
↲
1. ┆84┆The actual parameters are evaluated in the order of ↓
┆19┆┆83┆┄┄occurrence.↲
2. ┆84┆An activation of the block associated with the function ↓
┆19┆┆83┆┄┄name is created and executed, cf. chapter 6.↲
↲
The type of the function call is the result type of the ↓
function. The value of the function call is the value of the ↓
implicit result object associated with the activation of the ↓
function block when the execution of its action part ↓
terminates. If the value is undefined (no assignment) the ↓
effect of evaluating the function call is not defined.↲
↲
↲
┆b0┆┆a1┆4.3 Constant Expressions↲
↲
Constant expressions can be evaluated at compile-time. Only ↓
constant expressions may be used in constant declarations. ↓
If all expressions used in a type definition are constant ↓
expressions the type is said to be static.↲
↲
┆8c┆┆83┆┆ec┆↓
Constant expressions are recursively defined by the ↓
following restrictions.↲
↲
1. All denoted objects must be constants.↲
2. ┆84┆Only the following (predefined) functions may be called: ↓
┆19┆┆83┆┄┄abs, chr, int, ord, pred, succ, wrd, and byt.↲
3. Any typesize call must name a static type.↲
4. ┆84┆'link call', 'unlink call', and 'create call' must not ↓
┆19┆┆83┆┄┄occur.↲
5. Factors of set types must not occur.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆5. STATEMENTS↲
↲
This chapter contains subsections describing the syntax and ↓
the use of the different statements which are included in ↓
the Real Time Pascal language. Most of the statements are ↓
also found in standard Pascal and are well known language ↓
elements.↲
↲
↲
┆b0┆┆a1┆5.1 Compound Statement↲
↲
The statements of a program describe the actions which are ↓
executed by an incarnation. These statements are collected ↓
in a compound statement.↲
↲
↲
↲
↲
↲
The statements are executed one at a time in the specified ↓
order. When all have been executed the compound statement ↓
has been completely executed or ┆a1┆exhausted┆e1┆.↲
↲
Below, all statement forms are given together with reference ↓
to their precise decription:↲
↲
┆06┆section↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆c0┆↓
┆a1┆Note:↲
State ment may be empty.↲
↲
↲
┆b0┆┆a1┆5.2 Data Transfer Statements↲
↲
Assignment and exchange statements are the basic building ↓
blocks for other types of statements. They serve to transfer ↓
values to objects.↲
↲
↲
┆b0┆┆a1┆5.2.1 Assignment Statement↲
↲
The execution of an assignment statement causes the current ↓
value of a variable to be replaced with a new value ↓
specified by an expression. The right hand side expression ↓
must be of a type which is assignment compatible (cf. ↓
section 3.10) with the type of the variable.↲
↲
↲
↲
↲
The execution of an assignment statement takes place in four ↓
steps:↲
↲
1) ┆84┆The variable denotation is evaluated as an object ↓
┆19┆┆83┆┄┄expression.↲
↲
2) The right hand side expression is evaluated.↲
↲
3) ┆84┆the run-time part of the type checking, including tests ↓
┆19┆┆83┆┄┄for range constraints, is performed. A fault occurs if ↓
┆19┆┆83┆┄┄some constraint is violated.↲
↲
4) ┆84┆The value of the expression replaces the value of the ↓
┆19┆┆83┆┄┄variable.↲
↲
┆8c┆┆83┆┆bc┆↓
Assignments cannot be made to variables of shielded types or ↓
of structured types with shielded component types.↲
↲
┆a1┆Examples:↲
current_index:=current_index+1↲
catalog(current_index).author:="Andersen H C"↲
matrix:= matrix_type(:(:1, 0, 0:).↲
╞	╞	       (:0, 1, 0:),↲
╞	╞	       (:0, 0, 1:):)↲
↲
↲
┆a1┆┆b0┆5.2.2 Exchange Statement↲
↲
The values of two variables may be exchanged by executing an ↓
exchange statement.↲
↲
↲
↲
↲
The denoted objects must be variables, and they must be of ↓
the same type, cf. section 3.10. This type, or any of its ↓
components types, must not be mailbox, pool, chain, or port.↲
↲
The execution of an exchange statement takes place in two ↓
steps:↲
↲
1) ┆84┆The addresses of the left hand side and right hand side ↓
┆19┆┆83┆┄┄variables are evaluated, in that order.↲
↲
2) ┆84┆The values of the objects located at the addresses ↓
┆19┆┆83┆┄┄evaluated in step 1 are interchanged.↲
↲
If the two variables are of type reference or process or if ↓
they have components of these types the interchange takes ↓
place as an indivisible operation so that the integrity of ↓
references to buffers and processes is preserved.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Examples:↲
current_buffer_ref:=:temp_buffer↲
matrix(i):=:matrix(j)↲
↲
↲
┆b0┆┆a1┆5.3 If Statement↲
↲
An if statement selects for execution one of two (possibly ↓
empty) statements depending on the value of a condition. The ↓
expression specifying the condition must be of the ↓
predefined type boolean.↲
↲
↲
↲
↲
↲
The execution of an if statement takes place in two steps:↲
↲
1) The value of the boolean_expression is evaluated.↲
↲
2) ┆84┆If the expression evaluates to true the statement ↓
┆19┆┆83┆┄┄following THEN is executed. Otherwise the statement after ↓
┆19┆┆83┆┄┄ELSE (if present) is executed.↲
↲
The ambiguous statement:↲
╞	╞	IF e1 THEN IF e2 THEN s1 ELSE s2↲
is defined to be equivalent to:↲
╞	╞	IF e1 THEN BEGIN↲
╞	╞	  IF e2 THEN s1 ELSE s2↲
╞	╞	END↲
↲
┆a1┆Examples:↲
IF day=Sturday THEN↲
  day:=Sunday↲
ELSE↲
  day:=succ(day)↲
↲
IF test THEN produce_test_record↲
↲
↲
┆8c┆┆83┆┆e0┆↓
┆b0┆┆a1┆5.4 Case Statement↲
↲
A case statement selects for execution one of a number of ↓
alternative statements, depending on the value of an ↓
expression. The expression must be of an ordinal type.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
A case element is a statement labelled by one or more ↓
constant expressions. These constant expressions, called ↓
case labels, must all be of a type compatible with that of ↓
the selecting expression. Consecutive values may be given as ↓
a range, e.g. first..last. All the case labels of one case ↓
statement must be distinct.↲
↲
The execution of a case statement takes place in three ↓
steps: ↲
↲
1) Evaluation of the selecting expression.↲
↲
2) ┆84┆The case element with the label corresponding to the ↓
┆19┆┆83┆┄┄value of the selecting expression is selected for ↓
┆19┆┆83┆┄┄execution.↲
↲
   ┆84┆The "label" OTHERWISE (keyword) corresponds to all values ↓
┆19┆┆83┆┄┄of the type of the selecting expression which do not ↓
┆8c┆┆83┆┆c8┆↓
┆19┆┆83┆┄┄occur as case labels. A fault occurs if no case element ↓
┆19┆┆83┆┄┄corresponds to the value of the selecting expression.↲
↲
3) Execution of the statement of the selected case element.↲
↲
┆a1┆Note:↲
Upon completion of the selected statement the case statement ↓
is also completed.↲
↲
┆a1┆Example:↲
CASE month OF↲
  January..May:╞	....;↲
  October, December:╞	....↲
OTHERWISE╞	╞	....↲
END (* of case *)↲
↲
↲
┆b0┆┆a1┆5.5 Repetitive Statements↲
↲
A repetitive statement specifies that a statement is to be ↓
executed repeatedly, zero or more times.↲
↲
↲
┆b0┆┆a1┆5.5.1 For Statement↲
↲
A for loop may be used if a statement is to be executed a ↓
fixed number of times and/or elaborates on consecutive ↓
values of an object (iteration).↲
↲
↲
↲
↲
↲
↲
↲
The execution of a for statement takes place in five steps, ↓
where three may be repeated:↲
↲
┆8c┆┆83┆┆c8┆↓
1) ┆84┆The start and stop expressions are evaluated and define ↓
┆19┆┆83┆┄┄an ordinal type, i.e. the expressions must be of the same ↓
┆19┆┆83┆┄┄type, which must be an ordinal type.↲
↲
2) ┆84┆The ┆a1┆controlling variable┆e1┆ is allocated as an implicitly ↓
┆19┆┆83┆┄┄declared variable, local to the for statement. Its name ↓
┆19┆┆83┆┄┄is the 'for_name'. The type of the controlling variable ↓
┆19┆┆83┆┄┄is the type of the start and stop expressions. The ↓
┆19┆┆83┆┄┄initial value of the controlling variable is that of the ↓
┆19┆┆83┆┄┄start expression.↲
↲
3) ┆84┆The termination conditionis tested. That is, if TO is ↓
┆19┆┆83┆┄┄specified, execution of the for statement terminates when ↓
┆19┆┆83┆┄┄the value of the controlling variable is greater than the ↓
┆19┆┆83┆┄┄value of the stop expression; if DOWNTO is specified, ↓
┆19┆┆83┆┄┄when the value of the controlling variable is less than ↓
┆19┆┆83┆┄┄the value of the stop expression.↲
↲
4) ┆84┆The statement following DO is executed with the ↓
┆19┆┆83┆┄┄controlling variable acting as a constant (i.e. it must ↓
┆19┆┆83┆┄┄not appear on the left hand side of an assignment ↓
┆19┆┆83┆┄┄statement, nor may it be passed as a variable parameter ↓
┆19┆┆83┆┄┄of a routine call).↲
↲
5) ┆84┆The value of the controlling variable is updated, except ↓
┆19┆┆83┆┄┄if it has already reached the upper or lower bound of the ↓
┆19┆┆83┆┄┄permissible range in which case execution of the for ↓
┆19┆┆83┆┄┄statement terminates immediately. The iteration can ↓
┆19┆┆83┆┄┄either be with increasing values of the controlling ↓
┆19┆┆83┆┄┄variable or with decreasing values. if TO is specified ↓
┆19┆┆83┆┄┄the ordinal value of the controlling variable is ↓
┆19┆┆83┆┄┄incremented in steps of one (succ). If DOWNTO is ↓
┆19┆┆83┆┄┄specified the iteration is with decreasing values (pred). ↓
┆19┆┆83┆┄┄the execution continues at step 3).↲
↲
┆a1┆Note:↲
The two expressions are evaluated once, before the ↓
repetition. If the terminaltion condition is satisfied ↓
┆8c┆┆83┆┆c8┆↓
before the very first repetition the statement (following ↓
DO) of the for statement is not executed at all.↲
↲
┆a1┆Example:↲
FOR month:=January TO December DO↲
  FOR date:=1 TO number_of_days(month) DO↲
    daily_activity(date,month)↲
↲
↲
┆b0┆┆a1┆5.5.2 Loop Statement↲
↲
The loop statement constitutes an unconditional repetitive ↓
control structure, which may be used to define an "infinite" ↓
main loop of a program, only terminated in case of a fault ↓
or parent enforced process termination.↲
↲
↲
↲
↲
↲
The loop statement specifies repeated execution of the ↓
statement sequence in the stated order. The loop may be left ↓
as the result of the execution of a jump statement (cf. ↓
section 5.7).↲
↲
┆a1┆Example:↲
LOOP↲
  next_b:=read_next_buffer;↲
  prepare_buffer(next_b);↲
  send_buffer(next_b)↲
ENDLOOP↲
↲
↲
┆b0┆┆a1┆5.5.3 While Statement↲
↲
Conditional repetition of a statement where the condition is ↓
checked before each execution may be achieved by means of a ↓
while statement.↲
↲
↲
↲
↲
┆8c┆┆83┆┆f8┆↓
The value of the boolean_expression is evaluated before each ↓
execution of the statement. The test-and-execute sequence ↓
goes on as long as the evaluation yields true, when the ↓
result becomes false, possibly the first time, execution of ↓
the while statement terminates.↲
↲
The while statement:↲
  WHILE exp DO st↲
is equivalent to following combination of loop, if and ↓
exitloop statements:↲
  LOOP IF NOT exp THEN EXITLOOP; st ENDLOOP↲
↲
┆a1┆Example:↲
current_index:=first_index;↲
WHILE table(current_index) <> sought_element DO↲
  currfent_index:=current_index+1↲
↲
↲
┆b0┆┆a1┆5.5.4 Repeat Statement↲
↲
Execution of a sequence of statements until some condition ↓
is satisfied may be achieved by means of a repeat statement.↲
↲
↲
↲
↲
↲
Every time the sequence of statements has been executed, the ↓
value of the boolean expression is evaluated and execution ↓
of the repeat statement terminates when the evaluation ↓
yields true.↲
↲
The repeat statement↲
  REPEAT s1; ..; sn UNTIL exp↲
is equivalent to the following special form of the loop ↓
statement:↲
  LOOP s1; ...; sn; IF exp THEN EXITLOOP ENDLOOP↲
↲
┆8c┆┆83┆┆c8┆↓
┆a1┆Example:↲
REPEAT↲
  wait(main_mailbox, ref);↲
  final_message:=do_process(ref);↲
  return(ref)↲
UNTIL final_message↲
↲
↲
┆b0┆┆a1┆5.6 Procedure Call↲
↲
A procedure call serves to establish a binding between ↓
actual and formal parameters, to allocate locally declared ↓
variables, and to invoke execution of the compound statement ↓
of the procedure block in its proper surroundings. A ↓
procedure call consists of the procedure name followed by a ↓
list of actual parameters. If the procedure is declared ↓
without formal parameters, the call consists of the ↓
procedure name only.↲
↲
↲
↲
↲
↲
The execution of a procedure call takes place in two steps:↲
↲
1) ┆84┆The actual parameters are evaluated in the order of ↓
┆19┆┆83┆┄┄occurrence.↲
↲
2) ┆84┆An activation of the block associated with the procedure ↓
┆19┆┆83┆┄┄name is created, including parameter passing, and the ↓
┆19┆┆83┆┄┄action part of the block is executed (cf. chapter 6). ↓
┆19┆┆83┆┄┄When the execution terminates the procedure call is ↓
┆19┆┆83┆┄┄completed.↲
↲
Detailed rules for actual parameters are decribed in section ↓
6.1.↲
↲
↲
┆8c┆┆83┆┆c8┆↓
┆b0┆┆a1┆5.7 Jump Statements↲
↲
The statements described in this section serve to explicitly ↓
modify the order of execution of statements by transferring ↓
control to an implicitly or explicitly indicated statement.↲
↲
↲
┆b0┆┆a1┆5.7.1 Exitloop Statement↲
↲
Execution of an exitloop statement causes the execution of ↓
an enclosing repetitive statement (cf. section 5.5) to ↓
terminate.↲
↲
↲
↲
↲
The repetition exited is the innermost one. An exitloop ↓
statement may only appear within a repetitive statement, ↓
i.e. repeat, for, while or loop statement.↲
↲
┆a1┆Example:↲
The generalized loop control structure may be constructed as ↓
a combination of a loop statement, an if statement, and an ↓
exitloop statement:↲
↲
LOOP↲
  s_1_1; ...; s_1_n;↲
  IF bool_condition THEN EXITLOOP;↲
  s_2_1; ...; s_2_m↲
ENDLOOP↲
↲
↲
┆b0┆┆a1┆5.7.2 Continueloop Statement↲
↲
The continueloop statement specifies that the remaining part ↓
of an iterationof a loop is to be skipped.↲
↲
↲
↲
↲
┆8c┆┆83┆┆e0┆↓
The statement applies to the innermost enclosing repetitive ↓
statement which must therefore exist. Depending on the kind ↓
of repetition statement (cf. section 5.5) the specific ↓
effect of the continueloop statement is:↲
↲
┆a1┆for statement:↲
Step 4 terminates, and execution continues at step 5.↲
↲
┆a1┆loop statement:↲
Execution continues with the first statement after LOOP.↲
↲
┆a1┆while statement:↲
The remainder of the statement following DO is skipped. ↓
Execution continues with the evaluation of the loop ↓
condition.↲
↲
┆a1┆repeat statement:↲
The remainder of the statement sequence up to UNTIL is ↓
skipped. Execution continues with the evaluation of the loop ↓
condition.↲
↲
↲
┆b0┆┆a1┆5.7.3 Exit Statement↲
↲
An exit statement has the effect of a jump to the END of the ↓
compound statement of the enclosing block.↲
↲
↲
↲
↲
Executionof an exit statement causes termination of the ↓
execution of the action part of the nearest enclosing ↓
routineor program block as if the compound statement had ↓
been exhausted.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example:↲
BEGIN (* main program *)↲
  ...↲
  IF errors-detected THEN (* terminate the process *)↲
    EXIT;↲
  ...↲
END↲
↲
↲
┆b0┆┆a1┆5.7.4 Goto and Labelled Statement↲
↲
The execution of a goto statement results in an explicit ↓
transfer of control to another statement specified by a ↓
label.↲
↲
↲
↲
↲
↲
↲
↲
A labelled statement introduces the label name as denoting a ↓
label of the 'statement' following:.↲
↲
A labelled statement is executed by executing the ↓
'statement'.↲
↲
Execution of a goto statement causes the normal order of ↓
execution of the statements within a compound statement to ↓
be broken. Executionis resumed at the labelled statement ↓
whose 'label_name' is identical to the one occurring in the ↓
goto statement. The label must be visible at the point where ↓
the goto statement occurs.↲
↲
A goto statement cannot be used to transfer control from the ↓
outside into or from the inside out of the statement ↓
following DO of a for, with, lock, or region statement.↲
↲
┆a1┆Note:↲
Goto into or out of a block is impossible.↲
↲
↲
┆8c┆┆83┆┆f8┆↓
┆b0┆┆a1┆5.8 With Statement↲
↲
A with statement may be used for three purposes:↲
↲
- shorthand notation for field access in a record object,↲
- object renaming,↲
- object retyping.↲
↲
The latter is the facility allowing a programmer-defined ↓
type to be superimposed on a buffer when applied in a lock ↓
statement.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The denoted object is called the ┆a1┆with-object┆e1┆. It must not be ↓
an irregular object (cf. section 3.9). The type specified by ↓
the 'common type specification', if present, is called the ↓
┆a1┆local type┆e1┆. The type of the with-object must not be ↓
protected, nor may the local type. The size of the local ↓
type must be less than or equal to the size of the with-↓
object.↲
↲
If the AS-part of a with statement is empty several with-↓
objects may be listed. More specifically↲
    WITH d┆82┆1┆81┆, d┆82┆2┆81┆, ..., d┆82┆n┆81┆ DO st↲
is acceptable as shorthand for↲
    WITH d┆82┆1┆81┆ DO WITH d┆82┆2┆81┆ DO ... WITH d┆82┆n┆81┆ DO st↲
where the d┆82┆1┆81┆ are object denotations.↲
↲

════════════════════════════════════════════════════════════════════════
↓
A with statement is executed in three steps:↲
a. ┆84┆the denotation of the with-object is evaluated as an ↓
┆19┆┆83┆┄┄object expression, i.e. the address of the object is ↓
┆19┆┆83┆┄┄established;↲
2. the local type, if present, is established;↲
3. ┆84┆the statement following DO is executed observing the ↓
┆19┆┆83┆┄┄rules described below.↲
↲
┆a1┆field access:↲
If the type of the with-object is a record tye and fname is ↓
a field name of this record type then↲
    fname↲
may be used as shorthand for↲
    obj.fname↲
where obj is an object denotation denoting the with-object.↲
↲
┆a1┆renaming:↲
a non-empty AS-part is equivalent to a local declaration of ↓
an object, called the ┆a1┆local object┆e1┆, with the same address as ↓
the with-object. The 'local_name' denotes the local object.↲
↲
┆a1┆retyping:↲
The type of the local object is the local type, if ↓
specified; otherwise it is the type of the with-object.↲
↲
┆a1┆Notes:↲
the with-object is not restricted to be of a record type, ↓
even (structured) constants are allowed.↲
↲
The address of the object is evaluated only once before the ↓
statement following DO is executed.↲
↲
The retyping of an object is a low-level facility of the ↓
language, intended for use in connection with buffers whose ↓
exact type is not known beforehand (some of the type ↓
information may be part of the buffer contents). But the ↓
facility may be used freely to achieve a relaxation of the ↓
otherwise rigorous object typing, which is one of the basic ↓
features of the language. this method demands an explicit ↓
┆8c┆┆83┆┆d4┆↓
and clear retyping stated where it is used in the program, ↓
in contrast to the standard Pascal solution using variant ↓
records.↲
↲
The effect of assignment of exchange between partially ↓
overlapping objects is undefined.↲
↲
┆a1┆Example:↲
Let rec_var be a record with a field named rec_field, and ↓
let local_type contain a field named loc_rec_field, then the ↓
fields may be accessed in the following ways in the ↓
statement following DO:↲
↲
1) ┆84┆WITH rec_var DO (* the well-known standard Pascal form *)↲
   rec_var.rec_field or↲
   rec_field↲
↲
2) WITH rec_var AS loc_var DO (* simple renaming *)↲
   rec_var.rec_field or↲
   rec_field         or↲
   loc_var.rec_field↲
↲
3) WITH rec_var AS loc_var: local_type DO↲
   (* renaming and retyping *)↲
   rec_var.rec_field or↲
   rec_field         or↲
   loc_var.loc_rec_field↲
↲
┆a1┆Exampel:↲
TYPE↲
  cat_record= RECORD ↲
                title:  ....↲
╞	╞	  author: ....↲
╞	╞	END;↲
VAR↲
  b_catalog: ARRAY(1..cat_size) OF cat_record;↲
  search_object: cat_record;↲
          ...↲
┆8c┆┆83┆┆c8┆↓
  WITH search_object AS s_o DO↲
    WHILE NOT found DO↲
      WITH b_catalog(current_index) DO↲
        IF author(* of b_catalog *) <> s_o.author then↲
          current_index:=current_index+1↲
        ELSE↲
          ...↲
↲
↲
┆b0┆┆a1┆5.9 Lock Statement↲
↲
The lock statement is the language construct which provides ↓
access to the actual contents of a buffer, i.e. to the top ↓
non-empty buffer in a buffer stack.↲
↲
↲
↲
↲
↲
↲
↲
↲
The denoted object must be a variable of type reference or ↓
chain. If it is a reference its value must not be NIL, and ↓
if it is a chain it must not be empty. Otherwise a fault ↓
occurs. The buffer designated by the reference, or the ↓
current buffer of the chain, whichever applies, may be ↓
accessed in the statement following DO as an implicitly ↓
declared variable the name of which is specified by the ↓
'buffer_name'. Either the whole buffer or only its data is ↓
accessible, depending on the 'lockword'.↲
↲
If the 'lockword' is LOCK the data area is accessible as a ↓
variable of a type belonging to the predefined family↲
    dataarea(offset, top: 0..maxint)=↲
╞	╞	╞	  PACKED AREA(offset..top-1) OF byte ↓
where the parameter values are equal to the buffer ↓
attributes with the same names. The address of the variable ↓
┆8c┆┆83┆┆c8┆↓
as well as the parameter values are evaluated before the ↓
statement following DO is executed.↲
↲
If the 'lockword' is LOCKBUF the whole buffer is accessible ↓
as a variable of a type belonging to the predefined family↲
    buffer(bufsize: 1..maxint)= ↲
                    PACKED ARRAY(0..bufsize-1) OF byte↲
where the value of the parameter equals the size of the ↓
buffer.↲
↲
If a lock statement is applied to a buffer stack with no ↓
non-empty buffer a fault occurs.↲
↲
The following restrictions are imposed on the use of the ↓
locked variable while the statement following DO is being ↓
executed, including any routine calls made: If a reference, ↓
it must not be used as part of an exchange statement or as a ↓
parameter to signal, return, or putbuf (cf. chapter 9), or ↓
be delivered to the IMC (cf. chapter 11). Whether a chain or ↓
a reference, it must not be used as a parameter to any of ↓
the buffer stack or chain manipulation routines (cf. chapter ↓
10). However, it is legal to (cynamically) apply multiple ↓
locks to the same reference or chain (e.g. in a routine ↓
called from within a lock statement).↲
↲
┆a1┆Example:↲
LOCK ref TO data_part DO↲
  WITH data_part AS data : my_buffer_type DO↲
    ...↲
↲
↲
┆b0┆┆a1┆5.10 Region Statement↲
↲
The region statement provides access to shared variables and ↓
it is ensured that the access is exclusive.↲
↲
↲
↲
↲
┆8c┆┆83┆┆d4┆↓
The denoted object must be a shared variable. Associated ↓
with every shared variable is an ┆a1┆access count┆e1┆ which is ↓
initially zero. A region statement is executed in three ↓
steps.↲
↲
1. ┆84┆Unless the process executing the region statement is ↓
┆19┆┆83┆┄┄already executing (dynamically inside) a region statement ↓
┆19┆┆83┆┄┄accessing the same shared variable it waits (is ↓
┆19┆┆83┆┄┄suspended) until the access countof the variable is zero. ↓
┆19┆┆83┆┄┄Subsequently the access count is incremented. If several ↓
┆19┆┆83┆┄┄processes wait for access to the same shared variable ↓
┆19┆┆83┆┄┄they observe a fifo discipline.↲
↲
2. ┆84┆The statement following DO is executed. In this statement ↓
┆19┆┆83┆┄┄the shared variable may be accessed in the same fashion ↓
┆19┆┆83┆┄┄as an ordinary (private) variable.↲
↲
3. The access count of the shared variable is decremented.↲
↲
┆a1┆Example:↲
↲
VAR↲
  route_table: RECORD↲
    ...↲
  PROCEDURE close_down(node: node_ident);↲
    ...↲
    REGION route_table DO↲
      route_table.open_routes(node):=closed;↲
      ...↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆6. PROGRAMS AND ROUTINES↲
↲
Programs and routines are very similar. Both have the ↓
general form of a heading followed by a block. Incarnations ↓
of program and routine blocks also exhibit fundamental ↓
similarities. In both cases the life of an incarnation has ↓
three stages: parameter passing, elaboration of ↓
declarations, and execution of an action part. The ↓
differences have to do with two aspects: control and ↓
environment.↲
↲
An incarnation of a program block is a process on its own ↓
which lives autonomously except for the control exercised by ↓
its parent, whereas an incarnation, or ┆a1┆activation┆e1┆, of a ↓
routine block is merely an episode in the life of a process. ↓
The activation, unless it chooses to loop infinitely or ↓
commits a fault, has no choice but to return to the point ↓
where it was called.↲
↲
A process has no environment of data to acces apart from ↓
predefined items and its parameters. A routine block ↓
activation, in addition to these, has its static ↓
surroundings: all the stack-allocated objects (including ↓
formal parameters) declared in enclosing blocks, except ↓
those which have been made invisible by redeclaration of ↓
their names, cf. chapter 8.↲
↲
A program declaration may appear at the outer level of a ↓
'compilation unit', cf. section 8.2, or in the delcaration ↓
part of a program block. It serves to name and define a ↓
program.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆83┆┆e0┆↓
The heading specifies the name of the program and its formal ↓
parameters, if any.↲
↲
A routine declaration may also appear at the outer level of ↓
a 'compilation unit', or in the declaration part of a block. ↓
It serves to name and define a routine.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The initial keyword in a routine heading specifies whether ↓
the routine is a function or a procedure. In addition the ↓
declaration specifies the name of the routine, its formal ↓
parameters, if any, and in the case of a function: its ↓
result type, which must be an ordinal, machine or pointer ↓
type. The 'routine block' unless specified by one of the ↓
keywords EXTERNAL or FORWARD (see blow) is associated with ↓
the function of procedure name.↲
↲
The parameters and blocks of programs as well as routines ↓
are described in the following two sections.↲
↲
┆a1┆Example:↲
PROGRAM router (INSPECT routs: route_table)↲
FUNCTION search_name(name: name_node): boolean↲
PROCEDURE insert_name(VAR position: table_index↲
╞	╞	        name: name_record)↲
↲
┆b0┆┆a1┆↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆6.1 Parameters↲
↲
The 'formal parameters' of a program or routine heading ↓
specify the names, kinds and types of the formal arametersof ↓
the program or routine.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
Each 'formal_name' introduceds one parameter. Several ↓
parameters may be named in a list, separated by commas. Such ↓
parameters have the same kind and type.↲
↲
The kind of a parameter, which may be ┆a1┆variable┆e1┆, ┆a1┆inspect┆e1┆, ↓
┆a1┆shared┆e1┆ or ┆a1┆value┆e1┆, is specified by the (possible) keyword ↓
preceding its name. In the block of the program or routine ↓
each parameter acts as an object. The parameter kind ↓
determines how this object may be used:↲
↲
┆a1┆keyword╞	parameter kind╞	use of object╞	╞	╞	╞	╞	↲
VAR╞	╞	variable╞	╞	as a private variable↲
INSPECT╞	inspect╞	╞	as a constant↲
SHARED╞	shared╞	╞	as a shared variable↲
none╞	value╞	╞	as a private variable↲
↲
The type of each parameter, i.e. of the object which can be ↓
accessed in the block of the rogram or routine, is ↓
determined by the 'formal type specification' following the ↓
name of the parameter. If the 'formal type specification' is ↓
a 'parameterized-type_name', i.e. the name of a family of ↓
conformant types, the type of the formal parameter is ↓
determined for each incarnation of the program or routine by ↓
the type of the actual parameter.↲
↲
┆8c┆┆83┆┆d4┆↓
An incarnation of a program or routine is created as a ↓
result of a 'create call', 'function call', or 'procedure ↓
call' being evaluated or executed. The call contains a ↓
description of the actual parameters to be bound to the ↓
formal parameters for the particular incarnation of the ↓
program or routine.↲
↲
↲
↲
↲
↲
↲
Each actual parameter corresponds to the formal parameter in ↓
the same position in the 'formal parameters'. The number of ↓
actual parameters must equal the number of formal ↓
parameters. An actual parameter of kind variable, inspect, ↓
or shared must be of the same type as the corresponding ↓
formal parameter. An actual parameter of kind value need ↓
only be assignable to the formal parameter (cf. section ↓
3.10). When the type of a formal parameter is specified as ↓
the name of a family of types the type of the corresponding ↓
actual parameter may be any type in that family.↲
↲
The symbol ? may be used in place of an actual parameter ↓
expression when the parameter is not of kind value, ↓
regardless of the type of the formal parameter.↲
↲
The binding of an actual parameter to the corresponding ↓
formal parameter takes place either by a value transfer ↓
("call by value"), or by an address transfer ("call by ↓
reference") depending on the kind of the parameter. Value ↓
parameters are passed by value transfer, all other kinds by ↓
address transfer.↲
↲
┆a1┆value transfer:↲
The value of the actual parameter becomes the initial value ↓
of the formal parameter which is allocated on the stack as ↓
an object local to the incarnation.↲
↲
┆8c┆┆83┆┆d4┆↓
┆a1┆address transer:↲
The actual parameter is an object expression, cf. chapter 4. ↓
It must not denote an irregular object (cf. section 3.9). ↓
Evaluation of the actual parameter yields the address of an ↓
object of the parameter type. Throughout the life of the ↓
incarnation of the program or routine the formal parameter ↓
name will denote this object.↲
↲
An actual parameter object passed to a process must be ↓
declared at the outer block level of the parent process, ↓
i.e. either it must itself be a process parameter or it must ↓
be declared in the program declaration part.↲
↲
If the actual parameter is specified as ? there is no ↓
parameter object. If an attempt is made to access such a ↓
non-existing parameter object a fault occurs.↲
↲
If the kind of the formal parameter is varialbe the actual ↓
parameter object must be a private variable or component of ↓
a private variable. If the kind of the formal parameter is ↓
shared the actual parameter object must be a shared ↓
variable. Conversely, if the actual parameter is shared, the ↓
kind of the formal parameter must also be shared.↲
↲
The following restrictions apply to process parameters, i.e. ↓
to the formal parameters which occur in a program heading:↲
- ┆84┆parameters of kind variable must be of type pool, mailbox, ↓
┆19┆┆82┆┄┄or port;↲
- ┆84┆parameters (or components thereof) of pointer types must ↓
┆19┆┆82┆┄┄have mailbox as their base type, regardless of kind.↲
↲
┆a1┆Notes:↲
An actual process parameter of kind inspect may be a ↓
variable, and thus it may be changed by the parent process.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example:↲
TYPE↲
   list= ARRAY(1..max_list_length) OF list_element;↲
↲
   PROCEDURE handle_list(INSPECT 1st: list);↲
   -- 1st is of kind inspect to save time and space, and to↲
   -- allow the handling of constant lists↲
↲
↲
┆b0┆┆a1┆6.2 Incarnations of Blocks↲
↲
A block, whether program or routine, consists of a ↓
declaration part and an action part which has the form of a ↓
compound statement.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
Blocks specified by one of the keywords EXTERNAL and FORWARD ↓
are described in subsection 6.2.2.↲
↲
The declaration parts of program and routine blocks are ↓
slightly different in that certain forms of declarations may ↓
not occur in a routine block; see subsection 6.2.1.↲
↲
An incarnation, whether of a program or routine, is created ↓
in the following three steps.↲
↲

════════════════════════════════════════════════════════════════════════
↓
1) ┆84┆Allocation of the necessary (initial) amount of stack and ↓
┆19┆┆83┆┄┄heap. In the case of a program this means a whole new ↓
┆19┆┆83┆┄┄stack; in the case of a routine it means an ┆a1┆activation ↓
┆19┆┆83┆┄┆84┆record┆e1┆ in the stack of the calling process.↲
↲
2) Parameter passing, cf. section 6.1.↲
↲
3) ┆84┆Elaboration of the declarations of the blocks, as ↓
┆19┆┆83┆┄┄described below.↲
↲
When an incarnation has been created the actions part of the ↓
block can be executed, cf. function call (section 4.2), ↓
procedure call (section 5.6), and create call (section 9.1).↲
↲
When execution of the action part of a routine terminates ↓
the values of all local reference variables must be NIL, ↓
otherwise a fault occurs.↲
↲
↲
┆b0┆┆a1┆6.2.1 The Declaration Part↲
↲
The declaration part of a block names and defines types, ↓
objects, routines and programs which are local to the block, ↓
i.e. not visible outside the block. The names introduced in ↓
the declarations may be used within the block to refer to ↓
the defined entities, cf. chapter 8.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆83┆┆e0┆↓
Variables of shielded types, except reference, and variables ↓
which have components of these types may not be declared in ↓
a routine declaration part, i.e. such variables can only be ↓
declared in the outer block of a program.↲
↲
The declarations in the declaration part of a block are ↓
elaborated in the order of occurrence. Elaboration of type ↓
declarations is described in section 3.2, elaboration of ↓
variable and shared declarations is described in subsection ↓
3.12.2, and constant declarations need no elaboration at ↓
run-time.↲
↲
The elaboration of a routine or program declaration causes ↓
all types defined in the 'formal parameters' to be ↓
established. When a program declaration is elaborated a ┆a1┆sub-↓
┆19┆┄┄┆84┆program object┆e1┆ is allocated in the stack of the process ↓
being created, and associated with the program name ↓
specified in the declaration. Unless the program block is ↓
external, the sub-program object is linked (as if by an ↓
implicit link call, cf. chapter 9) to the block; otherwise ↓
it is initialized as having state unlinked.↲
↲
The elaboration of the declaration part is performed for ↓
each incarnation of a block, and the names introduced in the ↓
declarations, when occurring in the remainder of the block, ↓
refer to those instances of the named entities which have ↓
been established or allocated when the particular ↓
incarnation of the block was created.↲
↲
In the case of a function block elaboration of the ↓
declaration part, even if it is empty, includes ↓
establishment of the result type and allocation on the stack ↓
of an implicitly declared ┆a1┆result object┆e1┆. The initial value ↓
of the result object is undefined.↲
↲
┆a1┆Note:↲
The static environment of an internal program block is the ↓
same as that of the enclosing program block, i.e. only names ↓
┆8c┆┆83┆┆c8┆↓
in contexts specified for the compilation unit, cf. chapter ↓
8, predefined names, and the names of formal parameters are ↓
known from the start of the block.↲
↲
Elaboration of declarations is not the only time types may ↓
be established. Further types may be established when for, ↓
with, and lock statements are executed.↲
↲
┆b0┆┆f0┆┆a1┆Example (of nested routines):↲
↲
TYPE parity= (even, odd);↲
↲
FUNCTION byte_parity(arg: byte): parity;↲
↲
  FUNCTION even4bits(arg: 0..15): boolean;↲
    CONST table= (. 0,3,5,6,9,10,12,15 .);↲
  BEGIN even4bits:=arg IN table END;↲
↲
BEGIN (* byte parity *)↲
  IF even4bits(int(arg SHIFT (-4))) -- left half byte↲
    =even4bits(int(arg AND  HF))    -- right half byte↲
  THEN byte_parity:=even↲
  ELSE byte_parity:=odd↲
END↲
↲
↲
┆b0┆┆a1┆6.2.2 Forward and External Blocks↲
↲
A forward announcement of a declaration containing the ↓
actual block of a routine may be given by using the keyword ↓
FORWARD in place of the routine block. When a forward ↓
announcement is used a declaration with an identical routine ↓
heading, i.e. all lexical elements identical, and an actual ↓
routine block (i.e. constisting of declaration part, which ↓
may be empty, and action part) must appear later in the same ↓
'declaration part'. In this way it is possible to observe ↓
the rule of declaration before use, even for mutually ↓
recursive routines.↲
↲
┆8c┆┆83┆┆d4┆↓
The block of a program or routine may be specified as ↓
external, i.e. separately compiled (cf. chapter 8), by the ↓
keyword EXTERNAL. This may only be used in the declaration ↓
part of a block appearing at the outermost block level of a ↓
compilation unit, cf. section 8.2. An external program or ↓
routine y possibly be written in another programming ↓
language and compiled by a compiler for that language ↓
provided it is object code format compatible with the Real-↓
Time Pascal compiler in question.↲
↲
Due to the differences between routines and programs the ↓
linking of a program to a separately compiled block is ↓
somewhat different in the two cases.↲
↲
During the execution of an incarnation of a program ↓
containing an external program declaration the linking ↓
between the resulting sub-program object and the block of a ↓
separately compiled program is established as a result of ↓
the evaluation of an explicit link call, cf. chapter 9.↲
↲
The association between the block of a separately compiled ↓
routine and the function or procedure name specified in an ↓
external routine delcaration, i.e. the linking of the ↓
routine block to the program in which the external ↓
declaration occurs, must be established by a linkage editor ↓
before an incarnation of the program can be created. This ↓
can be done during a separate link-phase following ↓
compilation, or it can be done as a by-effect of program ↓
linking at run-time.↲
↲
The amount and kind of checking of the agreement between the ↓
'formal parameters' of an external program or routine ↓
declaration and the corresponding formal parameter ↓
specificationof the separately compiled block, which is ↓
performed during linking, is implementation dependent. This ↓
is true for both cases of linking. In order to facilitate ↓
linking with programs written in other languages the ↓
parameter and result passing formats used by an ↓
┆8c┆┆83┆┆c8┆↓
implementation must be appropriately chosen and thoroughly ↓
documented.↲
↲
┆a1┆Example (of mutually recursive routines):↲
↲
PROCEDURE first(par1, par2: type1); FORWARD;↲
↲
PROCEDURE second(par: par_type);↲
  ...↲
BEGIN↲
  ...↲
  first(act1, ct2);↲
  ...↲
END;↲
↲
PROCEDURE first(part1, par2: type1);↲
  ...↲
BEGIN↲
  ...↲
  second(act);↲
  ...↲
END↲
↲
↲
┆b0┆┆a1┆6.2.3 The Action Part↲
↲
Execution of the actions of a block means execution of its ↓
compound statement. This is described in chapter 5. ↓
Executionis ┆a1┆terminated┆e1┆ when the compound statement is ↓
exhausted, when an exit statement is executed, or when a ↓
fault occurs. When a process terminates it goes into a ↓
passive state where it remains until removed by its parent. ↓
When a procedure activation terminates its activation record ↓
is deallocated and a return is made to the caller, i.e. the ↓
procedure call is completed. When a function activation ↓
terminates its activation record is deallocated and the ↓
final value of the implicit result object is the value of ↓
the function call whose evaluation caused the activation.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆7. FAULT HANDLING↲
↲
A number of violationsof the rules of Real-Time Pascal are ↓
referred to in this document as faults. Faults are errors ↓
which cannot, at least not in call cases, be detected at ↓
compile-time. Faults which are detected at compile-time ↓
cause the compiler to reject the source program. When a ↓
fault occurs at run-time, during the execution of an ↓
incarnation of a program, the following happens:↲
↲
1. ┆84┆The ┆a1┆exception procedure┆e1┆ of the program is called with a ↓
┆19┆┆83┆┄┄fault code parameter indicating the kind of fault which ↓
┆19┆┆83┆┄┄occurred.↲
2. ┆84┆When (if) the exception procedure returns the process ↓
┆19┆┆83┆┄┄terminates and goes into a passive state as if execution ↓
┆19┆┆83┆┄┄of its action part had been completed.↲
↲
Fault codes are implementation dependent and must be ↓
documented for each implementation.↲
↲
↲
┆b0┆┆a1┆7.1 Default Exception Procedure↲
↲
Every implementation must include a default exception ↓
procedure which outputs a snapshot of the stack of the ↓
calling process and the fault code.↲
↲
The default exception procedure may also be called to ↓
provide trace information about a process. Such an explicit ↓
call does not cause the process to terminate. The heading of ↓
the default exception procedure is:↲
↲
PROCEDURE trace(fault: integer)↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆7.2 Programmer-defined Exception Procedure↲
↲
When a procedure with the name exception and one integer-↓
type parameter, i.e.↲
↲
PROCEDURE exception(fault: integer)↲
↲
is declared (internally) at the outer block level of a ↓
program, this procedure becomes the exception procedure of ↓
the program.↲
↲
┆a1┆Note:↲
An ordinary call of a programmer-defined exception procedure ↓
does not cause a process to terminate.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆8. NAMING ENVIRONMENTS↲
↲
The rules described in this chapter serve to define for ↓
every point in a Real-Time Pascal source text the ┆a1┆naming ↓
┆19┆┄┄┆84┆environment┆e1┆ which is valied at that point. A naming ↓
environment it must have an independent meaning, i.e. an ↓
occurrence of the name must denote a ┆a2┆┆e2┆┆a1┆program entity┆e1┆ ↓
irrespective of the syntactic context. A program entity is a ↓
value, a type, a family of conformant types, an object ↓
(which may in particular be a formal parameter), a label, a ↓
routine, or a (sub-)program. The visibility rules ensure ↓
that the entity denoted by a name is always uniquely ↓
determined.↲
↲
In other words, the purpose of this chapter is to answer the ↓
question: When a name occurs at some point in a source text, ↓
what does it mean? and to ensure that the meaning is ↓
uniquely defined.↲
↲
The unit of compilation for a Real-Time Pascal compiler is ↓
basically a sequence of routine and/or program declarations, ↓
referred to in the following as a ┆a1┆source text┆e1┆. The ↓
visibility rules for names introduced in a source text are ↓
described in section 8.1, and the precise syntactic form of ↓
a compilation unit is described in section 8.2 along with a ↓
discussion of the role played by predefined names and names ↓
introduced in so-called contexts.↲
↲
↲
┆b0┆┆a1┆8.1 Visibility Rules↲
↲
All names which occur in a source text must hve one or more ↓
points of ┆a1┆introduction┆e1┆ each of which defines a program ↓
entity which can be denoted by the name within some region ↓
of the text, called the ┆a1┆visibility region┆e1┆ of the entity. The ↓
point of introduction may be a declaration, a formal ↓
parameter specification, a labelled statement, the AS-part ↓
of a with statement, the iteration description of a for ↓
┆8c┆┆83┆┆c8┆↓
statement, or a 7buffer_name' in a lock statement. Every ↓
introduction of a name has a ┆a1┆scope┆e1┆, i.e. a region of text ↓
over which the introduction has an effect. The concept of ↓
scope serves as a tool in determining the visibility region ↓
of a named program entity.↲
↲
Once the visibility regions of all program entities are ↓
known the determination of a naming environment proceeds as ↓
follows: Consider a name occurring at some point in a ↓
program. If the point is within the visibility region of a ↓
program entity whose name is the name under consideration, ↓
then the name denotes that program entity. Otherwise it has ↓
no meaning, i.e. it is not part of naming environment.↲
↲
There are two kinds of names which have no independent ↓
meaning, but whose meaning is dependent on the syntactic ↓
context, viz. the names of record fields and formal type ↓
parameters. However, because of the shorthand form of record ↓
field access allowed in with statements (cf. section 3.8) ↓
the names of fields of a with-object of a record type are ↓
treated as if introduced in the 'with definition'. Apart ↓
from this special case the names of record fields and type ↓
parameters are not members of naming environments.↲
↲
Three kinds of rules which together make up the visibility ↓
rules are given below:↲
↲
- uniqueness rules: ┆84┆rules which serve only to prevent ↓
┆19┆┆94┆┄┄ambiguous meanings of names,↲
- scope rules:      ┆84┆rules which determine the scope of an ↓
┆19┆┆94┆┄┄introduction of a name,↲
- exclusion rules:  ┆84┆rules which determine the visibility ↓
┆19┆┆94┆┄┄region of a program entity by explicit ↓
┆19┆┆94┆┄┄exclusion of sub-regions from the scope ↓
┆19┆┆94┆┄┄of the introduction of the name of the ↓
┆19┆┆94┆┄┄entity.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Uniqueness rules↲
↲
The following names are said to be introduced ┆a1┆initially┆e1┆ in a ↓
block:↲
↲
- ┆84┆the names of the formal parameters specified in the ↓
┆19┆┆82┆┄┄heading of the block,↲
- ┆84┆the names of program entities introduced in the ↓
┆19┆┆82┆┄┄declaration part of the block exclusing the formal ↓
┆19┆┆82┆┄┄parameter lists and blocks of enclosed program and routine ↓
┆19┆┆82┆┄┄declarations, and↲
- ┆84┆the names of labels appearing in the compound statement of ↓
┆19┆┆82┆┄┄the block.↲
↲
1) ┆84┆All names introduced initially in a block must be ↓
┆19┆┆83┆┄┄distinct.↲
2) ┆84┆All names introduced in the 'with definition' of a with ↓
┆19┆┆83┆┄┄statement must be distinct.↲
↲
┆a1┆Scope rules↲
↲
1) ┆84┆The scope of a label or variable name is the compound ↓
┆19┆┆83┆┄┄statement of the block in which it is introduced.↲
2) ┆84┆The scope of any other name introduced initially in a ↓
┆19┆┆83┆┄┄block extends from the point of introduction to the end ↓
┆19┆┆83┆┄┄of the block. This is the rule which implies that in ↓
┆19┆┆83┆┄┄general a name must be introduced before use.↲
3) ┆84┆The scope of the 'for_name' introduced in a for ↓
┆19┆┆83┆┄┄statement, or of a name introduced in a lock statement is ↓
┆19┆┆83┆┄┄the 'statement' following DO in the for, with, or lock ↓
┆19┆┆83┆┄┄statement.↲
4) ┆84┆The scope of a record field name introduced as field ↓
┆19┆┆83┆┄┄access shorthand in a with statement is the statement ↓
┆19┆┆83┆┄┄following DO.↲
↲
┆a1┆Exclusion rules↲
↲
An introduction of a name which occurs within the stope of a ↓
previous introduction of the same name is called a ↓
┆a1┆reintroduction┆e1┆.↲
↲
┆8c┆┆83┆┆ec┆↓
The visibility region of a named program entity is the scope ↓
of the introduction of its name with the following possible ↓
exceptions:↲
↲
1) Any inner program blocks.↲
2) ┆84┆The scope(s) of any reintroduction(s) of the name, i.e. ↓
┆19┆┆83┆┄┄reintroduction hides the entity denoted by the outer ↓
┆19┆┆83┆┄┄occurrence of the name.↲
↲
┆a1┆Example:↲
↲
Hiding of an entity by reintroductionof its name is ↓
illustrated below:↲
↲
PROCEDURE p;↲
CONST↲
   n=2;↲
   ...↲
   PROCEDURE q;↲
   CONST↲
      m=n; (* 2 *)↲
      n=5;↲
   BEGIN↲
      ... n ... (* has value 5 *)↲
   ...↲
END↲
↲
↲
┆b0┆┆a1┆8.2 Contexts and Predefined Names↲
↲
The initial naming environment of a compilation consists of ↓
the predefined names and entities and those introduced in ↓
contexts.↲
↲
The unit of compilation is a sequence of program and/or ↓
routine declarations optionally preceded by one or more ↓
contexts. A compiler must allow contexts to be supplied as ↓
files separate from the source text proper.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┆84┆┆f0┆↓
All names introduced in one context must be distinct. The ↓
names introduced in contexts and theprogram entities defined ↓
at their points of introduction are treted as if they were ↓
introduced in a block surrounding the outer block(s) of the ↓
source text proper with one exception: the exclusion rule ↓
for inner program blocks does not apply. The scope of a name ↓
introduced in a context extends from the point of ↓
introduction to the end of the compilation unit. Routines ↓
declared in a context must be external, i.e. the actual ↓
block of a routine cannot be specified in a context.↲
↲
The scope of names predefined as part of the language, cf. ↓
Appendix C, is the complete compilation unit. As with ↓
contexts the exclusion rule for inner program blocks does ↓
not apply to predefined entities. However, a predefined name ↓
may be hidden by reintroduction.↲
↲
┆a1┆Note:↲
the exclusion rule for inner program blocks implies that ↓
types, constants, and routines which are to be common for ↓
several programs compiled as one unit must be specified in a ↓
context.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆b0┆┆06┆┆0b┆↲
┆b0┆┆a1┆9. PROCESS CONTROL AND INTER-COMMUNICATION↲
↲
This chapter describes the predefined language constructs ↓
available for control of offspring processes and for ↓
exchange of information between processes.↲
↲
An incarnation of a sub-program is called a child of a ↓
(parent) process which is an incarnation of the program ↓
containing the sub-program declaration.↲
↲
The navel string between the parent and the child is a ↓
variable of type process belonging to the parent. An ↓
arbitrary number of incarnations of a sub-program may be ↓
born; they are all controlled by the parent.↲
↲
When a child is born it is supplied with actual parameters ↓
according to the formal parameter specifiction of the ↓
declaration, cf. section 6.1. Processes communicate via ↓
mailboxes or shared variables. A mailbox or a shared ↓
variable known by a parent may be made known as a paramter ↓
to its children (such a variable may either be owned by the ↓
parentor one of its ancestors). In this way a parent ↓
determines the communication paths of its children without, ↓
however, necessarily participating in the communication ↓
itself. Refer to section 5.10 for communication by means of ↓
shared variables and section 9.2 for mailbox communication.↲
↲
↲
┆b0┆┆a1┆9.1 Process Control↲
↲
A sub-program declaration in a program implies the ↓
allocation of a sub-program object in the stack of an ↓
incarnation of theprogram. The states of a sub-program ↓
object are ┆a1┆linked┆e1┆ and ┆a1┆unlinked┆e1┆, cf. section 6.2.1 for the ↓
initial state of a subprogram object.↲
↲
The linking (i.e. change of state from unlinked to linked) ↓
is performed by a link call which is similar to a function ↓
call.↲
↲
↲
↲
↲
┆8c┆┆84┆┆84┆↓
The type of the result of alink call is an implementation ↓
dependend predefined enumeration type↲
 link_result= (link_ok, already_linked, external_not_found, ↓
               ...).↲
↲
The purpose of a link call is to find a suitable program ↓
block matching the sub-program declaration. The value of the ↓
expression, which must be of a string type, is used to ↓
search for the program block in a fashion which is ↓
implementation dependent. the 'formal parameters' of the ↓
sub-program declaration may also be used in the match. If a ↓
program block is found it is linked to the sub-program ↓
object denoted by the 'program_name'.↲
↲
The result of a link call indicates that the linking was ↓
successful or why it went wrong.↲
↲
If the implementation and installation allows dynamic ↓
program load, the executionof a link call may involve the ↓
loading of a suitable program as well as the necessary ↓
linkage editing.↲
↲
If a new program block is to be linked to a sub-program ↓
object, the former link must be broken, i.e. the state of ↓
the sub-program object has to be changed from linked to ↓
unlinked. This is done by means of an unlink call, which is ↓
similar to a function call:↲
↲
↲
↲
↲
The result of an unlink call is of the implementation ↓
dependent predefined enumeration type↲
  unlink_result= (unlink_ok, no_program_linked,↲
╞	╞	    existing_incarnations, ...)↲
↲
After the call, if successful, the sub-program object may be ↓
linked anew (link call).↲
↲
┆8c┆┆83┆┆d4┆↓
Processes may be created as incarnations of sub-programs in ↓
the linked state. When a process has been created it will ↓
begin to execute its actions. A process may become ↓
temporarily unable to execute actions for two reasons, which ↓
are independent of each other. It may be ┆a1┆waiting┆e1┆ for an ↓
event, cf. subsection 9.2.2, or ┆a1┆stopped┆e1┆, cf. the predefined ↓
procedures stop and resume described below. A process is ↓
only able to execute actions if it is neither waiting nor ↓
stopped. The dynamic allocation of processor time to ↓
processes with the latter property is the scheduling ↓
function performed by the operating system or language-↓
supporting nucleus.↲
↲
A process is created by means of a create call.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
The evaluation of a create call causes an incarnation of the ↓
program block linked to the sub-program object denoted by ↓
'program_name' to be created as described in section 6.2. If ↓
the state of the sub-program object is unlinked a fault will ↓
occur. When a process has just been created it is neither ↓
stopped nor waiting.↲
↲
The value of the 'name_expression', which must be of a ↓
string type, is attached to the created process for ↓
diagnostic purposes.↲
↲
The 'process_object denotation' denotes the variable through ↓
which the calling process will control the child; it must be ↓
┆8c┆┆83┆┆c8┆↓
of type process. The value of this variable must be NIL ↓
before the call, otherwise a fault occurs. After the call it ↓
will be a reference to the child process. ↓
↲
The 'actual parameters' of the program call are bound to the ↓
corresponding formal parameters as part of the evaluation of ↓
the create call.↲
↲
The initial size of the stack which is allocated for the ↓
created procedss is determined by the value of the ↓
'size_expression' which must be of type 0..maxint. Size 0 ↓
means allocation of an area according to a value defined for ↓
the sub-program at compile-time, cf. chapter 12. The unit of ↓
measurement for stack size is implementation dependent.↲
↲
The value of the 'priority_expression' determines the ↓
execution priority of the created process. This quantity ↓
affects the way in which the process is scheduled for ↓
executionin a fashion which depends on the implementation. ↓
The type required of the expression also depends on the ↓
implementation.↲
↲
The result of a create call has an implementation dependent ↓
predefined enumeration type↲
    create_result= (create_ok, no_memory, ...).↲
↲
If the create call was unsuccessful the result will indicate ↓
the reason. In this case no process will have been created ↓
and the value of the process variable will still be NIL.↲
↲
The predefined procedures stop, resume, and remove may be ↓
used to control a child, designated by a process variable ↓
passed as a parameter. If one of the procedures is called ↓
with this variable equal to NIL a fault will occur.↲
↲
PROCEDURE stop(VAR pr: process)↲
↲
┆8c┆┆83┆┆bc┆↓
The child process becomres stopped. If it is already stopped ↓
before the call there is no effect.↲
↲
PROCEDURE resume(VAR pr: process)↲
↲
If the child process is stopped a call of resume makes it ↓
not stopped; otherwise the call has no effect.↲
↲
PROCEDURE remove(VAR pr: process)↲
↲
A call of remove causes the child process to be removed, ↓
i.e. execution of its action part is terminated and all ↓
resources owned by the child are released and become free ↓
memory. The resources include stack, heap, and pools. Any ↓
ports owned by the process are closed (cf. section 11.1). ↓
Pools and buffers are handled as follows:↲
↲
1. ┆84┆All buffers which have a pool owned by the child process ↓
┆19┆┆83┆┄┄as their home pool are marked for deallocation. A special ↓
┆19┆┆83┆┄┄treatment is given to a buffer stack whose top buffer is ↓
┆19┆┆83┆┄┄marked for deallocation, in the following situations:↲
↲
   - ┆84┆A process calls putbuf (cf. section 3.8) attempting to ↓
┆19┆┆85┆┄┄put the buffer in its home pool (in this case the ↓
┆19┆┆85┆┄┄buffer must be alone in the stack), ↓
↲
   - ┆84┆A process calls return (cf. subsection 9.2.2) ↓
┆19┆┆85┆┄┄attempting to place the stack in the return address ↓
┆19┆┆85┆┄┄mailbox of the top buffer,↲
↲
   - ┆84┆An attempt is made to place the stack in the return ↓
┆19┆┆85┆┄┄address mailbox of the top buffer as an IMC event (cf. ↓
┆19┆┆85┆┄┄chapter 11) or as described below.↲
↲
   ┆84┆In all three cases the special treatment is the ↓
┆19┆┆83┆┄┄following. First the top buffer is removed from the stck ↓
┆19┆┆83┆┄┄and released to become free memory. Then the remainder of ↓
┆19┆┆83┆┄┄the stack, if non-empty, is placed in the return address ↓
┆8c┆┆83┆┆c8┆↓
┆19┆┆83┆┄┄mailbox of the new top buffer, except if this buffer is ↓
┆19┆┆83┆┄┄also marked for deallocation in which case the rule ↓
┆19┆┆83┆┄┄applies recursively. The event kind attribute of a buffer ↓
┆19┆┆83┆┄┄returned in this fashion becomes process_removed.↲
↲
2. ┆84┆All buffer stacks accessed through reference or chain ↓
┆19┆┆83┆┄┄variables or presently placed in mailboxes owned by the ↓
┆19┆┆83┆┄┄child process are placed in the return address mailbox of ↓
┆19┆┆83┆┄┄the top buffer with the event kind attribute equal to ↓
┆19┆┆83┆┄┄process_removed. If the top buffer is marked for ↓
┆19┆┆83┆┄┄deallocation the above rule applies.↲
↲
If the process to be removed has any children, these are ↓
removed before the process itself. This rule applies ↓
recursively. Thus, in effect, removal of a process means ↓
removal of that subtree of the complete process three of ↓
which the process is the root.↲
↲
After a call of remove the value of the parameter is NIL.↲
↲
If a process shares a pool with a child, i.e. if the pool ↓
was passed as a process parameter when the child process was ↓
created, the process must not remove that child. If an ↓
attempt is made a fault occurs. However, if the process ↓
itself is removed, the child will also be removed by the ↓
recursion described above.↲
↲
It is illegal to remove a child process while it is ↓
executing a region statement. An attempt to do so causes a ↓
fault.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆Example:↲
↲
link_res:=link("child1", my_child);↲
IF link_res <> link_ok THEN link_error(link_res);↲
create_res:=create("child_1_1", my_child(mbx1), process1, 0, ↓
           std_prio);↲
IF create_res <> create_ok THEN create_error(create_res);↲
create_res:=create(Wchild_1_2", my_child(mbx2), process2, 0, ↓
           std_prio);↲
IF create_res <> create_ok THEN create_error(create_res);↲
  ...↲
stop(process6);↲
  ...↲
resume(process6);↲
  ...↲
remove(process4);↲
create_res:=create("child_2_4", my_child(alternative_mbx),↲
                   process4, 200, high_prio);↲
IF ...↲
  ...↲
↲
↲
┆b0┆┆a1┆9.2 Mailbox Communication↲
↲
Messages may be passed among processes via mailboxes. A ↓
message is the contents of a stack of buffers, which is ↓
accessed through a variable of type reference or chain. At ↓
most one reference or chain variable holds a reference to a ↓
buffer at any time; thus mutually exclusive access to ↓
buffers is ensured.↲
↲
Access to the data contained in a buffer is only possible in ↓
a lock statement (cf. section 5.9).↲
↲
The access right is exchanged between processes by means of ↓
the predefined procedures signal, wait, waitdelay, and ↓
return as described in subsection 9.2.2.↲
↲
↲
┆8c┆┆83┆┆d4┆↓
┆b0┆┆a1┆9.2.1 Mailbox States↲
↲
A mailbox may be regarded as a waiting room in one of the ↓
states passive, open or locked:↲
↲
passive:↲
┆a1┆   mbx  ↲
          Neither buffers to be accessed nor processes ↓
┆a1┆        ┆e1┆  asking for access at the mailbox.↲
↲
 open:↲
┆a1┆   mbx  ┆e1┆  A list of buffers (actually buffer stacks) are ↲
  buf1    ready for access, the first one will be removed↲
  buf2    from the list when a process asks for a buffer,↲
  buf3    and the process will be given the access right.↲
┆a1┆  buf4  ↲
↲
locked:↲
┆a1┆   mbx  ┆e1┆  A list of processes are waiting for access to a ↲
  proc1   buffer; the first one will get the access right to↲
  proc2   the next buffer arriving at the mailbox and will↲
  proc3   subsequently be removed from the list.↲
┆a1┆  proc4 ↲
↲
There are three predefined boolean functions to inspect the ↓
state of a mailbox. However, it is not mandatory that these ↓
functions be implemented.↲
↲
FUNCTION open(VAR mbx: mailbox): boolean↲
FUNCTION locked(VAR mbx: mailbox): boolean↲
FUNCTION passive(VAR mbx: mailbox): boolean↲
↲
↲
┆b0┆┆a1┆9.2.2 Communication and Synchronization Primitives↲
↲
There are four predefined communication/synchronization ↓
primitives: signal, return, wait, and waitdelay. In addition ↓
the delay primitive may be used for purposes of ↓
synchronization or temporary process suspension.↲
↲
┆8c┆┆83┆┆e0┆↓
Signal is performed by a call of the predefined procedure ↓
signal:↲
↲
PROCEDURE signal(VAR mbx: mailbox; VAR ref: reference)↲
The value of ref must not be NIL or the reference locked ↓
(cf. section 5.9), otherwise a fault occurs. After the call, ↓
the buffer designated by ref is entered as the last element ↓
of the list of buffers belonging to mbx. If the mailbox is ↓
locked, the first process is removed from the list of ↓
waiting processes. This process is now allowed to complete ↓
the call of wait/waitdelay which caused its insertion in the ↓
list of the mailbox. The event kind attribute of the ↓
designated buffer becomes message_event.↲
↲
The language provides two kinds of events which can be ↓
waited for:↲
- the arrival of a buffer at a specified mailbox.↲
- ┆84┆the expiry of a delay, specified as a number of ↓
┆19┆┆82┆┄┄milliseconds. An implementation need not, however, support ↓
┆19┆┆82┆┄┄such fine granularity. If the delay is specified as zero, ↓
┆19┆┆82┆┄┄the call (delay, waitdelay, or getbufdelay) will return ↓
┆19┆┆82┆┄┄immediately.↲
↲
A process may wait for one specific event or for the first ↓
one of two, one of each kind. It does so by calling one of ↓
the following routines.↲
↲
PROCEDURE wait(VAR mbx: mailbox; VAR ref: reference)↲
The value of ref must be NIL prior to a call, otherwise a ↓
fault occurs. If the mailbox mbx is open, the first buffer ↓
stack in the list is removed and ref will designate this ↓
stack. If the mailbox state is locked or passive the process ↓
is suspended until one of the events eventually occurs. The ↓
result indicates the reason why the process is activated; ↓
its type is the predefined enumeration type↲
   wait_result= (a_buffer, a_delay).↲
↲
┆8c┆┆83┆┆bc┆↓
Getting a buffer from a pool, cf. section 3.8, is similar to ↓
receiving a buffer from a mailbox. A special version of ↓
getbuf is therefore available which allows the specification ↓
of a maximum delay which a process will tolerate.↲
↲
FUNCTION getbufdelay(VAR p: pool; VAR ra: mailbox;↲
         VAR r: reference; no_of_msecs: 0..maxint): ↓
                wait_result↲
↲
The description of getbuf, cf. section 3.8, applies also to ↓
getbufdelay with the modification that in case the delay ↓
specified by no_of_msecs expires before the calling process ↓
obtains a buffer the call will return the result a_delay and ↓
otherwise have no effect. If a buffer is obtained the result ↓
will be a_buffer.↲
↲
Return is performed by a call of the predefined procedure ↓
return:↲
↲
PROCEDURE return(VAR ref: reference)↲
The call:╞	╞	return(ref)↲
is equivalent to:╞	signal(ret_address, ref)↲
where ret_address denotes the return address of the buffer ↓
designated by ref, cf. section 3.8, except for the value of ↓
the event kind attribute which becomes answer_event.↲
↲
┆a1┆Notes:↲
A mailbox may be inspected without hving to wait if it is ↓
empty by calling waitdelay with zero delay.↲
↲
An implementation must secure indivisibility of the ↓
communication primitives.↲
↲
┆a1┆Example:↲
The following communication flow is possible by means of ↓
signal and return. Each process p┆82┆i┆81┆ must know the (mailbox) ↓
address of process pi+1┆81┆. However, process p┆82┆n┆81┆ does not know ↓
process p┆82┆1┆81┆.↲
↲
┆8c┆┆83┆┆d4┆↓
  signal╞	signal╞	╞	signal↲
↲
↲
  p┆82┆1┆81┆       p┆82┆2┆81┆            ...             p┆82┆n┆81┆↲
↲
 ╞	╞	   return↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆10. BUFFER MANIPULATION↲
↲
Two structures for organizaing buffers are supported by the ↓
language: stacks and chains. A buffer stack is the general ↓
form of a message, where a stack with only one buffer is a ↓
special case. Access to a stack may be transferred between ↓
processes via a mailbox (cf. section 9.2). The chain ↓
structure is intended for local organization of buffers in ↓
aprocess. The elementsof a chain are buffer stacks. They are ↓
accessed by a handle: a variable of type chain. The elements ↓
of a buffer stack are buffers. They are accessed by a ↓
handle: a reference variable (or directly by a chain in the ↓
case of the current buffer). The manipulation of buffer ↓
stacks is described in section 10.1 and of chains in section ↓
10.2.↲
↲
↲
┆b0┆┆a1┆10.1 Buffer Stacks↲
↲
A stack is one or more buffers, organized as a lifo list so ↓
that manipulation affects the youngest member only. Access ↓
to the data in a stack of buffers is achieved by means of a ↓
lock statement, possibly giving access to several members of ↓
the stack (cf. secion 5.9).↲
↲
Access to the attributes of buffers in a stack can only be ↓
made to those of the top (youngest) member. A special ↓
treatment is given to the size and data description ↓
attributes when empty buffers are pushed onto or popped from ↓
a stack, ensuring that these attributes will apply to the ↓
topmost non-empty buffer in the stack, since only non-empty ↓
buffers can be accessed in a lock statement.↲
↲
A stack may be manipulated by calling the predefined ↓
procedures push and pop. The parameters to these procedures ↓
must not be locked. Otherwise a fault will occur at the time ↓
of call.↲
↲
┆8c┆┆83┆┆c8┆↓
PROCEDURE push(VAR stack_handle, new_top: reference)↲
↲
The parameter new_top must designate a buffer stack with ↓
only one element, otherwise a fault occurs. The buffer stack ↓
designated by stack_handle, possibly an empty stack (i.e. ↓
the handle is NIL), is extended with the buffer designated ↓
by new_top as the new top element. After the call ↓
stack_handle will designate the new stack, and the value of ↓
new_top will be NIL.↲
↲
If the new top buffer is empty, and the stack was not empty ↓
before pushing, the size and data area description (offset, ↓
top, and byte count) are copied from the old to the new top ↓
buffer.↲
↲
PROCEDURE pop(VAR stack_handle, popped_buf: reference)↲
↲
The value of popped_buf must be NIL, and the value of ↓
stack_handle must not be NIL; otherwise a fault occurs. The ↓
result of a call of pop is: the top buffer in the stack is ↓
removed, popped_buf will designate a stack consisting of the ↓
removed buffer only, and stack_handle will designate the ↓
remaining part of the stack. If the stack had only one ↓
element its value will be NIL.↲
↲
If the popped buffer is empty, its size and data area ↓
description attributes (offset, top, and byte count) are all ↓
set to zero.↲
↲
The depth of a buffer stack as well as the number of actual ↓
data buffers can be obtained by using the predefined ↓
functions stckdepth and bufcount.↲
↲
FUNCTION stackdepth(VAR stack: reference): 0..maxint↲
FUNCTION bufcount(VAR stack: reference): 0..maxint↲
↲
The value returned by stackdepth is the total number of ↓
buffers in the designated stack, including empty ones, ↓
┆8c┆┆83┆┆c8┆↓
whereas bufcount yields only the number of non-empty buffers ↓
(cf. lock statement, section 5.9). Both functions return the ↓
value 0 if the parameter has value NIL.↲
↲
┆a1┆Example:↲
The following flow of buffers may be achieved by means of ↓
the paired operations: (push, signal) and (pop, return).↲
↲
  ╞	(signal)╞	╞	(push, signal)╞	(push, signal)↲
↲
↲
p╞	╞	p       ...╞	 p╞	╞	  p↲
 ┆81┆1             2                    n-1                  n↲
↲
╞	(pop, return)╞	(pop, return)╞	(return)↲
↲
↲
┆b0┆┆a1┆10.2 Buffer Chains↲
↲
The initial state of a chain object is empty, i.e. the ↓
length of the chain is 0. Cyclic lists are built and ↓
manipulated by means of predefined routines only. The ↓
following actions may be performed on chains: insert an ↓
element, extract an element, change current buffer, update ↓
start point, and read the length.↲
↲
Two elements of a chain have a special status:↲
↲
- ┆84┆the ┆a1┆start point┆e1┆ of the chain is the first element put into ↓
┆19┆┆82┆┄┄the chain or an element explicitly selected as the start ↓
┆19┆┆82┆┄┄point.↲
↲
- ┆84┆the ┆a1┆current buffer (stack)┆e1┆ is the element which may be ↓
┆19┆┆82┆┄┄extracted or accessed in a lock statement and the only ↓
┆19┆┆82┆┄┄element whose buffer attributes may be read or changed.↲
↲
The predefined routines eventkind, resetevent, u1, u2, u3, ↓
u4, setu1, setu2, setu3, setu4, bufsize, offset, top, ↓
┆8c┆┆83┆┆c8┆↓
bytecount, setoffset, settop, and setbytecount which are ↓
described in section 3.8 may all be called with a chain ↓
object as parameter, in which case they apply to the current ↓
stack (top buffer) of the chain.↲
↲
The length of a chain is read by means of a call of the ↓
function chainlength:↲
↲
FUNCTION chainlength(VAR ch: chain): 0..maxint↲
↲
For all the routines described in the remainder of this ↓
section the parameter (chains and references) must not be ↓
locked. Otherwise a fault occurs at the time of call.↲
↲
A buffer stack is inserted into a chain by means of a call ↓
of chaininsert:↲
↲
PROCEDURE chaininsert(VAR ch: chain; VAR ref: reference)↲
↲
The value of ref must not be NIL, otherwise a fault occurs. ↓
The stack designated by ref becomes the new current buffer f ↓
the list, the element is inserted as the successor of the ↓
element which was the current buffer prior to the call, and ↓
the value of ref becomes NIL.↲
↲
The current buffer may be removed from a list by meansof a ↓
call of chainextract:↲
↲
PROCEDURE chainextract(VAR ch: chain; VAR ref: reference)↲
↲
The value of ref must be NIL, otherwise a fault occurs. If ↓
the length of the chain ch is 0 a fault occurs. The current ↓
buffer is removed from the chain and will be designated by ↓
ref. the successor of the removed element becomes the new ↓
current buffer. If the start point is removed from a list ↓
with more than one element the successor of the removed ↓
element becomres the new start point as well as the new ↓
current buffer.↲
↲
┆8c┆┆83┆┆d4┆↓
The current buffer may be moved one step up or down the ↓
list, or moved to the start point by calling the procedures ↓
chainup, chaindown and chainstart respectively:↲
↲
PROCEDURE chainup(VAR ch: chain)↲
PROCEDURE chaindown(VAR ch: chain)↲
PROCEDURE chainstart(VAR ch: chain)↲
The result of a call of chainup/chaindown/chainstart is that ↓
the successor/predecessor/start point becomes the new ↓
current buffer of the list.↲
↲
The current buffer of a list may be made the new start point ↓
of a list by a call of chainreset:↲
↲
PROCEDURE chainreset(VAR ch: chain)↲
↲
┆a1┆Example:↲
Let ch be the handle of a sorted chain of buffers:↲
↲
chainstart(ch);↲
FOR count:=1 TO chainlength(ch) DO↲
BEGIN↲
  chainextract(ch, work_ref);↲
  push(result_stack, work_ref)↲
END(*FOR*);↲
signal(mail_center, result_stack)↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆11. IMC FUNCTIONS↲
↲
The concept of a resident module is introduced in (4) as a ↓
well defined entity, which is self-contained in terms of ↓
resources. In Real-Time Pascal a resident is thus a tree of ↓
processes whose root does not enherit any resources. That ↓
is, no pool or port is made known to the root of the ↓
resident as a process parameter. However, the concept of ↓
resident is not reflected in the syntax of Real-Time Pascal ↓
or in rules enforced by the language.↲
↲
Residents exist in a destributred environment and ↓
communicate with eachother by using the standard inter ↓
module communication (IMC) services (5). The embedding of ↓
these services into Real-Time Pascal is the scope of the ↓
present chapter. In the remainder of the chapter the ↓
software components at the IMC nodes plus the physical ↓
interconnection media which together provide the IMC ↓
services are referred to as the IMC network or just the IMC.↲
↲
A resident gains access to IMC services via objects of the ↓
type port. Port names, in turn, establish the identification ↓
of residents towards the IMC network and towards one ↓
another. Port names consist of a maximum of 12 graphic ↓
characters. Communication between two residents takes place ↓
as transfers of strings of bytes from buffers belonging to a ↓
sender to buffers belonging to a receiver. an actual ↓
transfer within the IMC network takes place when both ↓
residents have delivered a buffer to the IMC.↲
↲
The principal means of communication is connections between ↓
two ports. On a connection the IMC perform flow control, ↓
correct sequencing, and undamaged data transfer.↲
↲
The relationship between invokation and completion of IMC ↓
functions is asynchronous. IMC services are invoked by calls ↓
of predefined service request routines. In most cases a call ↓
of a rquest routine causes the transfer of a buffer (or two) ↓
┆8c┆┆83┆┆c8┆↓
from the calling resident to the IMC. When the requested ↓
function has been carried out this buffer, called an ┆a1┆event ↓
┆19┆┄┄┆84┆buffer┆e1┆, will be returned, i.e. to its return address ↓
mailbox, with relevant result information andpossibly ↓
containing received data. The return of an event buffer to a ↓
resident is called an ┆a1┆IMC event┆e1┆, or just an event. The ↓
interface between residents and the IMC has been designed so ↓
that no change, which is of significance to a resident, in ↓
the state of a port or connection end-point can take place ↓
without the occurrence of an event, unless it occurs during ↓
a call of a request routine and as a direct consequence of ↓
this call. In other words, despite the asynchronous nature ↓
of the interface, residents always have complete up-to-date ↓
information about their ports and connections.↲
↲
During the time-span from an event buffer has been ↓
transferred to the IMC until it is eventually returned it is ↓
said to be outstanding. An outstanding event buffer may be ↓
further characterized by the kind of event it is intended to ↓
retrieve. All IMC events correspond to values of the ↓
predefined enumeration type event_type which is given in ↓
section 3.8. All IMC events are described in the following ↓
sections.↲
↲
In some cases the IMC will return an event buffer even ↓
though the intended event has not occurred, most often ↓
because circumstances change so that it never will. This is ↓
called a dummy event. As an example, an outstanding data ↓
buffer is returned as a dummy event when the connection to ↓
which it pertains is unexpectedly removed. A number of ↓
event_type values are used exclusively for dummy events. ↓
Each of these values indicates the event which the dummy ↓
event buffer had been set up to retrive. The correspondence ↓
between dummy event kinds and intended event kinds is shown ↓
below:↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆dummy event╞	╞	intended event┆05┆↲
dummy_letter╞	╞	letter_arrived↲
dummy_lcnct╞	╞	local_connect↲
dummy_rcnct╞	╞	remote_connect↲
dummy_rindic╞	╞	reset_indication↲
dummy_rcmpl╞	╞	reset_completion↲
dummy_credit╞	╞	credit↲
dummy_sent╞	╞	data_sent↲
dummy_arrived╞	╞	data_arrived↲
↲
In addition to request routines Real-Time Pascal provides ↓
routines which can decode event information by inspecting ↓
the IMC buffer attributes used to carry this information.↲
↲
The IMC service request routines are described in the ↓
following three sections. With a single exception (connect, ↓
see subsection 11.3.2) the reference type parameters to ↓
these routines must not have value NIL or be locked when a ↓
call is made; otherwise a fault will occur. These parameters ↓
are used to transfer event buffer to the IMC, and they ↓
always have value NIL after a call.↲
↲
The IMC never changes the size, offset, top, or u-attributes ↓
of an event buffer. With the exception of actual data ↓
buffers (sendletter, receiveletter, send, receive, ↓
receiveall) is always placed in the data area of the receive ↓
buffer, and the number of bytes it comprises is assigned to ↓
the byte count attribute.↲
↲
The data area description of the buffer passed by a call of ↓
a data transfer routine must be consistent, cf. section 3.8. ↓
Otherwise a fault occurs.↲
↲
↲
┆b0┆┆a1┆11.1 Ports↲
↲
An IMC port is represented in Real-Time Pascal as a variable ↓
of type port. The state of a port is either open, in which ↓

════════════════════════════════════════════════════════════════════════
↓
case the port is known in the IMC network by a name which is ↓
puslished according to its scope, or closed (or closing, see ↓
under closeport below).↲
↲
An open port contains a number of connection end-points (cf. ↓
section 11.3). The number must not be greater than an ↓
implementation dependent maximum, cf. section 11.5).↲
↲
The attributes of a port, i.e. name, scope, and number of ↓
endpoints, are defined when it is opened by a call of ↓
openport:↲
↲
PROCEDURE openport(VAR p: port; VAR closebuf: reference;↲
╞	╞	     INSPEC name: string; scope: scope_type;↲
╞	╞	     no_of_cons: 0..maxint; rcv_all: boolean)↲
where p is the port to be opened. The parameter closebuf ↓
designates the port_closed event buffer which will be ↓
outstanding while the port is open. The values of the name ↓
and scope parameters specify the name of the port and the ↓
range within the IMC network in which to publish the name. ↓
The value of no_of_cons is the number of connection end-↓
points requested for the port. If this number is greater ↓
than the maximum allowed or if the length of the name is ↓
greater than 12 a fault will occur.↲
↲
The type of the scope parameter is the predefined ↓
enumeration type↲
╞	scope_type= (anonymous, local, regional, global).↲
For a further discussion of scopes, see (5).↲
↲
The call causes the port to be opened as requested. The ↓
state of the port must be closed when the call is made, ↓
otherwise a fault occurs. After the call the state of the ↓
port is open. The port_closed event will occur when it is ↓
eventually closed with one of the following reasons (cf. ↓
section 11.4):↲
↲
╞	reason_ok:╞	the resident called closeport↲
╞	reason_name:╞	a name-conflict arose↲
╞	reason_resource:╞	┆84┆resource problem somewhere in the ↓
┆19┆┆98┆┄┄IMC network.↲
↲
┆8c┆┆83┆┆f8┆↓
If the value of the parameter rcv_all is true, the general ↓
receive feature (cf. receiveall, subsection 11.3.2) is ↓
enabled for the port; otherwise it is not.↲
↲
A port is withdrawn from the IMC network by a call of  ↓
closeport:↲
↲
PROCEDURE closeport(VAR p: port)↲
↲
where p is the port to be closed. If the port is already ↓
closed the call has no effect. Otherwise it proceeds as ↓
follows. All connections on the port are removed with ↓
graceful completion of any feasible data transfers as ↓
described for disconnect, cf. subsection 11.3.2. The ↓
disconnected events occur with reason_closed. However, at ↓
the remote end of a connection the disconnected event occurs ↓
with reason_ok. Then all general receive and letter receive ↓
buffer are returned as dummy events, and finally the ↓
port_closed event occurs with reason_ok. The port is made ↓
unknown to the IMC network, its state changes to closed, and ↓
it may subsequently be re-opened, possibly with a different ↓
set of attributes. While connections are being removed and ↓
buffers returned the port is said to be closing.↲
↲
↲
┆b0┆┆a1┆11.2 Letters↲
↲
The most primitive form of data transfer supported by the ↓
IMC is a letter which may be transferred directly to a ↓
destination port without the overhead of establishing a ↓
connection, without flow control or end-to-end control, and ↓
without the guarantee of delivery.↲
↲
In order to receive a letter a resident must call ↓
receiveletter:↲
↲
PROCEDURE receiveletter(VAR p: port; VAR databuf: reference)↲
↲
┆8c┆┆83┆┆c8┆↓
where p is the receiving port and databuf designates the ↓
receive buffer. If theport is closed or closing the receive ↓
buffer is returned as a dummy event and the call has no ↓
further effect. Otherwise the receive buffer will be ↓
outstanding until a letter arrives and then be returned as ↓
letter_arrived. Letters are truncated to fit into a receive ↓
buffer, if necessary.↲
↲
A letter is sent by means of a call of sendletter:↲
↲
PROCEDURE sendletter(INSPECT destination: string;↲
╞	╞	       VAR databuf: reference)↲
↲
where databuf designates the send buffer containing the ↓
letter to be sent, and the destination parameter is the name ↓
of the receiving port.↲
↲
When a letter is sent towards a receiving resident, the send ↓
buffer is returned as letter_sent. This does not imply that ↓
the letter will actually be delivered, only that an attempt ↓
will be made. The letter may be lost due to buffer shortage ↓
in the IMC network, because the receiver has no outstanding ↓
buffer for arriving letters, or because the port name is ↓
unknown.↲
↲
If the size of a letter is greater than an implementation ↓
dependent maximum, cf. maxlettersize (section 11.5), it may ↓
be truncated during transfer through the IMC network. ↓
Neither sender nor receiver will be notified in this case.↲
↲
↲
┆b0┆┆a1┆11.3 Connections↲
↲
Connections are the principal means of data transfer between ↓
residents. A connection joins two connection end-points, ↓
each contained in an open port. Before a connection can be ↓
established one of the two residents must make a connection ↓
end-point available by calling getconnection (cf. subsection ↓
┆8c┆┆83┆┆c8┆↓
11.3.2). The resident which calls getconnection is the ↓
passive part in the establishment of the connection and need ↓
not know the name of the remote port. The other resident is ↓
the active part which must specifically request that a ↓
connection be established by calling connect (cf. subsection ↓
11.3.2).↲
↲
An end-point within a port is identified in a request call ↓
by a pair (p, index) where p is a port and index is a number ↓
in the range 1..n, where n equals the value of no_of_cons ↓
given when the port was opend. This fact accounts for the ↓
first two parameters of all the rquest routines described in ↓
this section (except receiveall). If a request call is made ↓
iwth an index parameter which is out of range a fault ↓
occurs.↲
↲
Notice that end-point indices are local to a port and not ↓
related to indices or even known at the remote end-points of ↓
connections.↲
↲
Each kind of request call which may be made concerning a ↓
connection end-point is only permitted provided the end-↓
point is in an appropriate state. The applicable states are:↲
↲
free:╞	 ┆84┆the end-point is free for use by calling ↓
┆19┆┆8f┆┄┄connect or getconnection. Free is the initial ↓
┆19┆┆8f┆┄┄state of connection end-points contained in a ↓
┆19┆┆8f┆┄┄newly opened port,↲
accept_remote: ┆84┆getconnection has been called. The end-point ↓
┆19┆┆8f┆┄┄will leave this state when a connection is ↓
┆19┆┆8f┆┄┄established from a remote port, or when ↓
┆19┆┆8f┆┄┄disconnect is called,↲
connected:╞	 ┆84┆a connection has been or is being ↓
┆19┆┆8f┆┄┄established, and data transfer may take ↓
┆19┆┆8f┆┄┄place,↲
resetting:╞	 ┆84┆reset has been called while the state was ↓
┆19┆┆8f┆┄┄connected. The state will revert to connected ↓
┆19┆┆8f┆┄┄when the resetting procedures have been ↓
┆19┆┆8f┆┄┄completed,↲
┆8c┆┆83┆┆d4┆↓
disconnecting: ┆84┆disconnect has been called, and the process ↓
┆19┆┆8f┆┄┄of removing a previous connection is under ↓
┆19┆┆8f┆┄┄way. The state will subsequently become free.↲
↲
If the end-point identification (p, index) given in a ↓
request call is such that the port is closed or closing, or ↓
the state of the end-point is free, the connection to which ↓
the call pertains is said to be ┆a1┆absent┆e1┆. This phenomenon may ↓
occur if the event which informs the resident about the ↓
removal of a connection or the closing of a port has not ↓
been processed at the time of call.↲
↲
It is a general rule that if a request call is made ↓
concerning a connection end-point which is in a wrong state ↓
for the call a fault occurs, except if the connection is ↓
absent.↲
↲
↲
┆b0┆┆a1┆11.3.1 Connection Administration↲
↲
A connection end-point is made available for remotely ↓
initiated connection establishment by a call of ↓
getconnection:↲
↲
PROCEDURE getconnection(VAR p: port; index: 1..maxint;↲
╞	╞	    ╞	VAR compl, disc: reference)↲
If the port is closed or closing the buffer designated by ↓
compl is returned as a dummy event and the buffer designated ↓
by disc as a disconnected event with reason_closed, and the ↓
call has no further effect. Otherwise a call of ↓
getconnection is only permitted if the state of the end-↓
point is free; after the call it is remote_accpet. The ↓
buffer designated by compl will be returned as a ↓
remote_connect event when a connection has been established. ↓
The buffer designated by disc will be the disconnected ↓
buffer of the connection end-point. It will be outstanding ↓
until the end-point becomes free again.↲
↲
┆8c┆┆83┆┆c8┆↓
In order to establish a connection between a local ↓
connection end-point and a remote end-point, which has been ↓
made available as described above, a resident must call ↓
connect:↲
↲
PROCEDURE connect(VAR p: port; index: 1..maxint;↲
╞	╞	    VAR compl, disc: reference;↲
╞	╞	    INSPECT remote_name: string:↲
╞	╞	    service: conn_service)↲
If the port is closed or closing the buffer designated by ↓
compl is returned as a dummy event and the buffer designated ↓
by disc as a disconnected event with reason_closed, and the ↓
call has no further effect. Otherwise the call is only ↓
accepted if the state of the indicated end-point is free.↲
↲
The value of remote_name is the name of the remote port to ↓
which a connection is requested. If the length of the name ↓
is greather than 12 a fault occurs. The state of the (local) ↓
end-point becomes connected, i.e. data transfer calls may be ↓
made immediately following the call of connect. This does ↓
not imply that the actual path through the IMC network has ↓
been established at this time, nor in fact that it ever will ↓
be.↲
↲
The value of the parameter compl may be NIL, i.e. the ↓
designated buffer is optional. If it is present it will be ↓
used to generate a local_connect event when the actual ↓
connection has been successfully established. This event is ↓
purely informative and not associated with any change of ↓
state. If the local_connect buffer is present, but ↓
establishment of the connection fails, the buffer will be ↓
returned as a dummy event.↲
↲
The buffer designated by disc is the disconnected event ↓
buffer. It will be outstanding until the state of the ↓
connection end-point eventually reverts to free or the port ↓
is closed. If this happens because it turns out to be ↓
impossible to establish the actual connection the reason ↓
┆8c┆┆83┆┆c8┆↓
will be either reason_name, if a port with the specified ↓
name could not be found, or reason_resource, if the ↓
necessary resources were not available in the IMC network or ↓
at the remote port (no end-point with state accept_remote).↲
↲
The service parameter selects the service class of the ↓
connection. Two service classes are defined: normal and ↓
high. The treatment of service classes depends on the ↓
implementation of the IMC network. The type of the service ↓
parameter is the predefined enumeration type↲
╞	conn_service= (cs_normal, cs_high).↲
↲
A connection end-point may always be freed by a call of ↓
disconnect:↲
↲
PROCEDURE disconnect(VAR p: port; index: 1..maxint)↲
↲
If the indicated connection is absent or if the state of the ↓
connection end-point is disconnecting the call has no ↓
effect. Otherwise if the connection end-point is engaged in ↓
a connection, i.e. if its state is connected or resetting, ↓
the connection will be removed. This will be done ↓
gracefully, i.e. all data transfers for which credit is ↓
available are completed before the remaining oustanding ↓
buffers are returned. At both ends of the connection all ↓
outstanding buffers ecept the disconnected event buffers are ↓
then returned as dummy events. While this takes place the ↓
state of the (local) end-point is disconnecting. Finally the ↓
disconnected events occur (at both ends) with reason_ok, and ↓
the state becomes free.↲
↲
If the state of the connection end-point is accept_remote ↓
when disconnect is called the remote_connect buffer will be ↓
returned as a dummy event, the disconnected event will occur ↓
with reason_ok, and the state of the end-point becomes free.↲
↲
The only reason for removal of a connection which has not ↓
been discussed above (this includes removal when a port is ↓
┆8c┆┆83┆┆c8┆↓
closed, cf. section 11.1) is failure in some component of ↓
the IMC network. If a connection is broken for this reason ↓
the disconnected event will occur with reason_network after ↓
all other outstanding buffers have been returned as dummy ↓
events.↲
↲
↲
┆b0┆┆a1┆11.3.2 Connection-based Data Transfer↲
↲
The routines for data transfer on connections and for ↓
control of data buffers: send, receive, receiveall, ↓
getcredit, reset, and getreset, are described in this ↓
subsection.↲
↲
The following rule holds for calls of all these routines ↓
except receiveall: If the connection indicated by the first ↓
two parameters is absent the buffer designated by the third ↓
parameter is returned as a dummy event and the call has no ↓
further effect. Otherwise the call is only permitted if the ↓
state of the end-point is connected (or resetting in the ↓
case of getreset).↲
↲
A receive buffer is made available for a specific connection ↓
by a call of receive:↲
↲
PROCEDURE receive(VAR p: port; index: 1..maxint;↲
╞	╞	    VAR databuf: reference)↲
↲
The designated buffer becomes an outstanding receive buffer ↓
for the connection. At the remote end of the connection the ↓
call may cause either a credit or a data_sent event to ↓
occur. If both kinds of event buffer are outstanding only ↓
the data_sent event will occur. When a unit of data has been ↓
transferred from a remote send buffer to the receive buffer ↓
the latter is returned as a data_arrived event. If ↓
necessary, the received data unit is truncated to fit into ↓
the data area of the receive buffer, and in this case the ↓
event will be data_overrun.↲
↲
┆8c┆┆83┆┆d4┆↓
If the general receive feature is enabled for a port (cf. ↓
the rcv_all parameter of openport, section 11.1) a general ↓
receive buffer for the whole port, not dedicated to a ↓
particular connection, may be delivered to the IMC by a call ↓
of receiveall:↲
↲
PROCEDURE receiveall(VAR p: port; VAR databuf: reference)↲
↲
If the port is closed or closing the designated buffer is ↓
returned as a dummy event and the call has not further ↓
effect. If the general receive feature is not enabled a ↓
fault occurs. Otherwise the buffer becomes an outstanding ↓
general receive buffer. It may be used for any connection ↓
within the port. It will eventually be returned as ↓
data_arrived or data_overrun, depending on whether the ↓
received data unit had to be trancated to fit into the ↓
receive data area. The index of the connection end-point to ↓
which the data belong will be an attribute of the buffer ↓
(cf. section 11.4). In case of network failure which causes ↓
a connection on the port to be removed the buffer may be ↓
returned as a dummy event.↲
↲
A send buffer containing a unit of data to be sent on a ↓
specified connection is delivered to the IMC network by a ↓
call of send:↲
↲
PROCEDURE send(VAR p: port; index: 1..maxint;↲
╞	╞	 VAR databuf: reference)↲
↲
The designated buffer becomes an outstanding send buffer. If ↓
a receive buffer is available at the remote end or when one ↓
becomes available (call of receive or receiveall) the ↓
indicated data unit is transferred to the receive data area. ↓
Then the send buffer is returned as data_sent, and the ↓
receive buffer at the remote end as data_arrived (or ↓
data_overrun).↲
↲
┆8c┆┆83┆┆bc┆↓
Flow control information pertaining to a specified ↓
connection can be obtained from the IMC by a call of ↓
getcredit:↲
↲
PROCEDURE getcredit(VAR p: port; index: 1..maxint;↲
╞	╞	      VAR credbuf: reference)↲
↲
The designated buffer becomes an outstanding credit buffer. ↓
It is returned as a credit event when there is one or more ↓
outstanding receive buffers at the remote end of the ↓
connection (call of receive) for which credit has not been ↓
given previously. The number of such receive buffers is ↓
passed as the buffer attribute credit count (cf. section ↓
11.4). However, a credit event can only occur provided there ↓
is at least one outstanding reset_indication buffer at the ↓
connection end-point, cf. getreset.↲
↲
Data and credit buffers which are outstanding at an end-↓
point of a connection may be taken back without breaking the ↓
connection by calling reset:↲
↲
PROCEDURE reset(VAR p: port; index: 1..maxint;↲
╞	╞	  VAR compl: reference)↲
↲
In the same graceful fashion as when a connection is removed ↓
all data transfers for which credit is available are carried ↓
out first. Then the remaining data and credit buffers are ↓
returned as dummy events, but only at the local end-point. ↓
The return of receive buffers may amount to the taking back ↓
of credit which has already been given to the remote ↓
resident. In this case the resulting negative credit is ↓
passed as the credit count attribute of a reset_indication ↓
event.↲
↲
Following a call of reset the state of the (local) ↓
connection end-point will be resetting. The buffer ↓
designated by compl is the reset_completion event buffer. ↓
This event occurs after all outstanding data and credit ↓
┆8c┆┆83┆┆c8┆↓
buffers have been returned. When it occurs the state of the ↓
end-point reverts to connected.↲
↲
When a connection end-point has been reset the IMC has also ↓
reset its account of credit previously passed to the ↓
resident. Credit information obtained before resetting is ↓
therefore no longer valid.↲
↲
If credit information is used it is necessary to know when ↓
credit is taken back as a result of resetting of the remote ↓
end-point. A reset_indication buffer which is used to carry ↓
this information is made available to the IMC by a call of ↓
getreset.↲
↲
PROCEDURE getreset (VAR p: port; index: 1..maxint;↲
╞	╞	      VAR indic: reference)↲
↲
The call is permitted if the state of the connection end-↓
point is connected or resetting, but does not change the ↓
state. The buffer designated by indic becomes an outstanding ↓
reset_indication event buffer. That is, when a reset occurs ↓
at the remote end of the connection causing loss of credit ↓
this buffer is returned as reset_indication with a credit ↓
count equal to the number of credits that have been taken ↓
back.↲
↲
At least one reset_indication buffer must be outstanding ↓
before a credit event can occur, cf. getcredit. Therefore a ↓
call of getreset may trigger a credit event.↲
↲
↲
┆b0┆┆a1┆11.4 IMC Buffer Attribute Decoding↲
↲
Whenever a buffer is returned as an event the event kind ↓
attribute is set to indicate the kind of event. This ↓
attribute may be read using the predefined function ↓
eventkind, cf. section 3.8. Depending on the event kind the ↓
attributes index, credit count, and reason may be ↓
┆8c┆┆83┆┆c8┆↓
meaningful. These attributes may be read using the three ↓
functions described below. A fault will occur if one of ↓
these functions is called with a parameter with value NIL.↲
↲
FUNCTION index(VAR r: reference): 0..maxint↲
gives the index in the relevant port of the connection end-↓
point to which the event pertains. It is defined for buffers ↓
with event kind local_connect, remote_connect, disconnected, ↓
reset_completion, reset_indication, data_sent, data_arrived, ↓
data_overrun, credit, and for fummy events. If the event is ↓
dummy and there is no applicable index the result will be 0.↲
↲
FUNCTION reason(VAR r: reference): reason_type↲
gives the reason for an event. It is relevant for buffers ↓
with event kind port_closed or disconnected. The result is ↓
of the predefined enumeration type↲
╞	reason_type= (reason_ok, reason_name, reason_resource,↲
╞	╞	    reason_closed, reason_network).↲
↲
All uses of reason values are explained in the preceding ↓
sections.↲
↲
FUNCTION creditcount(VAR r: reference): 0..maxint↲
If the event kind is credit the result is the numer of ↓
receive buffers available at the remote end-point of the ↓
connection. If the event kind is reset_indication the ↓
resultis the number of credits which have been taken back by ↓
a call of reset at the remote end-point.↲
↲
↲
┆b0┆┆a1┆11.5 Miscellaneous Routines↲
↲
At teach node in an IMC network, the IMC imposes certain ↓
restrictions on users of the IMC services, namely a maximum ↓
size for a letter and a maximum number of connections to any ↓

════════════════════════════════════════════════════════════════════════
↓
one port. these two limitations can be obtained by calling ↓
the predefined routines maxlettersize and maxconnections:↲
↲
FUNCTION maxlettersize: 0..maxint↲
FUNCTION maxconnections: 0..maxint↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆12. COMPILER DIRECTIVES↲
↲
Directives to a Real-Time Pascal compiler may be regarded as ↓
lexical separators. They have the general form:↲
╞	$ directive-name parameters end-of-line↲
given on a separate line and with parameters, if present, ↓
enclosed in parantheses. Alternatively directives may be ↓
supplied as parameters in the call of the compiler. Some of ↓
them must be specified before the first line of actual ↓
source text is met, viz. either in the compiler call or as ↓
$-directive lines in front of the outermost program/routine ↓
heading.↲
↲
The following table lists the mandatory directives. An ↓
implementation may support additional directives. The first ↓
three directives which are all used to control the ↓
appearance of a compiler listing must appear before the ↓
first line of actual source text.↲
↲
┆a1┆name╞	parameters╞	description┆05┆↲
PAGELENGTH╞	number╞	╞	maximum number of lines ↲
(default 45)╞	╞	╞	per page of listing,↲
↲
PAGEWIDTH╞	number╞	╞	maximum number of ↲
(default 120)╞	╞	╞	┆84┆characters per line of ↓
┆19┆┆a2┆┄┄listing,↲
↲
TITLE╞	"char.string"╞	┆84┆the character string is ↓
┆19┆┆a2┆┄┄placed in the title field ↓
┆19┆┆a2┆┄┄of the header line of each ↓
┆19┆┆a2┆┄┄page of the listing,↲
↲
SUBTITLE╞	"char.string"╞	┆84┆the character string is ↓
┆19┆┆a2┆┄┄placed in the subtitle ↓
┆19┆┆a2┆┄┄line of each page of the ↓
┆19┆┆a2┆┄┄listing,↲
↲
┆8c┆┆83┆┆bc┆↓
┆a1┆name╞	parameters╞	description┆05┆↲
CODE╞	none╞	╞	┆84┆causes code generated for ↓
┆19┆┆a2┆┄┄the following lines of ↓
┆19┆┆a2┆┄┄source text to be listed,↲
↲
NOCODE╞	none╞	╞	suppresses listing of ↲
(default)╞	╞	╞	generated code,↲
↲
CREATESIZE╞	number╞	╞	┆84┆determines stack size of ↓
┆19┆┆a2┆┄┄incarnations of the ↓
┆19┆┆a2┆┄┄following program(s) if ↓
┆19┆┆a2┆┄┄the value of the ↓
┆19┆┆a2┆┄┄size_expression of the ↓
┆19┆┆a2┆┄┄careate call is 0, cf. ↓
┆19┆┆a2┆┄┄section 9.1,↲
↲
INDEXCHECK╞	none╞	╞	causes checking of sub-↲
(default)╞	╞	╞	┆84┆range constraints before ↓
┆19┆┆a2┆┄┄indexing to be included in ↓
┆19┆┆a2┆┄┄code generated for the ↓
┆19┆┆a2┆┄┄following lines of source ↓
┆19┆┆a2┆┄┄text,↲
↲
NOINDEXCHECK╞	none╞	╞	┆84┆switches off index ↓
┆19┆┆a2┆┄┄checking,↓
↲
LIST╞	none╞	╞	┆84┆causes the following lines ↓
┆19┆┆a2┆┄┄of source text to be ↓
┆19┆┆a2┆┄┄listed,↲
↲
NOLIST╞	none╞	╞	suppresses listing of↲
(default)╞	╞	╞	source text,↲
↲
RANGECHECK╞	none╞	╞	causes checking of sub-↲
(default)╞	╞	╞	┆84┆range constraints before ↓
┆19┆┆a2┆┄┄assignment to be included ↓
┆19┆┆a2┆┄┄in code generated for the ↓
┆19┆┆a2┆┄┄following lines of source ↓
┆19┆┆a2┆┄┄text,↲
↲
┆8c┆┆83┆┆e0┆↓
┆a1┆name╞	parameters╞	description┆05┆↲
NORANGECHECK╞	none╞	╞	┆84┆switches off range ↓
┆19┆┆a2┆┄┄checking,╞	↲
↲
ACCESSCHECK╞	none╞	╞	┆84┆causes code to be ↓
┆19┆┆a2┆┄┄generated for every access ↓
┆19┆┆a2┆┄┄to a formal parameter ↓
┆19┆┆a2┆┄┄object which is not of ↓
┆19┆┆a2┆┄┄kind value, to check the ↓
┆19┆┆a2┆┄┄existence of the actual ↓
┆19┆┆a2┆┄┄parameter (not specified ↓
┆19┆┆a2┆┄┄as ?).↲
↲
NOACCESSCHECK╞	none╞	╞	switches off access ↲
(default)╞	╞	╞	checking.↲
↲
SET╞	╞	switch assign-╞	see below,↲
╞	╞	ment list↲
↲
IF╞	╞	expression╞	see below,↲
↲
ENDIF╞	none╞	╞	see below,↲
↲
ELSE╞	none╞	╞	see below,↲
↲
ELSEIF╞	expression╞	see below,↲
↲
Switches are compile-time variables which can only be used ↓
in the expressions occurring in IF and ENDIF directives. A ↓
switch assignment list consists of one or more switch ↓
assignments separated by commas. A switch assignment has the ↓
form (number must be integer, no radix allowed):↲
╞	name = number↲
↲
A switch assignment either introduces and sets the value of ↓
a switch, or, if the switch has been introduced in a ↓
previous switch assignment (SET directive), merely changes ↓
the value.↲
↲
┆8c┆┆83┆┆d4┆↓
The directives IF, ELSE, ELSEIF, and ENDIF provide the ↓
capability for conditional compilation. The expressions ↓
occurring in IF and ELSEIF directive must be boolean ↓
expressions obeying the standard rules of the language. The ↓
operands must be switches and integer numbers. The following ↓
operators may be used: <, <=, >=, >, =, <>, AND, OR, XOR, ↓
NOT.↲
↲
The directives for conditional compilations may be used to ↓
selectively exclude blocks of lines of source text from ↓
compilation, i.e. to cause such lines to be created as ↓
comments. When listed, each excluded line will be marked ↓
with -- appearing at the beginning of the line.↲
↲
The directive IF and ENDIF must always be used in matching ↓
pairs. ELSE and ELSEIF may optionally be used in conjunction ↓
with IF and ENDIF. A use of conditional compilation takes ↓
the following form:↲
↲
$IF expr┆82┆1↲
s1┆82┆1↲
$ELSEIF expr┆82┆2↲
s1┆82┆2↲
$ELSEIF expr┆82┆3↲
s1┆82┆3↲
...↲
$ELSEIF expr┆82┆n↲
s1┆82┆n↲
$ELSE↲
s1┆82┆n+1↲
$ENDIF↲
↲
The only mandatory parts are the IF and ENDIF directive ↓
lines and the source line(s) s1┆82┆1┆81┆. The effect is as follows: ↓
If the values of all the expressions are false then the ↓
source lines s1┆82┆1┆81┆, s1┆82┆2┆81┆, ..., s1┆82┆n┆81┆ are excluded from ↓
compilation. Otherwise let k be the smallest number such ↓
that the value of expr┆82┆k┆81┆ is true. Then s1┆82┆1┆81┆, ..., s1┆82┆k-1┆81┆, ↓
┆8c┆┆83┆┆c8┆↓
s1┆82┆k+1┆81┆, ..., s1┆82┆n┆81┆, and s1┆82┆n+1┆81┆ (if present) are excluded from ↓
compilation.↲
↲
Conditional compilation may be used at several nested ↓
levels. In the above terminology any of the s1┆82┆i┆81┆ may thus ↓
include repeated use of conditional compilation.↲
↲
┆a1┆Notes:↲
Switches and variables in the program text belong to ↓
separate name spaces and cannot be confused. The same names ↓
may be used.↲
↲
Directives occurring in comments are ignored, in particular ↓
those occurring in source lines excluded from compilation.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆A. REFERENCES↲
↲
(1)  The Programming Language Pascal↲
╞	 Acta Informatica, 1, 35-63, 1971↲
╞	 N. Wirth↲
↲
(2)╞	 ISO International Standard ISO/IS 7185:↲
╞	 Specification for Computer Programming Language Pascal↲
↲
(3)╞	 ISO International Standard ISO/IS 646:↲
╞	 7-bit Coded Character Set for Information Processing↲
╞	 Interchange↲
↲
(4)  RCSL No 42-i1982:↲
╞	 Distributed System Architecture↲
╞	 A Conceptual Framework for Systems Design↲
↲
(5)╞	 RCSL No 42-i1983:↲
╞	 DSA Inter Module Communication↲
╞	 Functional Description↲
↲
(6)╞	 Platon, A High Level Language for Systems Programming↲
╞	 RECAU, R-75-59↲
╞	 Jørgen Staunstrup and Sven Meiborg Sørensen↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B. SYNTAX DIAGRAMS↲
↲
This appendix contains all the syntax diagrams of the ↓
definition of Real-Time Pascal in an attempted natural top-↓
down reading order. Each diagram contains a reference to the ↓
section where it is introduced and where the associated ↓
semantics are explained.↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆C. PREDEFINED ENTITIES↲
↲
In section C.1 a list of predefined entities is given in ↓
alphabetical order and with reference to the sections where ↓
the entities are described. The types and pseudo-functions ↓
which are intrinsic to the language, denoted by keywords ↓
rather than predefined names, are listed in sections C.2 and ↓
C.2.↲
↲
↲
┆b0┆┆a1┆C.1 Predefind Routines, Types, Type Families, and Constans↲
↲

╱04002d4e0a0006000000000301433100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱

╱04002d4e0a00060000000003013c3100000000000000000000000000000000000000000000000000050f19232d37414b555f69737d8791ff04╱
↓
┆a1┆section kind╞	╞	definition┆05┆↲
3.4.3   FUNCTION  abs(n: integer): 0..maxint↲
3.8╞	    FUNCTION  allocpool (VAR p: pool;↲
╞	╞	               no_of_bufs: 1..maxint): 0..maxint↲
5.9     TYPE      buffer(bufsize: 1..maxint)=↲
╞	╞	╞	 PACKED ARRAY(0..bufsize-1) OF byte↲
10.1    FUNCTION  bufcount(VAR stack: reference): 0..maxint↲
3.8     FUNCTION  bufsize(VAR r: reference): 0..maxint↲
3.8     FUNCTION  bufsize(VAR ch: chain: 0..maxint↲
3.5     FUNCTION  byt(v:integer): byte↲
3.8     FUNCTION  bytecount(VAR r: reference): 0..maxint↲
3.8     FUNCTION  bytecount(VAR ch: chain): 0..maxint↲
10.2    PROCEDURE chaindown(VAR ch: chain)↲
10.2    PROCEDURE chainextract(VAR ch: chain; VAR ref: reference)↲
10.2    PROCEDURE chaininsert(VAR ch: chain; VAR ref: reference)↲
10.2    FUNCTION  chainlength(VAR ch: chain): 0..maxint↲
10.2    PROCEDURE chainreset(VAR ch: chain)↲
10.2    PROCEDURE chainstart(VAR ch: chain)↲
10.2    PROCEDURE chainup(VAR ch: chain)↲
3.4.2   FUNCTION  chr(n: 0..255): char↲
11.1.2  PROCEDURE closeport(VAR p: port)↲
11.3.1  PROCEDURE connect(VAR p: port; index: 1..maxint;↲
 ╞	╞	╞	VAR compl, disc: reference;↲
  ╞	╞	  ╞	INSPECT remote_name: string;↲
╞	╞	╞	service: conn_service)↲
11.3.1  TYPE╞	    conn_service= (cs_normal, cs_high)↲
┆8c┆┆83┆┆c8┆↓
┆a1┆section kind╞	╞	definition┆05┆↲
9.1     TYPE      create_result= (create_ok, no_memory, ...)↲
11.4    FUNCTION  creditcount(VAR r: referenc): 0..maxint↲
5.9     TYPE      dataarea(offset, top: 0..maxint) =↲
╞	╞	╞	PACKED ARRAY(offset..top-1) OF byte↲
3.5     PROCEDURE dec(VAR v: mtype)↲
9.2.2   PROCEDURE delay(no_of_msecs: 0..maxint)↲
11.3.1  PROCEDURE disconnect(VAR p: port;↲
╞	╞	╞	     index: 1..maxint)↲
3.8     FUNCTION  eventkind(VAR r: reference): event_type↲
3.8     FUNCTION  eventkind(VAR ch: chain): event_type↲
3.8     TYPE      event_type= (not_event, message_event,↲
╞	╞	    ╞	       answer_event, process_removed,↲
╞	╞	╞	       port_closed, disconnected,↲
╞	╞	╞	       letter_sent, letter_arrived,↲
╞	╞	╞	       local_connect, remote_connect,↲
╞	╞	╞	       reset_indication, reset_completion,↲
╞	╞	╞	       credit, data_sent, data_arrived,↲
╞	╞	╞	       data_overrun, dummy_letter,↲
╞	╞	╞	       dummy_lcnct, dummy_rcnct,↲
╞	╞	╞	       dummy_rindic, dummy_rcmpl,↲
╞	╞	╞	       dummy_credit, dummy_sent,↲
╞	╞	╞	       dummy_arrived)↲
3.8     PROCEDURE getbuf(VAR p: pool;↲
╞	╞	╞	 VAR ra: mailbox, VAR r: reference)↲
9.2.2   FUNCTION  getbufdelay(VAR p: pool; VAR ra: mailbox;↲
╞	╞	╞	      VAR r: reference;↲
╞	╞	╞	      no_of_msecs: 0..maxint): wait_result↲
11.3.1  PROCEDURE getconnection(VAR p: port; index: 1..maxint;↲
╞	╞	╞	 VAR compl, disc: reference)↲
11.3.2  PROCEDURE getcredit(VAR p: port; index: 1..maxint;↲
╞	╞	╞	    VAR credbuf: reference)↲
11.3.2  PROCEDURE getreset(VAR p: port; index: 1..maxint;↲
╞	╞	╞	   VAR indic: reference)↲
3.8     FUNCTION  hometest(VAR p: pool;↲
╞	╞	╞	   VAR ref: reference): boolean↲
3.5     PROCEDURE inc(VAR v: mtype)↲
11.4    FUNCTION  index(VAR r: reference): 0..maxint↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆section kind╞	╞	definition┆05┆↲
3.8     FUNCTION  initpool(VAR p: pool;↲
╞	╞	╞	   no_of_bufs, bufsize: 0..maxint↲
╞	╞	╞	   mem: mem_type): 0..maxint↲
3.5     FUNCTION  int(v:mtype): integer↲
9.1     TYPE      link_result= (link_ok, already_linked,↲
╞	╞	╞	        external_not_found, ...)↲
9.2.1   FUNCTION  locked(VAR mbx: mailbox): boolean↲
11.5    FUNCTION  maxconnections: 0..maxint↲
3.4.3   CONST     maxint↲
11.5    FUNCTION  maxlettersize: 0..maxint↲
3.8     TYPE      mem_type= (...)↲
3.4.3   CONST     minint↲
3.7     PROCEDURE new(VAR ptr: ptrtype)↲
3.7     FUNCTION  nil(VAR ptr: ptrtype): boolean↲
3.8     FUNCTION  nil(VAR pr: process): boolean↲
3.8     FUNCTION  nil(VAR ref: reference): boolean↲
3.8     FUNCTION  offset(VAR r: reference): 0..maxint↲
3.8     FUNCTION  offset(VAR ch: chain): 0..maxint↲
9.2.1   FUNCTION  open(VAR mbx: mailbox): boolean↲
11.1    PROCEDURE openport(VAR p: port; VAR closebuf: reference;↲
╞	╞	╞	 INSPECT name: string; scope: scope_type;↲
╞	╞	╞	 no_of_cons: 0..maxint; rcv_all: boolean)↲
3.4     FUNCTION  ord(v: otype): integer↲
9.2.1   FUNCTION  passive(VAR mbx: mailbox): boolean↲
10.1    PROCEDURE pop(VAR stack_handle, popped_buf: reference)↲
3.4     FUNCTION  pred(v: otype): otype↲
10.1    PROCEDURE push(VAR stack_handle, new_top: reference)↲
3.8     PROCEDURE putbuf(VAR r: reference)↲
11.4    FUNCTION  reason(VAR r: reference): reason_type↲
11.4    TYPE      reason_type= (reason_ok, reason_name,↲
╞	╞	╞	        reason_ressource, reason_closed,↲
╞	╞	╞	        reason_network)↲
11.3.2  PROCEDURE receive(VAR p: port; index: 1..maxint↲
╞	╞	╞	  VAR databuf: reference)↲
11.3.2  PROCEDURE receiveall(VAR p: port; VAR databuf: reference)↲
11.2    PROCEDURE receiveletter(VAR p: port;↲
╞	╞	╞	        VAR databuf: reference)↲
3.8     FUNCTION  releasepool(VAR p: pool;↲
╞	╞	╞	      no_of_bufs: 1..maxint): 0..maxint↲
┆8c┆┆83┆┆e0┆↓
┆a1┆section kind╞	╞	definition┆05┆↲
9.1     PROCEDURE remove(VAR pr: process)↲
11.3.2  PROCEDURE reset(VAR p: port; index: 1..maxint;↲
╞	╞	╞	VAR compl: reference)↲
3.8     PROCEDURE resetevent(VAR r: reference)↲
3.8     PROCEDURE resetevent(VAR ch: chain)↲
9.1     PROCEDURE resume(VAR pr: process)↲
9.2.2   PROCEDURE return(VAR ref: reference)↲
11.1    TYPE      scope_type= (anonymous, local,↲
╞	╞	╞	       regional, global)↲
11.3.2  PROCEDURE send(VAR p: port; index: 1..maxint;↲
╞	╞	         VAR databuf: reference)↲
11.2    PROCEDURE sendletter(INSPECT destination: string;↲
╞	╞	╞	     VAR databuf: reference)↲
3.8     PROCEDURE setbytecount(VAR r: reference; val: 0..maxint)↲
3.8     PROCEDURE setbytecount(VAR ch: chain; val: 0..maxint)↲
3.8     PROCEDURE setoffset(VAR r: reference; val: 0..maxint)↲
3.8     PROCEDURE setoffset(VAR ch: chain; val: 0..maxint)↲
3.8     PROCEDURE settop(VAR r: reference; val: 0..maxint)↲
3.8     PROCEDURE settop(VAR ch: chain; val: 0..maxint)↲
3.8     PROCEDURE setu1(VAR r: reference; b: 0..255)↲
3.8     PROCEDURE setu1(VAR ch: chain; b: 0.255)↲
3.8     PROCEDURE setu2(VAR r: reference; b: 0..255)↲
3.8     PROCEDURE setu2(VAR ch: chain; b: 0..255)↲
3.8     PROCEDURE setu3(VAR r: reference; b: 0..255)↲
3.8     PROCEDURE setu3(VAR ch: chain; b: 0..255)↲
3.8     PROCEDURE setu4(VAR r: reference; b: 0..255)↲
3.8     PROCEDURE setu4(VAR ch: chain; b: 0..255)↲
9.2.2   PROCEDURE signal(VAR mbx: mailbox; VAR ref: reference)↲
10.1    FUNCTION  stackdepth(VAR stack: reference): 0..maxint↲
9.1     PROCEDURE stop(VAR pr: process)↲
3.9.4   TYPE      string(length: 0..255)=↲
╞	╞	╞	╞	 ARRAY(1..length) OF char↲
3.4     FUNCTION  succ(v: otype): otype↲
3.8     FUNCTION  top(VAR r: reference; 0..maxint)↲
3.8     FUNCTION  top(VAR ch: chain; 0..maxint)↲
7.1     PROCEDURE trace(fault: integer)↲
9.1     TYPE      unlink_result= (unlink_ok, no_program_linked,↲
╞	╞	╞	╞	existing_incarnations, ...)↲
┆8c┆┆83┆┆d4┆↓
┆a1┆section kind╞	╞	definition┆05┆↲
3.8     FUNCTION  u1(VAR r: reference): 0..255↲
3.8     FUNCTION  u1(VAR ch: chain): 0..255↲
3.8     FUNCTION  u2(VAR r: reference): 0..255↲
3.8     FUNCTION  u2(VAR ch: chain): 0..255↲
3.8     FUNCTION  u3(VAR r: reference): 0..255↲
3.8     FUNCTION  u3(VAR ch: chain): 0..255↲
3.8     FUNCTION  u4(VAR r: reference): 0..255↲
3.8     FUNCTION  u4(VAR ch: chain): 0..255↲
9.2.2   PROCEDURE wait(VAR mbx: mailbox; VAR ref: reference)↲
9.2.2   FUNCTION  waitdelay(VAR mbx: mailbox; VAR ref: reference;↲
╞	╞	╞	    no_of_msecs: 0..maxint): wait_result↲
9.2.2   TYPE      wait_result= (a_buffer, a_delay)↲
3.5     FUNCTION  wrd(v: integer): word↲
↲
↲
┆b0┆┆a1┆C.2 Language Intrinsic Types↲
↲
┆a1┆section╞	name↲
3.4.1╞	boolean↲
3.5╞	╞	byte↲
3.8, 10.2╞	chain↲
3.4.2╞	char↲
3.4.3╞	integer↲
3.8╞	╞	mailbox↲
3.8╞	╞	pool↲
3.8, 11╞	port↲
3.8, 9.1╞	process↲
3.8╞	╞	reference↲
3.5╞	╞	word↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆C.3 Language Intrinsic Pseudo-function↲
↲
┆a1┆section╞	description↲
9.1╞	╞	create(INSPECT inc_name: string; program call;↲
╞	╞	    VAR pr: process; size: 0..maxint;↲
╞	╞	╞	  priority: prio_type): create_result↲
9.1╞	╞	link(INSPECT name: string;↲
╞	╞	     VAR prog: program): link_result↲
3.2╞	╞	typesize(type_name): 0..maxint↲
3.12.2╞	varsize(variable_name): 0..maxint↲
9.1╞	╞	unlink(VAR prog: program): unlink_result↲
↲
┆1a┆┆1a┆╞	╞	╞	VAR compl: reference)↲

OctetView

0x00000…00020 (0,)   00 00 00 00 00 00 00 00 42 03 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4e 00 00 00   ┆        B                   N   ┆
0x00020…00040        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆                                ┆
0x00040…00047        00 00 00 00 00 00 00                                                                              ┆       ┆
0x00047…00080        Params {
0x00047…00080          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x00047…00080          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x00047…00080        }
0x00080…00083        FormFeed {
0x00080…00083          0c 80 83                                                                                          ┆   ┆
0x00080…00083        }
0x00083…000a0        0a 14 b3 06 0b 05 0a b0 a1 31 2e 20 49 4e 54 52 4f 44 55 43 54 49 4f 4e 0d 0a 0d 0a b0            ┆         1. INTRODUCTION     ┆
0x000a0…000c0        a1 31 2e 31 20 47 6f 61 6c 73 0d 0a 0d 0a 54 68 65 20 70 72 69 6e 63 69 70 6c 65 20 67 6f 61 6c   ┆ 1.1 Goals    The principle goal┆
0x000c0…000e0        20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 73 20 74 6f 20 62 65 20 61 20   ┆ of Real-Time Pascal is to be a ┆
0x000e0…00100        0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 74 6f 6f 6c 20 70 61 72 74 69 63 75 6c 61 72 6c 79 20 77   ┆ programming tool particularly w┆
0x00100…00120        65 6c 6c 2d 73 75 69 74 65 64 20 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 63 68 61 72 61 63   ┆ell-suited in situations  charac┆
0x00120…00140        74 65 72 69 7a 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 72 65 71   ┆terized by the following two req┆
0x00140…00160        75 69 72 65 6d 65 6e 74 73 3a 0d 0a 0d 0a 2d 20 84 74 68 65 20 73 6f 66 74 77 61 72 65 20 6d 75   ┆uirements:    -  the software mu┆
0x00160…00180        73 74 20 70 72 6f 76 69 64 65 20 72 61 70 69 64 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 65 78 74   ┆st provide rapid response to ext┆
0x00180…001a0        65 72 6e 61 6c 20 0a 19 82 80 80 65 76 65 6e 74 73 20 28 22 72 65 61 6c 2d 74 69 6d 65 22 29 2c   ┆ernal      events ("real-time"),┆
0x001a0…001c0        0d 0a 2d 20 84 70 72 6f 67 72 61 6d 6d 65 72 73 20 77 69 73 68 20 74 6f 20 75 74 69 6c 69 7a 65   ┆  -  programmers wish to utilize┆
0x001c0…001e0        20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 6f 66 20 73 6f 66 74 77 61 72 65 20 0a 19   ┆ the organization of software   ┆
0x001e0…00200        82 80 80 69 6e 74 6f 20 70 61 72 61 6c 6c 65 6c 20 63 6f 6f 70 65 72 61 74 69 6e 67 20 70 72 6f   ┆   into parallel cooperating pro┆
0x00200…00220 (1,)   63 65 73 73 65 73 20 61 73 20 61 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20 0a 19 82 80 80 73 74 72   ┆cesses as a fundamental      str┆
0x00220…00240        75 63 74 75 72 69 6e 67 20 74 6f 6f 6c 2e 0d 0a 0d 0a 54 68 65 20 6d 61 6a 6f 72 20 75 73 65 20   ┆ucturing tool.    The major use ┆
0x00240…00260        6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 68 61 73 20 62 65 65 6e 20 61 6e 64   ┆of Real-Time Pascal has been and┆
0x00260…00280        20 69 73 20 66 6f 72 65 73 65 65 6e 20 0a 74 6f 20 72 65 6d 61 69 6e 20 69 6e 20 74 68 65 20 62   ┆ is foreseen  to remain in the b┆
0x00280…002a0        61 73 69 63 20 73 6f 66 74 77 61 72 65 20 6f 66 20 64 69 73 74 72 69 62 75 74 65 64 20 70 72 6f   ┆asic software of distributed pro┆
0x002a0…002c0        63 65 73 73 69 6e 67 20 0a 73 79 73 74 65 6d 73 20 61 6e 64 20 64 61 74 61 20 63 6f 6d 6d 75 6e   ┆cessing  systems and data commun┆
0x002c0…002e0        69 63 61 74 69 6f 6e 20 6e 65 74 77 6f 72 6b 20 6e 6f 64 65 73 3a 0d 0a 0d 0a 2d 20 74 65 72 6d   ┆ication network nodes:    - term┆
0x002e0…00300        69 6e 61 6c 20 65 6d 75 6c 61 74 69 6f 6e 2c 0d 0a 2d 20 6c 61 79 65 72 65 64 20 70 72 6f 74 6f   ┆inal emulation,  - layered proto┆
0x00300…00320        63 6f 6c 20 68 61 6e 64 6c 69 6e 67 2c 0d 0a 2d 20 6c 6f 63 61 6c 20 61 72 65 61 20 6e 65 74 77   ┆col handling,  - local area netw┆
0x00320…00340        6f 72 6b 69 6e 67 20 73 65 72 76 69 63 65 73 2e 0d 0a 0d 0a 49 6e 20 74 68 65 73 65 20 6b 69 6e   ┆orking services.    In these kin┆
0x00340…00360        64 73 20 6f 66 20 73 69 74 75 61 74 69 6f 6e 73 20 74 68 65 20 74 77 6f 20 61 62 6f 76 65 2d 6d   ┆ds of situations the two above-m┆
0x00360…00380        65 6e 74 69 6f 6e 65 64 20 0a 72 65 71 75 69 72 65 6d 65 6e 74 73 20 61 72 65 20 69 6e 68 65 72   ┆entioned  requirements are inher┆
0x00380…003a0        65 6e 74 6c 79 20 70 72 65 73 65 6e 74 2e 0d 0a 0d 0a 54 68 65 20 70 72 6f 67 72 61 6d 6d 69 6e   ┆ently present.    The programmin┆
0x003a0…003c0        67 20 6f 66 20 65 6e 64 2d 75 73 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 61 6e 64 20   ┆g of end-user applications, and ┆
0x003c0…003e0        69 6e 20 70 61 72 74 69 63 75 6c 61 72 3a 20 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 62 79 20 74   ┆in particular:  programming by t┆
0x003e0…00400        68 65 20 65 6e 64 20 75 73 65 72 2c 20 61 72 65 20 6e 6f 74 20 67 6f 61 6c 73 20 6f 66 20 52 65   ┆he end user, are not goals of Re┆
0x00400…00420 (2,)   61 6c 2d 54 69 6d 65 20 0a 50 61 73 63 61 6c 2e 20 48 69 67 68 20 6c 65 76 65 6c 20 72 75 6e 2d   ┆al-Time  Pascal. High level run-┆
0x00420…00440        74 69 6d 65 20 73 75 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 2c 20 73 75 63 68 20 61 73 20   ┆time support functions, such as ┆
0x00440…00460        61 20 0a 67 65 6e 65 72 61 6c 20 68 69 67 68 20 6c 65 76 65 6c 20 69 6e 70 75 74 2f 6f 75 74 70   ┆a  general high level input/outp┆
0x00460…00480        75 74 20 73 79 73 74 65 6d 2c 20 61 72 65 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 0a   ┆ut system, are not included in  ┆
0x00480…004a0        74 68 65 20 6c 61 6e 67 75 61 67 65 2e 20 48 6f 77 65 76 65 72 2c 20 70 72 6f 76 69 64 65 64 20   ┆the language. However, provided ┆
0x004a0…004c0        73 75 69 74 61 62 6c 65 20 74 6f 6f 6c 73 20 61 72 65 20 66 75 72 6e 69 73 68 65 64 20 0a 61 6c   ┆suitable tools are furnished  al┆
0x004c0…004e0        6f 6e 67 20 77 69 74 68 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 6c 61 6e 67 75 61 67   ┆ong with support for the languag┆
0x004e0…00500        65 20 69 74 73 65 6c 66 2c 20 69 74 20 6d 61 79 20 70 72 6f 76 65 20 74 6f 20 0a 62 65 20 77 65   ┆e itself, it may prove to  be we┆
0x00500…00520        6c 6c 20 73 75 69 74 65 64 20 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 70 72 6f 67 72   ┆ll suited for applications progr┆
0x00520…00540        61 6d 6d 69 6e 67 20 61 73 20 77 65 6c 6c 20 61 73 20 0a 73 79 73 74 65 6d 73 20 70 72 6f 67 72   ┆amming as well as  systems progr┆
0x00540…00560        61 6d 6d 69 6e 67 2e 0d 0a 0d 0a 41 6c 74 68 6f 75 67 68 20 52 65 61 6c 2d 54 69 6d 65 20 50 61   ┆amming.    Although Real-Time Pa┆
0x00560…00580        73 63 61 6c 20 61 69 6d 73 20 61 74 20 6c 6f 77 20 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 6d 69   ┆scal aims at low level programmi┆
0x00580…005a0        6e 67 20 69 74 20 0a 69 73 20 76 65 72 79 20 6d 75 63 68 20 61 20 68 69 67 68 20 6c 65 76 65 6c   ┆ng it  is very much a high level┆
0x005a0…005c0        20 6c 61 6e 67 75 61 67 65 2e 20 54 68 69 73 20 69 73 20 74 72 75 65 20 69 6e 20 74 65 72 6d 73   ┆ language. This is true in terms┆
0x005c0…005e0        20 6f 66 20 0a 73 79 6e 74 61 78 2c 20 69 6e 20 74 65 72 6d 73 20 6f 66 20 70 72 6f 67 72 61 6d   ┆ of  syntax, in terms of program┆
0x005e0…00600        6d 69 6e 67 20 66 61 63 69 6c 69 74 69 65 73 2c 20 61 6e 64 20 69 6e 20 0a 70 61 72 74 69 63 75   ┆ming facilities, and in  particu┆
0x00600…00620 (3,)   6c 61 72 20 69 6e 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f   ┆lar in terms of the amount of co┆
0x00620…00640        6e 73 69 73 74 65 6e 63 79 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 0a 77 68 69 63 68 20 69 73 20   ┆nsistency enforcement  which is ┆
0x00640…00660        65 6d 62 6f 69 64 65 64 20 69 6e 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2e 0d 0a 0d 0a 8c 83 e0   ┆emboided in the language.       ┆
0x00660…00680        0a 52 65 61 6c 2d 54 69 6d 65 20 50 61 63 61 6c 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 64 65   ┆ Real-Time Pacal has not been de┆
0x00680…006a0        73 69 67 6e 65 64 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 66 6f 72 20 61 6e 79 20 0a 70 61 72   ┆signed specifically for any  par┆
0x006a0…006c0        74 69 63 75 6c 61 72 20 6d 61 63 68 69 6e 65 2e 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 66 65   ┆ticular machine. However, the fe┆
0x006c0…006e0        61 73 69 62 69 6c 69 74 79 20 61 6e 64 20 75 73 65 66 75 6c 6e 65 73 73 20 0a 6f 66 20 61 20 70   ┆asibility and usefulness  of a p┆
0x006e0…00700        6c 61 6e 6e 65 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 49 6e 74   ┆lanned implementation on the Int┆
0x00700…00720        65 6c 20 69 41 50 58 6e 38 36 20 70 72 6f 63 65 73 73 6f 72 20 0a 73 65 72 69 65 73 20 68 61 76   ┆el iAPXn86 processor  series hav┆
0x00720…00740        65 20 62 65 65 6e 20 61 62 73 6f 6c 75 74 65 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2e 20 4f 6e   ┆e been absolute requirements. On┆
0x00740…00760        65 20 74 79 70 65 20 6f 66 20 6d 61 63 68 69 6e 65 20 0a 64 65 70 65 6e 64 65 6e 63 79 20 69 73   ┆e type of machine  dependency is┆
0x00760…00780        20 62 75 69 6c 74 20 69 6e 74 6f 20 74 68 65 20 6c 61 6e 67 75 61 67 65 7c 20 69 6e 20 6f 72 64   ┆ built into the languageø in ord┆
0x00780…007a0        65 72 20 74 68 61 74 20 0a 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 73 20 28 63 66 2e 20   ┆er that  descriptive types (cf. ┆
0x007a0…007c0        73 65 63 74 69 6f 6e 20 33 2e 31 31 29 20 62 65 20 63 6f 72 72 65 63 74 6c 79 20 0a 69 6d 70 6c   ┆section 3.11) be correctly  impl┆
0x007c0…007e0        65 6d 65 6e 74 65 64 2c 20 74 68 65 20 6d 65 6d 6f 72 79 20 6f 66 20 74 68 65 20 74 61 72 67 65   ┆emented, the memory of the targe┆
0x007e0…00800        74 20 6d 61 63 68 69 6e 65 20 6d 75 73 74 20 62 65 20 0a 61 64 64 72 65 73 73 61 62 6c 65 20 61   ┆t machine must be  addressable a┆
0x00800…00820 (4,)   74 20 74 68 65 20 6c 65 76 65 6c 20 6f 66 20 38 2d 62 69 74 20 62 79 74 65 73 2c 20 61 6e 64 20   ┆t the level of 8-bit bytes, and ┆
0x00820…00840        74 68 65 20 0a 73 69 67 6e 69 66 69 63 61 6e 63 65 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20   ┆the  significance of individual ┆
0x00840…00860        62 79 74 65 73 20 77 69 74 68 69 6e 20 6d 75 6c 74 69 2d 62 79 74 65 20 65 6e 74 69 74 69 65 73   ┆bytes within multi-byte entities┆
0x00860…00880        20 0a 28 65 2e 67 2e 20 31 36 2d 62 69 74 20 77 6f 72 64 73 29 20 6d 75 73 74 20 69 6e 63 72 65   ┆  (e.g. 16-bit words) must incre┆
0x00880…008a0        61 73 65 20 77 69 74 68 20 69 6e 63 72 65 61 73 69 6e 67 20 61 64 64 72 65 73 73 65 73 2e 0d 0a   ┆ase with increasing addresses.  ┆
0x008a0…008c0        0d 0a 0d 0a b0 a1 31 2e 32 20 4d 61 69 6e 20 46 65 61 74 75 72 65 73 0d 0a 0d 0a 49 6e 20 6d 61   ┆      1.2 Main Features    In ma┆
0x008c0…008e0        6e 79 20 72 65 73 70 65 63 74 73 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 73 2c   ┆ny respects Real-Time Pascal is,┆
0x008e0…00900        20 61 73 20 6f 6e 65 20 6d 69 67 68 74 20 0a 61 6e 74 69 63 69 70 61 74 65 2c 20 73 69 6d 69 6c   ┆ as one might  anticipate, simil┆
0x00900…00920        61 72 20 74 6f 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 20 28 31 2c 20 32 29 2e 20 54 68   ┆ar to standard Pascal (1, 2). Th┆
0x00920…00940        65 20 6d 61 6a 6f 72 20 0a 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 52 65 61 6c   ┆e major  difference is that Real┆
0x00940…00960        2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 6e 63 6c 75 64 65 73 20 66 61 63 69 6c 69 74 69 65 73   ┆-Time Pascal includes facilities┆
0x00960…00980        20 66 6f 72 20 0a 73 74 61 72 74 69 6e 67 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 6d   ┆ for  starting and controlling m┆
0x00980…009a0        75 6c 74 69 70 6c 65 20 70 72 6f 63 65 73 73 65 73 20 61 73 20 77 65 6c 6c 20 61 73 20 66 6f 72   ┆ultiple processes as well as for┆
0x009a0…009c0        20 0a 74 68 65 20 6f 72 64 65 72 6c 79 20 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 61 6e   ┆  the orderly synchronization an┆
0x009c0…009e0        64 20 69 6e 74 65 72 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 0a 73 75   ┆d intercommunication between  su┆
0x009e0…00a00        63 68 20 70 72 6f 63 65 73 73 65 73 2e 20 46 65 61 74 75 72 65 73 20 77 68 69 63 68 20 61 72 65   ┆ch processes. Features which are┆
0x00a00…00a20 (5,)   20 62 61 73 69 63 20 74 6f 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 0a 62 75 74 20   ┆ basic to Real-Time Pascal  but ┆
0x00a20…00a40        77 65 6c 6c 2d 6b 6e 6f 77 6e 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 20   ┆well-known from standard Pascal ┆
0x00a40…00a60        61 72 65 20 6e 6f 74 20 64 69 73 63 75 73 73 65 64 20 69 6e 20 0a 74 68 69 73 20 73 65 63 74 69   ┆are not discussed in  this secti┆
0x00a60…00a80        6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 31 2e 32 2e 31 20 50 72 6f 63 65 73 73 65 73 0d 0a 0d 0a 41 73   ┆on.        1.2.1 Processes    As┆
0x00a80…00aa0        20 69 6e 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 2c 20 61 20 52 65 61 6c 2d 54 69 6d 65   ┆ in standard Pascal, a Real-Time┆
0x00aa0…00ac0        20 50 61 73 63 61 6c 20 a1 70 72 6f 67 72 61 6d e1 20 63 6f 6e 73 69 73 74 73 20 0a 6f 66 20 64   ┆ Pascal  program  consists  of d┆
0x00ac0…00ae0        65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6e 64 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 64   ┆eclarations and definitions of d┆
0x00ae0…00b00        61 74 61 20 74 6f 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 2c 20 0a 61 6e 64 20 61 20 64 65   ┆ata to be manipulated,  and a de┆
0x00b00…00b20        73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61 63 74 69 6f 6e 73 20 74 6f 20 70 65 72 66 6f 72 6d 20   ┆scription of actions to perform ┆
0x00b20…00b40        74 68 65 20 64 65 73 69 72 65 64 20 0a 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 73 2e 20 54 68 65 20   ┆the desired  manipulations. The ┆
0x00b40…00b60        65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20   ┆execution of a Real-Time Pascal ┆
0x00b60…00b80        70 72 6f 67 72 61 6d 20 0a 69 73 20 63 61 6c 6c 65 64 20 61 20 a1 70 72 6f 63 65 73 73 e1 2e 20   ┆program  is called a  process . ┆
0x00b80…00ba0        41 20 70 72 6f 63 65 73 73 20 69 73 20 73 61 69 64 20 74 6f 20 62 65 20 61 6e 20 a1 69 6e 63 61   ┆A process is said to be an  inca┆
0x00ba0…00bc0        72 6e 61 74 69 6f 6e e1 20 0a 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   ┆rnation   of the program which i┆
0x00bc0…00be0        73 20 65 78 65 63 75 74 65 64 2e 0d 0a 0d 0a 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20   ┆s executed.    Real-Time Pascal ┆
0x00be0…00c00        69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 54 68 65   ┆is intended for compilation. The┆
0x00c00…00c20 (6,)   20 6d 61 6a 6f 72 20 0a 69 6e 67 72 65 64 69 65 6e 74 20 6f 66 20 61 6e 20 69 6d 70 6c 65 6d 65   ┆ major  ingredient of an impleme┆
0x00c20…00c40        6e 74 61 74 69 6f 6e 69 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 77 68 69 63 68 20 77 69 6c   ┆ntationis the compiler which wil┆
0x00c40…00c60        6c 20 0a 74 72 61 6e 73 66 6f 72 6d 20 73 6f 75 72 63 65 20 70 72 6f 67 72 61 6d 73 20 69 6e 74   ┆l  transform source programs int┆
0x00c60…00c80        6f 20 6f 62 6a 65 63 74 20 63 6f 64 65 20 65 78 65 63 75 74 61 62 6c 65 20 6f 6e 20 0a 73 6f 6d   ┆o object code executable on  som┆
0x00c80…00ca0        65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e 65 2e 20 54 68 72 6f 75 67 68 6f 75 74 20 74 68 69   ┆e target machine. Throughout thi┆
0x00ca0…00cc0        73 20 64 6f 63 75 6d 65 6e 74 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 0a 6d 61 64 65 20 74 6f   ┆s document reference is  made to┆
0x00cc0…00ce0        20 a1 63 6f 6d 70 69 6c 65 74 69 6d 65 e1 2c 20 74 68 65 20 74 69 6d 65 20 77 68 65 6e 20 61 20   ┆  compiletime , the time when a ┆
0x00ce0…00d00        73 6f 75 72 63 65 20 74 65 78 74 20 69 73 20 62 65 69 6e 67 20 0a 8c 83 c8 0a 6d 61 6e 69 70 75   ┆source text is being      manipu┆
0x00d00…00d20        6c 61 74 65 64 20 62 79 20 61 20 63 6f 6d 70 69 6c 65 72 2c 20 61 6e 64 20 a1 72 75 6e 2d 74 69   ┆lated by a compiler, and  run-ti┆
0x00d20…00d40        6d 65 e1 2c 20 74 68 65 20 74 69 6d 65 20 77 68 65 6e 20 61 20 0a 64 79 6e 61 6d 69 63 20 73 79   ┆me , the time when a  dynamic sy┆
0x00d40…00d60        73 74 65 6d 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 63   ┆stem consisting of a number of c┆
0x00d60…00d80        6f 6f 70 65 72 61 74 69 6e 67 20 0a 70 72 6f 63 65 73 73 65 73 20 69 73 20 6f 70 65 72 61 74 69   ┆ooperating  processes is operati┆
0x00d80…00da0        76 65 2e 0d 0a 0d 0a 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 64 65 63 6c 61 72 61 74 69 6f   ┆ve.    In addition to declaratio┆
0x00da0…00dc0        6e 73 20 6f 66 20 64 61 74 61 20 61 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e 73 20 6f 66 20 0a   ┆ns of data and descriptions of  ┆
0x00dc0…00de0        61 63 74 69 6f 6e 73 20 61 20 70 72 6f 67 72 61 6d 20 28 61 6e 64 20 74 68 69 73 20 69 73 20 77   ┆actions a program (and this is w┆
0x00de0…00e00        68 65 72 65 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 0a 64 65 70 61 72 74 73 20 66   ┆here Real-Time Pascal  departs f┆
0x00e00…00e20 (7,)   72 6f 6d 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 29 20 6d 61 79 20 63 6f 6e 74 61 69 6e   ┆rom standard Pascal) may contain┆
0x00e20…00e40        20 73 75 62 2d 70 72 6f 67 72 61 6d 73 2c 20 61 6e 64 20 0a 61 20 70 72 6f 63 65 73 73 20 6d 61   ┆ sub-programs, and  a process ma┆
0x00e40…00e60        79 20 63 72 65 61 74 65 2c 20 73 74 61 72 74 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 69 6e 63 61   ┆y create, start and control inca┆
0x00e60…00e80        72 6e 61 74 69 6f 6e 73 20 6f 66 20 73 75 62 2d 0a 70 72 6f 67 72 61 6d 73 20 6f 66 20 74 68 65   ┆rnations of sub- programs of the┆
0x00e80…00ea0        20 70 72 6f 67 72 61 6d 20 6f 66 20 77 68 69 63 68 20 69 74 20 69 73 20 69 74 73 65 6c 66 20 61   ┆ program of which it is itself a┆
0x00ea0…00ec0        6e 20 0a 69 6e 63 61 72 6e 61 74 69 6f 6e 2e 20 53 75 62 2d 70 72 6f 67 72 61 6d 73 20 6d 61 79   ┆n  incarnation. Sub-programs may┆
0x00ec0…00ee0        20 62 65 20 6e 65 73 74 65 64 20 74 6f 20 61 6e 79 20 64 65 70 74 68 2e 20 49 6e 20 0a 6f 72 64   ┆ be nested to any depth. In  ord┆
0x00ee0…00f00        65 72 20 77 6f 72 64 73 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50   ┆er words a number of Real-Time P┆
0x00f00…00f20        61 73 63 61 6c 20 70 72 6f 67 72 61 6d 73 20 6d 61 79 20 0a 63 6f 6e 73 74 69 74 75 74 65 20 61   ┆ascal programs may  constitute a┆
0x00f20…00f40        20 a1 70 72 6f 67 72 61 6d 20 74 72 65 65 e1 2e 20 54 68 65 20 65 6e 63 6c 6f 73 65 72 20 72 65   ┆  program tree . The encloser re┆
0x00f40…00f60        6c 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 61 20 0a 70 72 6f 67 72 61 6d 20 61 6e 64 20 61 20   ┆lation between a  program and a ┆
0x00f60…00f80        73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 63 61 72 72 69 65 64 20 64 69 72 65 63 74 6c 79 20   ┆sub-program is carried directly ┆
0x00f80…00fa0        6f 76 65 72 20 74 6f 20 74 68 65 20 0a a1 70 61 72 65 6e 74 e1 20 72 65 6c 61 74 69 6f 6e 20 74   ┆over to the   parent  relation t┆
0x00fa0…00fc0        68 61 74 20 65 78 69 73 74 73 20 62 65 74 77 65 65 6e 20 61 20 70 72 6f 63 65 73 73 20 61 6e 64   ┆hat exists between a process and┆
0x00fc0…00fe0        20 61 20 a1 63 68 69 6c 64 e1 20 0a 70 72 6f 63 65 73 73 20 77 68 69 63 68 20 69 74 20 68 61 73   ┆ a  child   process which it has┆
0x00fe0…01000        20 63 72 65 61 74 65 64 2e 20 54 68 75 73 20 74 68 65 20 64 79 6e 61 6d 69 63 20 73 65 74 20 6f   ┆ created. Thus the dynamic set o┆
0x01000…01020 (8,)   66 20 61 63 74 69 76 65 20 0a 70 72 6f 63 65 73 73 65 73 20 77 69 6c 6c 20 65 78 68 69 62 69 74   ┆f active  processes will exhibit┆
0x01020…01040        20 61 20 63 6f 6e 74 72 6f 6c 20 73 74 72 75 63 74 75 72 65 20 72 65 66 6c 65 63 74 69 6e 67 20   ┆ a control structure reflecting ┆
0x01040…01060        74 68 65 20 0a 6e 65 73 74 65 64 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 70 72 6f   ┆the  nested structure of the pro┆
0x01060…01080        67 72 61 6d 20 74 72 65 65 2e 0d 0a 0d 0a 41 6e 20 65 73 73 65 6e 74 69 61 6c 20 66 65 61 74 75   ┆gram tree.    An essential featu┆
0x01080…010a0        72 65 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 73 20 74 68 61 74 20 61   ┆re of Real-Time Pascal is that a┆
0x010a0…010c0        20 6e 75 6d 62 65 72 20 6f 66 20 0a 73 70 65 63 69 61 6c 20 74 79 70 65 73 20 61 6e 64 20 6f 70   ┆ number of  special types and op┆
0x010c0…010e0        65 72 61 74 69 6f 6e 73 20 6f 6e 20 76 61 72 69 61 62 6c 65 73 20 6f 66 20 74 68 65 73 65 20 74   ┆erations on variables of these t┆
0x010e0…01100        79 70 65 73 20 61 72 65 20 0a 64 69 72 65 63 74 6c 79 20 74 61 69 6c 6f 72 65 64 20 74 6f 20 70   ┆ypes are  directly tailored to p┆
0x01100…01120        65 72 66 6f 72 6d 20 73 79 6e 63 72 68 6f 6e 69 7a 61 74 69 6f 6e 20 61 6e 64 20 65 78 63 68 61   ┆erform syncrhonization and excha┆
0x01120…01140        6e 67 65 20 6f 66 20 0a 61 63 63 65 73 73 20 74 6f 20 73 68 61 72 65 64 20 64 61 74 61 20 62 65   ┆nge of  access to shared data be┆
0x01140…01160        74 77 65 65 6e 20 70 72 6f 63 65 73 73 65 73 20 69 6e 20 61 20 77 65 6c 6c 2d 64 65 66 69 6e 65   ┆tween processes in a well-define┆
0x01160…01180        64 20 0a 61 6e 64 20 73 65 63 75 72 65 20 66 61 73 68 69 6f 6e 2e 20 49 6e 20 70 61 72 74 69 63   ┆d  and secure fashion. In partic┆
0x01180…011a0        75 6c 61 72 20 6f 6e 65 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e 76 61 72 69 61 6e 74 20 69 73 20   ┆ular one important invariant is ┆
0x011a0…011c0        0a 6d 61 69 6e 74 61 69 6e 65 64 20 61 20 70 72 69 6f 72 69 20 28 69 2e 65 2e 20 77 69 74 68 6f   ┆ maintained a priori (i.e. witho┆
0x011c0…011e0        75 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d 65 72 20 6e 65 65 64 69 6e 67 20 74 6f 20 0a 77 6f   ┆ut the programmer needing to  wo┆
0x011e0…01200        72 72 79 20 61 62 6f 75 74 20 69 74 29 3a 20 74 6f 20 65 76 65 72 79 20 a1 62 75 66 66 65 72 e1   ┆rry about it): to every  buffer ┆
0x01200…01220 (9,)   20 74 68 65 72 65 20 65 78 69 73 74 73 20 61 74 20 61 6e 79 20 67 69 76 65 6e 20 0a 74 69 6d 65   ┆ there exists at any given  time┆
0x01220…01240        20 70 72 65 63 69 73 65 6c 79 20 6f 6e 65 20 a1 72 65 66 65 72 65 6e 63 65 f0 e1 2c 20 61 6c 6c   ┆ precisely one  reference  , all┆
0x01240…01260        6f 77 69 6e 67 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 72 6f 63 65 73 73 20 0a 74 6f 20 61 63   ┆owing at most one process  to ac┆
0x01260…01280        63 65 73 73 20 74 68 65 20 62 75 66 66 65 72 20 63 6f 6e 74 65 6e 74 73 2e 20 45 78 63 68 61 6e   ┆cess the buffer contents. Exchan┆
0x01280…012a0        67 65 20 6f 66 20 61 63 63 65 73 73 20 74 6f 20 61 20 0a 62 75 66 66 65 72 20 69 73 20 61 63 68   ┆ge of access to a  buffer is ach┆
0x012a0…012c0        69 65 76 65 64 20 62 79 20 70 61 73 73 69 6e 67 20 74 68 65 20 28 63 6f 6e 74 65 6e 74 73 20 6f   ┆ieved by passing the (contents o┆
0x012c0…012e0        66 20 74 68 65 29 20 62 75 66 66 65 72 20 0a 61 73 20 61 20 6d 65 73 73 61 67 65 20 76 69 61 20   ┆f the) buffer  as a message via ┆
0x012e0…01300        61 20 a1 6d 61 69 6c 62 6f 78 2e 0d 0a 0d 0a 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 66 6f   ┆a  mailbox.    The operations fo┆
0x01300…01320        72 20 70 72 6f 63 65 73 73 20 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 61 6e 64 20 6d 65   ┆r process synchronization and me┆
0x01320…01340        73 73 61 67 65 20 0a 70 61 73 73 69 6e 67 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20   ┆ssage  passing are available in ┆
0x01340…01360        52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 61 73 20 70 72 65 64 65 66 69 6e 65 64 20 0a   ┆Real-Time Pascal as predefined  ┆
0x01360…01380        72 6f 75 74 69 6e 65 73 2e 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 61 6e 20 69   ┆routines. This implies that an i┆
0x01380…013a0        6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 0a 50 61 73 63   ┆mplementation of Real-Time  Pasc┆
0x013a0…013c0        61 6c 20 77 69 6c 6c 20 69 6e 76 6f 6c 76 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e   ┆al will involve the construction┆
0x013c0…013e0        20 6f 66 20 65 69 74 68 65 72 3a 0d 0a 0d 0a 2d 20 84 61 20 73 6f 66 74 77 61 72 65 20 6e 75 63   ┆ of either:    -  a software nuc┆
0x013e0…01400        6c 65 75 73 2c 20 69 2e 65 2e 20 61 20 73 6d 61 6c 6c 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73   ┆leus, i.e. a small operating sys┆
0x01400…01420 (10,)  74 65 6d 2c 20 77 68 69 63 68 20 0a 19 82 80 80 70 65 72 66 6f 72 6d 73 20 74 68 65 20 6d 65 73   ┆tem, which      performs the mes┆
0x01420…01440        73 61 67 65 20 70 61 73 73 69 6e 67 20 61 6e 64 20 70 72 6f 63 65 73 73 20 73 79 6e 63 68 72 6f   ┆sage passing and process synchro┆
0x01440…01460        6e 69 7a 61 74 69 6f 6e 20 0a 19 82 80 80 61 6e 64 20 73 63 68 65 64 75 6c 69 6e 67 20 66 75 6e   ┆nization      and scheduling fun┆
0x01460…01480        63 74 69 6f 6e 73 2c 20 74 79 70 69 63 61 6c 6c 79 20 69 6e 20 61 20 68 69 67 68 6c 79 20 64 65   ┆ctions, typically in a highly de┆
0x01480…014a0        64 69 63 61 74 65 64 20 0a 19 82 80 80 6d 61 6e 6e 65 72 2c 20 6f 72 0d 0a 0d 0a 8c 83 e0 0a 2d   ┆dicated      manner, or        -┆
0x014a0…014c0        20 84 61 20 72 75 6e 2d 74 69 6d 65 20 73 79 73 74 65 6d 20 70 72 6f 76 69 64 69 6e 67 20 61 20   ┆  a run-time system providing a ┆
0x014c0…014e0        62 72 69 64 67 65 20 74 6f 20 61 20 67 65 6e 65 72 61 6c 20 0a 19 82 80 80 6f 70 65 72 61 74 69   ┆bridge to a general      operati┆
0x014e0…01500        6e 67 20 73 79 73 74 65 6d 20 77 68 69 63 68 20 6c 65 6e 64 73 20 69 74 73 65 6c 66 20 74 6f 20   ┆ng system which lends itself to ┆
0x01500…01520        73 75 70 70 6f 72 74 69 6e 67 20 74 68 65 20 74 79 70 65 20 0a 19 82 80 80 6f 66 20 70 72 6f 63   ┆supporting the type      of proc┆
0x01520…01540        65 73 73 20 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 65 72 2d 63 6f   ┆ess synchronization and inter-co┆
0x01540…01560        6d 6d 75 6e 69 63 61 74 69 6f 6e 20 0a 19 82 80 80 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   ┆mmunication      functions defin┆
0x01560…01580        65 64 20 61 73 20 70 61 72 74 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 2e 0d   ┆ed as part of Real-Time Pascal. ┆
0x01580…015a0        0a 0d 0a 41 6e 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 74 6f 20 62 65 20 75 73 65   ┆   An operating system to be use┆
0x015a0…015c0        64 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 20 6b 69 6e 64 20 6f 66 20 0a 69 6d 70 6c 65 6d   ┆d for the latter kind of  implem┆
0x015c0…015e0        65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 65 78 65 63 75 74   ┆entation must support the execut┆
0x015e0…01600        69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 0a 70 72 6f 63 65 73 73 65 73 20 65 69 74 68 65   ┆ion of multiple  processes eithe┆
0x01600…01620 (11,)  72 20 69 6e 20 74 72 75 65 20 70 61 72 61 6c 6c 65 6c 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70   ┆r in true parallel on a single p┆
0x01620…01640        72 6f 63 65 73 73 6f 72 2e 20 54 68 65 20 0a 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20   ┆rocessor. The  operating system ┆
0x01640…01660        6d 75 73 74 20 70 65 72 66 6f 72 6d 20 70 72 6f 63 65 73 73 20 73 63 68 65 64 75 6c 69 6e 67 3b   ┆must perform process scheduling;┆
0x01660…01680        20 69 74 20 6d 75 73 74 20 0a 61 6c 73 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 65 78 63 68 61   ┆ it must  also support the excha┆
0x01680…016a0        6e 67 65 20 6f 66 20 6d 65 73 73 61 67 65 73 20 76 69 61 20 6d 61 69 6c 62 6f 78 65 73 2e 20 49   ┆nge of messages via mailboxes. I┆
0x016a0…016c0        6e 20 0a 67 65 6e 65 72 61 6c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 72   ┆n  general it is necessary to cr┆
0x016c0…016e0        69 74 69 63 61 6c 6c 79 20 65 76 61 6c 75 61 74 65 20 61 20 67 69 76 65 6e 20 0a 6f 70 65 72 61   ┆itically evaluate a given  opera┆
0x016e0…01700        74 69 6e 67 20 73 79 73 74 65 6d 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 20 61 73   ┆ting system before it is used as┆
0x01700…01720        20 61 20 66 6f 75 6e 64 61 74 69 6f 6e 20 66 6f 72 20 61 6e 20 0a 69 6d 70 6c 65 6d 65 6e 74 61   ┆ a foundation for an  implementa┆
0x01720…01740        74 69 6f 6e 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 2e 0d 0a 0d 0a 57 68 65   ┆tion of Real-Time Pascal.    Whe┆
0x01740…01760        6e 20 61 20 73 75 69 74 61 62 6c 65 20 67 65 6e 65 72 61 6c 20 6f 70 65 72 61 74 69 6e 67 20 73   ┆n a suitable general operating s┆
0x01760…01780        79 73 74 65 6d 20 69 73 20 75 73 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 0a 74 68 65 20 52 65   ┆ystem is used to perform  the Re┆
0x01780…017a0        61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 70 72 6f 63   ┆al-Time Pascal functions of proc┆
0x017a0…017c0        65 73 73 20 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 0a 61 6e 64 20 6d 65 73 73 61 67 65   ┆ess synchronization  and message┆
0x017c0…017e0        20 70 61 73 73 69 6e 67 2c 20 74 68 65 20 61 62 69 6c 69 74 79 20 69 73 20 6f 70 65 6e 65 64 20   ┆ passing, the ability is opened ┆
0x017e0…01800        75 70 20 66 6f 72 20 52 65 61 6c 2d 54 69 6d 65 20 0a 50 61 73 63 61 6c 20 70 72 6f 63 65 73 73   ┆up for Real-Time  Pascal process┆
0x01800…01820 (12,)  65 73 20 74 6f 20 63 6f 6f 70 65 72 61 74 65 20 77 69 74 68 20 70 72 6f 63 65 73 73 65 73 20 77   ┆es to cooperate with processes w┆
0x01820…01840        72 69 74 74 65 6e 20 69 6e 20 0a 6f 74 68 65 72 2c 20 74 79 70 69 63 61 6c 6c 79 20 6c 6f 77 2d   ┆ritten in  other, typically low-┆
0x01840…01860        6c 65 76 65 6c 2c 20 6c 61 6e 67 75 61 67 65 73 20 73 75 70 70 6f 72 74 65 64 20 75 6e 64 65 72   ┆level, languages supported under┆
0x01860…01880        20 74 68 61 74 20 0a 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 20 49 6e 20 6f 72 64 65   ┆ that  operating system. In orde┆
0x01880…018a0        72 20 74 6f 20 6d 61 6b 65 20 74 68 69 73 20 70 6f 73 73 69 62 69 6c 69 74 79 20 0a 70 72 61 63   ┆r to make this possibility  prac┆
0x018a0…018c0        74 69 63 61 6c 6c 79 20 75 73 65 66 75 6c 2c 20 74 68 65 20 64 61 74 61 20 66 6f 72 6d 61 74 73   ┆tically useful, the data formats┆
0x018c0…018e0        20 61 6e 64 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 0a 63 61 6c 6c 69 6e 67 20 73   ┆ and operating system  calling s┆
0x018e0…01900        65 71 75 65 6e 63 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 52 65 61 6c 2d 54 69 6d 65 20 50   ┆equences used by the Real-Time P┆
0x01900…01920        61 73 63 61 6c 20 63 6f 6d 70 69 6c 65 72 20 69 6e 20 0a 71 75 65 73 74 69 6f 6e 20 6d 75 73 74   ┆ascal compiler in  question must┆
0x01920…01940        20 62 65 20 77 65 6c 6c 2d 64 6f 63 75 6d 65 6e 74 65 64 2e 0d 0a 0d 0a 4f 6e 65 20 61 72 65 61   ┆ be well-documented.    One area┆
0x01940…01960        20 69 6e 20 77 68 69 63 68 20 74 68 65 20 75 73 65 20 6f 66 20 6f 74 68 65 72 20 6c 61 6e 67 75   ┆ in which the use of other langu┆
0x01960…01980        61 67 65 73 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 0a 77 69 74 68 20 52 65 61 6c 2d 54   ┆ages in conjunction  with Real-T┆
0x01980…019a0        69 6d 65 20 50 61 73 63 61 6c 20 69 73 20 70 61 72 74 69 63 75 6c 61 72 6c 79 20 69 6d 70 6f 72   ┆ime Pascal is particularly impor┆
0x019a0…019c0        74 61 6e 74 20 69 73 20 74 68 65 20 0a 64 69 72 65 63 74 20 69 6e 74 65 72 61 63 74 69 6f 6e 20   ┆tant is the  direct interaction ┆
0x019c0…019e0        77 69 74 68 20 70 65 72 69 70 68 65 72 61 6c 20 64 65 76 69 63 65 73 20 61 6e 64 20 74 68 65 20   ┆with peripheral devices and the ┆
0x019e0…01a00        0a 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 69 6e 74 65 72 72 75 70 74 73 2e 20 53 6f 2d 63 61   ┆ processing of interrupts. So-ca┆
0x01a00…01a20 (13,)  6c 6c 65 64 20 64 72 69 76 65 72 20 70 72 6f 63 65 73 73 65 73 20 77 68 69 63 68 20 0a 70 65 72   ┆lled driver processes which  per┆
0x01a20…01a40        66 6f 72 6d 20 74 61 73 6b 73 20 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 20 77 69 6c 6c 20 61   ┆form tasks of these types will a┆
0x01a40…01a60        6c 77 61 79 73 20 62 65 20 6d 61 63 68 69 6e 65 20 0a 64 65 70 65 6e 64 65 6e 74 20 61 6e 64 20   ┆lways be machine  dependent and ┆
0x01a60…01a80        6d 61 79 20 62 65 20 70 72 6f 67 72 61 6d 6d 65 64 20 69 6e 20 61 73 73 65 6d 62 6c 65 72 20 6f   ┆may be programmed in assembler o┆
0x01a80…01aa0        72 20 50 4c 2f 4d 2d 74 79 70 65 20 0a 6c 61 6e 67 75 61 67 65 73 2e 20 43 6f 6e 73 65 71 75 65   ┆r PL/M-type  languages. Conseque┆
0x01aa0…01ac0        6e 74 6c 79 20 6e 6f 20 69 6e 70 75 74 2f 6f 75 74 70 75 74 20 69 6e 73 74 72 75 63 74 69 6f 6e   ┆ntly no input/output instruction┆
0x01ac0…01ae0        73 20 6f 72 20 0a 69 6e 74 65 72 72 75 70 74 20 73 79 6e 63 72 68 6f 6e 69 7a 61 74 69 6f 6e 20   ┆s or  interrupt syncrhonization ┆
0x01ae0…01b00        66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 69 6e 63 6f 72 70 6f 72 61 74 65 64   ┆functions have been incorporated┆
0x01b00…01b20        20 0a 69 6e 74 6f 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 2e 20 49 74 20 69 73 20 61   ┆  into Real-Time Pascal. It is a┆
0x01b20…01b40        20 73 69 6d 70 6c 65 20 6d 61 74 74 65 72 2c 20 68 6f 77 65 76 65 72 2c 20 74 6f 20 0a 65 78 74   ┆ simple matter, however, to  ext┆
0x01b40…01b60        65 6e 64 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   ┆end a particular implementation ┆
0x01b60…01b7b        77 69 74 68 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 0d 0a 0d 0a                  ┆with these functions.      ┆
0x01b7b…01b7e        FormFeed {
0x01b7b…01b7e          0c 83 b0                                                                                          ┆   ┆
0x01b7b…01b7e        }
0x01b7e…01b80        0a b0                                                                                             ┆  ┆
0x01b80…01ba0        a1 31 2e 32 2e 32 20 44 61 74 61 20 54 79 70 69 6e 67 0d 0a 0d 0a 4c 69 6b 65 20 73 74 61 6e 64   ┆ 1.2.2 Data Typing    Like stand┆
0x01ba0…01bc0        61 72 64 20 50 61 73 63 61 6c 2c 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 73 20   ┆ard Pascal, Real-Time Pascal is ┆
0x01bc0…01be0        61 20 73 74 72 6f 6e 6c 79 20 74 79 70 65 64 20 0a 6c 61 6e 67 75 61 67 65 2e 20 54 79 70 65 73   ┆a stronly typed  language. Types┆
0x01be0…01c00        2c 20 69 6e 20 74 68 65 20 61 62 73 74 72 61 63 74 2c 20 70 72 6f 76 69 64 65 20 69 6d 70 6f 72   ┆, in the abstract, provide impor┆
0x01c00…01c20 (14,)  74 61 6e 74 20 0a 61 73 73 69 74 61 6e 63 65 20 74 6f 20 73 74 72 75 63 74 75 72 65 64 20 70 72   ┆tant  assitance to structured pr┆
0x01c20…01c40        6f 67 72 61 6d 6d 65 72 20 74 68 69 6e 6b 69 6e 67 2c 20 61 6e 64 20 74 68 65 20 0a 65 6e 66 6f   ┆ogrammer thinking, and the  enfo┆
0x01c40…01c60        72 63 65 6d 65 6e 74 20 6f 66 20 73 74 72 6f 6e 67 20 74 79 70 69 6e 67 20 69 73 20 61 20 75 73   ┆rcement of strong typing is a us┆
0x01c60…01c80        65 66 75 6c 20 74 6f 6f 6c 20 69 6e 20 74 68 65 20 0a 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 6d   ┆eful tool in the  detection of m┆
0x01c80…01ca0        61 6e 79 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 2e 20 41 20 70 61 72 74 69 63 75 6c 61   ┆any kinds of errors. A particula┆
0x01ca0…01cc0        72 20 63 6c 61 73 73 20 6f 66 20 0a 74 79 70 65 73 2c 20 74 68 65 20 73 6f 2d 63 61 6c 6c 65 64   ┆r class of  types, the so-called┆
0x01cc0…01ce0        20 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 73 2c 20 6f 6e 20 74 68 65 20 6f 74 68 65 72   ┆ descriptive types, on the other┆
0x01ce0…01d00        20 68 61 6e 64 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 76 65 72 79 20 63 6f   ┆ hand,  may be used in a very co┆
0x01d00…01d20        6e 63 72 65 74 65 20 66 61 73 68 69 6f 6e 20 74 6f 20 64 65 73 63 72 69 62 65 20 74 68 65 20 0a   ┆ncrete fashion to describe the  ┆
0x01d20…01d40        70 72 65 63 69 73 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 62 69 74 2d 73 74   ┆precise interpretation of bit-st┆
0x01d40…01d60        72 69 6e 67 73 20 69 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 6f 66 20 74 68 65 20 0a 6d 61 63 68   ┆rings in the memory of the  mach┆
0x01d60…01d80        69 6e 65 20 65 78 65 63 75 74 69 6e 67 20 61 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c   ┆ine executing a Real-Time Pascal┆
0x01d80…01da0        20 70 72 6f 67 72 61 6d 2e 20 54 68 69 73 20 66 65 61 74 75 72 65 20 0a 69 73 20 70 61 72 74 69   ┆ program. This feature  is parti┆
0x01da0…01dc0        63 75 6c 61 72 6c 79 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 70 72 65 63 69 73 65 20   ┆cularly useful when the precise ┆
0x01dc0…01de0        72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 0a 64 61 74 61 20 69 73 20 70 72 65 73 63   ┆representation of  data is presc┆
0x01de0…01e00        72 69 62 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 73 70   ┆ribed as part of the external sp┆
0x01e00…01e20 (15,)  65 63 69 66 69 63 61 74 69 6f 6e 73 20 6f 66 20 0a 61 20 73 6f 66 74 77 61 72 65 20 70 72 6f 6a   ┆ecifications of  a software proj┆
0x01e20…01e40        65 63 74 2c 20 65 2e 67 2e 20 61 20 73 74 61 6e 64 61 72 64 20 70 72 6f 74 6f 63 6f 6c 20 66 6f   ┆ect, e.g. a standard protocol fo┆
0x01e40…01e60        72 20 73 6f 6d 65 20 61 73 70 65 63 74 20 0a 6f 66 20 61 20 64 61 74 61 20 63 6f 6d 6d 75 6e 69   ┆r some aspect  of a data communi┆
0x01e60…01e80        63 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 0d 0a 41 6e 6f 74 68 65 72 20 66 65 61 74   ┆cation function.    Another feat┆
0x01e80…01ea0        75 72 65 20 77 68 69 63 68 20 73 74 61 6e 64 73 20 61 70 61 72 74 20 66 72 6f 6d 20 74 68 65 20   ┆ure which stands apart from the ┆
0x01ea0…01ec0        63 6c 61 73 73 20 72 6f 6f 6d 20 73 74 79 6c 65 20 0a 6f 66 20 73 74 61 6e 64 61 72 64 20 50 61   ┆class room style  of standard Pa┆
0x01ec0…01ee0        73 63 61 6c 20 69 73 20 74 68 61 74 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 61 6c   ┆scal is that Real-Time Pascal al┆
0x01ee0…01f00        6c 6f 77 73 20 74 68 65 20 0a 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 66 61 6d 69 6c 69 65 73   ┆lows the  definition of families┆
0x01f00…01f20        20 6f 66 20 63 6f 6e 66 6f 72 6d 61 6e 74 20 74 79 70 65 73 2c 20 64 69 66 66 65 72 69 6e 67 20   ┆ of conformant types, differing ┆
0x01f20…01f40        6f 6e 6c 79 20 0a 69 6e 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 79 70 65 20 70 61 72 61   ┆only  in the values of type para┆
0x01f40…01f60        6d 65 74 65 72 73 20 77 68 69 63 68 20 6d 61 79 20 64 65 74 65 72 6d 69 6e 65 20 65 2e 67 2e 20   ┆meters which may determine e.g. ┆
0x01f60…01f80        0a 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 6e 20 61 72 72 61 79 2c 20 62 75 74 20 68 61 76   ┆ the length of an array, but hav┆
0x01f80…01fa0        69 6e 67 20 74 68 65 20 73 61 6d 65 20 73 74 72 75 63 74 75 72 65 2e 20 54 79 70 65 73 20 0a 61   ┆ing the same structure. Types  a┆
0x01fa0…01fc0        72 65 20 61 6c 73 6f 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 64 79 6e 61 6d 69 63 2c 20 65   ┆re also allowed to be dynamic, e┆
0x01fc0…01fe0        2e 67 2e 20 62 79 20 68 61 76 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73 20 0a 77 68 69 63 68 20   ┆.g. by having parameters  which ┆
0x01fe0…02000        63 61 6e 6e 6f 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74   ┆cannot be evaluated at compile-t┆
0x02000…02020 (16,)  69 6d 65 2e 20 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 0a 66 65 61 74 75 72 65 73 20 73 75 70   ┆ime. Both of these  features sup┆
0x02020…02040        70 6f 72 74 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 64 79 6e 61 6d 69 63   ┆port the construction of dynamic┆
0x02040…02060        61 6c 6c 79 20 0a 63 6f 6e 66 69 67 75 72 61 62 6c 65 20 73 6f 66 74 77 61 72 65 2e 0d 0a 0d 0a   ┆ally  configurable software.    ┆
0x02060…02080        0d 0a b0 a1 31 2e 32 2e 33 20 44 61 74 61 20 41 63 63 65 73 73 0d 0a 0d 0a 54 68 65 20 64 61 74   ┆    1.2.3 Data Access    The dat┆
0x02080…020a0        61 20 69 74 65 6d 73 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79 20 61 20 70 72 6f 63 65 73 73   ┆a items manipulated by a process┆
0x020a0…020c0        20 6d 61 79 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 0a a1 70 72 69 76 61 74 65 e1 20   ┆ may be allocated as   private  ┆
0x020c0…020e0        74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2c 20 6f 72 20 74 68 65 79 20 6d 61 79 20 62 65 20 61   ┆to the process, or they may be a┆
0x020e0…02100        6c 6c 6f 63 61 74 65 64 20 61 73 20 a1 73 68 61 72 65 64 e1 2c 20 0a 69 6d 70 6c 79 69 6e 67 20   ┆llocated as  shared ,  implying ┆
0x02100…02120        74 68 61 74 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 64 61 74 61 20 6d 61 79 20 62 65 20 73   ┆that access to the data may be s┆
0x02120…02140        68 61 72 65 64 20 61 6d 6f 6e 67 20 73 65 76 65 72 61 6c 20 0a 70 72 6f 63 65 73 73 65 73 2c 20   ┆hared among several  processes, ┆
0x02140…02160        61 73 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 2e 0d 0a 0d 0a 54 68 65 20 68 61 6e 64 6c   ┆as described above.    The handl┆
0x02160…02180        69 6e 67 20 6f 66 20 a1 76 61 72 69 61 62 6c 65 73 e1 20 69 73 20 62 61 73 65 64 20 6f 6e 20 74   ┆ing of  variables  is based on t┆
0x02180…021a0        68 65 20 63 6f 6e 63 65 70 74 73 20 6f 66 20 0a 6f 62 6a 65 63 74 73 20 61 6e 64 20 74 79 70 65   ┆he concepts of  objects and type┆
0x021a0…021c0        73 20 77 68 69 63 68 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 63 68 61 70 74 65 72   ┆s which are described in chapter┆
0x021c0…021e0        20 33 2e 20 41 20 0a 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 20 6d 61 79 20 62 65 20 64   ┆ 3. A  private variable may be d┆
0x021e0…02200        65 63 6c 61 72 65 64 2c 20 69 6e 20 77 68 69 63 68 20 63 68 61 73 65 20 61 6c 6c 6f 63 61 74 69   ┆eclared, in which chase allocati┆
0x02200…02220 (17,)  6f 6e 20 0a 61 6e 64 20 64 65 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f 72 79 20 66   ┆on  and deallocation of memory f┆
0x02220…02240        6f 72 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 0a 61 75   ┆or the variable is performed  au┆
0x02240…02260        74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20 61 20 a1 73 74 61 63 6b e1 20 61 63 63 6f 72 64 69   ┆tomatically in a  stack  accordi┆
0x02260…02280        6e 67 20 74 6f 20 74 68 65 20 77 65 6c 6c 2d 6b 6e 6f 77 6e 20 0a 64 69 73 63 69 70 6c 69 6e 65   ┆ng to the well-known  discipline┆
0x02280…022a0        20 66 6f 72 20 62 6c 6f 63 6b 20 73 74 72 75 63 74 75 72 65 64 20 6c 61 6e 67 75 61 67 65 73 2e   ┆ for block structured languages.┆
0x022a0…022c0        20 41 20 64 65 63 6c 61 72 65 64 20 0a 8c 83 e0 0a 76 61 72 69 61 62 6c 65 20 69 73 20 61 63 63   ┆ A declared      variable is acc┆
0x022c0…022e0        65 73 73 65 64 20 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 6d 65 2e 20 41 20 70 72 69 76 61 74   ┆essed directly by name. A privat┆
0x022e0…02300        65 20 76 61 72 69 61 62 6c 65 20 0a 6d 61 79 20 61 6c 73 6f 20 62 65 20 61 6c 6c 6f 63 61 74 65   ┆e variable  may also be allocate┆
0x02300…02320        64 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 69 6e 20 74 68 65 20 73 6f 2d 63 61 6c 6c 65 64 20 a1   ┆d dynamically in the so-called  ┆
0x02320…02340        68 65 61 70 e1 20 62 79 20 0a 61 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 70   ┆heap  by  an invocation of the p┆
0x02340…02360        72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 20 6e 65 77 2e 20 49 6e 20 74 68 69 73 20 63   ┆redefined routine new. In this c┆
0x02360…02380        61 73 65 20 0a 74 68 65 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 63 63 65 73 73   ┆ase  the variable must be access┆
0x02380…023a0        65 64 20 74 68 72 6f 75 67 68 20 61 20 70 6f 69 6e 74 65 72 2e 0d 0a 0d 0a 45 61 63 68 20 70 72   ┆ed through a pointer.    Each pr┆
0x023a0…023c0        6f 63 65 73 73 20 68 61 73 20 69 74 73 20 6f 77 6e 20 73 74 61 63 6b 20 61 6e 64 20 68 65 61 70   ┆ocess has its own stack and heap┆
0x023c0…023e0        2c 20 77 68 69 63 68 20 61 72 65 20 74 68 75 73 20 0a 77 65 6c 6c 2d 73 75 69 74 65 64 20 66 6f   ┆, which are thus  well-suited fo┆
0x023e0…02400        72 20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 73 2e 20 48 6f 77 65 76 65 72 2c 20 61 20   ┆r private variables. However, a ┆
0x02400…02420 (18,)  76 61 72 69 61 62 6c 65 20 69 6e 20 0a 74 68 65 20 73 74 61 63 6b 20 6d 61 79 20 62 65 20 64 65   ┆variable in  the stack may be de┆
0x02420…02440        63 6c 61 72 65 64 20 61 73 20 73 68 61 72 65 64 2c 20 69 6d 70 6c 79 69 6e 67 20 74 68 61 74 20   ┆clared as shared, implying that ┆
0x02440…02460        69 74 20 63 61 6e 20 0a 6f 6e 6c 79 20 62 65 20 61 63 63 65 73 73 65 64 20 69 6e 20 61 20 73 6f   ┆it can  only be accessed in a so┆
0x02460…02480        2d 63 61 6c 6c 65 64 20 a1 72 65 67 69 6f 6e e1 2e 20 41 20 73 68 61 72 65 64 20 76 61 72 69 61   ┆-called  region . A shared varia┆
0x02480…024a0        62 6c 65 20 0a 63 61 6e 20 62 65 20 6d 61 64 65 20 61 63 63 65 73 73 69 62 6c 65 20 74 6f 20 61   ┆ble  can be made accessible to a┆
0x024a0…024c0        20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 20 61 73 20 61 20 70 72 6f 63 65 73 73 20 0a 70 61 72   ┆ child process as a process  par┆
0x024c0…024e0        61 6d 65 74 65 72 2e 0d 0a 0d 0a 41 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 61 69 64 20 74 6f   ┆ameter.    A variable is said to┆
0x024e0…02500        20 62 65 20 a1 6f 77 6e 65 64 e1 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 69 6e 20 77 68   ┆ be  owned  by the process in wh┆
0x02500…02520        6f 73 65 20 73 74 61 63 6b 20 0a 6f 72 20 68 65 61 70 20 69 74 20 69 73 20 61 6c 6c 6f 63 61 74   ┆ose stack  or heap it is allocat┆
0x02520…02540        65 64 2e 20 41 20 76 61 72 69 61 62 6c 65 20 6d 61 79 20 62 65 63 6f 6d 65 20 6b 6e 6f 77 6e 20   ┆ed. A variable may become known ┆
0x02540…02560        74 6f 20 0a 70 72 6f 63 65 73 73 65 73 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6f 77 6e   ┆to  processes other than the own┆
0x02560…02580        65 72 20 62 79 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 61 73 20 61 20 70 72 6f 63 65 73 73 20   ┆er by being passed as a process ┆
0x02580…025a0        0a 70 61 72 61 6d 65 74 65 72 2e 0d 0a 0d 0a 42 75 66 66 65 72 73 20 61 72 65 20 61 6c 6c 6f 63   ┆ parameter.    Buffers are alloc┆
0x025a0…025c0        61 74 65 64 20 6e 65 69 74 68 65 72 20 69 6e 20 74 68 65 20 73 74 61 63 6b 20 6e 6f 72 20 69 6e   ┆ated neither in the stack nor in┆
0x025c0…025e0        20 74 68 65 20 68 65 61 70 20 0a 6f 66 20 61 20 70 72 6f 63 65 73 73 2c 20 62 75 74 20 73 65 70   ┆ the heap  of a process, but sep┆
0x025e0…02600        61 72 61 74 65 20 66 72 6f 6d 20 62 6f 74 68 20 6f 66 20 74 68 65 73 65 2e 20 42 75 66 66 65 72   ┆arate from both of these. Buffer┆
0x02600…02620 (19,)  73 20 61 72 65 20 0a 6f 72 67 61 6e 69 7a 65 64 20 69 6e 20 a1 70 6f 6f 6c 73 e1 2e 20 61 20 70   ┆s are  organized in  pools . a p┆
0x02620…02640        6f 6f 6c 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 62 75 66 66   ┆ool may contain a number of buff┆
0x02640…02660        65 72 73 20 0a 6f 66 20 65 71 75 61 6c 20 73 69 7a 65 2e 0d 0a 0d 0a 41 20 62 75 66 66 65 72 20   ┆ers  of equal size.    A buffer ┆
0x02660…02680        69 73 20 6e 6f 74 20 69 6e 20 69 74 73 65 6c 66 20 61 20 76 61 72 69 61 62 6c 65 2c 20 62 75 74   ┆is not in itself a variable, but┆
0x02680…026a0        20 6c 69 6b 65 20 61 6e 20 6f 62 6a 65 63 74 20 69 74 20 0a 6f 63 63 75 70 69 65 73 20 61 20 6e   ┆ like an object it  occupies a n┆
0x026a0…026c0        75 6d 62 65 72 20 6f 66 20 63 6f 6e 73 65 63 75 74 69 76 65 20 62 79 74 65 73 20 6f 66 20 6d 65   ┆umber of consecutive bytes of me┆
0x026c0…026e0        6d 6f 72 79 2c 20 61 6e 64 20 61 20 0a 62 75 66 66 65 72 20 6d 61 79 20 62 65 20 74 72 65 61 74   ┆mory, and a  buffer may be treat┆
0x026e0…02700        65 64 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 62 79 20 73 75 70 65 72 69 6d 70 6f 73 69 6e   ┆ed as a variable by superimposin┆
0x02700…02720        67 20 61 20 74 79 70 65 20 0a 6f 6e 74 6f 20 69 74 20 69 6e 20 61 20 6c 6f 63 6b 20 73 74 61 74   ┆g a type  onto it in a lock stat┆
0x02720…02740        65 6d 65 6e 74 2e 0d 0a 0d 0a 42 75 66 66 65 72 73 20 61 72 65 20 61 63 63 65 73 73 65 64 20 74   ┆ement.    Buffers are accessed t┆
0x02740…02760        68 72 6f 75 67 68 20 76 61 72 69 61 62 6c 65 73 20 6f 66 20 74 68 65 20 70 72 65 64 65 66 69 6e   ┆hrough variables of the predefin┆
0x02760…02780        65 64 20 0a 74 79 70 65 20 72 65 66 65 72 65 6e 63 65 2e 20 41 20 6e 75 6d 62 65 72 20 6f 66 20   ┆ed  type reference. A number of ┆
0x02780…027a0        6f 70 65 72 61 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 62 75 66 66 65 72 73 20 61 72 65   ┆operations involving buffers are┆
0x027a0…027c0        20 0a 61 76 61 69 6c 61 62 6c 65 20 61 73 20 70 72 65 64 66 69 6e 65 64 20 72 6f 75 74 69 6e 65   ┆  available as predfined routine┆
0x027c0…027e0        73 20 74 61 6b 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20 61 73 20 0a 70 61 72 61 6d 65 74 65   ┆s taking references as  paramete┆
0x027e0…02800        72 73 2e 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65   ┆rs. In particular it is possible┆
0x02800…02820 (20,)  20 74 6f 20 62 75 69 6c 64 20 a1 62 75 66 66 65 72 20 0a 19 80 80 84 73 74 61 63 6b 73 e1 20 28   ┆ to build  buffer      stacks  (┆
0x02820…02840        6e 6f 74 20 74 6f 20 62 65 20 63 6f 6e 66 75 73 65 64 20 77 69 74 68 20 70 72 6f 63 65 73 73 20   ┆not to be confused with process ┆
0x02840…02860        73 74 61 63 6b 73 29 20 61 6e 64 20 a1 62 75 66 66 65 72 20 0a 19 80 80 84 63 68 61 69 6e 73 e1   ┆stacks) and  buffer      chains ┆
0x02860…02880        2e 0d 0a 0d 0a 41 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 62 75 66 66 65 72 20 69 73   ┆.    Associated with a buffer is┆
0x02880…028a0        20 61 20 73 65 74 20 6f 66 20 62 75 66 66 65 72 20 a1 61 74 74 72 69 62 75 74 65 73 e1 2c 20 6f   ┆ a set of buffer  attributes , o┆
0x028a0…028c0        6e 65 20 0a 6f 66 20 77 68 69 63 68 20 69 73 20 74 68 65 20 62 75 66 66 65 72 20 73 69 7a 65 2c   ┆ne  of which is the buffer size,┆
0x028c0…028e0        20 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 74 20 0a 6f 63   ┆ i.e. the number of bytes it  oc┆
0x028e0…02900        63 75 70 69 65 73 2e 20 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20 73 6f 6d 65 20 6f 66 20 74 68   ┆cupies. The values of some of th┆
0x02900…02920        65 20 62 75 66 66 65 72 20 61 74 74 72 69 62 75 74 65 73 20 61 72 65 20 0a 61 63 63 65 73 73 69   ┆e buffer attributes are  accessi┆
0x02920…02940        62 6c 65 2c 20 61 6e 64 20 73 6f 6d 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6d 6f 64 69 66 69   ┆ble, and some may also be modifi┆
0x02940…02960        65 64 2e 20 41 20 62 75 66 66 65 72 20 6f 66 20 73 69 7a 65 20 0a 8c 83 c8 0a 30 2c 20 63 61 6c   ┆ed. A buffer of size      0, cal┆
0x02960…02980        6c 65 64 20 61 6e 20 a1 65 6d 70 74 79 20 62 75 66 66 65 72 e1 2c 20 6d 61 79 20 62 65 20 75 73   ┆led an  empty buffer , may be us┆
0x02980…029a0        65 64 20 6d 65 61 6e 69 6e 67 66 75 6c 6c 79 20 69 6e 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 77   ┆ed meaningfully in  connection w┆
0x029a0…029c0        69 74 68 20 62 75 66 66 65 72 20 73 74 61 63 6b 73 2c 20 61 6e 64 2f 6f 72 20 66 6f 72 20 73 69   ┆ith buffer stacks, and/or for si┆
0x029c0…029e0        6d 70 6c 65 20 0a 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2e 20   ┆mple  synchronization purposes. ┆
0x029e0…02a00        41 6e 20 65 6d 70 74 79 20 62 75 66 66 65 72 20 68 61 73 20 61 20 66 75 6c 6c 20 73 65 74 20 6f   ┆An empty buffer has a full set o┆
0x02a00…02a20 (21,)  66 20 0a 62 75 66 66 65 72 20 61 74 74 72 69 62 75 74 65 73 2e 20 46 69 67 2e 20 31 20 67 69 76   ┆f  buffer attributes. Fig. 1 giv┆
0x02a20…02a40        65 73 20 61 20 73 6b 65 74 63 68 20 6f 66 20 68 6f 77 20 6d 65 6d 6f 72 79 20 6d 69 67 68 74 20   ┆es a sketch of how memory might ┆
0x02a40…02a60        0a 62 65 20 6f 72 67 61 6e 69 7a 65 64 20 69 6e 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   ┆ be organized in an implementati┆
0x02a60…02a80        6f 6e 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 2e 20 0a 43 6c 65 61 72 6c 79   ┆on of Real-Time Pascal.  Clearly┆
0x02a80…02aa0        20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 20 73 75 70 70 6f 72 74 69 6e 67 20 73 65 67 6d   ┆ an architecture supporting segm┆
0x02aa0…02ac0        65 6e 74 61 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 0a 68 65 6c 70 66 75 6c 2e 0d 0a 0d 0a 0d 0a   ┆entation will be  helpful.      ┆
0x02ac0…02ae0        b0 a1 31 2e 32 2e 34 20 44 69 73 74 72 69 62 75 74 65 64 20 53 79 73 74 65 6d 73 0d 0a 0d 0a 41   ┆  1.2.4 Distributed Systems    A┆
0x02ae0…02b00        20 70 72 69 6e 63 69 70 61 6c 20 61 72 65 61 20 6f 66 20 69 6e 74 65 6e 64 65 64 20 75 73 65 20   ┆ principal area of intended use ┆
0x02b00…02b20        6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 73 20 74 68 65 20 0a 63 6f 6e 73   ┆of Real-Time Pascal is the  cons┆
0x02b20…02b40        74 72 75 63 74 69 6f 6e 20 6f 66 20 64 69 73 74 72 69 62 75 74 65 64 20 73 79 73 74 65 6d 73 20   ┆truction of distributed systems ┆
0x02b40…02b60        61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 67 65 6e 65 72 61 6c 20 0a 61 72 63 68 69 74   ┆according to the general  archit┆
0x02b60…02b80        65 63 74 75 72 61 6c 20 70 72 69 6e 63 69 70 6c 65 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20   ┆ectural principles described in ┆
0x02b80…02ba0        28 34 29 2e 0d 0a 0d 0a 41 20 72 65 73 69 64 65 6e 74 20 6d 6f 64 75 6c 65 2c 20 69 6e 20 74 68   ┆(4).    A resident module, in th┆
0x02ba0…02bc0        65 20 73 65 6e 73 65 20 6f 66 20 28 34 29 2c 20 6d 61 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61   ┆e sense of (4), may consist of a┆
0x02bc0…02be0        20 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6f 70 65 72 61 74 69 6e 67 20 52 65 61 6c 2d 54 69 6d   ┆  number of cooperating Real-Tim┆
0x02be0…02c00        65 20 50 61 73 63 61 6c 20 70 72 6f 63 65 73 73 65 73 2e 20 0a 49 6e 74 65 72 63 6f 6d 6d 75 6e   ┆e Pascal processes.  Intercommun┆
0x02c00…02c20 (22,)  69 63 61 74 69 6f 6e 20 61 74 20 74 68 65 20 73 6f 2d 63 61 6c 6c 65 64 20 6c 65 76 65 6c 20 69   ┆ication at the so-called level i┆
0x02c20…02c40        2c 20 6d 61 79 20 74 68 65 6e 20 74 61 6b 65 20 0a 70 6c 61 63 65 20 75 73 69 6e 67 20 74 68 65   ┆, may then take  place using the┆
0x02c40…02c60        20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 66 61 63 69 6c 69 74 69 65 73 20 66 6f 72   ┆ Real-Time Pascal facilities for┆
0x02c60…02c80        20 69 6e 74 65 72 2d 0a 70 72 6f 63 65 73 73 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 2e 0d 0a   ┆ inter- process communication.  ┆
0x02c80…02c82        0d 0a                                                                                             ┆  ┆
0x02c82…02c85        FormFeed {
0x02c82…02c85          0c 81 fc                                                                                          ┆   ┆
0x02c82…02c85        }
0x02c85…02ca0        0a 06 a1 20 20 20 20 20 20 20 20 20 20 e1 20 05 a1 62 75 66 66 65 72 73 20 20 20                  ┆                 buffers   ┆
0x02ca0…02cc0        0d 0a 20 20 20 0a 0d 0a a1 20 20 20 20 20 20 20 20 20 20 e1 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02cc0…02ce0        20 20 20 a1 20 20 20 20 20 20 20 20 20 20 e1 20 73 74 61 63 6b 0d 0a 09 05 a1 20 20 20 20 20 20   ┆                stack           ┆
0x02ce0…02d00        20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1   ┆                                ┆
0x02d00…02d20        20 20 20 20 20 20 20 20 20 20 e1 20 68 65 61 70 0d 0a a1 20 20 20 20 20 20 20 20 20 20 e1 20 20   ┆            heap                ┆
0x02d20…02d40        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02d40…02d60        20 20 20 20 20 20 a1 05 0d 0a 63 6f 64 65 20 6f 66 20 70 72 6f 67 72 61 6d 20 41 20 20 20 20 20   ┆          code of program A     ┆
0x02d60…02d80        20 20 20 a1 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02d80…02da0        20 20 20 20 20 20 20 20 20 73 74 61 63 6b 20 61 6e 64 20 68 65 61 70 0d 0a 20 20 20 20 20 20 20   ┆         stack and heap         ┆
0x02da0…02dc0        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 70 72 6f 63 65 73 73 20 41 20 20   ┆                  of process A  ┆
0x02dc0…02de0        20 20 20 20 20 20 20 20 20 20 20 a1 20 20 20 20 20 20 20 20 20 20 0d 0a 0d 0a 0d 0a 0d 0a 09 09   ┆                                ┆
0x02de0…02e00        09 20 a1 20 20 20 20 20 20 20 20 20 20 e1 05 a1 20 20 20 20 20 20 20 20 20 20 0d 0a a1 20 20 20   ┆                                ┆
0x02e00…02e20 (23,)  20 20 20 20 20 20 e1 09 09 20 a1 20 20 20 20 20 20 20 20 20 20 e1 0d 0a a1 0d 0a 20 20 20 20 20   ┆                                ┆
0x02e20…02e40        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 20 20 20 20 20 20 20 20 20 20 e1   ┆                                ┆
0x02e40…02e60        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 20 05 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02e60…02e80        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02e80…02ea0        20 20 20 20 20 20 a1 05 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆                                ┆
0x02ea0…02ec0        20 20 20 a1 20 20 20 20 20 20 20 20 20 20 0d 0a a1 20 20 20 20 20 20 20 20 20 e1 20 20 20 20 20   ┆                                ┆
0x02ec0…02ee0        20 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 20 61 6e 64 20 68 65 61 70 0d 0a 63 6f 64 65 20   ┆           stack and heap  code ┆
0x02ee0…02f00        6f 66 20 70 72 6f 67 72 61 6d 20 42 20 20 20 20 20 20 20 20 6f 66 20 70 72 6f 63 65 73 73 20 42   ┆of program B        of process B┆
0x02f00…02f20        82 31 20 20 20 20 20 20 20 20 20 20 20 20 81 a1 20 05 0d 0a 0d 0a 0d 0a 06 a1 20 20 20 20 20 20   ┆ 1                              ┆
0x02f20…02f40        20 20 20 0d 0a 0d 0a 06 a1 20 20 20 20 20 20 20 20 20 0d 0a 0d 0a 06 a1 20 20 20 20 20 20 20 20   ┆                                ┆
0x02f40…02f60        20 0d 0a 0d 0a 06 a1 20 20 20 20 20 20 20 20 20 0d 0a 09 09 09 20 20 73 74 61 63 6b 20 61 6e 64   ┆                       stack and┆
0x02f60…02f80        20 68 65 61 70 0d 0a 09 09 09 20 20 6f 66 20 70 72 6f 63 65 73 73 20 42 82 32 0d 0a 0d 0a 46 69   ┆ heap       of process B 2    Fi┆
0x02f80…02fa0        67 75 72 65 20 31 3a 20 45 78 61 6d 70 6c 65 20 6f 66 20 6d 65 6d 6f 72 79 20 6f 72 67 61 6e 69   ┆gure 1: Example of memory organi┆
0x02fa0…02fa9        7a 61 74 69 6f 6e 2e 0d 0a                                                                        ┆zation.  ┆
0x02fa9…02fac        FormFeed {
0x02fa9…02fac          0c 83 98                                                                                          ┆   ┆
0x02fa9…02fac        }
0x02fac…02fc0        0a 54 6f 20 73 75 70 70 6f 72 74 20 69 6e 74 65 72 2d 6d 6f                                       ┆ To support inter-mo┆
0x02fc0…02fe0        64 75 6c 65 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 28 61 74 20 74 68 65 20 73 6f 2d 63 61   ┆dule communication (at the so-ca┆
0x02fe0…03000        6c 6c 65 64 20 0a 6c 65 76 65 6c 20 64 29 20 74 68 65 20 70 72 65 64 69 6e 66 65 64 20 74 79 70   ┆lled  level d) the predinfed typ┆
0x03000…03020 (24,)  65 20 a1 70 6f 72 74 e1 2c 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 63 65   ┆e  port , representing the conce┆
0x03020…03040        70 74 20 0a 6f 66 20 70 6f 72 74 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 28 34 29 20   ┆pt  of port as described in (4) ┆
0x03040…03060        68 61 73 20 62 65 65 6e 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 0a 6c 61 6e 67 75 61   ┆has been included in the  langua┆
0x03060…03080        67 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 73 65 74 20 6f 66 20 70 72 65 64 65 66 69 6e 65   ┆ge along with a set of predefine┆
0x03080…030a0        64 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 70 65 72 66 6f 72 6d 20 0a 69 6e 74 65 72 2d 6d 6f 64   ┆d routines to perform  inter-mod┆
0x030a0…030c0        75 6c 65 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 28 49 4d 43 29 20 66 75 6e 63 74 69 6f 6e   ┆ule communication (IMC) function┆
0x030c0…030e0        73 20 28 35 29 2e 0d 0a 0d 0a 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 61 79 20 65 78   ┆s (5).    Implementations may ex┆
0x030e0…03100        69 73 74 20 77 68 69 63 68 20 73 75 70 70 6f 72 74 20 6f 6e 6c 79 20 61 20 6c 69 6d 69 74 65 64   ┆ist which support only a limited┆
0x03100…03120        20 73 65 74 20 0a 6f 66 20 49 4d 43 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 6e 6f 6e 65 20 61   ┆ set  of IMC functions or none a┆
0x03120…03140        74 20 61 6c 6c 2e 0d 0a 0d 0a 0d 0a b0 a1 31 2e 32 2e 35 20 46 61 75 6c 74 73 0d 0a 0d 0a 54 68   ┆t all.        1.2.5 Faults    Th┆
0x03140…03160        65 20 74 65 72 6d 20 a1 66 61 75 6c 74 e1 20 69 73 20 75 73 65 64 20 74 68 72 6f 75 67 68 6f 75   ┆e term  fault  is used throughou┆
0x03160…03180        74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 70 74 65 72 73 20 74 6f 20 0a 72 65 66   ┆t the following chapters to  ref┆
0x03180…031a0        65 72 20 74 6f 20 76 69 6f 6c 61 74 69 6f 6e 73 20 6f 66 20 73 65 6d 61 6e 74 69 63 20 72 75 6c   ┆er to violations of semantic rul┆
0x031a0…031c0        65 73 20 77 68 69 63 68 20 63 61 6e 6e 6f 74 20 62 65 20 0a 63 6f 6d 70 6c 65 74 65 6c 79 20 65   ┆es which cannot be  completely e┆
0x031c0…031e0        6e 66 6f 72 63 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 69 2e 65 2e 20 76 69   ┆nforced at compile-time, i.e. vi┆
0x031e0…03200        6f 6c 61 74 69 6f 6e 73 20 77 68 69 63 68 20 0a 63 61 6e 20 69 6e 20 73 6f 6d 65 20 63 61 73 65   ┆olations which  can in some case┆
0x03200…03220 (25,)  73 20 6f 6e 6c 79 20 62 65 20 64 65 74 65 63 74 65 64 20 77 68 65 6e 20 61 20 70 72 6f 67 72 61   ┆s only be detected when a progra┆
0x03220…03240        6d 20 69 73 20 0a 65 78 65 63 75 74 65 64 2e 0d 0a 0d 0a 54 68 65 20 6c 61 6e 67 75 61 67 65 20   ┆m is  executed.    The language ┆
0x03240…03260        61 6c 6c 6f 77 73 20 70 61 72 74 6c 79 20 70 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64   ┆allows partly programmer-defined┆
0x03260…03280        20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 0a 66 61 75 6c 74 73 2e 20 42 79 20 64 65 66 61 75 6c 74   ┆ handling of  faults. By default┆
0x03280…032a0        20 74 68 65 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 61 20 66 61 75 6c 74 20 77 69 6c 6c 20   ┆ the occurrence of a fault will ┆
0x032a0…032c0        63 61 75 73 65 20 74 68 65 20 0a 6f 75 74 70 75 74 20 6f 66 20 73 75 69 74 61 62 6c 65 20 64 69   ┆cause the  output of suitable di┆
0x032c0…032e0        61 67 6e 6f 73 74 69 63 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 31 2e 32   ┆agnostic information.        1.2┆
0x032e0…03300        2e 36 20 45 78 74 65 6e 73 69 62 69 6c 69 74 79 0d 0a 0d 0a 54 68 65 20 67 65 6e 65 72 61 6c 20   ┆.6 Extensibility    The general ┆
0x03300…03320        72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74   ┆representation of built-in funct┆
0x03320…03340        69 6f 6e 73 20 6f 66 20 74 68 65 20 0a 6c 61 6e 67 75 61 67 65 20 69 73 20 74 68 61 74 20 6f 66   ┆ions of the  language is that of┆
0x03340…03360        20 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20   ┆ predefined routines working on ┆
0x03360…03380        0a 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 70 72 65 64 65 66 69 6e 65 64 2c 20 61 6e 64 20 6f   ┆ parameters of predefined, and o┆
0x03380…033a0        66 74 65 6e 20 73 68 69 65 6c 64 65 64 2c 20 74 79 70 65 73 2e 0d 0a 0d 0a 57 68 65 6e 20 61 20   ┆ften shielded, types.    When a ┆
0x033a0…033c0        64 65 73 69 72 65 20 66 6f 72 20 65 78 74 65 6e 73 69 6f 6e 73 20 74 6f 20 74 68 65 20 64 65 66   ┆desire for extensions to the def┆
0x033c0…033e0        69 6e 65 64 20 6c 61 6e 67 75 61 67 65 20 61 72 69 73 65 73 2c 20 0a 69 74 20 77 69 6c 6c 20 62   ┆ined language arises,  it will b┆
0x033e0…03400        65 20 62 6f 74 68 20 6e 61 74 75 72 61 6c 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 61 6c 73 6f 20   ┆e both natural and usually also ┆
0x03400…03420 (26,)  65 61 73 79 20 74 6f 20 64 65 66 69 6e 65 20 73 75 63 68 20 0a 65 78 74 65 6e 73 69 6f 6e 73 20   ┆easy to define such  extensions ┆
0x03420…03440        69 6e 20 74 65 72 6d 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 79 70 65 73 20 61 6e   ┆in terms of one or more types an┆
0x03440…03460        64 20 72 6f 75 74 69 6e 65 73 20 0a 6f 70 65 72 61 74 69 6e 67 20 6f 6e 20 70 61 72 61 6d 65 74   ┆d routines  operating on paramet┆
0x03460…03480        65 72 73 20 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c   ┆ers of these types. For example,┆
0x03480…034a0        20 61 20 0a 67 65 6e 65 72 61 6c 20 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 70 75 74 2f 6f 75 74   ┆ a  general high-level input/out┆
0x034a0…034c0        70 75 74 20 73 79 73 74 65 6d 20 6d 61 79 20 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e   ┆put system may be implemented in┆
0x034c0…034e0        20 0a 74 68 69 73 20 77 61 79 2e 0d 0a 0d 0a 54 68 65 20 64 69 73 74 69 6e 63 74 69 6f 6e 20 62   ┆  this way.    The distinction b┆
0x034e0…03500        65 74 77 65 65 6e 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20 73 75   ┆etween built-in functions and su┆
0x03500…03520        63 68 20 0a 65 78 74 65 6e 73 69 6f 6e 73 20 77 69 6c 6c 20 6e 6f 74 20 61 70 70 65 61 72 20 76   ┆ch  extensions will not appear v┆
0x03520…03540        65 72 79 20 73 68 61 72 70 20 61 74 20 61 6c 6c 2c 20 6e 6f 72 20 69 73 20 69 74 20 0a 8c 83 c8   ┆ery sharp at all, nor is it     ┆
0x03540…03560        0a 69 6e 74 65 6e 64 65 64 20 74 6f 2e 20 54 68 65 20 6f 6e 6c 79 20 6d 69 73 73 69 6e 67 20 66   ┆ intended to. The only missing f┆
0x03560…03580        65 61 74 75 72 65 20 77 69 6c 6c 20 62 65 20 63 6f 6d 70 69 6c 65 72 20 0a 73 75 70 70 6f 72 74   ┆eature will be compiler  support┆
0x03580…035a0        65 64 20 70 72 6f 74 65 63 74 69 6f 6e 20 6f 66 20 74 79 70 65 73 20 6f 6e 65 20 6d 69 67 68 74   ┆ed protection of types one might┆
0x035a0…035c0        20 77 69 73 68 20 74 6f 20 73 68 69 65 6c 64 2e 20 0a 53 75 70 70 6f 72 74 69 6e 67 20 61 20 6c   ┆ wish to shield.  Supporting a l┆
0x035c0…035e0        61 72 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 68 69 65 6c 64 65 64 20 74 79 70 65 73 2c 20   ┆arger number of shielded types, ┆
0x035e0…03600        68 6f 77 65 76 65 72 2c 20 0a 72 65 71 75 69 72 65 73 20 76 65 72 79 20 6c 69 74 74 6c 65 20 69   ┆however,  requires very little i┆
0x03600…03620 (27,)  6e 20 74 68 65 20 77 61 79 20 6f 66 20 63 6f 6d 70 69 6c 65 72 20 6d 6f 64 69 66 69 63 61 74 69   ┆n the way of compiler modificati┆
0x03620…03640        6f 6e 2c 20 0a 61 6e 64 20 74 68 75 73 20 61 20 66 75 74 75 72 65 20 65 76 6f 6c 75 74 69 6f 6e   ┆on,  and thus a future evolution┆
0x03640…03660        20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2c 20 65 2e 67 2e 20 74 6f 77 61 72 64 20 0a 73   ┆ of the language, e.g. toward  s┆
0x03660…03680        75 70 70 6f 72 74 69 6e 67 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 69 6e   ┆upporting application programmin┆
0x03680…036a0        67 2c 20 69 73 20 61 74 20 6c 65 61 73 74 20 66 65 61 73 69 62 6c 65 2e 0d 0a 0d 0a 0d 0a b0 a1   ┆g, is at least feasible.        ┆
0x036a0…036c0        31 2e 33 20 53 79 6e 74 61 78 20 44 69 61 67 72 61 6d 73 0d 0a 0d 0a 45 61 63 68 20 a1 73 79 6e   ┆1.3 Syntax Diagrams    Each  syn┆
0x036c0…036e0        74 61 78 20 63 61 74 65 67 6f 72 79 e1 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 78 74 2d 66 72 65   ┆tax category  of the context-fre┆
0x036e0…03700        65 20 73 79 6e 74 61 78 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 0a 50 61 73 63 61 6c 20 69 73   ┆e syntax of Real-Time  Pascal is┆
0x03700…03720        20 64 65 66 69 6e 65 64 20 62 79 20 61 20 a1 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d e1 2e 20   ┆ defined by a  syntax diagram . ┆
0x03720…03740        41 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 0a 63 6f 6e 73 69 73 74 73 20 6f 66 3a 0d 0a   ┆A syntax diagram  consists of:  ┆
0x03740…03760        2d 20 84 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 65 66 69 6e 65 64 20 73 79 6e 74 61   ┆-  the name of the defined synta┆
0x03760…03780        78 20 63 61 74 65 67 6f 72 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 0a 19 82 80 80 63 6f   ┆x category followed by a      co┆
0x03780…037a0        6c 6f 6e 2c 0d 0a 2d 20 61 72 72 6f 77 73 2c 20 77 68 69 63 68 20 6d 61 79 20 69 6e 63 6c 75 64   ┆lon,  - arrows, which may includ┆
0x037a0…037c0        65 20 62 72 61 6e 63 68 69 6e 67 2c 0d 0a 2d 20 84 69 6e 64 69 63 61 74 69 6f 6e 73 20 6f 66 20   ┆e branching,  -  indications of ┆
0x037c0…037e0        6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 73 79 6e 74 61 78 20 63 61 74 65 67 6f 72 69 65 73   ┆occurrences of syntax categories┆
0x037e0…03800        2c 20 69 6e 20 74 68 65 20 0a 19 82 80 80 66 6f 72 6d 20 6f 66 20 72 65 63 74 61 6e 67 75 6c 61   ┆, in the      form of rectangula┆
0x03800…03820 (28,)  72 20 62 6f 73 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 61 74 65 67 6f 72 79 20   ┆r boses containing the category ┆
0x03820…03840        6e 61 6d 65 73 2c 0d 0a 2d 20 6c 61 6e 67 75 61 67 65 20 73 79 6d 62 6f 6c 73 20 65 6e 63 6c 6f   ┆names,  - language symbols enclo┆
0x03840…03860        73 65 64 20 69 6e 20 72 6f 75 6e 64 65 64 20 62 6f 78 65 73 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c   ┆sed in rounded boxes.     Exampl┆
0x03860…03880        65 3a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆e:                              ┆
0x03880…038a0        0d 0a 41 20 73 6f 75 72 63 65 20 74 65 78 74 20 6f 72 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20   ┆  A source text or substring of ┆
0x038a0…038c0        61 20 73 6f 75 72 63 65 20 74 65 78 74 20 69 73 20 0a 61 73 79 6e 74 61 63 74 69 63 61 6c 6c 79   ┆a source text is  asyntactically┆
0x038c0…038e0        20 63 6f 72 72 65 63 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 61 20 73 79 6e 74 61 78 20   ┆ correct occurrence of a syntax ┆
0x038e0…03900        63 61 74 65 67 6f 72 79 20 69 66 20 69 74 20 0a 8c 83 c8 0a 63 61 6e 20 62 65 20 6f 62 74 61 69   ┆category if it      can be obtai┆
0x03900…03920        6e 65 64 20 62 79 20 74 72 61 76 65 72 73 69 6e 67 20 74 68 65 20 64 69 61 67 72 61 6d 20 64 65   ┆ned by traversing the diagram de┆
0x03920…03940        66 69 6e 69 6e 67 20 74 68 61 74 20 0a 63 61 74 65 67 6f 72 79 2c 20 66 6f 6c 6c 6f 77 69 6e 67   ┆fining that  category, following┆
0x03940…03960        20 74 68 65 20 61 72 72 6f 77 73 2e 20 57 68 65 6e 20 61 6e 20 69 6e 64 69 63 61 74 69 6f 6e 20   ┆ the arrows. When an indication ┆
0x03960…03980        6f 66 20 61 6e 20 0a 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 61 20 73 79 6e 74 61 78 20 63 61   ┆of an  occurrence of a syntax ca┆
0x03980…039a0        74 65 67 6f 72 79 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 28 6d 75 73 74 20 62 65 20 0a   ┆tegory is encountered (must be  ┆
0x039a0…039c0        65 6e 74 65 72 65 64 20 74 68 72 6f 75 67 68 20 61 6e 20 61 72 72 6f 77 29 2c 20 74 68 65 20 74   ┆entered through an arrow), the t┆
0x039c0…039e0        72 61 76 65 72 73 61 6c 20 64 69 61 67 72 61 6d 69 73 20 74 68 65 20 0a 73 65 71 75 65 6e 63 65   ┆raversal diagramis the  sequence┆
0x039e0…03a00        20 6f 66 20 6c 65 78 69 63 61 6c 20 65 6c 65 6d 65 6e 74 73 20 77 68 69 63 68 20 68 61 76 65 20   ┆ of lexical elements which have ┆
0x03a00…03a20 (29,)  75 6c 74 69 6d 61 74 65 6c 79 20 62 65 65 6e 20 0a 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0d 0a 0d   ┆ultimately been  encountered.   ┆
0x03a20…03a40        0a 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 73 79 6e 74 61 78 20 63 61 74 65 67 6f 72 69 65 73 20   ┆ The names of syntax categories ┆
0x03a40…03a60        61 72 65 20 75 73 65 64 20 66 72 65 71 75 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 64 65 73 63   ┆are used frequently in the  desc┆
0x03a60…03a80        72 69 70 74 69 6f 6e 73 6f 66 20 74 68 65 20 73 65 6d 61 6e 74 69 63 73 20 6f 66 20 6c 61 6e 67   ┆riptionsof the semantics of lang┆
0x03a80…03aa0        75 61 67 65 20 63 6f 6e 73 72 75 63 74 73 20 74 6f 20 72 65 66 65 72 20 0a 74 6f 20 70 61 72 74   ┆uage consructs to refer  to part┆
0x03aa0…03ac0        69 63 75 6c 61 72 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 73 79 6e 74 61 78 20 63 61 74   ┆icular occurrences of syntax cat┆
0x03ac0…03ae0        65 67 6f 72 69 65 73 2e 20 54 6f 20 6d 61 6b 65 20 69 74 20 0a 63 6c 65 61 72 20 74 68 61 74 20   ┆egories. To make it  clear that ┆
0x03ae0…03b00        61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 77 6f 72 64 73 20 69 6e 20 74 68 65 20 74 65 78 74 20   ┆a sequence of words in the text ┆
0x03b00…03b20        69 73 20 69 6e 64 65 65 64 20 61 20 0a 72 65 66 65 72 65 6e 63 65 20 74 6f 20 73 75 63 68 20 61   ┆is indeed a  reference to such a┆
0x03b20…03b40        6e 20 6f 63 63 75 72 72 65 6e 63 65 20 69 74 20 6d 61 79 20 62 65 20 65 6e 63 6c 6f 73 65 64 20   ┆n occurrence it may be enclosed ┆
0x03b40…03b60        69 6e 20 73 69 6e 67 6c 65 20 0a 71 75 6f 74 65 73 2e 0d 0a 0d 0a 50 72 65 66 69 78 65 73 20 74   ┆in single  quotes.    Prefixes t┆
0x03b60…03b80        65 72 6d 69 6e 61 74 65 64 20 62 79 20 75 6e 64 65 72 73 63 6f 72 65 73 20 61 72 65 20 61 6c 73   ┆erminated by underscores are als┆
0x03b80…03ba0        6f 20 75 73 65 64 20 69 6e 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 6e 74 61 78 20 63 61 74 65 67   ┆o used in names of  syntax categ┆
0x03ba0…03bc0        6f 72 69 65 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 65 61 73 69 65 72 20 74 6f 20 72 65 66 65 72   ┆ories to make it easier to refer┆
0x03bc0…03be0        20 74 6f 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 0a 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20   ┆ to a particular  occurrence of ┆
0x03be0…03c00        61 20 73 79 6e 74 61 78 20 63 61 74 65 67 6f 72 79 2e 20 54 68 65 79 20 68 61 76 65 20 6e 6f 20   ┆a syntax category. They have no ┆
0x03c00…03c20 (30,)  73 69 67 6e 69 66 69 63 61 6e 63 65 20 0a 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 2d 66 72 65   ┆significance  in the context-fre┆
0x03c20…03c40        65 20 73 79 6e 74 61 78 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 27 62 6f 75 6e 64 2d 74 79 70   ┆e syntax. For example 'bound-typ┆
0x03c40…03c60        65 5f 6e 61 6d 65 37 20 0a 61 6e 64 20 27 70 61 72 61 6d 65 74 65 72 69 7a 65 64 2d 74 79 70 65   ┆e_name7  and 'parameterized-type┆
0x03c60…03c80        5f 6e 61 6d 65 27 20 61 72 65 20 73 79 6e 74 61 63 74 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c   ┆_name' are syntactically equival┆
0x03c80…03ca0        65 6e 74 20 0a 61 6e 64 20 62 6f 74 68 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 64 69 61   ┆ent  and both defined by the dia┆
0x03ca0…03cc0        67 72 61 6d 20 66 6f 72 20 27 6e 61 6d 65 27 2e 20 48 79 70 68 65 6e 73 20 61 6e 64 20 0a 73 70   ┆gram for 'name'. Hyphens and  sp┆
0x03cc0…03ce0        61 63 65 73 20 61 72 65 20 75 73 65 64 20 65 78 63 75 6c 69 73 76 65 6c 79 20 61 73 20 72 65 61   ┆aces are used exculisvely as rea┆
0x03ce0…03d00        64 69 6e 67 20 61 69 64 73 2e 0d 0a 0d 0a 41 20 70 72 65 66 69 78 20 77 68 69 63 68 20 6f 63 63   ┆ding aids.    A prefix which occ┆
0x03d00…03d20        75 72 73 20 69 6e 20 73 65 76 65 72 61 6c 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 6d   ┆urs in several syntax diagrams m┆
0x03d20…03d40        61 79 20 62 65 20 0a 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 20 61 6e 20 69 6e 64 69 63 61 74 69   ┆ay be  understood as an indicati┆
0x03d40…03d60        6f 6e 20 6f 66 20 61 20 63 6f 6e 74 65 78 74 2d 73 65 6e 73 69 74 69 76 65 20 73 79 6e 74 61 78   ┆on of a context-sensitive syntax┆
0x03d60…03d80        20 0a 72 75 6c 65 2e 20 53 75 63 68 20 72 75 6c 65 73 2c 20 68 6f 77 65 76 65 72 2c 20 61 72 65   ┆  rule. Such rules, however, are┆
0x03d80…03da0        20 61 6c 6c 20 65 78 70 6c 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 65 78 74 20 0a 64 65 73 63   ┆ all explained in the text  desc┆
0x03da0…03dc0        72 69 62 69 6e 67 20 74 68 65 20 73 65 6d 61 6e 74 69 63 73 20 6f 66 20 74 68 65 20 72 65 6c 65   ┆ribing the semantics of the rele┆
0x03dc0…03de0        76 61 6e 74 20 63 6f 6e 73 74 72 75 63 74 73 2e 0d 0a 0d 0a 41 20 63 6f 6d 70 6c 65 74 65 20 73   ┆vant constructs.    A complete s┆
0x03de0…03e00        65 74 20 6f 66 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 69 73 20 63 6f 6c 6c 65 63 74   ┆et of syntax diagrams is collect┆
0x03e00…03e20 (31,)  65 64 20 69 6e 20 61 70 70 65 6e 64 69 78 20 0a 42 2e 0d 0a 0d 0a 0d 0a b0 a1 31 2e 34 20 4f 72   ┆ed in appendix  B.        1.4 Or┆
0x03e20…03e40        67 61 6e 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4d 61 6e 75 61 6c 0d 0a 0d 0a 41 20 72   ┆ganization of this Manual    A r┆
0x03e40…03e60        69 67 6f 72 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 52 65 61 6c 2d 54   ┆igorous definition of the Real-T┆
0x03e60…03e80        69 6d 65 20 50 61 73 63 61 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 0a 6c 61 6e 67 75 61 67 65   ┆ime Pascal programming  language┆
0x03e80…03ea0        20 69 73 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 70 74   ┆ is given in the following chapt┆
0x03ea0…03ec0        65 72 73 2e 20 45 61 63 68 20 63 68 61 70 74 65 72 20 69 73 20 0a 64 69 76 69 64 65 64 20 69 6e   ┆ers. Each chapter is  divided in┆
0x03ec0…03ee0        74 6f 20 73 65 63 74 69 6f 6e 73 2c 20 65 61 63 68 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 61   ┆to sections, each dealing with a┆
0x03ee0…03f00        20 70 61 72 74 69 63 75 6c 61 72 20 61 73 70 65 63 74 20 0a 6f 66 20 74 68 65 20 6c 61 6e 67 75   ┆ particular aspect  of the langu┆
0x03f00…03f20        61 67 65 2e 20 54 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 20 73 65 63 74 69 6f 6e 20 61   ┆age. The contents of a section a┆
0x03f20…03f40        72 65 20 69 6e 20 67 65 6e 65 72 61 6c 20 61 73 20 0a 66 6f 6c 6c 6f 77 73 3a 0d 0a 0d 0a 8c 83   ┆re in general as  follows:      ┆
0x03f40…03f60        d4 0a 2d 20 69 6e 74 72 6f 64 75 63 74 6f 72 79 20 72 65 6d 61 72 6b 73 2c 0d 0a 2d 20 73 79 6e   ┆  - introductory remarks,  - syn┆
0x03f60…03f80        74 61 78 20 64 69 61 67 72 61 6d 73 20 28 73 6f 6d 65 20 73 65 63 74 69 6f 6e 73 20 63 6f 6e 74   ┆tax diagrams (some sections cont┆
0x03f80…03fa0        61 69 6e 20 6e 6f 20 64 69 61 67 72 61 6d 73 29 2c 0d 0a 2d 20 84 64 65 73 63 72 69 70 74 69 6f   ┆ain no diagrams),  -  descriptio┆
0x03fa0…03fc0        6e 20 69 6e 20 6e 61 74 75 72 61 6c 20 6c 61 6e 67 75 61 67 65 20 6f 66 20 74 68 65 20 73 65 6d   ┆n in natural language of the sem┆
0x03fc0…03fe0        61 6e 74 69 63 73 20 6f 66 20 74 68 65 20 0a 19 82 80 80 70 61 72 74 69 63 75 6c 61 72 20 70 61   ┆antics of the      particular pa┆
0x03fe0…04000        72 74 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2c 0d 0a 2d 20 84 6f 70 74 69 6f 6e 61 6c   ┆rt of the language,  -  optional┆
0x04000…04020 (32,)  20 6e 6f 74 65 73 2c 20 77 68 65 72 65 20 73 70 65 63 69 66 69 63 20 63 6f 6e 73 65 71 75 65 6e   ┆ notes, where specific consequen┆
0x04020…04040        63 65 73 20 6f 66 20 74 68 65 20 73 79 6e 74 61 78 20 0a 19 82 80 80 6f 72 20 73 65 6d 61 6e 74   ┆ces of the syntax      or semant┆
0x04040…04060        69 63 73 20 6d 61 79 20 62 65 20 70 6f 69 6e 74 65 64 20 6f 75 74 2c 0d 0a 2d 20 65 78 61 6d 70   ┆ics may be pointed out,  - examp┆
0x04060…04080        6c 65 78 2e 0d 0a 0d 0a 54 68 65 20 6e 6f 74 65 73 20 61 6e 64 20 65 78 61 6d 70 6c 65 73 20 64   ┆lex.    The notes and examples d┆
0x04080…040a0        6f 20 6e 6f 74 20 63 6f 6e 73 74 69 74 75 74 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a 64 65   ┆o not constitute part of the  de┆
0x040a0…040bd        66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2e 0d 0a 0d 0a            ┆finition of the language.    ┆
0x040bd…040c0        FormFeed {
0x040bd…040c0          0c 81 84                                                                                          ┆   ┆
0x040bd…040c0        }
0x040c0…040e0        0a b0 a1 32 2e 20 4c 45 58 49 43 41 4c 20 45 4c 45 4d 45 4e 54 53 0d 0a 0d 0a 41 20 52 65 61 6c   ┆   2. LEXICAL ELEMENTS    A Real┆
0x040e0…04100        2d 54 69 6d 65 20 50 61 73 63 61 6c 20 73 6f 75 72 63 65 20 70 72 6f 67 72 61 6d 20 69 73 20 61   ┆-Time Pascal source program is a┆
0x04100…04120        20 73 74 72 69 6e 67 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 0a 77 68 69 63 68 20 63 61 6e   ┆ string of characters  which can┆
0x04120…04140        20 62 65 20 28 75 6e 69 71 75 65 6c 79 29 20 70 61 72 73 65 64 20 61 73 20 63 6f 6e 73 69 73 74   ┆ be (uniquely) parsed as consist┆
0x04140…04160        69 6e 67 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 0a 6f 66 20 73 75 69 74 61 62 6c 79 20 73   ┆ing of a sequence  of suitably s┆
0x04160…04180        65 70 61 72 61 74 65 64 20 6c 65 78 69 63 61 6c 20 65 6c 65 6d 65 6e 74 73 2e 20 53 65 70 61 72   ┆eparated lexical elements. Separ┆
0x04180…041a0        61 74 6f 72 73 20 61 72 65 20 0a 63 6f 6d 6d 65 6e 74 73 20 61 6e 64 20 6e 6f 6e 70 72 69 6e 74   ┆ators are  comments and nonprint┆
0x041a0…041c0        69 6e 67 20 73 79 6d 62 6f 6c 73 2e 20 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63 61 74 65   ┆ing symbols. There are five cate┆
0x041c0…041e0        67 6f 72 69 65 73 20 0a 6f 66 20 6c 65 78 69 63 61 6c 20 65 6c 65 6d 65 6e 74 73 3a 0d 0a 0d 0a   ┆gories  of lexical elements:    ┆
0x041e0…04200        2d 20 6e 61 6d 65 73 2c 0d 0a 2d 20 63 68 61 72 61 63 74 65 72 20 6c 69 74 65 72 61 6c 73 2c 0d   ┆- names,  - character literals, ┆
0x04200…04220 (33,)  0a 2d 20 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 73 2c 0d 0a 2d 20 6e 75 6d 62 65 72 73   ┆ - character strings,  - numbers┆
0x04220…04240        2c 20 61 6e 64 0d 0a 2d 20 6c 61 6e 67 75 61 67 65 20 73 79 6d 62 6f 6c 73 2e 0d 0a 0d 0a 4f 66   ┆, and  - language symbols.    Of┆
0x04240…04260        20 74 68 65 73 65 20 6f 6e 6c 79 20 6e 61 6d 65 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 69 6e   ┆ these only names are defined in┆
0x04260…04280        20 74 65 72 6d 73 20 6f 66 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 3b 20 0a 74 68 65 20   ┆ terms of syntax diagrams;  the ┆
0x04280…042a0        6f 74 68 65 72 73 20 61 72 65 20 76 65 72 62 61 6c 6c 79 20 64 65 73 63 72 69 62 65 64 2e 20 41   ┆others are verbally described. A┆
0x042a0…042c0        6c 6c 20 6c 61 6e 67 75 61 67 65 20 73 79 6d 62 6f 6c 73 2c 20 0a 73 6f 6d 65 20 6f 66 20 77 68   ┆ll language symbols,  some of wh┆
0x042c0…042e0        69 63 68 20 61 72 65 20 6b 65 79 77 6f 72 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 6e 61 6d 65   ┆ich are keywords similar to name┆
0x042e0…04300        73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 73 6f 6d 20 0a 61 64 64 69 74 69 6f 6e 61 6c 20 6e 61   ┆s, as well as som  additional na┆
0x04300…04320        6d 65 73 2c 20 61 72 65 20 70 72 65 64 65 66 69 6e 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74   ┆mes, are predefined as part of t┆
0x04320…04340        68 65 20 6c 61 6e 67 75 61 67 65 2e 20 0a 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 6c 65 78 69   ┆he language.  The remaining lexi┆
0x04340…04360        63 61 6c 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 70 72 6f 67 72 61 6d 6d 65 72 2d 73 70 65 63   ┆cal elements are programmer-spec┆
0x04360…04380        69 66 69 65 64 2e 0d 0a 0d 0a 4e 6f 20 73 65 70 61 72 61 74 6f 72 20 6d 61 79 20 6f 63 63 75 72   ┆ified.    No separator may occur┆
0x04380…043a0        20 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 6c 65 78 69 63 61 6c 20 65 6c 65 6d 65 6e 74   ┆ within a single lexical element┆
0x043a0…043c0        2e 20 41 74 20 0a 6c 65 61 73 74 20 6f 6e 65 20 73 65 70 61 72 61 74 6f 72 20 6d 75 73 74 20 61   ┆. At  least one separator must a┆
0x043c0…043e0        70 70 65 61 72 20 62 65 74 77 65 65 6e 20 61 6e 79 20 70 61 69 72 20 6f 66 20 0a 63 6f 6e 73 65   ┆ppear between any pair of  conse┆
0x043e0…04400        63 75 74 69 76 65 20 6c 65 78 69 63 61 6c 20 65 6c 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72   ┆cutive lexical elements whenever┆
0x04400…04420 (34,)  20 74 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 0a 70 72 6f 76 69 64 65 20 75   ┆ this is necessary to  provide u┆
0x04420…04440        6e 69 71 75 65 20 64 65 6c 69 6d 69 74 61 74 69 6f 6e 2e 0d 0a 0d 0a 41 6e 20 61 6c 70 68 61 62   ┆nique delimitation.    An alphab┆
0x04440…04460        65 74 69 63 20 63 68 61 72 61 63 74 65 72 2c 20 61 20 74 68 72 6f 75 67 68 20 7a 2c 20 69 73 20   ┆etic character, a through z, is ┆
0x04460…04480        61 6e 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 0a 74 68 65 20 63 61 74 65 67 6f 72 79 20 27   ┆an occurrence of  the category '┆
0x04480…044a0        6c 65 74 74 65 72 27 20 77 68 69 63 68 20 69 73 20 72 65 66 65 72 72 65 64 20 74 6f 20 69 6e 20   ┆letter' which is referred to in ┆
0x044a0…044c0        74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 0a 4e 6f 20 64 65 73 74 69 6e 63 74 69 6f 6e 20 69   ┆the following.  No destinction i┆
0x044c0…044e0        73 20 6d 61 64 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77   ┆s made between the upper and low┆
0x044e0…04500        65 72 20 63 61 73 65 20 0a 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6c 65 74 74 65   ┆er case  forms of the same lette┆
0x04500…04520        72 2c 20 65 78 63 65 70 74 20 69 6e 20 63 68 61 72 61 63 74 65 72 20 6c 69 74 65 72 61 6c 73 20   ┆r, except in character literals ┆
0x04520…04540        6f 72 20 0a 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 73 2e 0d 0a 0d 0a 0d 0a b0 a1 32 2e   ┆or  character strings.        2.┆
0x04540…04560        31 20 4e 61 6d 65 73 0d 0a 0d 0a 41 6c 6c 20 64 65 63 6c 61 72 65 64 20 65 6e 74 69 74 69 74 65   ┆1 Names    All declared entitite┆
0x04560…04580        73 2c 20 77 68 65 74 68 65 72 20 70 72 6f 67 72 61 6d 73 2c 20 72 6f 75 74 69 6e 65 73 2c 20 74   ┆s, whether programs, routines, t┆
0x04580…045a0        79 70 65 73 2c 20 0a 76 61 72 69 61 62 6c 65 73 20 6f 72 20 6d 65 72 65 6c 79 20 63 6f 6e 73 74   ┆ypes,  variables or merely const┆
0x045a0…045c0        61 6e 74 73 2c 20 68 61 76 65 20 61 20 6e 61 6d 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆ants, have a name.              ┆
0x045c0…045e0        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 84 b4 0a 41 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20   ┆              All characters in ┆
0x045e0…04600        61 20 6e 61 6d 65 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 20 48 6f 77 65 76 65 72 2c   ┆a name are significant. However,┆
0x04600…04620 (35,)  20 6e 61 6d 65 73 20 0a 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74 68   ┆ names  used in conjunction with┆
0x04620…04640        20 65 78 74 65 72 6e 61 6c 20 6c 69 6e 6b 69 6e 67 20 6d 61 79 20 62 65 20 61 62 62 72 65 76 69   ┆ external linking may be abbrevi┆
0x04640…04660        61 74 65 64 20 0a 69 6e 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2f 69 6e 73 74 61   ┆ated  in an implementation/insta┆
0x04660…04680        6c 6c 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 66 61 73 68 69 6f 6e 2e 0d 0a 0d 0a 54 68   ┆llation dependent fashion.    Th┆
0x04680…046a0        65 20 6b 65 79 77 6f 72 64 73 20 28 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 32 2e 35 2e 31   ┆e keywords (cf. subsection 2.5.1┆
0x046a0…046c0        29 20 73 61 74 69 73 66 79 20 74 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 0a 27 6e 61 6d 65 27   ┆) satisfy the syntax for  'name'┆
0x046c0…046e0        2c 20 62 75 74 20 61 72 65 20 65 78 70 6c 69 63 69 74 6c 79 20 65 78 63 6c 75 64 65 64 20 66 72   ┆, but are explicitly excluded fr┆
0x046e0…04700        6f 6d 20 74 68 65 20 63 61 74 61 67 6f 72 79 2e 20 49 6e 20 0a 61 64 64 69 74 69 6f 6e 20 61 20   ┆om the catagory. In  addition a ┆
0x04700…04720        6e 75 6d 62 65 72 20 6f 66 20 72 6f 75 74 69 6e 65 73 2c 74 79 70 65 73 20 61 6e 64 20 63 6f 6e   ┆number of routines,types and con┆
0x04720…04740        73 74 61 6e 74 73 20 65 78 69 73 74 20 28 63 66 2e 20 0a 41 70 70 65 6e 64 69 78 20 43 29 20 77   ┆stants exist (cf.  Appendix C) w┆
0x04740…04760        69 74 68 20 70 72 65 64 65 66 69 6e 65 64 20 6e 61 6d 65 73 2c 20 69 2e 65 2e 20 74 68 65 73 65   ┆ith predefined names, i.e. these┆
0x04760…04780        20 6e 61 6d 65 73 20 63 61 6e 20 62 65 20 0a 72 65 64 65 66 69 6e 65 64 2e 0d 0a 0d 0a a1 45 78   ┆ names can be  redefined.     Ex┆
0x04780…047a0        61 6d 70 6c 65 73 3a 0d 0a 0d 0a 73 74 65 70 20 20 75 73 61 67 65 5f 63 6f 75 6e 74 20 20 70 72   ┆amples:    step  usage_count  pr┆
0x047a0…047c0        6f 63 65 73 73 5f 31 31 37 20 20 56 65 72 79 5f 4c 6f 6e 67 5f 49 64 65 6e 74 69 66 69 65 72 5f   ┆ocess_117  Very_Long_Identifier_┆
0x047c0…047e0        4e 61 6d 65 0d 0a 0d 0a 0d 0a b0 a1 32 2e 32 20 43 68 61 72 61 63 74 65 72 20 4c 69 74 65 72 61   ┆Name        2.2 Character Litera┆
0x047e0…04800        6c 73 0d 0a 0d 0a 43 68 61 72 61 63 74 65 72 20 6c 69 74 65 72 61 6c 73 20 64 65 6e 6f 74 65 20   ┆ls    Character literals denote ┆
0x04800…04820 (36,)  63 68 61 72 61 63 74 65 72 73 2c 20 77 68 69 63 68 20 61 72 65 20 76 61 6c 75 65 73 20 6f 66 20   ┆characters, which are values of ┆
0x04820…04840        0a 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 74 79 70 65 20 63 68 61 72 2e 20 54 68 65 79 20   ┆ the predefined type char. They ┆
0x04840…04860        61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 0a 33 2e 34   ┆are described in subsection  3.4┆
0x04860…04880        2e 32 2e 0d 0a 0d 0a 0d 0a b0 a1 32 2e 33 20 43 68 61 72 61 63 74 65 72 20 53 74 72 69 6e 67 73   ┆.2.        2.3 Character Strings┆
0x04880…048a0        0d 0a 0d 0a 43 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 73 20 64 65 6e 6f 74 65 20 76 61 6c   ┆    Character strings denote val┆
0x048a0…048c0        75 65 73 20 6f 66 20 73 74 72 69 6e 67 20 74 79 70 65 73 2e 20 54 68 65 79 20 61 72 65 20 0a 64   ┆ues of string types. They are  d┆
0x048c0…048e0        65 73 63 72 69 62 65 64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 33 2e 39 2e 34 2e 0d 0a 0d   ┆escribed in subsection 3.9.4.   ┆
0x048e0…04900        0a 0d 0a b0 a1 32 2e 34 20 4e 75 6d 62 65 72 73 0d 0a 0d 0a 41 20 6e 75 6d 62 65 72 20 69 73 20   ┆     2.4 Numbers    A number is ┆
0x04900…04920        61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 64 69 67 69 74 73 2c 20 70 6f 73 73 69 62 6c 79 20 70   ┆a sequence of digits, possibly p┆
0x04920…04940        72 65 66 69 78 65 64 20 62 79 20 61 20 0a 72 61 64 69 78 20 73 70 65 63 69 66 69 63 61 74 69 6f   ┆refixed by a  radix specificatio┆
0x04940…04960        6e 2e 20 41 20 64 69 67 69 74 20 69 73 20 61 20 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2c 20 30   ┆n. A digit is a decimal digit, 0┆
0x04960…04980        20 74 68 72 6f 75 67 68 20 0a 39 2c 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 6c 65 74 74 65   ┆ through  9, or one of the lette┆
0x04980…049a0        72 73 20 41 20 74 68 72 6f 75 67 68 20 46 2e 0d 0a 0d 0a 4e 75 6d 62 65 72 73 20 77 69 74 68 6f   ┆rs A through F.    Numbers witho┆
0x049a0…049c0        75 74 20 61 20 72 61 64 69 78 20 70 72 65 66 69 78 20 61 72 65 20 69 6e 74 65 67 65 72 20 6e 75   ┆ut a radix prefix are integer nu┆
0x049c0…049e0        6d 62 65 72 73 20 69 6e 20 0a 73 74 61 6e 64 61 72 64 20 64 65 63 69 6d 61 6c 20 6e 6f 74 61 74   ┆mbers in  standard decimal notat┆
0x049e0…04a00        69 6f 6e 3b 20 74 68 65 79 20 64 65 6e 6f 74 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 0a   ┆ion; they denote values of the  ┆
0x04a00…04a20 (37,)  70 72 65 64 65 66 69 6e 65 64 20 74 79 70 65 20 69 6e 74 65 67 65 72 2c 20 63 66 2e 20 73 75 62   ┆predefined type integer, cf. sub┆
0x04a20…04a40        73 65 63 74 69 6f 6e 20 33 2e 34 2e 33 2e 0d 0a 0d 0a 8c 83 c8 0a 4e 75 6d 62 65 72 73 20 70 72   ┆section 3.4.3.        Numbers pr┆
0x04a40…04a60        65 66 69 78 65 64 20 77 69 74 68 20 61 20 72 61 64 69 78 20 73 70 65 63 69 66 69 63 61 74 69 6f   ┆efixed with a radix specificatio┆
0x04a60…04a80        6e 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 0a 61 73 20 66 6f 6c 6c 6f 77 73 3a 0d 0a   ┆n are interpreted  as follows:  ┆
0x04a80…04aa0        0d 0a 20 42 09 62 69 6e 61 72 79 2c 20 64 69 67 69 74 73 20 6d 75 73 74 20 62 65 20 30 2c 31 0d   ┆   B binary, digits must be 0,1 ┆
0x04aa0…04ac0        0a 20 4f 09 6f 63 74 61 6c 2c 20 64 69 67 69 74 73 20 6d 75 73 74 20 62 65 20 30 2e 2e 37 0d 0a   ┆  O octal, digits must be 0..7  ┆
0x04ac0…04ae0        20 44 09 64 65 63 69 6d 61 6c 2c 20 64 69 67 69 74 73 20 6d 75 73 74 20 62 65 20 30 2e 2e 39 0d   ┆ D decimal, digits must be 0..9 ┆
0x04ae0…04b00        0a 20 48 09 68 65 78 61 64 65 63 69 6d 61 6c 2c 20 64 69 67 69 74 73 20 6d 75 73 74 20 62 65 20   ┆  H hexadecimal, digits must be ┆
0x04b00…04b20        30 2e 2e 39 2c 20 41 2e 2e 46 0d 0a 0d 0a 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   ┆0..9, A..F    If the number of d┆
0x04b20…04b40        69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 72 61 64 69 78 20 73 70 65 63 69 66   ┆igits following the radix specif┆
0x04b40…04b60        69 63 61 74 69 6f 6e 69 73 20 0a 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f   ┆icationis  less than or equal to┆
0x04b60…04b80        20 38 2c 20 66 6f 72 20 62 69 6e 61 72 79 2c 20 6f 72 20 32 2c 20 66 6f 72 20 6f 74 68 65 72 20   ┆ 8, for binary, or 2, for other ┆
0x04b80…04ba0        0a 72 61 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 6e   ┆ radices, then the type of the n┆
0x04ba0…04bc0        75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 0a 6d 61 63 68 69 6e 65   ┆umber is the predefined  machine┆
0x04bc0…04be0        20 74 79 70 65 20 62 79 74 65 3b 20 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 77 6f 72 64   ┆ type byte; otherwise it is word┆
0x04be0…04c00        2e 20 43 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 35 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 73 3a   ┆. Cf. section 3.5.     Examples:┆
0x04c00…04c20 (38,)  0d 0a 0d 0a 20 42 31 30 31 30 20 2d 20 61 20 62 79 74 65 0d 0a 20 30 37 37 37 20 20 20 48 43 41   ┆     B1010 - a byte   0777   HCA┆
0x04c20…04c40        46 45 20 20 20 44 32 35 35 20 20 20 20 44 33 37 39 31 33 20 20 20 20 2d 20 66 6f 75 72 20 77 6f   ┆FE   D255    D37913    - four wo┆
0x04c40…04c60        72 64 73 0d 0a 0d 0a 0d 0a b0 a1 32 2e 35 20 4c 61 6e 67 75 61 67 65 20 53 79 6d 62 6f 6c 73 0d   ┆rds        2.5 Language Symbols ┆
0x04c60…04c80        0a 0d 0a 54 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 6c 61 6e 67 75 61 67 65 20 73 79 6d 62 6f   ┆   The predefined language symbo┆
0x04c80…04ca0        6c 73 20 66 61 6c 6c 20 69 6e 20 74 77 6f 20 63 6c 61 73 73 65 73 3a 20 0a 6b 65 79 77 6f 72 64   ┆ls fall in two classes:  keyword┆
0x04ca0…04cc0        73 20 61 6e 64 20 73 70 65 63 69 61 6c 20 73 79 6d 62 6f 6c 73 2e 0d 0a 0d 0a 0d 0a b0 a1 32 2e   ┆s and special symbols.        2.┆
0x04cc0…04ce0        35 2e 31 20 4b 65 79 77 6f 72 64 73 0d 0a 0d 0a 4b 65 79 77 6f 72 64 73 20 61 72 65 20 72 65 73   ┆5.1 Keywords    Keywords are res┆
0x04ce0…04d00        65 72 76 65 64 20 6e 61 6d 65 73 2c 20 69 2e 65 2e 20 69 74 20 69 73 20 69 6c 6c 65 67 61 6c 20   ┆erved names, i.e. it is illegal ┆
0x04d00…04d20        74 6f 20 75 73 65 20 74 68 65 6d 20 0a 61 73 20 6e 61 6d 65 73 20 69 6e 20 64 65 63 6c 61 72 61   ┆to use them  as names in declara┆
0x04d20…04d40        74 69 6f 6e 73 2e 20 54 68 72 6f 75 67 68 6f 75 74 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20   ┆tions. Throughout this document ┆
0x04d40…04d60        73 6f 6d 65 20 0a 6b 65 79 77 6f 72 64 73 20 61 72 65 20 72 65 6e 64 65 72 65 64 20 69 6e 20 73   ┆some  keywords are rendered in s┆
0x04d60…04d80        6d 61 6c 6c 20 63 61 73 65 20 6c 65 74 74 65 72 73 20 61 6e 64 20 73 6f 6d 65 20 69 6e 20 0a 63   ┆mall case letters and some in  c┆
0x04d80…04da0        61 70 69 74 61 6c 73 2c 20 6d 65 72 65 6c 79 20 61 73 20 61 20 6d 61 74 74 65 72 20 6f 66 20 73   ┆apitals, merely as a matter of s┆
0x04da0…04dbb        74 79 6c 65 2e 20 54 68 65 20 6b 65 79 77 6f 72 64 73 20 61 72 65 3a 0d 0a 0d 0a                  ┆tyle. The keywords are:    ┆
0x04dbb…04df4        Params {
0x04dbb…04df4          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 41 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         A1                 ┆
0x04dbb…04df4          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x04dbb…04df4        }
0x04df4…04e2d        Params {
0x04df4…04e2d          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x04df4…04e2d          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x04df4…04e2d        }
0x04e2d…04e40        0a 41 4e 44 20 20 20 20 20 20 20 20 41 52 52 41 59 20 20                                          ┆ AND        ARRAY  ┆
0x04e40…04e60        20 20 20 41 53 20 20 20 20 20 20 20 20 20 42 45 47 49 4e 20 20 20 20 62 6f 6f 6c 65 61 6e 09 20   ┆   AS         BEGIN    boolean  ┆
0x04e60…04e80        62 79 74 65 0d 0a 43 41 53 45 20 20 20 20 20 20 20 63 68 61 6e 20 20 20 20 20 20 63 68 61 72 20   ┆byte  CASE       chan      char ┆
0x04e80…04ea0        20 20 20 20 20 20 43 4f 4e 53 54 20 20 20 20 43 4f 4e 54 49 4e 55 45 4c 4f 4f 50 20 20 63 72 65   ┆      CONST    CONTINUELOOP  cre┆
0x04ea0…04ec0        61 74 65 0d 0a 44 49 56 20 20 20 20 20 20 20 20 44 4f 20 20 20 20 20 20 20 20 44 4f 57 4e 54 4f   ┆ate  DIV        DO        DOWNTO┆
0x04ec0…04ee0        20 20 20 20 20 45 4c 53 45 20 20 20 20 20 45 4e 44 20 20 20 20 20 20 20 20 20 20 20 45 4e 44 4c   ┆     ELSE     END           ENDL┆
0x04ee0…04f00        4f 4f 50 0d 0a 45 58 49 54 20 20 20 20 20 20 20 45 58 49 54 4c 4f 4f 50 20 20 45 58 54 45 52 4e   ┆OOP  EXIT       EXITLOOP  EXTERN┆
0x04f00…04f20        41 4c 20 20 20 46 4f 52 20 20 20 20 20 20 46 4f 52 57 41 52 44 20 20 20 20 20 20 20 46 55 4e 43   ┆AL   FOR      FORWARD       FUNC┆
0x04f20…04f40        54 49 4f 4e 0d 0a 47 4f 54 4f 20 20 20 20 20 20 20 49 46 20 20 20 20 20 20 20 20 49 4e 20 20 20   ┆TION  GOTO       IF        IN   ┆
0x04f40…04f60        20 20 20 20 20 20 49 4e 53 50 45 43 54 20 20 69 6e 74 65 67 65 72 20 20 20 20 20 20 20 6c 69 6e   ┆      INSPECT  integer       lin┆
0x04f60…04f80        6b 0d 0a 4c 4f 43 4b 20 20 20 20 20 20 20 4c 4f 43 4b 42 55 46 20 20 20 4c 4f 4f 50 20 20 20 20   ┆k  LOCK       LOCKBUF   LOOP    ┆
0x04f80…04fa0        20 20 20 6d 61 69 6c 62 6f 78 20 20 4d 4f 44 20 20 20 20 20 20 20 20 20 20 20 4e 4f 54 0d 0a 8c   ┆   mailbox  MOD           NOT   ┆
0x04fa0…04fc0        83 c8 0a 4f 46 20 20 20 20 20 20 20 20 20 4f 52 20 20 20 20 20 20 20 20 4f 54 48 45 52 57 49 53   ┆   OF         OR        OTHERWIS┆
0x04fc0…04fe0        45 20 20 50 41 43 4b 45 44 20 20 20 70 6f 6f 6c 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 0d 0a   ┆E  PACKED   pool          port  ┆
0x04fe0…05000        50 52 4f 43 45 44 55 52 45 20 20 70 72 6f 63 65 73 73 20 20 20 50 52 4f 47 52 41 4d 20 20 20 20   ┆PROCEDURE  process   PROGRAM    ┆
0x05000…05020 (40,)  52 45 43 4f 52 44 20 20 20 72 65 66 65 72 65 6e 63 65 20 20 20 20 20 52 45 47 49 4f 4e 0d 0a 52   ┆RECORD   reference     REGION  R┆
0x05020…05040        45 50 45 41 54 20 20 20 20 20 53 45 54 20 20 20 20 20 20 20 53 48 41 52 45 44 20 20 20 20 20 53   ┆EPEAT     SET       SHARED     S┆
0x05040…05060        48 49 46 54 20 20 20 20 54 48 45 4e 20 20 20 20 20 20 20 20 20 20 54 4f 0d 0a 54 59 50 45 20 20   ┆HIFT    THEN          TO  TYPE  ┆
0x05060…05080        20 20 20 20 20 74 79 70 65 73 69 7a 65 20 20 75 6e 6c 69 6e 6b 20 20 20 20 20 55 4e 54 49 4c 20   ┆     typesize  unlink     UNTIL ┆
0x05080…050a0        20 20 20 56 41 52 20 20 20 20 20 20 20 20 20 20 20 76 61 72 73 69 7a 65 0d 0a 57 48 49 4c 45 20   ┆   VAR           varsize  WHILE ┆
0x050a0…050c0        20 20 20 20 20 57 49 54 48 20 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 20 58 4f 52 0d 0a 0d   ┆     WITH      word       XOR   ┆
0x050c0…050c3        0a 0d 0a                                                                                          ┆   ┆
0x050c3…050fc        Params {
0x050c3…050fc          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x050c3…050fc          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x050c3…050fc        }
0x050fc…05135        Params {
0x050fc…05135          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 41 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         A1                 ┆
0x050fc…05135          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x050fc…05135        }
0x05135…05140        0a b0 a1 32 2e 35 2e 32 20 53 70                                                                  ┆   2.5.2 Sp┆
0x05140…05160        65 63 69 61 6c 20 53 79 6d 62 6f 6c 73 0d 0a 0d 0a 54 68 65 20 73 70 65 63 69 61 6c 20 73 79 6d   ┆ecial Symbols    The special sym┆
0x05160…05180        62 6f 6c 73 20 61 72 65 20 73 70 65 63 69 61 6c 20 67 72 61 70 68 69 63 20 73 79 6d 62 6f 6c 73   ┆bols are special graphic symbols┆
0x05180…051a0        20 6f 72 20 73 68 6f 72 74 20 0a 73 65 71 75 65 6e 63 65 73 20 6f 66 20 73 75 63 68 20 73 79 6d   ┆ or short  sequences of such sym┆
0x051a0…051c0        62 6f 6c 73 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 73 79 6d 62   ┆bols. The following special symb┆
0x051c0…051e0        6f 6c 73 20 61 72 65 20 0a 64 65 66 69 6e 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   ┆ols are  defined as part of the ┆
0x051e0…05200        6c 61 6e 67 75 61 67 65 3a 0d 0a 0d 0a 2b 20 20 2d 20 20 2a 20 20 20 3c 20 20 20 20 3e 20 20 3c   ┆language:    +  -  *   <    >  <┆
0x05200…05220 (41,)  3e 20 20 3c 3d 20 20 3e 3d 20 20 28 20 20 20 29 20 20 20 28 2e 20 20 2e 29 20 20 28 3a 20 20 3a   ┆>  <=  >=  (   )   (.  .)  (:  :┆
0x05220…05240        29 0d 0a 60 20 20 3d 20 20 3a 3d 20 20 3a 3d 3a 20 20 2e 20 20 2c 20 20 20 3b 20 20 20 3a 20 20   ┆)  `  =  :=  :=:  .  ,   ;   :  ┆
0x05240…05260        20 2e 2e 20 2a 2a 2a 20 20 21 20 20 20 20 3f 20 20 26 0d 0a 0d 0a 0d 0a b0 a1 32 2e 36 20 43 6f   ┆ .. ***  !    ?  &        2.6 Co┆
0x05260…05280        6d 6d 65 6e 74 73 0d 0a 0d 0a 43 6f 6d 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 69 6e 73 65 72 74   ┆mments    Comments may be insert┆
0x05280…052a0        65 64 20 69 6e 20 61 20 73 6f 75 72 63 65 20 70 72 6f 67 72 61 6d 20 69 6e 20 74 68 72 65 65 20   ┆ed in a source program in three ┆
0x052a0…052c0        66 6f 72 6d 73 3a 0d 0a 0d 0a 31 2e 20 28 2a 20 63 6f 6d 6d 65 6e 74 20 2a 29 0d 0a 20 20 20 84   ┆forms:    1. (* comment *)      ┆
0x052c0…052e0        41 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 64 65 6c 69 6d   ┆All characters between the delim┆
0x052e0…05300        69 74 65 72 73 20 28 2a 20 61 6e 64 20 2a 29 20 61 72 65 20 70 61 72 74 20 0a 19 83 80 80 6f 66   ┆iters (* and *) are part      of┆
0x05300…05320        20 74 68 65 20 63 6f 6d 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d   ┆ the comment, including any non-┆
0x05320…05340        70 72 69 6e 74 69 6e 67 20 63 68 61 72 61 63 74 65 72 73 2e 0d 0a 0d 0a 32 2e 20 3c 2a 20 63 6f   ┆printing characters.    2. <* co┆
0x05340…05360        6d 6d 65 6e 74 20 2a 3e 0d 0a 20 20 20 84 41 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 62 65 74   ┆mment *>      All characters bet┆
0x05360…05380        77 65 65 6e 20 74 68 65 20 64 65 6c 69 6d 69 74 65 72 73 20 3c 2a 20 61 6e 64 20 2a 3e 20 61 72   ┆ween the delimiters <* and *> ar┆
0x05380…053a0        65 20 70 61 72 74 20 0a 19 83 80 80 6f 66 20 74 68 65 20 63 6f 6d 6d 65 6e 74 2c 20 69 6e 63 6c   ┆e part      of the comment, incl┆
0x053a0…053c0        75 64 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 70 72 69 6e 74 69 6e 67 20 63 68 61 72 61 63 74 65 72   ┆uding any non-printing character┆
0x053c0…053e0        73 2e 0d 0a 0d 0a 33 2e 20 2d 2d 20 63 6f 6d 6d 65 6e 74 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 0d   ┆s.    3. -- comment end-of-line ┆
0x053e0…05400        0a 20 20 20 84 41 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 66 72 6f 6d 20 74 68 65 20 64 65 6c   ┆     All characters from the del┆
0x05400…05420 (42,)  69 6d 69 74 65 72 20 2d 2d 20 75 70 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 0a 19 83 80 80 6f   ┆imiter -- up to the first      o┆
0x05420…05440        63 63 75 72 65 6e 63 65 20 6f 66 20 61 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e 2c 20 6c   ┆ccurence of a carriage return, l┆
0x05440…05460        69 6e 65 20 66 65 65 64 2c 20 6f 72 20 66 6f 72 6d 20 66 65 65 64 20 0a 19 83 80 80 63 68 61 72   ┆ine feed, or form feed      char┆
0x05460…05480        61 63 74 65 72 20 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6d 6d 65 6e 74 2e 0d 0a   ┆acter are part of the comment.  ┆
0x05480…05482        0d 0a                                                                                             ┆  ┆
0x05482…05485        FormFeed {
0x05482…05485          0c 83 98                                                                                          ┆   ┆
0x05482…05485        }
0x05485…054a0        0a b0 f0 a1 45 78 61 6d 70 6c 65 78 3a 0d 0a 0d 0a 3c 2a 20 74 68 69 73 20 69 73                  ┆    Examplex:    <* this is┆
0x054a0…054c0        20 28 2a 20 2e 2e 2e 20 2a 29 20 6f 6e 65 20 63 6f 6d 6d 65 6e 74 20 2a 3e 0d 0a 0d 0a 28 2a 20   ┆ (* ... *) one comment *>    (* ┆
0x054c0…054e0        74 68 69 73 20 69 73 20 2d 2d 20 61 6e 6f 74 68 65 72 0d 0a 20 20 20 63 6f 6d 6d 65 6e 74 20 2a   ┆this is -- another     comment *┆
0x054e0…05500        29 0d 0a 0d 0a 2d 2d 20 61 20 74 68 69 72 64 20 63 6f 6d 6d 65 6e 74 0d 0a 0d 0a 0d 0a b0 a1 32   ┆)    -- a third comment        2┆
0x05500…05520        2e 37 20 4e 6f 6e 2d 70 72 69 6e 74 69 6e 67 20 43 68 61 72 61 63 74 65 72 73 0d 0a 0d 0a 4e 6f   ┆.7 Non-printing Characters    No┆
0x05520…05540        6e 2d 70 72 69 6e 74 69 6e 67 20 63 68 61 72 61 63 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20   ┆n-printing characters which are ┆
0x05540…05560        6e 6f 74 20 70 61 72 74 20 6f 66 20 61 20 63 6f 6d 6d 65 6e 74 20 61 72 65 20 0a 73 65 70 61 72   ┆not part of a comment are  separ┆
0x05560…05580        61 74 6f 72 73 20 6f 6e 20 74 68 72 65 69 72 20 6f 77 6e 2e 20 41 6e 79 20 52 65 61 6c 2d 54 69   ┆ators on threir own. Any Real-Ti┆
0x05580…055a0        6d 65 20 50 61 73 63 61 6c 20 63 6f 6d 70 69 6c 65 72 20 0a 73 68 6f 75 6c 64 20 61 6c 6c 6f 77   ┆me Pascal compiler  should allow┆
0x055a0…055c0        20 73 70 61 63 65 2c 20 74 61 62 75 6c 61 74 69 6f 6e 2c 20 6c 69 6e 65 20 61 6e 64 20 66 6f 72   ┆ space, tabulation, line and for┆
0x055c0…055e0        6d 20 66 65 65 64 2c 20 61 6e 64 20 0a 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e 20 63 68 61   ┆m feed, and  carriage return cha┆
0x055e0…055ee        72 61 63 74 65 72 73 2e 0d 0a 0d 0a 0d 0a                                                         ┆racters.      ┆
0x055ee…055f1        FormFeed {
0x055ee…055f1          0c 81 d8                                                                                          ┆   ┆
0x055ee…055f1        }
0x055f1…05600        0a b0 a1 33 2e 20 54 59 50 45 53 20 41 4e 44                                                      ┆   3. TYPES AND┆
0x05600…05620 (43,)  20 4f 42 4a 45 43 54 53 0d 0a 0d 0a 41 6e 20 a1 6f 62 6a 65 63 74 e1 20 69 73 20 61 20 64 61 74   ┆ OBJECTS    An  object  is a dat┆
0x05620…05640        61 20 65 6e 74 69 74 79 2c 20 6d 61 6e 69 66 65 73 74 20 64 75 72 69 6e 67 20 74 68 65 20 65 78   ┆a entity, manifest during the ex┆
0x05640…05660        65 63 75 74 69 6f 6e 20 6f 66 20 0a 61 20 70 72 6f 67 72 61 6d 20 61 73 20 6f 63 63 75 70 79 69   ┆ecution of  a program as occupyi┆
0x05660…05680        6e 67 20 73 6f 6d 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 20 57 69 74 68 20 6f   ┆ng some amount of memory. With o┆
0x05680…056a0        6e 65 20 0a 65 78 63 65 70 74 69 6f 6e 20 28 69 72 72 65 67 75 6c 61 72 20 73 75 62 2d 6f 62 6a   ┆ne  exception (irregular sub-obj┆
0x056a0…056c0        65 63 74 73 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66 20 61 20 64 65 73 63 72 69 70 74 69 76 65   ┆ects of objects of a descriptive┆
0x056c0…056e0        20 0a 74 79 70 65 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 31 31 29 20 61 6e 20 6f 62 6a   ┆  type, cf. section 3.11) an obj┆
0x056e0…05700        65 63 74 20 61 6c 77 61 79 73 20 6f 63 63 75 70 69 65 73 20 61 6e 20 0a 69 6e 74 65 67 72 61 6c   ┆ect always occupies an  integral┆
0x05700…05720        20 6e 75 6d 62 65 72 20 6f 66 20 73 75 63 63 65 73 73 69 76 65 20 62 79 74 65 73 20 6f 66 20 6d   ┆ number of successive bytes of m┆
0x05720…05740        65 6d 6f 72 79 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 62 79 74 65 73 20 69 73 20 63   ┆emory. The number of  bytes is c┆
0x05740…05760        61 6c 6c 65 64 20 74 68 65 20 a1 73 69 7a 65 e1 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61   ┆alled the  size  of the object a┆
0x05760…05780        6e 64 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 0a 74 68 65 20 6c 6f 77 65 73 74 20 61 64   ┆nd the address of  the lowest ad┆
0x05780…057a0        64 72 65 73 73 65 64 20 62 79 74 65 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 61 64 64 72   ┆dressed byte is called the  addr┆
0x057a0…057c0        65 73 73 e1 20 6f 66 20 74 68 65 20 0a 6f 62 6a 65 63 74 2e 20 54 68 65 20 a1 76 61 6c 75 65 e1   ┆ess  of the  object. The  value ┆
0x057c0…057e0        20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 69 73 20 61 74 20 61 6e 79 20 67 69 76 65 6e 20 74 69   ┆ of an object is at any given ti┆
0x057e0…05800        6d 65 20 0a 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 74 68 65 20 62 69 74 20 70 61 74 74 65   ┆me  represented by the bit patte┆
0x05800…05820 (44,)  72 6e 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 70 61 72 74 20 6f 66 20 6d 65 6d 6f 72 79   ┆rn present in the part of memory┆
0x05820…05840        20 0a 6f 63 63 75 70 69 65 64 20 62 79 20 74 68 65 20 6f 62 6a 65 63 74 2e 20 41 6e 20 6f 62 6a   ┆  occupied by the object. An obj┆
0x05840…05860        65 63 74 20 6d 61 79 20 62 65 20 61 20 64 65 63 6c 61 72 65 64 2c 20 61 6e 64 20 0a 74 68 75 73   ┆ect may be a declared, and  thus┆
0x05860…05880        20 6e 61 6d 65 64 2c 20 63 6f 6e 73 74 61 6e 74 2c 20 76 61 72 69 61 62 6c 65 2c 20 6f 72 20 70   ┆ named, constant, variable, or p┆
0x05880…058a0        61 72 61 6d 65 74 65 72 2c 20 6f 72 20 69 74 20 6d 61 79 20 62 65 20 61 20 0a 74 65 6d 70 6f 72   ┆arameter, or it may be a  tempor┆
0x058a0…058c0        61 72 79 20 61 6e 6f 6e 79 6d 6f 75 73 20 6f 62 6a 65 63 74 20 77 68 69 63 68 20 65 78 69 73 74   ┆ary anonymous object which exist┆
0x058c0…058e0        73 20 6f 6e 6c 79 20 64 75 72 69 6e 67 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66   ┆s only during the  evaluation of┆
0x058e0…05900        20 73 6f 6d 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 74 68 65 20 65 78 65 63 75 74 69 6f   ┆ some expression or the executio┆
0x05900…05920        6e 20 6f 66 20 63 65 72 74 61 69 6e 20 0a 6b 69 6e 64 73 20 6f 66 20 73 74 61 74 65 6d 65 6e 74   ┆n of certain  kinds of statement┆
0x05920…05940        73 2e 0d 0a 0d 0a 45 76 65 72 79 20 6f 62 6a 65 63 74 20 68 61 73 20 61 20 a1 74 79 70 65 e1 2e   ┆s.    Every object has a  type .┆
0x05940…05960        20 41 20 74 79 70 65 20 63 6f 6d 70 72 69 73 65 73 20 61 20 73 65 74 20 6f 66 20 76 61 6c 75 65   ┆ A type comprises a set of value┆
0x05960…05980        73 20 0a 77 68 69 63 68 20 6d 61 79 20 62 65 20 61 73 73 75 6d 65 64 20 62 79 20 6f 62 6a 65 63   ┆s  which may be assumed by objec┆
0x05980…059a0        74 73 20 6f 66 20 74 68 65 20 74 79 70 65 2e 20 41 20 6e 75 6d 62 65 72 20 6f 66 20 0a 70 72 65   ┆ts of the type. A number of  pre┆
0x059a0…059c0        64 65 66 69 6e 65 64 20 74 79 70 65 73 20 65 78 69 73 74 20 61 73 20 70 61 72 74 20 6f 66 20 74   ┆defined types exist as part of t┆
0x059c0…059e0        68 65 20 6c 61 6e 67 75 61 67 65 20 61 6e 64 20 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 79 70 65   ┆he language and  additional type┆
0x059e0…05a00        73 20 6d 61 79 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 74 79 70 65 20 64 65 63 6c 61 72 61   ┆s may be defined in type declara┆
0x05a00…05a20 (45,)  74 69 6f 6e 73 2e 20 49 6e 20 0a 70 61 72 74 69 63 75 6c 61 72 20 69 74 20 69 73 20 70 6f 73 73   ┆tions. In  particular it is poss┆
0x05a20…05a40        69 62 6c 65 20 74 6f 20 64 65 66 69 6e 65 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 2e   ┆ible to define structured types.┆
0x05a40…05a60        20 0a 4f 62 6a 65 63 74 73 20 6f 66 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 20 61 72   ┆  Objects of structured types ar┆
0x05a60…05a80        65 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 a1 73 75 62 2d 6f 62 6a 65 63 74 73 e1 20 6f 66 20 0a   ┆e composed of  sub-objects  of  ┆
0x05a80…05aa0        6f 74 68 65 72 20 28 73 69 6d 70 6c 65 72 29 20 74 79 70 65 73 2e 20 41 6c 6c 20 6f 62 6a 65 63   ┆other (simpler) types. All objec┆
0x05aa0…05ac0        74 73 20 6f 66 20 61 20 74 79 70 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a 73 69 7a 65   ┆ts of a type have the same  size┆
0x05ac0…05ae0        2c 20 63 61 6c 6c 65 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 79 70 65 2e 0d 0a   ┆, called the size of the type.  ┆
0x05ae0…05b00        0d 0a 41 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 74 79 70 65 20 69 73 20 61 20 73 65   ┆  Associated with a type is a se┆
0x05b00…05b20        74 20 6f 66 20 a1 6f 70 65 72 61 74 69 6f 6e 73 e1 20 61 70 70 6c 69 63 61 62 6c 65 20 6f 66 20   ┆t of  operations  applicable of ┆
0x05b20…05b40        0a 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 74 79 70 65 2e 20 49 6e 20 74 68 65 20 63 61 73 65   ┆ values of the type. In the case┆
0x05b40…05b60        20 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 73 6f 6d 65 20 6f 66 20 0a 74   ┆ of a structured type some of  t┆
0x05b60…05b80        68 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20   ┆he operations provide access to ┆
0x05b80…05ba0        74 68 65 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 6f 66 20 6f 62 6a 65 63 74 73 20 0a 6f 66 20 74   ┆the sub-objects of objects  of t┆
0x05ba0…05bc0        68 65 20 74 79 70 65 2e 0d 0a 0d 0a 41 6e 20 69 6d 70 6f 72 74 61 6e 74 20 72 65 6c 61 74 69 6f   ┆he type.    An important relatio┆
0x05bc0…05be0        6e 20 62 65 74 77 65 65 6e 20 74 79 70 65 73 20 69 73 20 a1 63 6f 6d 70 61 74 69 62 69 6c 69 74   ┆n between types is  compatibilit┆
0x05be0…05c00        79 e1 20 77 68 69 63 68 20 0a 70 6c 61 79 65 73 20 61 20 6b 65 79 20 72 6f 6c 65 20 69 6e 20 64   ┆y  which  playes a key role in d┆
0x05c00…05c20 (46,)  65 74 65 72 6d 69 6e 69 6e 67 20 77 68 65 6e 20 74 68 65 20 61 73 73 69 67 6e 6d 65 6e 74 2c 20   ┆etermining when the assignment, ┆
0x05c20…05c40        0a 65 78 70 6c 69 63 69 74 20 6f 72 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 70 61 73 73 69 6e   ┆ explicit or by parameter passin┆
0x05c40…05c60        67 2c 20 6f 66 20 61 20 76 61 6c 75 65 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 20 6f 66 20 0a 73   ┆g, of a value to an object of  s┆
0x05c60…05c80        6f 6d 65 20 74 79 70 65 20 69 73 20 6c 65 67 61 6c 2e 0d 0a 0d 0a 54 68 65 20 73 74 72 75 63 74   ┆ome type is legal.    The struct┆
0x05c80…05ca0        75 72 61 6c 20 61 73 70 65 63 74 73 20 6f 66 20 61 20 74 79 70 65 20 61 72 65 20 61 6c 77 61 79   ┆ural aspects of a type are alway┆
0x05ca0…05cc0        73 20 6f 62 74 61 69 6e 61 62 6c 65 20 66 72 6f 6d 20 0a 28 74 68 65 20 74 65 78 74 20 6f 66 29   ┆s obtainable from  (the text of)┆
0x05cc0…05ce0        20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 73 69   ┆ the definition. However, the si┆
0x05ce0…05d00        7a 65 20 6f 66 20 61 20 74 79 70 65 20 0a 8c 83 c8 0a 6d 61 79 20 62 65 20 67 69 76 65 6e 20 62   ┆ze of a type      may be given b┆
0x05d00…05d20        79 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 69 6e 20 67 65 6e 65 72 61 6c 20 63   ┆y expressions which in general c┆
0x05d20…05d40        61 6e 20 6f 6e 6c 79 20 62 65 20 0a 65 76 61 6c 75 61 74 65 64 20 61 74 20 74 75 6e 2d 74 69 6d   ┆an only be  evaluated at tun-tim┆
0x05d40…05d60        65 2e 20 41 20 74 79 70 65 20 69 73 20 73 61 69 64 20 74 6f 20 62 65 20 a1 65 73 74 61 62 6c 69   ┆e. A type is said to be  establi┆
0x05d60…05d80        73 68 65 64 e1 20 77 68 65 6e 20 0a 61 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74   ┆shed  when  all expressions in t┆
0x05d80…05da0        68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20   ┆he definition are evaluated and ┆
0x05da0…05dc0        74 68 65 20 0a 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66   ┆the  actual layout of objects of┆
0x05dc0…05de0        20 74 68 65 20 74 79 70 65 20 61 6e 64 20 74 68 75 73 20 61 6c 73 6f 20 74 68 65 20 0a 72 65 70   ┆ the type and thus also the  rep┆
0x05de0…05e00        72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 74 79 70   ┆resentation of values of the typ┆
0x05e00…05e20 (47,)  65 2c 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 41 20 74 79 70 65 20 0a 69 6e 20 77 68   ┆e, are determined. A type  in wh┆
0x05e20…05e40        6f 73 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 61 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61   ┆ose definition all expressions a┆
0x05e40…05e60        72 65 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 0a 61 6e 64 20 77 68 69   ┆re constant expressions  and whi┆
0x05e60…05e80        63 68 20 63 61 6e 20 74 68 65 72 65 66 6f 72 65 20 62 65 20 65 73 74 61 62 6c 69 73 68 65 64 20   ┆ch can therefore be established ┆
0x05e80…05ea0        61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 69 73 20 0a 63 61 6c 6c 65 64 20 61 20 a1 73   ┆at compile-time, is  called a  s┆
0x05ea0…05ec0        74 61 74 69 63 e1 20 74 79 70 65 2e 0d 0a 0d 0a 41 6c 6c 20 74 70 65 73 2c 20 77 68 65 74 68 65   ┆tatic  type.    All tpes, whethe┆
0x05ec0…05ee0        72 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65 64 20 6f 72 20 69 6d 70 6c 69 63   ┆r explicitly specified or implic┆
0x05ee0…05f00        69 74 6c 79 20 67 69 76 65 6e 20 0a 62 79 20 74 68 65 20 63 6f 6e 74 65 78 74 2c 20 61 72 65 20   ┆itly given  by the context, are ┆
0x05f00…05f20        a1 63 6c 61 73 73 69 66 69 65 64 e1 20 61 73 3a 0d 0a 0d 0a 2d 20 6f 72 64 69 6e 61 6c 20 74 79   ┆ classified  as:    - ordinal ty┆
0x05f20…05f40        70 65 73 2c 0d 0a 2d 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 2c 0d 0a 2d 20 73 65 74 20 74 79   ┆pes,  - machine types,  - set ty┆
0x05f40…05f60        70 65 73 2c 0d 0a 2d 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 2c 0d 0a 2d 20 73 68 69 65 6c 64   ┆pes,  - pointer types,  - shield┆
0x05f60…05f80        65 64 20 74 79 70 65 73 2c 20 6f 72 0d 0a 2d 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73   ┆ed types, or  - structured types┆
0x05f80…05fa0        2e 0d 0a 0d 0a 45 61 63 68 20 63 6c 61 73 73 20 6f 66 20 74 79 70 65 73 20 69 73 20 64 65 73 63   ┆.    Each class of types is desc┆
0x05fa0…05fc0        72 69 62 65 64 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20 73 65 63 74 69 6f 6e 20 6f 66 20 0a   ┆ribed in a separate section of  ┆
0x05fc0…05fe0        74 68 69 73 20 63 68 61 70 74 65 72 2e 0d 0a 0d 0a 54 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e   ┆this chapter.    The language in┆
0x05fe0…06000        63 6c 75 64 65 73 20 6e 6f 20 22 72 65 61 6c 22 20 74 79 70 65 73 2e 20 49 74 20 69 73 20 61 20   ┆cludes no "real" types. It is a ┆
0x06000…06020 (48,)  73 69 6d 70 6c 65 20 6d 61 74 74 65 72 20 0a 74 6f 20 65 78 74 65 6e 64 20 74 68 65 20 6c 61 6e   ┆simple matter  to extend the lan┆
0x06020…06040        67 75 61 67 65 20 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 69 74 68 20   ┆guage or an implementation with ┆
0x06040…06060        61 20 63 6c 61 73 73 20 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   ┆a class  containing one or more ┆
0x06060…06080        72 65 61 6c 20 74 79 70 65 73 2e 0d 0a 0d 0a 50 6f 69 6e 74 65 72 20 74 79 70 65 73 20 61 6e 64   ┆real types.    Pointer types and┆
0x06080…060a0        20 73 68 69 65 6c 64 65 64 20 74 79 70 65 73 20 61 72 65 20 63 61 6c 6c 65 64 20 a1 70 72 6f 74   ┆ shielded types are called  prot┆
0x060a0…060c0        65 63 74 65 64 e1 20 74 79 70 65 73 2e 20 0a 54 68 65 20 73 61 6d 65 20 69 73 20 74 72 75 65 20   ┆ected  types.  The same is true ┆
0x060c0…060e0        6f 66 20 63 65 72 74 61 69 6e 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 2c 20 63 66 2e   ┆of certain structured types, cf.┆
0x060e0…06100        20 73 65 63 74 69 6f 6e 20 0a 33 2e 39 2e 20 50 72 6f 74 65 63 74 65 64 20 74 79 70 65 73 20 63   ┆ section  3.9. Protected types c┆
0x06100…06120        61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74   ┆annot be used in conjunction wit┆
0x06120…06140        68 20 0a 72 65 74 79 70 69 6e 67 20 28 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 29 20 69 6e   ┆h  retyping (type conversion) in┆
0x06140…06160        20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e 31 20 53 70 65   ┆ with statements.        3.1 Spe┆
0x06160…06180        63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 54 79 70 65 73 0d 0a 0d 0a 54 79 70 65 20 73 70 65 63   ┆cification of Types    Type spec┆
0x06180…061a0        69 66 69 63 61 74 69 6f 6e 73 2c 20 77 68 69 63 68 20 69 6e 63 6c 75 64 65 20 74 79 70 65 20 64   ┆ifications, which include type d┆
0x061a0…061c0        65 66 69 6e 69 74 69 6f 6e 73 2c 20 61 72 65 20 0a 75 73 65 64 20 69 6e 20 74 79 70 65 20 64 65   ┆efinitions, are  used in type de┆
0x061c0…061e0        63 6c 61 72 61 74 69 6f 6e 73 2c 20 69 6e 20 6f 62 6a 65 63 74 20 64 65 63 6c 61 72 61 74 69 6f   ┆clarations, in object declaratio┆
0x061e0…06200        6e 73 2c 20 69 6e 20 77 69 74 68 20 0a 73 74 61 74 65 6d 65 6e 74 73 2c 20 61 6e 64 20 69 6e 20   ┆ns, in with  statements, and in ┆
0x06200…06220 (49,)  74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 6c 69 73 74 73 20 6f 66 20 72 6f   ┆the formal parameter lists of ro┆
0x06220…06240        75 74 69 6e 65 20 61 6e 64 20 0a 70 72 6f 67 72 61 6d 20 68 65 61 64 69 6e 67 73 20 61 6e 64 20   ┆utine and  program headings and ┆
0x06240…06260        6f 66 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 69 7a 65 64   ┆of declarations of parameterized┆
0x06260…06280        20 74 79 70 65 73 2e 20 0a 8c 83 c8 0a 54 68 65 20 66 6f 72 6d 73 20 6f 66 20 74 79 70 65 20 73   ┆ types.      The forms of type s┆
0x06280…062a0        70 65 63 69 66 69 63 61 74 69 6f 6e 20 77 68 69 63 68 20 6d 61 79 20 6f 63 63 75 72 20 64 69 66   ┆pecification which may occur dif┆
0x062a0…062c0        66 65 72 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 75 73 65 2e 0d 0a 0d 0a 54 68   ┆fer  depending on the use.    Th┆
0x062c0…062e0        65 20 66 6f 72 6d 20 6f 66 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 75 73 65   ┆e form of type specification use┆
0x062e0…06300        64 20 69 6e 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 69 73 20 0a 63 61 6c 6c 65   ┆d in type declarations is  calle┆
0x06300…06320        64 20 61 20 64 65 66 69 6e 69 6e 67 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 2e   ┆d a defining type specification.┆
0x06320…06340        20 54 68 69 73 20 66 6f 72 6d 20 72 75 6c 65 73 20 6f 75 74 20 0a 61 6c 69 61 73 20 74 79 70 65   ┆ This form rules out  alias type┆
0x06340…06360        73 2c 20 69 2e 65 2e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 6e 61 6d 65   ┆s, i.e. the definition of a name┆
0x06360…06380        64 20 74 79 70 65 20 73 69 6d 70 6c 79 20 62 79 20 0a 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61   ┆d type simply by  reference to a┆
0x06380…063a0        6e 6f 74 68 65 72 20 28 62 6f 75 6e 64 29 20 74 79 70 65 20 6e 61 6d 65 2e 0d 0a 0d 0a 0d 0a 0d   ┆nother (bound) type name.       ┆
0x063a0…063c0        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 66 6f 72 6d 20 6f 66 20 74 79 70 65 20 73 70   ┆             The form of type sp┆
0x063c0…063e0        65 63 69 66 69 63 61 74 69 6f 6e 20 6d 6f 73 74 20 63 6f 6d 6d 65 6e 6c 79 20 75 73 65 64 2c 20   ┆ecification most commenly used, ┆
0x063e0…06400        65 2e 67 2e 20 69 6e 20 0a 6f 62 6a 65 63 74 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2c 20 69 6e   ┆e.g. in  object declarations, in┆
0x06400…06420 (50,)  20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 61 6e 64 20 69 6e 20 66 6f 72 6d 61 6c 20   ┆ with statements, and in formal ┆
0x06420…06440        74 79 70 65 20 0a 70 61 72 61 6d 65 74 65 72 20 6c 69 73 74 73 2c 20 69 73 20 63 61 6c 6c 65 64   ┆type  parameter lists, is called┆
0x06440…06460        20 61 20 63 6f 6d 6d 6f 6e 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 2e 20 54 68   ┆ a common type specification. Th┆
0x06460…06480        69 73 20 0a 66 6f 72 6d 20 63 6f 76 65 72 73 20 61 6c 6c 20 74 79 70 65 73 20 77 69 74 68 20 6e   ┆is  form covers all types with n┆
0x06480…064a0        6f 20 75 6e 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆o unbound parameters.           ┆
0x064a0…064c0        0a 0d 0a 0d 0a 0d 0a 0d 0a 41 6e 20 61 75 67 6d 65 6e 74 65 64 20 66 6f 72 6d 20 6f 66 20 74 79   ┆         An augmented form of ty┆
0x064c0…064e0        70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 69 6e 20 66 6f 72 6d   ┆pe specification is used in form┆
0x064e0…06500        61 6c 20 0a 70 61 72 61 6d 65 74 65 72 20 6c 69 73 74 73 20 6f 66 20 72 6f 75 74 69 6e 65 73 20   ┆al  parameter lists of routines ┆
0x06500…06520        61 6e 64 20 70 72 6f 67 72 61 6d 73 20 77 68 65 72 65 20 75 6e 62 6f 75 6e 64 20 0a 70 61 72 61   ┆and programs where unbound  para┆
0x06520…06540        6d 65 74 65 72 69 7a 65 64 20 74 79 70 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0d 0a 0d 0a   ┆meterized types are allowed.    ┆
0x06540…06560        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 e0 0a 41 20 74 79 70 65 20 64 65 66 69 6e 69 74   ┆                  A type definit┆
0x06560…06580        69 6f 6e 69 73 20 74 68 65 20 75 6c 74 69 6d 61 74 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66   ┆ionis the ultimate definition of┆
0x06580…065a0        20 61 6e 79 20 74 79 70 65 20 0a 77 68 69 63 68 20 69 73 20 6e 6f 74 20 70 72 65 64 65 66 69 6e   ┆ any type  which is not predefin┆
0x065a0…065c0        65 64 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 66 6f 72 6d 20 27 64 65 66   ┆ed.                The form 'def┆
0x065c0…065e0        69 6e 65 64 20 74 79 70 65 27 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 73 70   ┆ined type' may be used in the sp┆
0x065e0…06600        65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 0a 61 20 74 79 70 65 20 61 73 20 65 69 74 68 65 72   ┆ecification of  a type as either┆
0x06600…06620 (51,)  20 70 72 65 64 65 66 69 6e 65 64 20 6f 72 20 64 65 66 69 6e 65 64 2c 20 62 6f 75 6e 64 2c 20 61   ┆ predefined or defined, bound, a┆
0x06620…06640        6e 64 20 6e 61 6d 65 64 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆nd named.                       ┆
0x06640…06660        0a 54 68 65 20 6d 69 73 73 69 6e 67 20 64 65 74 61 69 6c 73 20 69 6e 20 74 68 65 20 61 62 6f 76   ┆ The missing details in the abov┆
0x06660…06680        65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 61 72 65 20 67 69 76 65 6e 20 69 6e 20 0a 74 68 65 20   ┆e description are given in  the ┆
0x06680…066a0        66 6f 6c 6c 6f 77 69 6e 67 20 73 65 63 74 69 6f 6e 73 3a 0d 0a 0d 0a a1 73 79 6e 74 61 63 74 69   ┆following sections:     syntacti┆
0x066a0…066c0        63 20 63 61 74 65 67 6f 72 79 20 20 20 20 20 20 20 20 20 20 20 20 73 65 63 74 69 6f 6e 20 6e 75   ┆c category            section nu┆
0x066c0…066e0        6d 62 65 72 0d 0a 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65 09 09 33 2e 32 0d 0a 70 61 72 61   ┆mber  bound-type_name  3.2  para┆
0x066e0…06700        6d 65 74 65 72 69 7a 65 64 2d 74 79 70 65 5f 6e 61 6d 65 09 09 33 2e 32 0d 0a 70 61 72 61 6d 65   ┆meterized-type_name  3.2  parame┆
0x06700…06720        74 65 72 69 7a 65 64 2d 74 79 70 65 20 62 69 6e 64 69 6e 67 09 33 2e 33 0d 0a 6f 72 64 69 6e 61   ┆terized-type binding 3.3  ordina┆
0x06720…06740        6c 2d 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 09 20 20 20 09 33 2e 34 0d 0a 70 72 65 64 69   ┆l-type definition     3.4  predi┆
0x06740…06760        66 69 6e 65 64 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 09 33 2e 34 0d 0a 6d 61 63 68 69 6e 65   ┆fined ordinal type  3.4  machine┆
0x06760…06780        20 74 79 70 65 09 09 09 33 2e 35 0d 0a 73 65 74 2d 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e   ┆ type   3.5  set-type definition┆
0x06780…067a0        09 09 33 2e 36 0d 0a 70 6f 69 6e 74 65 72 2d 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 09 09   ┆  3.6  pointer-type definition  ┆
0x067a0…067c0        33 2e 37 0d 0a 73 68 69 65 6c 64 65 64 20 74 79 70 65 09 09 09 33 2e 38 0d 0a 73 74 72 75 63 74   ┆3.7  shielded type   3.8  struct┆
0x067c0…067dc        75 72 65 64 2d 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 09 33 2e 39 0d 0a 0d 0a               ┆ured-type definition 3.9    ┆
0x067dc…067df        FormFeed {
0x067dc…067df          0c 83 bc                                                                                          ┆   ┆
0x067dc…067df        }
0x067df…067e0        0a                                                                                                ┆ ┆
0x067e0…06800        a1 4e 6f 74 65 3a 0d 0a 4f 66 20 74 68 65 20 73 69 78 20 63 6c 61 73 73 65 73 20 6f 66 20 74 79   ┆ Note:  Of the six classes of ty┆
0x06800…06820 (52,)  70 65 73 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 61 72 65 20 73 68 69 65 6c 64 65 64 20 74   ┆pes machine types are shielded t┆
0x06820…06840        79 70 65 73 20 0a 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 72 65 64 65 66 69 6e 65 64 2e 0d 0a 0d   ┆ypes  can only be predefined.   ┆
0x06840…06860        0a 0d 0a b0 a1 33 2e 32 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 54 79 70 65 73 0d 0a 0d   ┆     3.2 Declaration of Types   ┆
0x06860…06880        0a 54 79 70 65 73 20 6d 61 79 20 62 65 20 6e 61 6d 65 64 20 61 6e 64 20 64 65 66 69 6e 65 64 20   ┆ Types may be named and defined ┆
0x06880…068a0        69 6e 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 3a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆in type declarations:           ┆
0x068a0…068c0        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 72   ┆                           The r┆
0x068c0…068e0        75 6c 65 73 20 66 6f 72 20 64 65 66 69 6e 69 6e 67 20 74 79 70 65 73 20 61 6c 6c 6f 77 20 73 65   ┆ules for defining types allow se┆
0x068e0…06900        76 65 72 61 6c 20 74 79 70 65 73 20 6f 66 20 75 73 65 20 6f 66 20 0a 28 66 6f 72 77 61 72 64 2c   ┆veral types of use of  (forward,┆
0x06900…06920        20 62 6f 75 6e 64 2c 20 6f 72 20 70 61 72 61 6d 65 74 65 72 69 7a 65 64 29 20 74 79 70 65 20 6e   ┆ bound, or parameterized) type n┆
0x06920…06940        61 6d 65 73 20 69 6e 20 27 64 65 66 69 6e 69 6e 67 20 0a 74 79 70 65 20 73 70 65 63 69 66 69 63   ┆ames in 'defining  type specific┆
0x06940…06960        61 74 69 6f 6e 73 27 2e 20 48 6f 77 65 76 65 72 2c 20 6e 6f 20 74 79 70 65 20 6e 61 6d 65 20 6d   ┆ations'. However, no type name m┆
0x06960…06980        61 79 20 62 65 20 75 73 65 64 20 6f 6e 20 0a 74 68 65 20 72 69 67 68 74 20 68 61 6e 64 20 73 69   ┆ay be used on  the right hand si┆
0x06980…069a0        64 65 20 6f 66 20 61 20 27 73 69 6e 67 6c 65 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e   ┆de of a 'single type declaration┆
0x069a0…069c0        27 20 75 6e 74 69 6c 20 69 74 20 0a 68 61 73 20 62 65 65 6e 20 69 6e 74 72 6f 64 75 63 65 64 20   ┆' until it  has been introduced ┆
0x069c0…069e0        69 6e 20 61 20 70 72 65 63 65 64 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 20 49 6e 20 0a   ┆in a preceding declaration. In  ┆
0x069e0…06a00        70 61 72 74 69 63 75 6c 61 72 20 6e 6f 20 74 79 70 65 20 6e 61 6d 65 20 6d 61 79 20 62 65 20 75   ┆particular no type name may be u┆
0x06a00…06a20 (53,)  73 65 64 20 69 6e 20 69 74 73 20 6f 77 6e 20 27 64 65 66 69 6e 69 6e 67 20 0a 74 79 70 65 20 73   ┆sed in its own 'defining  type s┆
0x06a20…06a40        70 65 63 69 66 69 63 61 74 69 6f 6e 27 2e 0d 0a 0d 0a 41 20 27 66 6f 72 77 61 72 64 2d 74 79 70   ┆pecification'.    A 'forward-typ┆
0x06a40…06a60        65 5f 6e 61 6d 65 27 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   ┆e_name' may only be used in the ┆
0x06a60…06a80        64 65 66 69 6e 69 74 69 6f 6e 6f 66 20 0a 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 61 6e 64 20   ┆definitionof  pointer types and ┆
0x06a80…06aa0        66 6f 72 20 65 76 65 72 79 20 27 66 6f 72 77 61 72 64 20 74 79 70 65 5f 6e 61 6d 65 27 20 6f 63   ┆for every 'forward type_name' oc┆
0x06aa0…06ac0        63 75 72 72 69 6e 67 20 69 6e 20 0a 61 20 27 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 27   ┆curring in  a 'type declaration'┆
0x06ac0…06ae0        2c 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 20 67 69 76 65 6e 20 61 20   ┆, the same name must be given a ┆
0x06ae0…06b00        0a 64 65 66 69 6e 69 74 69 6f 6e 20 28 62 6f 75 6e 64 20 6f 72 20 70 61 72 61 6d 65 74 65 72 69   ┆ definition (bound or parameteri┆
0x06b00…06b20        7a 65 64 29 20 6c 61 74 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 0a 64 65 63 6c 61 72 61 74 69   ┆zed) later within the  declarati┆
0x06b20…06b40        6f 6e 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a 8c 83   ┆on part of the same block.      ┆
0x06b40…06b60        e0 0a 54 68 65 73 65 20 72 75 6c 65 73 20 65 78 63 6c 75 64 65 20 72 65 63 75 72 73 69 6f 6e 20   ┆  These rules exclude recursion ┆
0x06b60…06b80        69 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 0a 73 74 72 75 63 74 75 72 65 64   ┆in the definition of  structured┆
0x06b80…06ba0        20 74 79 70 65 73 2c 20 62 75 74 20 61 6c 6c 6f 77 20 6f 62 6a 65 63 74 73 20 6f 66 20 61 20 73   ┆ types, but allow objects of a s┆
0x06ba0…06bc0        74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 74 6f 20 0a 63 6f 6e 74 61 69 6e 20 70 6f 69 6e 74   ┆tructured type to  contain point┆
0x06bc0…06be0        65 72 73 20 74 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65 20   ┆ers to objects of the same type ┆
0x06be0…06c00        61 6e 64 20 61 6c 73 6f 20 61 6c 6c 6f 77 20 0a 6d 75 74 75 61 6c 20 70 6f 69 6e 74 65 72 73 20   ┆and also allow  mutual pointers ┆
0x06c00…06c20 (54,)  62 65 74 77 65 65 6e 20 73 65 76 65 72 61 6c 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73   ┆between several structured types┆
0x06c20…06c40        2e 0d 0a 0d 0a 41 20 73 69 6e 67 6c 65 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 77   ┆.    A single type declaration w┆
0x06c40…06c60        69 74 68 6f 75 74 20 70 61 72 61 6d 65 74 65 72 73 20 61 73 73 6f 63 69 61 74 65 73 20 74 68 65   ┆ithout parameters associates the┆
0x06c60…06c80        20 0a 27 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65 27 20 77 69 74 68 20 74 68 65 20 74 79 70   ┆  'bound-type_name' with the typ┆
0x06c80…06ca0        65 20 73 70 65 63 69 66 69 65 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74 20 68 61 6e 64 20 0a 73   ┆e specified on the right hand  s┆
0x06ca0…06cc0        69 64 65 2c 20 63 61 6c 6c 65 64 20 a1 74 68 65 20 64 65 66 69 6e 69 6e 67 20 74 79 70 65 e1 2e   ┆ide, called  the defining type .┆
0x06cc0…06ce0        20 54 68 61 74 20 69 73 2c 20 77 68 65 6e 20 74 68 65 20 27 62 6f 75 6e 64 2d 0a 74 79 70 65 5f   ┆ That is, when the 'bound- type_┆
0x06ce0…06d00        6e 61 6d 65 27 20 69 73 20 69 74 73 65 6c 66 20 75 73 65 64 20 61 73 20 61 20 74 79 70 65 20 73   ┆name' is itself used as a type s┆
0x06d00…06d20        70 65 63 69 66 69 63 61 74 69 6f 6e 2c 20 65 2e 67 2e 20 69 6e 20 0a 74 68 65 20 64 65 63 6c 61   ┆pecification, e.g. in  the decla┆
0x06d20…06d40        72 61 74 69 6f 6e 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 2c 20 74 68 65 20 74 79 70 65 20 74 68   ┆ration of an object, the type th┆
0x06d40…06d60        75 73 20 73 70 65 63 69 66 69 65 64 20 0a 69 6e 68 65 72 69 74 73 20 74 68 65 20 76 61 6c 75 65   ┆us specified  inherits the value┆
0x06d60…06d80        20 73 65 74 2c 20 74 68 65 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75   ┆ set, the representation of valu┆
0x06d80…06da0        65 73 2c 20 74 68 65 20 0a 6f 62 6a 65 63 74 20 6c 61 79 6f 75 74 2c 20 74 68 65 20 61 70 70 6c   ┆es, the  object layout, the appl┆
0x06da0…06dc0        69 63 61 62 6c 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 0a 63 6c 61 73 73   ┆icable operations and the  class┆
0x06dc0…06de0        69 66 69 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 65 66 69 6e 69 6e 67 20 74 79 70 65 2e 20   ┆ification of the defining type. ┆
0x06de0…06e00        48 6f 77 65 76 65 72 2c 20 74 68 65 20 74 79 70 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20   ┆However, the type  specified by ┆
0x06e00…06e20 (55,)  74 68 65 20 27 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65 27 20 69 73 20 a1 6e 6f 74 e1 20 63   ┆the 'bound-type_name' is  not  c┆
0x06e20…06e40        6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 0a 74 68 65 20 64 65 66 69 6e 69 6e 67 20 74 79 70   ┆ompatible with  the defining typ┆
0x06e40…06e60        65 2e 20 41 6e 20 65 78 63 65 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 6c 61 74 74 65 72 20 72 75   ┆e. An exception to the latter ru┆
0x06e60…06e80        6c 65 20 6f 63 63 75 72 73 20 0a 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 6e 67 20 74 79 70   ┆le occurs  when the defining typ┆
0x06e80…06ea0        65 20 69 73 20 61 20 73 65 74 20 74 79 70 65 20 28 63 66 2e 20 33 2e 31 30 29 2e 20 54 68 65 20   ┆e is a set type (cf. 3.10). The ┆
0x06ea0…06ec0        0a 64 65 66 69 6e 69 6e 67 20 74 79 70 65 20 69 73 20 65 73 74 61 62 6c 69 73 68 65 64 20 77 68   ┆ defining type is established wh┆
0x06ec0…06ee0        65 6e 20 74 68 65 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 73 20 0a 65 6c 61 62   ┆en the type declaration is  elab┆
0x06ee0…06f00        6f 72 61 74 65 64 20 28 63 66 2e 20 63 68 61 70 74 65 72 20 36 29 2e 0d 0a 0d 0a 41 20 70 61 72   ┆orated (cf. chapter 6).    A par┆
0x06f00…06f20        61 6d 65 74 65 72 69 7a 65 64 20 27 73 69 6e 67 6c 65 20 74 79 70 65 20 64 65 63 6c 61 72 61 74   ┆ameterized 'single type declarat┆
0x06f20…06f40        69 6f 6e 27 20 69 6e 74 72 6f 64 75 63 65 73 20 74 68 65 20 0a 27 70 61 72 61 6d 65 74 65 72 69   ┆ion' introduces the  'parameteri┆
0x06f40…06f60        7a 65 64 2d 74 79 70 65 5f 6e 61 6d 65 27 20 61 73 20 64 65 6e 6f 74 69 6e 67 20 61 20 66 61 6d   ┆zed-type_name' as denoting a fam┆
0x06f60…06f80        69 6c 79 20 6f 66 20 6d 75 74 75 61 6c 6c 79 20 0a 63 6f 6e 66 6f 72 6d 61 6e 74 20 74 79 70 65   ┆ily of mutually  conformant type┆
0x06f80…06fa0        73 2e 20 54 68 65 20 27 66 6f 72 6d 61 6c 20 74 79 70 65 20 70 61 72 61 6d 65 74 65 72 73 27 2c   ┆s. The 'formal type parameters',┆
0x06fa0…06fc0        20 69 2e 65 2e 20 74 68 65 20 0a 27 74 79 70 65 2d 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 73   ┆ i.e. the  'type-parameter_names┆
0x06fc0…06fe0        27 20 6d 61 79 20 62 65 20 75 73 65 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74 20 68 61 6e 64 20   ┆' may be used on the right hand ┆
0x06fe0…07000        73 69 64 65 20 6f 66 20 0a 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 20 54 68 65 20 74 79   ┆side of  the declaration. The ty┆
0x07000…07020 (56,)  70 65 73 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 66 6f 72 6d 61 6c 20 74 79 70 65 20 0a 70   ┆pes specified for formal type  p┆
0x07020…07040        61 72 61 6d 65 74 65 72 73 20 6d 75 73 74 20 62 65 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 73 2e   ┆arameters must be ordinal types.┆
0x07040…07060        20 53 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 20 0a 70 61 72 74 69 63 75 6c 61 72 20   ┆ Specification of a  particular ┆
0x07060…07080        74 79 70 65 20 69 6e 20 61 20 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 66 61 6d 69 6c 79 20 6f   ┆type in a parameterized family o┆
0x07080…070a0        66 20 74 79 70 65 73 20 69 73 20 0a 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 6e 65 78   ┆f types is  described in the nex┆
0x070a0…070c0        74 20 73 65 63 74 69 6f 6e 2e 20 4e 6f 20 74 79 70 65 20 69 73 20 65 73 74 61 62 6c 69 73 68 65   ┆t section. No type is establishe┆
0x070c0…070e0        64 20 77 68 65 6e 20 61 20 0a 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 70 65 20 64 65 63   ┆d when a  parameterized type dec┆
0x070e0…07100        6c 61 72 61 74 69 6f 6e 20 69 73 20 65 6c 61 62 6f 72 61 74 65 64 2e 0d 0a 0d 0a 41 20 74 79 70   ┆laration is elaborated.    A typ┆
0x07100…07120        65 73 69 7a 65 20 63 61 6c 6c 20 69 73 20 73 69 6d 69 6c 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f   ┆esize call is similar in form to┆
0x07120…07140        20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2c 20 62 75 74 20 0a 74 68 65 20 22 70 61 72 61   ┆ a function call, but  the "para┆
0x07140…07160        6d 65 74 65 72 22 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 79 70 65 2e 20 54 68   ┆meter" is the name of a type. Th┆
0x07160…07180        65 20 63 6f 6e 73 74 72 75 63 74 20 61 6c 6c 6f 77 73 20 0a 74 68 65 20 73 69 7a 65 20 6f 66 20   ┆e construct allows  the size of ┆
0x07180…071a0        61 20 74 79 70 65 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 20 63 6f 6d 70 75 74 61 74 69 6f 6e   ┆a type to be used in computation┆
0x071a0…071c0        73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 27 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65   ┆s.          The 'bound-type_name┆
0x071c0…071e0        27 20 6d 75 73 74 20 62 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 62 6f 75 6e 64 20 28 6e   ┆' must be the name of a bound (n┆
0x071e0…07200        6f 74 20 0a 70 61 72 61 6d 65 74 65 72 69 7a 65 64 29 20 74 79 70 65 2e 20 54 68 65 20 76 61 6c   ┆ot  parameterized) type. The val┆
0x07200…07220 (57,)  75 65 20 6f 66 20 61 20 74 79 70 65 73 69 7a 65 20 63 61 6c 6c 20 69 73 20 74 68 65 20 0a 8c 83   ┆ue of a typesize call is the    ┆
0x07220…07240        c8 0a 73 69 7a 65 20 28 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 29 20 6f 66 20 74 68 65 20   ┆  size (number of bytes) of the ┆
0x07240…07260        6e 61 6d 65 64 20 74 79 70 65 20 61 73 20 63 6f 6d 70 75 74 65 64 20 77 68 65 6e 20 0a 74 68 65   ┆named type as computed when  the┆
0x07260…07280        20 74 79 70 65 20 77 61 73 20 65 73 74 61 62 6c 69 73 68 65 64 2e 20 54 68 65 20 74 79 70 65 20   ┆ type was established. The type ┆
0x07280…072a0        6f 66 20 61 20 74 79 70 65 73 69 7a 65 20 63 61 6c 6c 20 69 73 20 0a 69 6e 74 65 67 65 72 2e 0d   ┆of a typesize call is  integer. ┆
0x072a0…072c0        0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 0d 0a 54 59 50 45 0d 0a 20 20 70 74 72 5f 74 79 70 65   ┆    Example:    TYPE    ptr_type┆
0x072c0…072e0        3b 20 20 2d 2d 20 66 6f 72 77 61 72 64 20 61 6e 6e 6f 75 6e 63 65 6d 65 6e 74 0d 0a 20 20 62 6f   ┆;  -- forward announcement    bo┆
0x072e0…07300        75 6e 64 5f 74 79 70 65 3d 41 52 52 41 59 28 31 2e 2e 31 30 29 20 4f 46 20 69 6e 74 65 67 65 72   ┆und_type=ARRAY(1..10) OF integer┆
0x07300…07320        3b 0d 0a 20 20 72 65 63 5f 74 79 70 65 3d 52 45 43 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 20   ┆;    rec_type=RECORD            ┆
0x07320…07340        20 20 20 2d 2d 20 4e 6f 74 65 3a 0d 0a 20 20 20 20 66 31 3a 20 62 6f 75 6e 64 5f 74 79 70 65 3b   ┆   -- Note:      f1: bound_type;┆
0x07340…07360        20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 74 79 70 65 20 6f 66 20 66 31 20 6e 6f 74 20 63   ┆             -- type of f1 not c┆
0x07360…07380        6f 6d 70 61 74 69 62 6c 65 0d 0a 20 20 20 20 66 32 3a 20 41 52 52 41 59 28 31 2e 2e 31 30 29 20   ┆ompatible      f2: ARRAY(1..10) ┆
0x07380…073a0        4f 46 20 69 6e 74 65 67 65 72 20 2d 2d 20 77 69 74 68 20 74 79 70 65 20 6f 66 20 66 32 0d 0a 20   ┆OF integer -- with type of f2   ┆
0x073a0…073c0        20 45 4e 44 28 2a 52 45 43 4f 52 44 2a 29 3b 0d 0a 20 20 70 74 72 5f 74 79 70 65 3d 20 60 72 65   ┆ END(*RECORD*);    ptr_type= `re┆
0x073c0…073e0        63 5f 74 79 70 65 3b 0d 0a 20 20 6d 61 73 6b 5f 74 79 70 65 3d 20 50 41 43 4b 45 44 20 41 52 52   ┆c_type;    mask_type= PACKED ARR┆
0x073e0…07400        41 59 28 31 2e 2e 74 79 70 65 73 69 7a 65 28 62 6f 75 6e 64 5f 74 79 70 65 29 29 20 4f 46 20 62   ┆AY(1..typesize(bound_type)) OF b┆
0x07400…07420 (58,)  79 74 65 0d 0a 0d 0a 0d 0a b0 a1 33 2e 33 20 50 61 72 61 6d 65 74 65 72 69 7a 65 64 20 54 79 70   ┆yte        3.3 Parameterized Typ┆
0x07420…07440        65 73 0d 0a 0d 0a 41 20 66 61 6d 69 6c 79 20 6f 66 20 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20   ┆es    A family of parameterized ┆
0x07440…07460        74 79 70 65 73 20 6d 61 79 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 61 20 74 79 70 65 20 0a   ┆types may be defined in a type  ┆
0x07460…07480        64 65 63 6c 61 72 61 74 69 6f 6e 20 28 73 65 65 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 73   ┆declaration (see the preceding s┆
0x07480…074a0        65 63 74 69 6f 6e 29 2e 20 41 20 70 61 72 74 69 63 75 6c 61 72 20 74 79 70 65 20 0a 69 6e 20 73   ┆ection). A particular type  in s┆
0x074a0…074c0        75 63 68 20 61 20 66 61 6d 69 6c 79 2c 20 63 61 6c 6c 65 64 20 61 20 a1 62 6f 75 6e 64 20 70 61   ┆uch a family, called a  bound pa┆
0x074c0…074e0        72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 70 65 e1 2c 20 69 73 20 0a 6f 62 74 61 69 6e 65 64 20   ┆rameterized type , is  obtained ┆
0x074e0…07500        62 79 20 62 69 6e 64 69 6e 67 20 76 61 6c 75 65 73 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 6c 20   ┆by binding values to the formal ┆
0x07500…07520        74 79 70 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆type parameters.                ┆
0x07520…07540        0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 27 70 61 72 61 6d 65 74 65 72 69 7a 65 64 2d 74 79 70 65 5f   ┆        The 'parameterized-type_┆
0x07540…07560        6e 61 6d 65 27 20 6d 75 73 74 20 6f 63 63 75 72 20 69 6e 20 61 20 70 72 65 63 65 64 69 6e 67 20   ┆name' must occur in a preceding ┆
0x07560…07580        0a 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2c   ┆ parameterized type declaration,┆
0x07580…075a0        20 69 2e 65 2e 20 69 74 20 6d 75 73 74 20 64 65 6e 6f 74 65 20 61 20 74 79 70 65 20 0a 66 61 6d   ┆ i.e. it must denote a type  fam┆
0x075a0…075c0        69 6c 79 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65   ┆ily. The number of formal parame┆
0x075c0…075e0        74 65 72 73 20 69 6e 20 74 68 69 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 0a 6d 75 73 74 20 65   ┆ters in this declaration  must e┆
0x075e0…07600        71 75 61 6c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 27 61 63 74 75 61 6c 20 74 79 70 65 20   ┆qual the number of 'actual type ┆
0x07600…07620 (59,)  70 61 72 61 6d 65 74 65 72 73 27 2c 20 61 6e 64 20 65 61 63 68 20 0a 8c 83 c8 0a 61 63 74 75 61   ┆parameters', and each      actua┆
0x07620…07640        6c 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 61 73 73 69 67 6e 61 62 6c 65 20 74   ┆l parameter must be assignable t┆
0x07640…07660        6f 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67   ┆o the type of the  corresponding┆
0x07660…07680        20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 73   ┆ formal parameter.    The type s┆
0x07680…076a0        70 65 63 69 66 69 65 64 20 62 79 20 61 20 27 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 70   ┆pecified by a 'parameterized typ┆
0x076a0…076c0        65 20 62 69 6e 64 69 6e 67 27 20 69 73 20 0a 65 73 74 61 62 6c 69 73 68 65 64 20 61 63 63 6f 72   ┆e binding' is  established accor┆
0x076c0…076e0        64 69 6e 67 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74   ┆ding to the right hand side of t┆
0x076e0…07700        68 65 20 0a 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 70 65 20 64 65 63 6c 61 72 61 74 69   ┆he  parameterized type declarati┆
0x07700…07720        6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 64 65 66 69 6e 69 6e 67 20 74 79 70 65 20 0a 73 70 65 63   ┆on, i.e. the defining type  spec┆
0x07720…07740        69 66 69 63 61 74 69 6f 6e 2c 20 61 66 74 65 72 20 61 6c 6c 20 6f 63 63 75 72 72 65 6e 63 65 73   ┆ification, after all occurrences┆
0x07740…07760        20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 74 79 70 65 20 0a 70 61 72 61 6d 65 74 65 72 73 20   ┆ of the formal type  parameters ┆
0x07760…07780        68 61 76 65 20 62 65 65 6e 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 74 68 65 20 76 61 6c 75   ┆have been replaced with the valu┆
0x07780…077a0        65 73 20 6f 66 20 74 68 65 20 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 63 74 75 61 6c 20   ┆es of the  corresponding actual ┆
0x077a0…077c0        70 61 72 61 6d 65 74 65 72 73 2e 20 54 68 65 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 74 68   ┆parameters. The properties of th┆
0x077c0…077e0        65 20 0a 64 65 66 69 6e 69 6e 67 20 74 79 70 65 20 61 72 65 20 69 6e 68 65 72 69 74 65 64 20 69   ┆e  defining type are inherited i┆
0x077e0…07800        6e 20 74 68 65 20 73 61 6d 65 20 66 61 73 68 69 6f 6e 20 61 73 20 69 6e 20 74 68 65 20 0a 63 61   ┆n the same fashion as in the  ca┆
0x07800…07820 (60,)  73 65 20 6f 66 20 61 20 27 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65 27 2c 20 63 66 2e 20 74   ┆se of a 'bound-type_name', cf. t┆
0x07820…07840        68 65 20 70 72 65 63 65 64 69 6e 67 20 73 65 63 74 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 20 61 63 74   ┆he preceding section.    The act┆
0x07840…07860        75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73 20 75 73 65 64 20 74 6f 20 65 73 74   ┆ual parameter values used to est┆
0x07860…07880        61 62 6c 69 73 68 20 61 20 62 6f 75 6e 64 20 0a 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79   ┆ablish a bound  parameterized ty┆
0x07880…078a0        70 65 20 61 72 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68   ┆pe are attached to objects of th┆
0x078a0…078c0        65 20 74 79 70 65 2e 20 54 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73 20 61 72   ┆e type. The  parameter values ar┆
0x078c0…078e0        65 20 61 63 63 65 73 73 69 62 6c 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 6f 62 6a 65 63 74   ┆e accessible whenever the object┆
0x078e0…07900        20 74 6f 20 77 68 69 63 68 20 0a 74 68 65 79 20 61 72 65 20 61 74 74 61 63 68 65 64 20 69 73 20   ┆ to which  they are attached is ┆
0x07900…07920        76 69 73 69 62 6c 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20   ┆visible.            The type of ┆
0x07920…07940        74 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 62 6f 75   ┆the denoted object must be a bou┆
0x07940…07960        6e 64 20 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 0a 74 79 70 65 2e 20 54 68 65 20 27 74 79 70   ┆nd parameterized  type. The 'typ┆
0x07960…07980        65 2d 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 27 20 6d 75 73 74 20 6f 63 63 75 72 20 61 6d 6f   ┆e-parameter_name' must occur amo┆
0x07980…079a0        6e 67 20 74 68 65 20 27 66 6f 72 6d 61 6c 20 0a 74 79 70 65 20 70 61 72 61 6d 65 74 65 72 73 27   ┆ng the 'formal  type parameters'┆
0x079a0…079c0        20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 61 20 27 73 65   ┆ of this type. The type of a 'se┆
0x079c0…079e0        6c 65 63 74 65 64 20 74 79 70 65 20 0a 70 61 72 61 6d 65 74 65 72 27 20 69 73 20 74 68 65 20 28   ┆lected type  parameter' is the (┆
0x079e0…07a00        6f 72 64 69 6e 61 6c 29 20 74 79 70 65 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74 68 65 20   ┆ordinal) type specified for the ┆
0x07a00…07a20 (61,)  27 74 79 70 65 2d 0a 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 27 20 61 6e 64 20 69 74 73 20 76   ┆'type- parameter_name' and its v┆
0x07a20…07a40        61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 0a 63 6f 72 72 65 73   ┆alue is the value of the  corres┆
0x07a40…07a60        70 6f 6e 64 69 6e 67 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 61 73 20 65 76 61 6c   ┆ponding actual parameter as eval┆
0x07a60…07a80        75 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 0a 74 79 70 65 20 77 61 73 20   ┆uated when the object  type was ┆
0x07a80…07a90        65 73 74 61 62 6c 69 73 68 65 64 2e 0d 0a 0d 0a                                                   ┆established.    ┆
0x07a90…07a93        FormFeed {
0x07a90…07a93          0c 82 dc                                                                                          ┆   ┆
0x07a90…07a93        }
0x07a93…07aa0        0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 54                                                            ┆  Example:  T┆
0x07aa0…07ac0        59 50 45 0d 0a 20 20 63 6f 6c 75 6d 6e 28 72 6f 77 73 3a 20 31 2e 2e 31 30 30 29 3d 20 41 52 52   ┆YPE    column(rows: 1..100)= ARR┆
0x07ac0…07ae0        41 59 28 31 2e 2e 72 6f 77 73 29 20 4f 46 20 69 6e 74 65 67 65 72 3b 0d 0a 20 20 6d 61 74 72 69   ┆AY(1..rows) OF integer;    matri┆
0x07ae0…07b00        78 28 72 6f 77 73 3a 20 31 2e 2e 31 30 30 29 3d 20 41 52 52 41 59 28 31 2e 2e 72 6f 77 73 29 20   ┆x(rows: 1..100)= ARRAY(1..rows) ┆
0x07b00…07b20        4f 46 20 63 6f 6c 75 6d 6e 28 72 6f 77 73 29 3b 0d 0a 20 20 6d 61 74 72 69 78 5f 31 30 3d 20 6d   ┆OF column(rows);    matrix_10= m┆
0x07b20…07b40        61 74 72 69 78 28 31 30 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 50 52 4f 43 45 44 55 52 45 20 69 6e 76   ┆atrix(10);    ...  PROCEDURE inv┆
0x07b40…07b60        65 72 74 28 61 3a 6d 61 74 72 69 78 29 3b 0d 0a 56 41 52 0d 0a 20 20 6c 6f 63 61 6c 5f 63 6f 70   ┆ert(a:matrix);  VAR    local_cop┆
0x07b60…07b80        79 3a 20 6d 61 74 72 69 78 28 61 21 72 6f 77 73 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 20 20 46 4f 52   ┆y: matrix(a!rows);    ...    FOR┆
0x07b80…07ba0        20 69 3a 3d 31 20 54 4f 20 61 21 72 6f 77 73 20 44 4f 0d 0a 20 20 20 20 2e 2e 2e 0d 0a 0d 0a 0d   ┆ i:=1 TO a!rows DO      ...     ┆
0x07ba0…07bc0        0a b0 a1 33 2e 34 20 4f 72 64 69 6e 61 6c 20 54 79 70 65 73 0d 0a 0d 0a 4f 72 64 69 6e 61 6c 20   ┆   3.4 Ordinal Types    Ordinal ┆
0x07bc0…07be0        74 79 70 65 73 20 61 72 65 20 61 62 73 74 72 61 63 74 20 74 79 70 65 73 2e 20 46 6f 72 20 61 6e   ┆types are abstract types. For an┆
0x07be0…07c00        79 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 74 68 65 72 65 20 0a 65 78 69 73 74 73 20 61 20 6f   ┆y ordinal type there  exists a o┆
0x07c00…07c20 (62,)  6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f   ┆ne-to-one mapping from the set o┆
0x07c20…07c40        66 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 0a 74 79 70 65 20 6f 6e 74 6f 20 61 20 66 69 6e   ┆f values of the  type onto a fin┆
0x07c40…07c60        69 74 65 20 69 6e 74 65 72 76 61 6c 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72 61 6c 20 6e 75 6d   ┆ite interval of the integral num┆
0x07c60…07c80        62 65 72 73 2c 20 0a 79 69 65 6c 64 69 6e 67 20 74 68 65 20 a1 6f 72 64 69 6e 61 6c 20 76 61 6c   ┆bers,  yielding the  ordinal val┆
0x07c80…07ca0        75 65 e1 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 61 63 68 20 76 61 6c 75 65 20   ┆ue  corresponding to each value ┆
0x07ca0…07cc0        6f 66 20 0a 74 68 65 20 74 79 70 65 2e 20 49 74 20 66 6f 6c 6c 6f 77 73 20 74 68 61 74 20 74 68   ┆of  the type. It follows that th┆
0x07cc0…07ce0        65 20 76 61 6c 75 65 20 73 65 74 20 6f 66 20 61 6e 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 0a   ┆e value set of an ordinal type  ┆
0x07ce0…07d00        69 73 20 6f 72 64 65 72 65 64 20 62 79 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 20 61 6e 64 20   ┆is ordered by ordinal value and ┆
0x07d00…07d20        74 68 61 74 20 65 76 65 72 79 20 73 75 63 68 20 76 61 6c 75 65 20 73 65 74 20 0a 68 61 73 20 61   ┆that every such value set  has a┆
0x07d20…07d40        20 66 69 72 73 74 20 61 6e 64 20 61 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 2e 20 42 79 20 74 68   ┆ first and a last element. By th┆
0x07d40…07d60        65 20 6f 72 64 65 72 69 6e 67 2c 20 65 76 65 72 79 20 0a 76 61 6c 75 65 2c 20 65 78 63 65 70 74   ┆e ordering, every  value, except┆
0x07d60…07d80        20 74 68 65 20 6c 61 73 74 20 6f 6e 65 2c 20 68 61 73 20 61 20 a1 73 75 63 63 65 73 73 6f 72 e1   ┆ the last one, has a  successor ┆
0x07d80…07da0        20 61 6e 64 20 65 76 65 72 79 20 76 61 6c 75 65 2c 20 0a 65 78 63 65 70 74 20 74 68 65 20 66 69   ┆ and every value,  except the fi┆
0x07da0…07dc0        72 73 74 20 6f 6e 65 2c 20 68 61 73 20 61 20 a1 70 72 65 64 65 63 65 73 73 6f 72 e1 2e 20 53 69   ┆rst one, has a  predecessor . Si┆
0x07dc0…07de0        6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 0a 72 65 6c 61 74 69 6f 6e 73 20 a1 67 72 65 61 74 65 72   ┆milarly, the  relations  greater┆
0x07de0…07e00        20 74 68 61 6e e1 20 61 6e 64 20 a1 73 6d 61 6c 6c 65 72 20 74 68 61 6e e1 20 61 72 65 20 64 65   ┆ than  and  smaller than  are de┆
0x07e00…07e20 (63,)  66 69 6e 65 64 20 66 6f 72 20 0a 70 61 69 72 73 20 6f 66 20 76 61 6c 75 65 73 20 62 79 20 74 68   ┆fined for  pairs of values by th┆
0x07e20…07e40        65 20 6f 72 64 65 72 69 6e 67 2e 0d 0a 0d 0a 54 68 65 20 72 65 6c 61 74 69 6f 6e 61 6c 20 6f 70   ┆e ordering.    The relational op┆
0x07e40…07e60        65 72 61 74 6f 72 73 20 77 68 69 63 68 20 70 72 6f 64 75 63 65 20 72 65 73 75 6c 74 73 20 6f 66   ┆erators which produce results of┆
0x07e60…07e80        20 74 68 65 20 0a 70 72 65 64 65 66 69 6e 65 64 20 74 79 70 65 20 62 6f 6f 6c 65 61 6e 20 61 70   ┆ the  predefined type boolean ap┆
0x07e80…07ea0        70 6c 79 20 74 6f 20 70 61 69 72 73 20 6f 66 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 79 20   ┆ply to pairs of operands of any ┆
0x07ea0…07ec0        0a 6f 72 64 69 6e 61 6c 20 74 79 70 65 2e 20 69 2e 65 2e 20 74 68 65 20 74 77 6f 20 6f 70 65 72   ┆ ordinal type. i.e. the two oper┆
0x07ec0…07ee0        61 6e 64 73 20 6d 75 73 74 20 62 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 0a 6f 72 64 69 6e 61   ┆ands must be of the same  ordina┆
0x07ee0…07f00        6c 20 74 79 70 65 2e 20 4c 65 74 20 6f 6c 65 66 74 20 61 6e 64 20 6f 72 69 67 68 74 20 64 65 6e   ┆l type. Let oleft and oright den┆
0x07f00…07f20        6f 74 65 20 74 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 0a 6f 66 20 6c 65 66 74 20   ┆ote the ordinal values  of left ┆
0x07f20…07f40        61 6e 64 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e   ┆and right operand, respectively.┆
0x07f40…07f60        20 54 68 65 20 72 65 6c 61 74 69 6f 6e 61 6c 20 0a 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 74   ┆ The relational  operators are t┆
0x07f60…07f80        68 65 6e 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62   ┆hen defined in the following tab┆
0x07f80…07f87        6c 65 3a 0d 0a 0d 0a                                                                              ┆le:    ┆
0x07f87…07fc0        Params {
0x07f87…07fc0          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 41 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         A1                 ┆
0x07f87…07fc0          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x07f87…07fc0        }
0x07fc0…07ff9        Params {
0x07fc0…07ff9          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x07fc0…07ff9          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x07fc0…07ff9        }
0x07ff9…07ffa        0a                                                                                                ┆ ┆
0x07ffa…07ffd        FormFeed {
0x07ffa…07ffd          0c 83 a4                                                                                          ┆   ┆
0x07ffa…07ffd        }
0x07ffd…08000        0a a1 6f                                                                                          ┆  o┆
0x08000…08020 (64,)  70 65 72 61 74 6f 72 20 20 72 65 73 75 6c 74 05 05 0d 0a 20 3d 09 20 20 20 20 20 20 74 72 75 65   ┆perator  result     =       true┆
0x08020…08040        20 69 66 20 6f 6c 65 66 74 20 65 71 75 61 6c 73 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69   ┆ if oleft equals oright, otherwi┆
0x08040…08060        73 65 20 66 61 6c 73 65 0d 0a 20 3c 3e 09 20 20 20 20 20 20 66 61 6c 73 65 20 69 66 20 6f 6c 65   ┆se false   <>       false if ole┆
0x08060…08080        66 74 20 65 71 75 61 6c 73 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69 73 65 20 74 72 75 65   ┆ft equals oright, otherwise true┆
0x08080…080a0        0d 0a 20 3e 09 20 20 20 20 20 20 74 72 75 65 20 69 66 20 6f 6c 65 66 74 20 69 73 20 67 72 65 61   ┆   >       true if oleft is grea┆
0x080a0…080c0        74 65 72 20 74 68 61 6e 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69 73 65 20 66 61 6c 73 65   ┆ter than oright, otherwise false┆
0x080c0…080e0        0d 0a 20 3c 3d 09 20 20 20 20 20 20 66 61 6c 73 65 20 69 66 20 6f 6c 65 66 74 20 69 73 20 67 72   ┆   <=       false if oleft is gr┆
0x080e0…08100        65 61 74 65 72 20 74 68 61 6e 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69 73 65 20 74 72 75   ┆eater than oright, otherwise tru┆
0x08100…08120        65 0d 0a 20 3c 09 20 20 20 20 20 20 74 72 75 65 20 69 66 20 6f 6c 65 66 74 20 69 73 20 73 6d 61   ┆e   <       true if oleft is sma┆
0x08120…08140        6c 6c 65 72 20 74 68 61 6e 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69 73 65 20 66 61 6c 73   ┆ller than oright, otherwise fals┆
0x08140…08160        65 0d 0a 20 3e 3d 09 20 20 20 20 20 20 66 61 6c 73 65 20 69 66 20 6f 6c 65 66 74 20 69 73 20 73   ┆e   >=       false if oleft is s┆
0x08160…08180        6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 72 69 67 68 74 2c 20 6f 74 68 65 72 77 69 73 65 20 74 72   ┆maller than oright, otherwise tr┆
0x08180…08186        75 65 0d 0a 0d 0a                                                                                 ┆ue    ┆
0x08186…081bf        Params {
0x08186…081bf          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x08186…081bf          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x08186…081bf        }
0x081bf…081f8        Params {
0x081bf…081f8          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 41 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         A1                 ┆
0x081bf…081f8          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x081bf…081f8        }
0x081f8…08200        0a 46 6f 72 20 65 76 65                                                                           ┆ For eve┆
0x08200…08220 (65,)  72 79 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 6f 74 79 70 65 2c 20 74 68 65 72 65 20 65 78 69   ┆ry ordinal type otype, there exi┆
0x08220…08240        73 74 20 74 68 65 72 65 65 20 70 72 65 64 65 66 69 6e 65 64 20 0a 66 75 6e 63 74 69 6f 6e 73 20   ┆st theree predefined  functions ┆
0x08240…08260        61 73 20 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 3a 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20   ┆as described below:    FUNCTION ┆
0x08260…08280        73 75 63 63 28 76 3a 20 6f 74 79 70 65 29 3a 20 6f 74 79 70 65 0d 0a 54 68 65 20 72 65 73 75 6c   ┆succ(v: otype): otype  The resul┆
0x08280…082a0        74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 73 75 63 63 20 69 73 20 74 68 65 20 73 75 63 63 65   ┆t of a call of succ is the succe┆
0x082a0…082c0        73 73 6f 72 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 0a 6f 66 20 74 68 65 20 70 61 72 61 6d 65   ┆ssor of the value  of the parame┆
0x082c0…082e0        74 65 72 20 76 2c 20 65 78 63 65 70 74 20 69 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 74   ┆ter v, except if this value is t┆
0x082e0…08300        68 65 20 6c 61 73 74 20 6f 6e 65 2c 20 69 6e 20 0a 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   ┆he last one, in  which case the ┆
0x08300…08320        63 61 6c 6c 20 63 61 75 73 65 73 20 61 20 66 61 75 6c 74 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e   ┆call causes a fault.    FUNCTION┆
0x08320…08340        20 70 72 65 64 28 76 3a 20 6f 74 79 70 65 29 3a 20 6f 74 79 70 65 0d 0a 54 68 65 20 72 65 73 75   ┆ pred(v: otype): otype  The resu┆
0x08340…08360        6c 74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 70 72 65 64 20 69 73 20 74 68 65 20 70 72 65 64   ┆lt of a call of pred is the pred┆
0x08360…08380        65 63 65 73 73 6f 72 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 0a 6f 66 20 74 68 65 20 70 61 72   ┆ecessor of the value  of the par┆
0x08380…083a0        61 6d 65 74 65 72 20 76 2c 20 65 78 63 65 70 74 20 69 66 20 74 68 69 73 20 76 61 6c 75 65 20 69   ┆ameter v, except if this value i┆
0x083a0…083c0        73 20 74 68 65 20 66 69 72 73 74 20 6f 6e 65 2c 20 0a 69 6e 20 77 68 69 63 68 20 63 61 73 65 20   ┆s the first one,  in which case ┆
0x083c0…083e0        74 68 65 20 63 61 6c 6c 20 63 61 75 73 65 73 20 61 20 66 61 75 6c 74 2e 0d 0a 0d 0a 46 55 4e 43   ┆the call causes a fault.    FUNC┆
0x083e0…08400        54 49 4f 4e 20 6f 72 64 28 76 3a 20 6f 74 79 70 65 29 3a 20 69 6e 74 65 67 65 72 0d 0a 54 68 65   ┆TION ord(v: otype): integer  The┆
0x08400…08420 (66,)  20 72 65 73 75 6c 74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 6f 72 64 20 69 73 20 74 68 65 20   ┆ result of a call of ord is the ┆
0x08420…08440        6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 20 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20   ┆ordinal value  corresponding to ┆
0x08440…08460        74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 76 2e 0d 0a 0d   ┆the value of the parameter v.   ┆
0x08460…08480        0a 54 68 65 72 65 20 61 72 65 20 74 68 72 65 65 20 70 72 65 64 65 66 69 6e 65 64 20 6f 72 64 69   ┆ There are three predefined ordi┆
0x08480…084a0        6e 61 6c 20 74 79 70 65 73 20 61 6e 64 20 74 77 6f 20 77 61 79 73 20 74 6f 20 0a 64 65 66 69 6e   ┆nal types and two ways to  defin┆
0x084a0…084c0        65 20 6e 65 77 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 73 2e 20 54 68 65 73 65 20 61 72 65 20 64   ┆e new ordinal types. These are d┆
0x084c0…084e0        65 73 63 72 69 62 65 64 20 69 6e 20 64 65 74 61 69 6c 20 69 6e 20 0a 74 68 65 20 66 6f 6c 6c 6f   ┆escribed in detail in  the follo┆
0x084e0…08500        77 69 6e 67 20 73 75 62 73 65 63 74 69 6f 6e 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆wing subsections.               ┆
0x08500…0850b        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a                                                                  ┆           ┆
0x0850b…0850e        FormFeed {
0x0850b…0850e          0c 83 e0                                                                                          ┆   ┆
0x0850b…0850e        }
0x0850e…08520        0a b0 a1 33 2e 34 2e 31 20 54 68 65 20 54 79 70 65 20                                             ┆   3.4.1 The Type ┆
0x08520…08540        42 6f 6f 6c 65 61 6e 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 62 6f 6f 6c 65 61 6e 20 68 61 73 20   ┆Boolean    The type boolean has ┆
0x08540…08560        74 77 6f 20 76 61 6c 75 65 73 20 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74   ┆two values which correspond to t┆
0x08560…08580        72 75 74 68 20 0a 76 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20   ┆ruth  values and are denoted by ┆
0x08580…085a0        74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 76 61 6c 75 65 20 6e 61 6d 65 73 20 a1 66 61 6c 73   ┆the predefined value names  fals┆
0x085a0…085c0        65 e1 20 0a 61 6e 64 20 a1 74 72 75 65 e1 2e 20 54 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75   ┆e   and  true . The ordinal valu┆
0x085c0…085e0        65 73 20 61 72 65 3a 20 6f 72 64 28 66 61 6c 73 65 29 3d 30 20 61 6e 64 20 0a 6f 72 64 28 74 72   ┆es are: ord(false)=0 and  ord(tr┆
0x085e0…08600        75 65 29 3d 31 2e 0d 0a 0d 0a 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 64 79 61 64 69 63 20 6f   ┆ue)=1.    There are two dyadic o┆
0x08600…08620 (67,)  70 65 72 61 74 6f 72 73 20 77 68 69 63 68 20 74 61 6b 65 20 62 6f 6f 6c 65 61 6e 20 6f 70 65 72   ┆perators which take boolean oper┆
0x08620…08640        61 6e 64 73 20 0a 61 6e 64 20 70 72 6f 64 75 63 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75   ┆ands  and produce a boolean resu┆
0x08640…08660        6c 74 3a 20 41 4e 44 20 61 6e 64 20 4f 52 2e 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 0a 6d 6f   ┆lt: AND and OR. There is one  mo┆
0x08660…08680        6e 61 64 69 63 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 74 61 6b 65 73 20 61 20 62 6f 6f   ┆nadic operator which takes a boo┆
0x08680…086a0        6c 65 61 6e 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 70 72 6f 64 75 63 65 73 20 0a 61 20 62 6f 6f   ┆lean operand and produces  a boo┆
0x086a0…086c0        6c 65 61 6e 20 72 65 73 75 6c 74 3a 20 4e 4f 54 2e 20 54 68 65 20 72 65 73 75 6c 74 73 20 70 72   ┆lean result: NOT. The results pr┆
0x086c0…086e0        6f 64 75 63 65 64 20 62 79 20 74 68 65 73 65 20 0a 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 69   ┆oduced by these  operators are i┆
0x086e0…08700        6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20 73 74 61 6e 64 61 72 64 20 6c 6f 67 69 63   ┆n accordance with standard logic┆
0x08700…08720        61 6c 20 74 72 75 74 68 20 0a 74 61 62 6c 65 73 20 66 6f 72 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e   ┆al truth  tables for conjunction┆
0x08720…08740        2c 20 64 69 73 6a 75 6e 63 74 69 6f 6e 20 61 6e 64 20 6e 65 67 61 74 69 6f 6e 2c 20 0a 72 65 73   ┆, disjunction and negation,  res┆
0x08740…08760        70 65 63 74 69 76 65 6c 79 2e 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 68 65 20 64 79 61 64 69   ┆pectively. In addition the dyadi┆
0x08760…08780        63 20 6f 70 65 72 61 74 6f 72 20 58 4f 52 20 69 73 20 0a 70 72 6f 76 69 64 65 64 20 66 6f 72 20   ┆c operator XOR is  provided for ┆
0x08780…087a0        62 6f 6f 6c 65 61 6e 20 6f 70 65 72 61 6e 64 73 2e 20 49 74 73 20 72 65 73 75 6c 74 2c 20 77 68   ┆boolean operands. Its result, wh┆
0x087a0…087c0        69 63 68 20 69 73 20 61 6c 73 6f 20 0a 62 6f 6f 6c 65 61 6e 2c 20 69 73 20 64 65 66 69 6e 65 64   ┆ich is also  boolean, is defined┆
0x087c0…087e0        20 62 79 20 74 68 65 20 66 6f 72 6d 75 6c 61 0d 0a 20 20 20 62 31 20 58 4f 52 20 62 32 3d 28 62   ┆ by the formula     b1 XOR b2=(b┆
0x087e0…08800        31 20 41 4e 44 20 4e 4f 54 20 62 32 29 20 4f 52 20 28 4e 4f 54 20 62 31 20 41 4e 44 20 62 32 29   ┆1 AND NOT b2) OR (NOT b1 AND b2)┆
0x08800…08820 (68,)  2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e 34 2e 32 20 54 68 65 20 54 79 70 65 20 43 68 61 72 0d 0a 0d 0a   ┆.        3.4.2 The Type Char    ┆
0x08820…08840        74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 79 70 65 20 63 68 61 72 20 61 72 65 20 63 68 61 72   ┆the values of type char are char┆
0x08840…08860        61 63 74 65 72 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 61 20 0a 63 68 61 72 61 63 74 65 72   ┆acters belonging to a  character┆
0x08860…08880        20 73 65 74 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 49 53 4f 2d 36 34 36 20 28 33 29 2c 20 69   ┆ set derived from ISO-646 (3), i┆
0x08880…088a0        2e 65 2e 20 61 6e 20 41 53 43 49 49 2d 6c 69 6b 65 20 0a 63 68 61 72 61 63 74 65 72 20 63 6f 64   ┆.e. an ASCII-like  character cod┆
0x088a0…088c0        65 20 73 65 74 2e 0d 0a 0d 0a 54 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 6f 66 20   ┆e set.    The ordinal values of ┆
0x088c0…088e0        74 68 65 20 74 79 70 65 20 63 68 61 72 20 73 70 61 6e 20 74 68 65 20 69 6e 74 65 72 76 61 6c 20   ┆the type char span the interval ┆
0x088e0…08900        0a 30 2e 2e 32 35 35 2e 20 54 68 65 20 63 68 61 72 61 63 74 65 72 73 20 77 69 74 68 20 74 68 65   ┆ 0..255. The characters with the┆
0x08900…08920        20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 30 2e 2e 33 32 20 61 72 65 20 0a 64 65 6e 6f 74   ┆ ordinal values 0..32 are  denot┆
0x08920…08940        65 64 20 62 79 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 76 61 6c 75 65 20 6e 61 6d 65 73   ┆ed by the predefined value names┆
0x08940…08960        20 4e 55 4c 2c 20 53 4f 48 2c 20 53 54 58 2c 20 45 54 58 2c 20 0a 45 4f 54 2c 20 45 4e 51 2c 20   ┆ NUL, SOH, STX, ETX,  EOT, ENQ, ┆
0x08960…08980        41 43 4b 2c 20 42 45 4c 2c 20 42 53 2c 20 48 54 2c 20 4c 46 2c 20 56 54 2c 20 46 46 2c 20 43 52   ┆ACK, BEL, BS, HT, LF, VT, FF, CR┆
0x08980…089a0        2c 20 53 4f 2c 20 53 49 2c 20 44 4c 45 2c 20 0a 44 43 31 2c 20 44 43 32 2c 20 44 43 33 2c 20 44   ┆, SO, SI, DLE,  DC1, DC2, DC3, D┆
0x089a0…089c0        43 34 2c 20 4e 41 4b 2c 20 53 59 4e 2c 20 45 54 42 2c 20 43 41 4e 2c 20 45 4d 2c 20 53 55 42 2c   ┆C4, NAK, SYN, ETB, CAN, EM, SUB,┆
0x089c0…089e0        20 45 53 43 2c 20 46 53 2c 20 0a 47 53 2c 20 52 53 2c 20 55 53 2c 20 53 50 2e 20 54 68 65 20 63   ┆ ESC, FS,  GS, RS, US, SP. The c┆
0x089e0…08a00        68 61 72 61 63 74 65 72 20 77 69 74 68 20 74 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 20   ┆haracter with the ordinal value ┆
0x08a00…08a20 (69,)  31 32 37 20 69 73 20 0a 64 65 6e 6f 74 65 64 20 62 79 20 74 68 65 20 70 72 65 64 65 66 69 6e 65   ┆127 is  denoted by the predefine┆
0x08a20…08a40        64 20 76 61 6c 75 65 20 6e 61 6d 65 20 44 45 4c 2e 20 54 68 65 20 63 68 61 72 61 63 74 65 72 73   ┆d value name DEL. The characters┆
0x08a40…08a60        20 0a 77 69 74 68 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 61 6e   ┆  with ordinal values in the ran┆
0x08a60…08a80        67 65 20 33 32 2e 2e 31 32 36 20 61 72 65 20 67 72 61 70 68 69 63 20 0a 63 68 61 72 63 74 65 72   ┆ge 32..126 are graphic  charcter┆
0x08a80…08aa0        73 20 61 6e 64 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20 63 68 61 72 61 63 74 65 72 20 6c   ┆s and are denoted by character l┆
0x08aa0…08ac0        69 74 65 72 61 6c 73 2c 20 69 2e 65 2e 20 74 68 65 20 0a 67 72 61 70 68 69 63 20 73 79 6d 62 6f   ┆iterals, i.e. the  graphic symbo┆
0x08ac0…08ae0        6c 20 28 6c 65 74 74 65 72 2c 20 64 69 67 69 74 20 65 74 63 2e 29 20 69 6e 20 71 75 65 73 74 69   ┆l (letter, digit etc.) in questi┆
0x08ae0…08b00        6f 6e 2c 20 62 65 74 77 65 65 6e 20 0a 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 2e 20 54 68 65 20   ┆on, between  single quotes. The ┆
0x08b00…08b20        73 65 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 67 72 61 70 68 69 63 20 63 68 61 72 61 63 74   ┆set of available graphic charact┆
0x08b20…08b40        65 72 73 20 61 6e 64 20 0a 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 72 64 69 6e   ┆ers and  the corresponding ordin┆
0x08b40…08b60        61 6c 20 76 61 6c 75 65 73 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 2f   ┆al values is implementation and/┆
0x08b60…08b80        6f 72 20 0a 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 2e 20 4e 6f 20 6e   ┆or  installation dependent. No n┆
0x08b80…08ba0        6f 74 61 74 69 6f 6e 20 65 78 69 73 74 73 20 66 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 0a 77   ┆otation exists for characters  w┆
0x08ba0…08bc0        69 74 68 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 61 6e 67 65 20   ┆ith ordinal values in the range ┆
0x08bc0…08be0        31 32 38 2e 2e 32 35 35 2e 0d 0a 0d 0a 8c 83 e0 0a 54 68 65 20 67 72 61 70 68 69 63 20 63 68 61   ┆128..255.        The graphic cha┆
0x08be0…08c00        72 61 63 74 65 72 20 73 79 6d 62 6f 6c 73 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 61 6e 20 0a   ┆racter symbols supported by an  ┆
0x08c00…08c20 (70,)  69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2f 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 6d 61 79 20   ┆implementation/installation may ┆
0x08c20…08c40        61 6c 73 6f 20 62 65 20 75 73 65 64 20 69 6e 20 63 68 61 72 61 63 74 65 72 20 0a 73 74 72 69 6e   ┆also be used in character  strin┆
0x08c40…08c60        67 73 20 28 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 33 2e 39 2e 34 29 2e 0d 0a 0d 0a 54 68   ┆gs (cf. subsection 3.9.4).    Th┆
0x08c60…08c80        65 72 65 20 65 78 69 73 74 73 20 61 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e   ┆ere exists a predefined function┆
0x08c80…08ca0        20 77 68 69 63 68 20 79 69 65 6c 64 73 20 61 20 63 68 61 72 61 63 74 65 72 20 0a 72 65 73 75 6c   ┆ which yields a character  resul┆
0x08ca0…08cc0        74 3a 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 63 68 72 28 6e 3a 20 30 2e 2e 32 35 35 29 3a 20 63   ┆t:    FUNCTION chr(n: 0..255): c┆
0x08cc0…08ce0        68 61 72 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 63 68 72   ┆har  The result of a call of chr┆
0x08ce0…08d00        20 69 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 77 68 6f 73 65 20 6f 72 64 69 6e 61 6c 20   ┆ is the character whose ordinal ┆
0x08d00…08d20        0a 76 61 6c 75 65 20 65 71 75 61 6c 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70   ┆ value equals the value of the p┆
0x08d20…08d40        61 72 61 6d 65 74 65 72 20 6e 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 43 4f 4e 53 54 20   ┆arameter n.     Example:  CONST ┆
0x08d40…08d60        20 73 69 6e 67 6c 65 5f 71 75 6f 74 65 3d 27 27 27 3b 0d 0a 54 59 50 45 20 20 20 73 6d 61 6c 6c   ┆ single_quote=''';  TYPE   small┆
0x08d60…08d80        5f 6c 65 74 74 65 72 3d 27 61 27 2e 2e 27 7a 27 0d 0a 0d 0a 0d 0a b0 a1 33 2e 34 2e 33 20 54 68   ┆_letter='a'..'z'        3.4.3 Th┆
0x08d80…08da0        65 20 54 79 70 65 20 49 6e 74 65 67 65 72 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20   ┆e Type Integer    The values of ┆
0x08da0…08dc0        74 79 70 65 20 69 6e 74 65 65 72 20 61 72 65 20 69 6e 74 65 67 72 61 6c 20 6e 75 6d 62 65 72 73   ┆type inteer are integral numbers┆
0x08dc0…08de0        2e 20 54 68 65 20 6f 72 64 69 6e 61 6c 20 0a 76 61 6c 75 65 20 6f 66 20 73 75 63 68 20 61 20 6e   ┆. The ordinal  value of such a n┆
0x08de0…08e00        75 6d 62 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 69 74 73 65 6c 66 2e 20 54 68 65 20   ┆umber is the number itself. The ┆
0x08e00…08e20 (71,)  72 61 6e 67 65 20 6f 66 20 0a 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 2c 20 69 2e 65 2e   ┆range of  the type integer, i.e.┆
0x08e20…08e40        20 74 68 65 20 69 6e 74 65 72 76 61 6c 20 73 70 61 6e 6e 65 64 20 62 79 20 69 74 73 20 76 61 6c   ┆ the interval spanned by its val┆
0x08e40…08e60        75 65 73 20 69 73 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74   ┆ues is  implementation dependent┆
0x08e60…08e80        2e 20 50 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 0a 64   ┆. Positive integer values are  d┆
0x08e80…08ea0        65 6e 6f 74 65 64 20 62 79 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 73 2c 20 63 66 2e 20 73   ┆enoted by integer numbers, cf. s┆
0x08ea0…08ec0        65 63 74 69 6f 6e 20 32 2e 34 2e 0d 0a 0d 0a 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 64 79   ┆ection 2.4.    There are five dy┆
0x08ec0…08ee0        61 64 69 63 20 6f 70 65 72 61 74 6f 72 73 20 77 68 69 63 68 20 74 61 6b 65 20 69 6e 74 65 67 65   ┆adic operators which take intege┆
0x08ee0…08f00        72 20 6f 70 65 72 61 6e 64 73 20 0a 61 6e 64 20 70 72 6f 64 75 63 65 20 69 6e 74 65 67 65 72 20   ┆r operands  and produce integer ┆
0x08f00…08f20        72 65 73 75 6c 74 73 3a 0d 0a 0d 0a a1 6f 70 65 72 61 74 6f 72 20 20 64 65 73 63 72 69 70 74 69   ┆results:     operator  descripti┆
0x08f20…08f40        6f 6e 05 0d 0a 20 20 2b 09 20 20 20 20 20 20 61 64 64 69 74 69 6f 6e 0d 0a 20 20 2d 20 20 20 20   ┆on     +       addition    -    ┆
0x08f40…08f60        20 20 20 73 75 62 74 72 61 63 74 69 6f 6e 0d 0a 20 20 2a 20 20 20 20 20 20 20 6d 75 6c 74 69 70   ┆   subtraction    *       multip┆
0x08f60…08f80        6c 69 63 61 74 69 6f 6e 0d 0a 20 44 49 56 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 64 69 76 69   ┆lication   DIV      integer divi┆
0x08f80…08fa0        73 69 6f 6e 20 28 71 75 6f 74 69 65 6e 74 20 74 72 75 6e 63 61 74 65 64 20 74 6f 77 61 72 64 20   ┆sion (quotient truncated toward ┆
0x08fa0…08fc0        7a 65 72 6f 29 0d 0a 20 4d 4f 44 20 20 20 20 20 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 69 6e   ┆zero)   MOD      remainder of in┆
0x08fc0…08fe0        74 65 67 65 72 20 64 69 76 69 73 69 6f 6e 2c 20 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   ┆teger division, i.e.            ┆
0x08fe0…09000        61 20 4d 4f 44 20 62 20 3d 20 61 2d 62 2a 28 61 20 44 49 56 20 62 29 0d 0a 0d 0a 2b 20 61 6e 64   ┆a MOD b = a-b*(a DIV b)    + and┆
0x09000…09020 (72,)  20 2d 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 6d 6f 6e 61 64 69 63 20 6f   ┆ - may also be used as monadic o┆
0x09020…09040        70 65 72 61 74 6f 72 73 2c 20 69 6d 70 6c 79 69 6e 67 20 61 6e 20 0a 69 6d 70 6c 69 63 69 74 20   ┆perators, implying an  implicit ┆
0x09040…09060        6c 65 66 74 20 6f 70 65 72 61 6e 64 20 77 69 74 68 20 76 61 6c 75 65 20 30 2e 20 57 68 65 6e 20   ┆left operand with value 0. When ┆
0x09060…09080        74 68 65 20 72 65 73 75 6c 74 20 70 72 6f 64 75 63 65 64 20 0a 62 79 20 61 6e 20 61 72 69 74 68   ┆the result produced  by an arith┆
0x09080…090a0        6d 65 74 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 66 61 6c 6c 73 20 6f 75 74 73 69 64 65 20 74 68   ┆metic operation falls outside th┆
0x090a0…090c0        65 20 72 61 6e 67 65 20 6f 66 20 0a 8c 83 c8 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 73   ┆e range of      integer values s┆
0x090c0…090e0        75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61   ┆upported by the implementation a┆
0x090e0…09100        20 66 61 75 6c 74 20 0a 6f 63 63 75 72 73 2e 0d 0a 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66   ┆ fault  occurs.    The result of┆
0x09100…09120        20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 61 62 73 3a 0d 0a 0d   ┆ the predefined function abs:   ┆
0x09120…09140        0a 46 55 4e 43 54 49 4f 4e 20 61 62 73 28 6e 3a 20 69 6e 74 65 67 65 72 29 3a 20 30 2e 2e 6d 61   ┆ FUNCTION abs(n: integer): 0..ma┆
0x09140…09160        78 69 6e 74 0d 0a 69 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74   ┆xint  is the absolute value of t┆
0x09160…09180        68 65 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 69 73 20 76 61 6c 75   ┆he parameter value. If this valu┆
0x09180…091a0        65 20 0a 66 61 6c 6c 73 20 6f 75 74 73 69 64 65 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 72   ┆e  falls outside the supported r┆
0x091a0…091c0        61 6e 67 65 20 74 68 65 20 63 61 6c 6c 20 63 61 75 73 65 73 20 61 20 66 61 75 6c 74 2e 0d 0a 0d   ┆ange the call causes a fault.   ┆
0x091c0…091e0        0a 54 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 76 61 6c 75 65 20 6e 61 6d 65 73 20 6d 61 78 69   ┆ The predefined value names maxi┆
0x091e0…09200        6e 74 20 61 6e 64 20 6d 69 6e 69 6e 74 20 64 65 6e 6f 74 65 20 74 68 65 20 0a 6c 61 72 67 65 73   ┆nt and minint denote the  larges┆
0x09200…09220 (73,)  74 20 61 6e 64 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65   ┆t and the smallest integer value┆
0x09220…09240        2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 0a 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   ┆, respectively,  supported by th┆
0x09240…09260        65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e 34 2e 34 20 45   ┆e implementation.        3.4.4 E┆
0x09260…09280        6e 75 6d 65 72 61 74 69 6f 6e 20 54 79 70 65 73 0d 0a 0d 0a 41 6e 20 65 6e 75 6d 65 72 61 74 69   ┆numeration Types    An enumerati┆
0x09280…092a0        6f 6e 20 74 79 70 65 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79   ┆on type is defined by explicitly┆
0x092a0…092c0        20 6e 61 6d 69 6e 67 20 69 74 73 20 0a 76 61 6c 75 65 73 3a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆ naming its  values:            ┆
0x092c0…092e0        54 68 65 20 6e 61 6d 65 73 20 67 69 76 65 6e 20 69 6e 74 20 68 65 20 64 65 66 69 6e 69 74 69 6f   ┆The names given int he definitio┆
0x092e0…09300        6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 64 65 6e 6f 74 65 20 74 68 65 20 0a 76 61 6c 75 65 73   ┆n are used to denote the  values┆
0x09300…09320        20 6f 66 20 74 68 65 20 74 79 70 65 20 74 68 75 73 20 64 65 66 69 6e 65 64 2e 20 43 6f 6e 73 69   ┆ of the type thus defined. Consi┆
0x09320…09340        64 65 72 20 61 6e 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 0a 74 79 70 65 20 64 65 66 69 6e 65 64   ┆der an enumeration  type defined┆
0x09340…09360        20 61 73 20 28 65 82 30 81 2c 20 65 82 31 81 2c 20 2e 2e 2e 2c 20 65 82 6e 81 29 2e 20 54 68 69   ┆ as (e 0 , e 1 , ..., e n ). Thi┆
0x09360…09380        73 20 74 79 70 65 20 68 61 73 20 70 72 65 63 69 73 65 6c 79 20 0a 6e 2b 31 20 64 69 73 74 69 6e   ┆s type has precisely  n+1 distin┆
0x09380…093a0        63 74 20 76 61 6c 75 65 73 20 77 69 74 68 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 69 6e   ┆ct values with ordinal values in┆
0x093a0…093c0        20 74 68 65 20 69 6e 74 65 72 76 61 6c 20 0a 30 2e 2e 6e 2e 20 54 68 65 20 6f 72 64 69 6e 61 6c   ┆ the interval  0..n. The ordinal┆
0x093c0…093e0        20 76 61 6c 75 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 65 82 69 81 20 69 73 20   ┆ value corresponding to e i  is ┆
0x093e0…09400        69 2c 20 66 6f 72 20 0a 69 3d 30 2c 31 2c 2e 2e 2e 2c 6e 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65   ┆i, for  i=0,1,...,n.     Example┆
0x09400…09420 (74,)  3a 0d 0a 54 59 50 45 20 20 63 6f 6c 6f 75 72 73 3d 20 28 72 65 64 2c 20 62 6c 75 65 2c 20 67 72   ┆:  TYPE  colours= (red, blue, gr┆
0x09420…09440        65 65 6e 2c 20 79 65 6c 6c 6f 77 2c 20 70 69 6e 6b 29 0d 0a 0d 0a 0d 0a b0 a1 33 2e 34 2e 35 20   ┆een, yellow, pink)        3.4.5 ┆
0x09440…09460        53 75 62 72 61 6e 67 65 20 54 79 70 65 73 0d 0a 0d 0a 61 20 73 75 62 72 61 6e 67 65 20 73 70 65   ┆Subrange Types    a subrange spe┆
0x09460…09480        63 69 66 69 65 73 20 61 20 74 79 70 65 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 61 6e   ┆cifies a type compatible with an┆
0x09480…094a0        20 65 78 69 73 74 69 6e 67 20 0a 74 79 70 65 2c 20 62 75 74 20 77 69 74 68 20 61 20 63 6f 6e 73   ┆ existing  type, but with a cons┆
0x094a0…094c0        74 72 61 69 6e 65 64 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 3a 0d 0a 0d 0a 0d 0a 0d 0a   ┆trained range of values:        ┆
0x094c0…094e0        0d 0a 0d 0a 8c 84 84 0a 54 68 65 20 6c 6f 77 65 72 20 61 6e 64 20 75 70 70 65 72 20 62 6f 75 6e   ┆        The lower and upper boun┆
0x094e0…09500        64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 75 73 74 20 62 65 20 6f 66 20 74 68 65 20 73 61 6d   ┆d expressions must be of the sam┆
0x09500…09520        65 20 0a 6f 72 64 69 6e 61 6c 20 74 79 70 65 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 62 61 73   ┆e  ordinal type, called the  bas┆
0x09520…09540        65 20 74 79 70 65 e1 20 6f 66 20 74 68 65 20 64 65 66 69 6e 65 64 20 73 75 62 72 61 6e 67 65 20   ┆e type  of the defined subrange ┆
0x09540…09560        0a 74 79 70 65 2e 20 54 68 65 20 62 6f 75 6e 64 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20   ┆ type. The bounds are evaluated ┆
0x09560…09580        77 68 65 6e 20 74 68 65 20 73 75 62 72 61 6e 67 65 20 74 79 70 65 20 69 73 20 0a 65 73 74 61 62   ┆when the subrange type is  estab┆
0x09580…095a0        6c 69 73 68 65 64 2e 0d 0a 0d 0a 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74   ┆lished.    The number of element┆
0x095a0…095c0        73 20 69 6e 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 6f 66 20 74 68 65 20 73 75 62 72 61 6e   ┆s in the value set of the subran┆
0x095c0…095e0        67 65 20 69 73 20 0a 6f 72 64 28 75 70 70 65 72 20 62 6f 75 6e 64 29 2d 6f 72 64 28 6c 6f 77 65   ┆ge is  ord(upper bound)-ord(lowe┆
0x095e0…09600        72 20 62 6f 75 6e 64 29 2b 31 2e 20 74 68 65 20 6e 75 6d 62 65 72 20 6d 61 79 20 62 65 20 7a 65   ┆r bound)+1. the number may be ze┆
0x09600…09620 (75,)  72 6f 20 0a 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 73 75 62 72 61 6e 67 65 20 69   ┆ro  in which case the subrange i┆
0x09620…09640        73 20 65 6d 70 74 79 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 0a 6e 65 67 61   ┆s empty, but it may not be  nega┆
0x09640…09660        74 69 76 65 2e 20 49 6e 20 74 68 65 20 6c 61 74 74 65 72 20 63 61 73 65 20 61 20 66 61 75 6c 74   ┆tive. In the latter case a fault┆
0x09660…09680        20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 54 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20 6f 70 65 72   ┆ occurs.    The same set of oper┆
0x09680…096a0        61 74 6f 72 73 20 61 6e 64 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61   ┆ators and predefined functions a┆
0x096a0…096c0        70 70 6c 79 20 74 6f 20 0a 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 73 75 62 72 61 6e 67 65 20   ┆pply to  values of the subrange ┆
0x096c0…096e0        74 79 70 65 20 61 73 20 74 6f 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 62 61 73 65 20 74 79   ┆type as to values of the base ty┆
0x096e0…09700        70 65 2c 20 0a 62 75 74 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 73 75 62 72 61 6e 67 65   ┆pe,  but objects of the subrange┆
0x09700…09720        20 74 79 70 65 20 61 72 65 20 63 6f 6e 73 74 72 61 69 6e 65 64 20 74 6f 20 61 73 73 75 6d 65 20   ┆ type are constrained to assume ┆
0x09720…09740        0a 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 61 6e 67 65 20 62 65 74 77 65 65 6e 20 74 68 65   ┆ values in the range between the┆
0x09740…09760        20 6c 6f 77 65 72 20 61 6e 64 20 75 70 70 65 72 20 62 6f 75 6e 64 20 76 61 6c 75 65 73 20 0a 28   ┆ lower and upper bound values  (┆
0x09760…09780        69 6e 63 6c 75 73 69 76 65 6c 79 29 2e 0d 0a 0d 0a a1 4e 6f 74 65 e1 3a 0d 0a 41 20 73 75 62 72   ┆inclusively).     Note :  A subr┆
0x09780…097a0        61 6e 67 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 70 6c 61 63   ┆ange definition is the only plac┆
0x097a0…097c0        65 20 77 68 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 0a 63 61 6e 20 6f 63 63 75 72   ┆e where an expression  can occur┆
0x097c0…097e0        20 69 6e 20 61 20 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 75 73 20 61 6c 6c 20   ┆ in a type definition. Thus all ┆
0x097e0…09800        64 79 6e 61 6d 69 63 20 74 79 70 65 73 20 61 72 65 20 0a 62 75 69 6c 74 20 66 72 6f 6d 20 73 75   ┆dynamic types are  built from su┆
0x09800…09820 (76,)  62 72 61 6e 67 65 73 2e 20 43 6f 6e 76 65 72 73 65 6c 79 2c 20 69 66 20 61 6c 6c 20 65 78 70 72   ┆branges. Conversely, if all expr┆
0x09820…09840        65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 0a 73 75 62 72 61 6e 67 65 20 64 65 66 69 6e 69 74   ┆essions in the  subrange definit┆
0x09840…09860        69 6f 6e 73 20 6f 66 20 61 20 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 61 72 65 20 63 6f   ┆ions of a type definition are co┆
0x09860…09880        6e 73 74 61 6e 74 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 64 65   ┆nstant  expressions, then the de┆
0x09880…098a0        66 69 6e 65 64 20 74 79 70 65 20 69 73 20 73 74 61 74 69 63 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c   ┆fined type is static.     Exampl┆
0x098a0…098c0        65 e1 3a 0d 0a 54 59 50 45 0d 0a 20 20 70 6f 73 5f 69 6e 74 3d 20 30 2e 2e 6d 61 78 69 6e 74 3b   ┆e :  TYPE    pos_int= 0..maxint;┆
0x098c0…098e0        0d 0a 20 20 6e 65 67 5f 69 6e 74 3d 20 6d 69 6e 69 6e 74 2e 2e 2d 31 3b 0d 0a 20 20 63 6f 64 65   ┆    neg_int= minint..-1;    code┆
0x098e0…09900        73 3d 20 28 6e 6f 63 6f 64 65 2c 20 2e 2e 2e 2c 20 64 75 6d 6d 79 5f 6c 61 73 74 5f 63 6f 64 65   ┆s= (nocode, ..., dummy_last_code┆
0x09900…09904        29 3b 0d 0a                                                                                       ┆);  ┆
0x09904…0993d        Params {
0x09904…0993d          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 44 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         D1                 ┆
0x09904…0993d          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x09904…0993d        }
0x0993d…09976        Params {
0x0993d…09976          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x0993d…09976          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x0993d…09976        }
0x09976…09980        0a 20 20 63 6f 6e 76 5f 74 61                                                                     ┆   conv_ta┆
0x09980…099a0        62 6c 65 3d 20 41 52 52 41 59 28 73 75 63 63 28 6e 6f 63 6f 64 65 29 2e 2e 70 72 65 64 28 64 75   ┆ble= ARRAY(succ(nocode)..pred(du┆
0x099a0…099ba        6d 6d 79 5f 6c 61 73 74 5f 63 6f 64 65 29 29 20 4f 46 20 63 6f 64 65 73 0d 0a                     ┆mmy_last_code)) OF codes  ┆
0x099ba…099f3        Params {
0x099ba…099f3          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x099ba…099f3          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x099ba…099f3        }
0x099f3…09a2c        Params {
0x099f3…09a2c          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 44 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         D1                 ┆
0x099f3…09a2c          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x099f3…09a2c        }
0x09a2c…09a40        0a 0d 0a 0d 0a b0 a1 33 2e 35 20 4d 61 63 68 69 6e 65 20 54                                       ┆       3.5 Machine T┆
0x09a40…09a60        79 70 65 73 0d 0a 0d 0a 4d 61 63 68 69 6e 65 20 74 79 70 65 73 20 61 6c 6c 6f 77 20 61 20 73 74   ┆ypes    Machine types allow a st┆
0x09a60…09a80        79 6c 65 20 6f 66 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 69 6e 20 77 68 69 63 68 20 74 68 65 20   ┆yle of programming in which the ┆
0x09a80…09aa0        0a 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 6f 20 62 65 20 65 78 65 63   ┆ machine instructions to be exec┆
0x09aa0…09ac0        75 74 65 64 20 61 72 65 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 76 65 72 79 20 0a 64 69   ┆uted are specified in a very  di┆
0x09ac0…09ae0        72 65 63 74 20 6d 61 6e 6e 65 72 2e 0d 0a 0d 0a 8c 83 bc 0a 4f 6e 6c 79 20 70 72 65 64 65 66 69   ┆rect manner.        Only predefi┆
0x09ae0…09b00        6e 65 64 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 65 78 69 73 74 2e 20 54 68 65 20 72 65 70   ┆ned machine types exist. The rep┆
0x09b00…09b20        65 72 74 6f 69 72 65 20 6f 66 20 0a 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 64 65 70 65 6e 64   ┆ertoire of  machine types depend┆
0x09b20…09b40        73 20 6f 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 48 6f 77 65 76 65 72   ┆s on the implementation. However┆
0x09b40…09b60        2c 20 74 79 65 20 0a 74 79 70 65 73 20 a1 62 79 74 65 e1 20 28 38 2d 62 69 74 20 71 75 61 6e 74   ┆, tye  types  byte  (8-bit quant┆
0x09b60…09b80        69 74 79 29 20 61 6e 64 20 a1 77 6f 72 64 e1 20 28 31 36 2d 62 69 74 20 71 75 61 6e 74 69 74 79   ┆ity) and  word  (16-bit quantity┆
0x09b80…09ba0        29 20 61 72 65 20 0a 6d 61 6e 64 61 74 6f 72 79 2e 0d 0a 0d 0a 56 61 6c 75 65 73 20 6f 66 20 6d   ┆) are  mandatory.    Values of m┆
0x09ba0…09bc0        61 63 68 69 6e 65 20 74 79 70 65 73 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20 6e 75 6d 62   ┆achine types are denoted by numb┆
0x09bc0…09be0        65 72 73 20 77 69 74 68 20 61 20 72 61 64 69 78 20 0a 73 70 65 63 69 66 69 63 61 74 69 6f 6e 2c   ┆ers with a radix  specification,┆
0x09be0…09c00        20 63 66 2e 20 73 65 63 74 69 6f 6e 20 32 2e 34 2e 0d 0a 0d 0a 54 68 65 20 6f 70 65 72 61 74 6f   ┆ cf. section 2.4.    The operato┆
0x09c00…09c20 (78,)  72 73 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 61   ┆rs applicable to machine types a┆
0x09c20…09c40        72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 0a 74 72 61 6e 73 6c 61 74 65 20 64 69 72 65 63 74   ┆re intended to  translate direct┆
0x09c40…09c60        6c 79 20 69 6e 74 6f 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 4d 61   ┆ly into machine instructions. Ma┆
0x09c60…09c80        63 68 69 6e 65 20 0a 64 65 70 65 6e 64 65 6e 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 6d 61 79 20   ┆chine  dependent extensions may ┆
0x09c80…09ca0        74 68 65 72 65 66 6f 72 65 20 6f 63 63 75 72 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   ┆therefore occur. The following  ┆
0x09ca0…09cc0        6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 6d 61 6e 64 61 74 6f 72 79 3a 0d 0a 0d 0a 8c 81 9c 0a   ┆operators are mandatory:        ┆
0x09cc0…09ce0        0e 0a a1 6f 70 65 72 61 74 6f 72 20 6c 65 66 74 20 6f 70 2e 20 72 69 67 68 74 20 6f 70 2e 20 72   ┆   operator left op. right op. r┆
0x09ce0…09d00        65 73 75 6c 74 20 64 65 73 63 72 69 70 74 69 6f 6e 05 0d 0a 20 2b 09 20 20 20 20 20 62 79 74 65   ┆esult description    +      byte┆
0x09d00…09d20        20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79 74 65 20 20 20 75 6e 73 69 67 6e 65 64 20 61   ┆     byte      byte   unsigned a┆
0x09d20…09d40        64 64 69 74 69 6f 6e 0d 0a 20 2b 20 20 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 62 79 74 65 20   ┆ddition   +       word     byte ┆
0x09d40…09d60        20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 61 64 64 69 74 69 6f 6e 0d 0a 20   ┆     word   unsigned addition   ┆
0x09d60…09d80        2b 20 20 20 20 20 20 20 62 79 74 65 07 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20   ┆+       byte     word      word ┆
0x09d80…09da0        20 20 75 6e 73 69 67 6e 65 64 20 61 64 64 69 74 69 6f 6e 0d 0a 20 2b 09 20 20 20 20 20 77 6f 72   ┆  unsigned addition   +      wor┆
0x09da0…09dc0        64 07 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20   ┆d     word      word   unsigned ┆
0x09dc0…09de0        61 64 64 69 74 69 6f 6e 0d 0a 20 2d 20 20 20 20 20 20 20 62 79 74 65 20 20 20 20 20 62 79 74 65   ┆addition   -       byte     byte┆
0x09de0…09e00        20 20 20 20 20 20 62 79 74 65 20 20 20 75 6e 73 69 67 6e 65 64 20 73 75 62 74 72 61 63 74 69 6f   ┆      byte   unsigned subtractio┆
0x09e00…09e20 (79,)  6e 0d 0a 20 2d 20 20 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 77   ┆n   -       word     byte      w┆
0x09e20…09e40        6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 73 75 62 74 72 61 63 74 69 6f 6e 0d 0a 20 2d 20 20   ┆ord   unsigned subtraction   -  ┆
0x09e40…09e60        20 20 20 20 20 62 79 74 65 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 75   ┆     byte     word      word   u┆
0x09e60…09e80        6e 73 69 67 6e 65 64 20 73 75 62 74 72 61 63 74 69 6f 6e 0d 0a 20 2d 20 20 20 20 20 20 20 77 6f   ┆nsigned subtraction   -       wo┆
0x09e80…09ea0        72 64 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64   ┆rd     word      word   unsigned┆
0x09ea0…09ec0        20 73 75 62 74 72 61 63 74 69 6f 6e 0d 0a 20 2a 20 20 20 20 20 20 20 62 79 74 65 20 20 20 20 20   ┆ subtraction   *       byte     ┆
0x09ec0…09ee0        62 79 74 65 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 6d 75 6c 74 69 70   ┆byte      word   unsigned multip┆
0x09ee0…09f00        6c 69 63 61 74 69 6f 6e 0d 0a 20 2a 20 20 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 62 79 74 65   ┆lication   *       word     byte┆
0x09f00…09f20        20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 6d 75 6c 74 69 70 6c 69 63 61   ┆      word   unsigned multiplica┆
0x09f20…09f40        74 69 6f 6e 0d 0a 20 2a 20 20 20 20 20 20 20 62 79 74 65 20 20 20 20 20 77 6f 72 64 20 20 20 20   ┆tion   *       byte     word    ┆
0x09f40…09f60        20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 6d 75 6c 74 69 70 6c 69 63 61 74 69 6f 6e   ┆  word   unsigned multiplication┆
0x09f60…09f80        0d 0a 20 2a 20 20 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f   ┆   *       word     word      wo┆
0x09f80…09fa0        72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 6d 75 6c 74 69 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 44   ┆rd   unsigned multiplication   D┆
0x09fa0…09fc0        49 56 20 20 20 20 20 62 79 74 65 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79 74 65 20 20   ┆IV     byte     byte      byte  ┆
0x09fc0…09fe0        20 75 6e 73 69 67 6e 65 64 20 64 69 76 69 73 69 6f 6e 0d 0a 20 44 49 56 20 20 20 20 20 77 6f 72   ┆ unsigned division   DIV     wor┆
0x09fe0…0a000        64 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20   ┆d     byte      word   unsigned ┆
0x0a000…0a020 (80,)  64 69 76 69 73 69 6f 6e 0d 0a 20 44 49 56 20 20 20 20 20 62 79 74 65 20 20 20 20 20 77 6f 72 64   ┆division   DIV     byte     word┆
0x0a020…0a040        20 20 20 20 20 20 62 79 74 65 20 20 20 75 6e 73 69 67 6e 65 64 20 64 69 76 69 73 69 6f 6e 0d 0a   ┆      byte   unsigned division  ┆
0x0a040…0a060        20 44 49 56 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64   ┆ DIV     word     word      word┆
0x0a060…0a080        20 20 20 75 6e 73 69 67 6e 65 64 20 64 69 76 69 73 69 6f 6e 0d 0a 20 4d 4f 44 20 20 20 20 20 62   ┆   unsigned division   MOD     b┆
0x0a080…0a0a0        79 74 65 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79 74 65 20 20 20 75 6e 73 69 67 6e 65   ┆yte     byte      byte   unsigne┆
0x0a0a0…0a0c0        64 20 72 65 6d 61 69 6e 64 65 72 0d 0a 20 4d 4f 44 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 62   ┆d remainder   MOD     word     b┆
0x0a0c0…0a0e0        79 74 65 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6d 61 69 6e 64   ┆yte      word   unsigned remaind┆
0x0a0e0…0a100        65 72 0d 0a 20 4d 4f 44 20 20 20 20 20 62 79 74 65 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20   ┆er   MOD     byte     word      ┆
0x0a100…0a120        62 79 74 65 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6d 61 69 6e 64 65 72 0d 0a 20 4d 4f 44 20   ┆byte   unsigned remainder   MOD ┆
0x0a120…0a140        20 20 20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 75 6e   ┆    word     word      word   un┆
0x0a140…0a160        73 69 67 6e 65 64 20 72 65 6d 61 69 6e 64 65 72 0d 0a 20 41 4e 44 20 20 20 20 20 62 79 74 65 20   ┆signed remainder   AND     byte ┆
0x0a160…0a180        20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79 74 65 20 20 20 62 69 74 77 69 73 65 20 6c 6f 67   ┆    byte      byte   bitwise log┆
0x0a180…0a1a0        69 63 61 6c 20 61 6e 64 0d 0a 20 41 4e 44 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64   ┆ical and   AND     word     word┆
0x0a1a0…0a1c0        20 20 20 20 20 20 77 6f 72 64 20 20 20 62 69 74 77 69 73 65 20 6c 6f 67 69 63 61 6c 20 61 6e 64   ┆      word   bitwise logical and┆
0x0a1c0…0a1e0        0d 0a 20 4f 52 20 20 20 20 20 20 62 79 74 65 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79   ┆   OR      byte     byte      by┆
0x0a1e0…0a200        74 65 20 20 20 62 69 74 77 69 73 65 20 6c 6f 67 69 63 61 6c 20 6f 72 0d 0a 20 4f 52 20 20 20 20   ┆te   bitwise logical or   OR    ┆
0x0a200…0a220 (81,)  20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 62 69 74 77   ┆  word     word      word   bitw┆
0x0a220…0a240        69 73 65 20 6c 6f 67 69 63 61 6c 20 6f 72 0d 0a 20 58 4f 52 20 20 20 20 20 62 79 74 65 20 20 20   ┆ise logical or   XOR     byte   ┆
0x0a240…0a260        20 20 62 79 74 65 20 20 20 20 20 20 62 79 74 65 20 20 20 62 69 74 77 69 73 65 20 65 78 63 6c 75   ┆  byte      byte   bitwise exclu┆
0x0a260…0a280        73 69 76 65 20 6f 72 0d 0a 20 58 4f 52 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 77 6f 72 64 20   ┆sive or   XOR     word     word ┆
0x0a280…0a2a0        20 20 20 20 20 77 6f 72 64 20 20 20 62 69 74 77 69 73 65 20 65 78 63 6c 75 73 69 76 65 20 6f 72   ┆     word   bitwise exclusive or┆
0x0a2a0…0a2c0        0d 0a 20 4e 4f 54 20 20 20 20 20 6e 6f 6e 65 20 20 20 20 20 62 79 74 65 20 20 20 20 20 20 62 79   ┆   NOT     none     byte      by┆
0x0a2c0…0a2e0        74 65 20 20 20 62 69 74 77 69 73 65 20 6e 65 67 61 74 69 6f 6e 0d 0a 20 4e 4f 54 20 20 20 20 20   ┆te   bitwise negation   NOT     ┆
0x0a2e0…0a300        6e 6f 6e 65 20 20 20 20 20 77 6f 72 64 20 20 20 20 20 20 77 6f 72 64 20 20 20 62 69 74 77 69 73   ┆none     word      word   bitwis┆
0x0a300…0a320        65 20 6e 65 67 61 74 69 6f 6e 0d 0a 20 53 48 49 46 54 20 20 20 62 79 74 65 20 20 20 20 20 69 6e   ┆e negation   SHIFT   byte     in┆
0x0a320…0a340        74 65 67 65 72 20 20 20 62 79 74 65 20 20 20 6c 6f 67 69 63 61 6c 20 73 68 69 66 74 20 74 6f 77   ┆teger   byte   logical shift tow┆
0x0a340…0a360        61 72 64 20 6d 6f 72 65 0d 0a 20 53 48 49 46 54 20 20 20 77 6f 72 64 20 20 20 20 20 69 6e 74 65   ┆ard more   SHIFT   word     inte┆
0x0a360…0a380        67 65 72 20 20 20 77 6f 72 64 20 20 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 6f 73 69 74 69 6f   ┆ger   word   significant positio┆
0x0a380…0a3a0        6e 73 0d 0a 0f 0a 0d 0a 46 6f 72 20 61 72 69 74 68 65 6d 74 69 63 20 6f 70 65 72 61 74 69 6f 6e   ┆ns      For arithemtic operation┆
0x0a3a0…0a3c0        73 20 76 61 6c 75 65 73 20 6f 66 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 61 72 65 20 0a 74   ┆s values of machine types are  t┆
0x0a3c0…0a3e0        72 65 61 74 65 64 20 61 73 20 75 6e 73 69 67 6e 65 64 20 62 69 6e 61 72 79 20 6e 75 6d 62 65 72   ┆reated as unsigned binary number┆
0x0a3e0…0a400        73 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 0a 6f 76 65   ┆s. There is no checking for  ove┆
0x0a400…0a420 (82,)  72 72 75 6e 2c 20 68 6f 77 65 76 65 72 20 64 69 76 69 73 69 6f 6e 20 62 79 20 7a 65 72 6f 20 28   ┆rrun, however division by zero (┆
0x0a420…0a440        44 49 56 20 6f 72 20 4d 4f 44 29 20 77 69 6c 6c 20 63 61 75 73 65 20 61 20 0a 66 61 75 6c 74 2e   ┆DIV or MOD) will cause a  fault.┆
0x0a440…0a460        0d 0a 0d 0a 8c 83 bc 0a 54 68 65 72 65 20 61 72 65 20 70 72 65 64 65 66 69 6e 65 64 20 70 72 6f   ┆        There are predefined pro┆
0x0a460…0a480        63 65 64 75 72 65 73 20 74 6f 20 69 6e 63 72 65 6d 65 6e 74 20 61 6e 64 20 64 65 63 72 65 6d 65   ┆cedures to increment and decreme┆
0x0a480…0a4a0        6e 74 20 0a 76 61 72 69 61 62 6c 65 73 20 6f 66 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 28   ┆nt  variables of machine types (┆
0x0a4a0…0a4c0        62 79 20 31 2c 20 6d 6f 64 75 6c 6f 20 32 81 6e 82 2c 20 77 68 65 72 65 20 6e 20 69 73 20 74 68   ┆by 1, modulo 2 n , where n is th┆
0x0a4c0…0a4e0        65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 74   ┆e  number of bits used for the t┆
0x0a4e0…0a500        79 70 65 29 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 69 6e 63 28 56 41 52 20 76 3a 20 6d 74   ┆ype):    PROCEDURE inc(VAR v: mt┆
0x0a500…0a520        79 70 65 29 0d 0a 50 52 4f 43 45 44 55 52 45 20 64 65 63 28 56 41 52 20 76 3a 20 6d 74 79 70 65   ┆ype)  PROCEDURE dec(VAR v: mtype┆
0x0a520…0a540        29 0d 0a 77 68 65 72 65 20 6d 74 79 70 65 20 6d 61 79 20 62 65 20 61 6e 79 20 6d 61 63 68 69 6e   ┆)  where mtype may be any machin┆
0x0a540…0a560        65 20 74 79 70 65 2e 0d 0a 0d 0a 41 6c 73 6f 20 66 6f 72 20 65 76 65 72 79 20 6d 61 63 68 69 6e   ┆e type.    Also for every machin┆
0x0a560…0a580        65 20 74 79 70 65 20 6d 74 79 70 65 20 74 68 65 72 65 20 69 73 20 61 20 70 72 65 64 65 66 69 6e   ┆e type mtype there is a predefin┆
0x0a580…0a5a0        65 64 20 0a 66 75 6e 63 74 69 6f 6e 3a 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 69 6e 74 28 76 3a   ┆ed  function:    FUNCTION int(v:┆
0x0a5a0…0a5c0        20 6d 74 79 70 65 29 3a 20 69 6e 74 65 67 65 72 0d 0a 77 68 69 63 68 20 79 69 65 6c 64 73 20 74   ┆ mtype): integer  which yields t┆
0x0a5c0…0a5e0        68 65 20 28 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 29 20 76 61   ┆he (implementation dependent) va┆
0x0a5e0…0a600        6c 75 65 20 6f 62 74 61 69 6e 65 64 20 0a 62 79 20 65 78 74 65 6e 64 69 6e 67 20 28 62 79 20 7a   ┆lue obtained  by extending (by z┆
0x0a600…0a620 (83,)  65 72 6f 20 62 69 74 73 29 20 6f 72 20 74 72 75 6e 63 61 74 69 6e 67 20 74 68 65 20 76 61 6c 75   ┆ero bits) or truncating the valu┆
0x0a620…0a640        65 20 6f 66 20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 76 20 74 6f 20 74 68 65 20 6e 75 6d   ┆e of the  parameter v to the num┆
0x0a640…0a660        62 65 72 20 6f 66 20 62 69 74 73 20 75 73 65 64 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 69 6e   ┆ber of bits used to represent in┆
0x0a660…0a680        74 65 67 65 72 73 20 0a 61 6e 64 20 74 68 65 6e 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   ┆tegers  and then interpreting th┆
0x0a680…0a6a0        65 20 72 65 73 75 6c 74 69 6e 67 20 62 69 74 20 70 61 74 74 65 72 6e 20 61 73 20 61 6e 20 0a 69   ┆e resulting bit pattern as an  i┆
0x0a6a0…0a6c0        6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0d 0a 0d 0a 54 68 65 20 69 6e 76 65 72 73 65 20 66 75 6e   ┆nteger value.    The inverse fun┆
0x0a6c0…0a6e0        63 74 69 6f 6e 73 20 61 72 65 20 61 6c 73 6f 20 70 72 65 64 65 66 69 6e 65 64 3a 0d 0a 0d 0a 46   ┆ctions are also predefined:    F┆
0x0a6e0…0a700        55 4e 43 54 49 4f 4e 20 62 79 74 20 28 76 3a 20 69 6e 74 65 67 65 72 29 3a 20 62 79 74 65 0d 0a   ┆UNCTION byt (v: integer): byte  ┆
0x0a700…0a720        41 20 63 61 6c 6c 20 6f 66 20 62 79 74 20 65 78 74 72 61 63 74 73 20 74 68 65 20 38 20 6c 65 61   ┆A call of byt extracts the 8 lea┆
0x0a720…0a740        73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 66 72 6f 6d 20 74 68 65 20 0a 28 69   ┆st significant bits from the  (i┆
0x0a740…0a760        6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 29 20 69 6e 74 65 67 65 72   ┆mplementation dependent) integer┆
0x0a760…0a780        20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 77 72 64   ┆ representation.    FUNCTION wrd┆
0x0a780…0a7a0        20 28 76 3a 20 69 6e 74 65 67 65 72 29 3a 20 77 6f 72 64 0d 0a 41 20 63 61 6c 6c 20 6f 66 20 77   ┆ (v: integer): word  A call of w┆
0x0a7a0…0a7c0        72 64 20 65 78 74 72 61 63 74 73 20 74 68 65 20 31 36 20 6c 65 61 73 74 20 73 69 67 6e 69 66 69   ┆rd extracts the 16 least signifi┆
0x0a7c0…0a7e0        63 61 6e 74 20 62 69 74 73 20 66 72 6f 6d 20 0a 74 68 65 20 28 69 6d 70 6c 65 6d 65 6e 74 61 74   ┆cant bits from  the (implementat┆
0x0a7e0…0a800        69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 29 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74   ┆ion dependent) integer represent┆
0x0a800…0a820 (84,)  61 74 69 6f 6e 2e 0d 0a 0d 0a 4d 6f 72 65 6f 76 65 72 2c 20 74 77 6f 20 76 61 6c 75 65 73 20 6f   ┆ation.    Moreover, two values o┆
0x0a820…0a840        66 20 74 68 65 20 73 61 6d 65 20 6d 61 63 68 69 6e 65 20 74 79 70 65 20 6d 61 79 20 62 65 20 0a   ┆f the same machine type may be  ┆
0x0a840…0a860        63 6f 6d 70 61 72 65 64 2c 20 75 73 69 6e 67 20 74 68 65 20 72 65 6c 61 74 69 6f 6e 61 6c 20 6f   ┆compared, using the relational o┆
0x0a860…0a880        70 65 72 61 74 6f 72 73 20 77 68 69 63 68 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20 0a 69 6e   ┆perators which are described  in┆
0x0a880…0a8a0        20 73 65 63 74 69 6f 6e 20 33 2e 34 2e 20 43 6f 6d 70 61 72 69 73 6f 6e 20 61 70 70 6c 69 65 73   ┆ section 3.4. Comparison applies┆
0x0a8a0…0a8c0        20 74 6f 20 74 68 65 20 75 6e 73 69 67 6e 65 64 20 62 69 6e 61 72 79 20 0a 76 61 6c 75 65 73 2e   ┆ to the unsigned binary  values.┆
0x0a8c0…0a8e0        0d 0a 0d 0a 0d 0a b0 a1 33 2e 36 20 53 65 74 20 54 79 70 65 73 0d 0a 0d 0a 54 68 65 20 73 65 74   ┆        3.6 Set Types    The set┆
0x0a8e0…0a900        20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 20 73 65 74 20 74 79 70 65 20 69 73 20 74 68 65 20   ┆ of values of a set type is the ┆
0x0a900…0a920        70 6f 77 65 72 20 73 65 74 20 6f 66 20 74 68 65 20 73 65 74 20 0a 6f 66 20 76 61 6c 75 65 73 20   ┆power set of the set  of values ┆
0x0a920…0a940        6f 66 20 73 6f 6d 65 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 2c 20 63 61 6c 6c 65 64 20 74 68 65   ┆of some ordinal type, called the┆
0x0a940…0a960        20 65 6c 65 6d 65 6e 74 20 74 79 70 65 20 6f 66 20 0a 8c 83 c8 0a 74 68 65 20 73 65 74 20 74 79   ┆ element type of      the set ty┆
0x0a960…0a980        70 65 2e 20 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6f 70 65 72 61 74 6f 72 73 20 66 6f 72 20   ┆pe. The available operators for ┆
0x0a980…0a9a0        73 65 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 0a 74 68 65 20 73 74 61 6e 64 61 72 64   ┆sets correspond to  the standard┆
0x0a9a0…0a9c0        20 6f 70 65 72 61 74 6f 72 73 20 6f 66 20 6d 61 74 68 65 6d 61 74 69 63 61 6c 20 73 65 74 20 74   ┆ operators of mathematical set t┆
0x0a9c0…0a9e0        68 65 6f 72 79 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 63 6f 6d 6d 6f 6e 20 74 79 70   ┆heory.            The common typ┆
0x0a9e0…0aa00        65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 65 6c   ┆e specification specifies the el┆
0x0aa00…0aa20 (85,)  65 6d 65 6e 74 20 74 79 70 65 20 0a 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 72 64   ┆ement type  which must be an ord┆
0x0aa20…0aa40        69 6e 61 6c 20 74 79 70 65 2e 0d 0a 0d 0a 56 61 6c 75 65 73 20 6f 66 20 73 65 74 20 74 79 70 65   ┆inal type.    Values of set type┆
0x0aa40…0aa60        73 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20 6c 69 73 74 73 20 6f 66 20 73 65 74 20 65 6c   ┆s are denoted by lists of set el┆
0x0aa60…0aa80        65 6d 65 6e 74 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 41   ┆ements.                        A┆
0x0aa80…0aaa0        6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 61 20 27 73   ┆ll expressions occurring in a 's┆
0x0aaa0…0aac0        65 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 20 6d 75 73 74 20 62 65 20 6f 66 20 0a 74 68 65 20 73   ┆et denotation' must be of  the s┆
0x0aac0…0aae0        61 6d 65 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68   ┆ame ordinal type. The type of th┆
0x0aae0…0ab00        65 20 27 73 65 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 20 69 73 20 61 20 0a 73 65 74 20 74 79 70   ┆e 'set denotation' is a  set typ┆
0x0ab00…0ab20        65 20 77 68 6f 73 65 20 65 6c 65 6d 65 6e 74 20 74 79 70 65 20 69 73 20 74 68 65 20 74 79 70 65   ┆e whose element type is the type┆
0x0ab20…0ab40        20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0d 0a 0d 0a 54 68 65 20 76 61 6c 75   ┆ of the expressions.    The valu┆
0x0ab40…0ab60        65 20 6f 66 20 61 20 27 73 65 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 20 69 73 20 65 76 61 6c 75   ┆e of a 'set denotation' is evalu┆
0x0ab60…0ab80        61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 0a 61 6c 6c 20 74 68 65 20 65 78 70 72   ┆ated by evaluating  all the expr┆
0x0ab80…0aba0        65 73 73 69 6f 6e 73 2e 20 54 68 65 69 72 20 76 61 6c 75 65 73 20 64 65 74 65 72 6d 69 6e 65 20   ┆essions. Their values determine ┆
0x0aba0…0abc0        74 68 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 0a 74 68 65 20 73 65 74 20 76 61 6c 75 65 2e 20 57   ┆the members of  the set value. W┆
0x0abc0…0abe0        68 65 6e 20 61 6e 20 27 65 6c 65 6d 65 6e 74 20 69 6e 74 65 72 76 61 6c 27 20 6f 63 63 75 72 73   ┆hen an 'element interval' occurs┆
0x0abe0…0ac00        20 61 6c 6c 20 76 61 6c 75 65 73 20 0a 69 6e 20 74 68 65 20 63 6c 6f 73 65 64 20 69 6e 74 65 72   ┆ all values  in the closed inter┆
0x0ac00…0ac20 (86,)  76 61 6c 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 27 6c 6f 77 65 72 5f 65 78 70   ┆val from the value of 'lower_exp┆
0x0ac20…0ac40        72 65 73 73 69 6f 6e 27 20 0a 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 27 75 69 70 70 65   ┆ression'  to the value of 'uippe┆
0x0ac40…0ac60        72 5f 65 78 70 72 65 73 73 69 6f 6e 27 20 61 72 65 20 6d 65 6d 62 65 72 73 2e 20 49 66 20 74 68   ┆r_expression' are members. If th┆
0x0ac60…0ac80        65 20 0a 76 61 6c 75 65 20 6f 66 20 27 6c 6f 77 65 72 2d 65 78 70 72 65 73 73 69 6f 6e 27 20 69   ┆e  value of 'lower-expression' i┆
0x0ac80…0aca0        73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 27 75 70   ┆s greater than the value of  'up┆
0x0aca0…0acc0        70 65 72 2d 65 78 70 72 65 73 73 69 6f 6e 27 20 74 68 65 20 69 6e 74 65 72 76 61 6c 20 69 73 20   ┆per-expression' the interval is ┆
0x0acc0…0ace0        65 6d 70 74 79 2e 0d 0a 0d 0a 57 68 65 6e 20 6e 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72   ┆empty.    When no expressions ar┆
0x0ace0…0ad00        65 20 70 72 65 73 65 6e 74 20 69 6e 20 61 20 27 73 65 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 2c   ┆e present in a 'set denotation',┆
0x0ad00…0ad20        20 69 2e 65 2e 20 0a 28 2e 2e 29 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 65 6d   ┆ i.e.  (..), the value is the em┆
0x0ad20…0ad40        70 74 79 20 73 65 74 2e 20 54 68 65 20 65 6d 70 74 79 20 73 65 74 20 6d 61 79 20 6f 63 63 75 72   ┆pty set. The empty set may occur┆
0x0ad40…0ad60        20 0a 77 68 65 72 65 65 76 65 72 20 61 6e 20 6f 70 65 72 61 74 6f 72 20 6f 66 20 61 20 73 65 74   ┆  whereever an operator of a set┆
0x0ad60…0ad80        20 74 79 70 65 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 4f 63 63 75 72 72 69 6e 67 20 0a 61 73   ┆ type is required. Occurring  as┆
0x0ad80…0ada0        20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 69 74 73 20 6f 77 6e 2c 20 74 68 65 20 65   ┆ an expression on its own, the e┆
0x0ada0…0adc0        6d 70 74 79 20 73 65 74 20 69 73 20 61 73 73 69 67 6e 61 62 6c 65 20 74 6f 20 0a 61 6e 79 20 73   ┆mpty set is assignable to  any s┆
0x0adc0…0ade0        65 74 20 74 79 70 65 2e 0d 0a 0d 0a 8c 83 e0 0a 54 68 65 20 6f 70 65 72 61 74 6f 72 73 20 61 70   ┆et type.        The operators ap┆
0x0ade0…0ae00        70 6c 69 63 61 62 6c 65 20 74 6f 20 76 61 6c 75 65 73 20 6f 66 20 73 65 74 20 74 79 70 65 73 20   ┆plicable to values of set types ┆
0x0ae00…0ae20 (87,)  61 72 65 20 0a 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20   ┆are  described in the following ┆
0x0ae20…0ae40        74 61 62 6c 65 2c 20 77 68 65 72 65 20 73 74 20 6d 65 61 6e 73 20 73 6f 6d 65 20 73 65 74 20 0a   ┆table, where st means some set  ┆
0x0ae40…0ae60        74 79 70 65 2c 20 65 74 20 6d 65 61 6e 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 74 79 70 65 20   ┆type, et means the element type ┆
0x0ae60…0ae80        6f 66 20 73 74 2c 20 6c 6f 70 20 6d 65 61 6e 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 2c 20   ┆of st, lop means left  operand, ┆
0x0ae80…0aea0        61 6e 64 20 72 6f 70 20 6d 65 61 6e 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 20 4e 6f 74   ┆and rop means right operand. Not┆
0x0aea0…0aec0        69 63 65 20 74 68 61 74 20 6d 75 6c 74 69 70 6c 65 20 0a 6f 63 63 75 72 72 65 6e 63 65 73 20 6f   ┆ice that multiple  occurrences o┆
0x0aec0…0aee0        66 20 73 74 20 69 6e 20 61 6e 79 20 6f 6e 65 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 74 61 62 6c   ┆f st in any one line of the tabl┆
0x0aee0…0af00        65 20 72 65 66 65 72 20 74 6f 20 0a 63 6f 6d 70 61 74 69 62 6c 65 20 73 65 74 20 74 79 70 65 73   ┆e refer to  compatible set types┆
0x0af00…0af20        2e 0d 0a 0e 0a 0d 0a 6f 70 65 72 2d 20 20 20 74 79 70 65 20 6f 66 20 20 20 74 79 70 65 20 6f 66   ┆.      oper-   type of   type of┆
0x0af20…0af40        20 20 20 74 79 70 65 20 6f 66 20 20 20 20 0d 0a a1 61 74 6f 72 20 20 20 20 6c 6f 70 20 20 20 20   ┆   type of       ator    lop    ┆
0x0af40…0af60        20 20 20 72 6f 70 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 20 20 20 20 72 65 73 75 6c 74 05 0d   ┆   rop       result     result  ┆
0x0af60…0af80        0a 20 2b 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 20 73   ┆  +       st        st         s┆
0x0af80…0afa0        74 20 20 20 20 20 20 20 6c 6f 70 20 72 6f 70 0d 0a 20 2a 20 20 20 20 20 20 20 73 74 20 20 20 20   ┆t       lop rop   *       st    ┆
0x0afa0…0afc0        20 20 20 20 73 74 20 20 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 6c 6f 70 20 72 6f 70 0d   ┆    st         st       lop rop ┆
0x0afc0…0afe0        0a 20 2d 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 20 73   ┆  -       st        st         s┆
0x0afe0…0b000        74 20 20 20 20 20 20 20 6c 6f 70 20 72 6f 70 0d 0a 20 49 4e 20 20 20 20 20 20 65 74 20 20 20 20   ┆t       lop rop   IN      et    ┆
0x0b000…0b020 (88,)  20 20 20 20 73 74 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 20 20 20 20 74 72 75 65 20 69 66 20   ┆    st       boolean    true if ┆
0x0b020…0b040        6c 6f 70 20 72 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 09 09 09 20 20 20 20 20 66 61 6c 73 65   ┆lop rop,                   false┆
0x0b040…0b060        20 6f 74 68 65 72 77 69 73 65 0d 0a 20 3c 3d 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 73   ┆ otherwise   <=      st        s┆
0x0b060…0b080        74 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 20 20 20 20 74 72 75 65 20 69 66 20 6c 6f 70 20 72   ┆t       boolean    true if lop r┆
0x0b080…0b0a0        6f 70 0d 0a 09 09 09 09 20 20 20 20 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 0d 0a 20 3e   ┆op           false otherwise   >┆
0x0b0a0…0b0c0        3d 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 62 6f 6f 6c 65 61   ┆=      st        st       boolea┆
0x0b0c0…0b0e0        6e 20 20 20 20 74 72 75 65 20 69 66 20 72 6f 70 20 6c 6f 70 2c 0d 0a 09 09 09 09 20 20 20 20 20   ┆n    true if rop lop,           ┆
0x0b0e0…0b100        66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 0d 0a 20 3d 20 20 20 20 20 20 20 73 74 20 20 20 20   ┆false otherwise   =       st    ┆
0x0b100…0b120        20 20 20 20 73 74 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 20 20 20 20 74 72 75 65 20 69 66 20   ┆    st       boolean    true if ┆
0x0b120…0b140        6c 6f 70 20 72 6f 70 0d 0a 09 09 09 09 20 20 20 20 20 61 6e 64 20 72 6f 70 20 6c 6f 70 2c 0d 0a   ┆lop rop           and rop lop,  ┆
0x0b140…0b160        20 09 09 09 20 09 20 20 20 20 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 0d 0a 20 3c 3e 20   ┆           false otherwise   <> ┆
0x0b160…0b180        20 20 20 20 20 73 74 20 20 20 20 20 20 20 20 73 74 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 20   ┆     st        st       boolean ┆
0x0b180…0b1a0        20 20 20 4e 4f 54 20 6c 6f 70 3d 72 6f 70 0d 0a 0f 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 54 68 65 72   ┆   NOT lop=rop       Note:  Ther┆
0x0b1a0…0b1c0        65 20 69 73 20 6e 6f 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 74 65 73 74 20 66 6f 72 20 73 74 72   ┆e is no operator to test for str┆
0x0b1c0…0b1e0        6f 6e 67 20 73 65 74 20 69 6e 63 6c 75 73 69 6f 6e 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 73 3a   ┆ong set inclusion.     Examples:┆
0x0b1e0…0b200        0d 0a 20 20 64 69 67 69 74 73 3d 20 28 2e 20 27 30 27 2e 2e 27 39 27 20 2e 29 0d 0a 20 20 6c 65   ┆    digits= (. '0'..'9' .)    le┆
0x0b200…0b220 (89,)  74 74 65 72 73 3d 20 28 2e 20 27 61 27 2e 2e 27 7a 27 2c 20 27 41 27 2e 2e 27 5a 27 20 2e 29 0d   ┆tters= (. 'a'..'z', 'A'..'Z' .) ┆
0x0b220…0b240        0a 0d 0a 0d 0a b0 a1 33 2e 37 20 50 6f 69 6e 74 65 72 20 54 79 70 65 73 0d 0a 0d 0a 54 68 65 20   ┆       3.7 Pointer Types    The ┆
0x0b240…0b260        76 61 6c 75 65 73 20 6f 66 20 61 20 70 6f 69 6e 74 65 72 20 74 79 70 65 20 61 72 65 20 4e 49 4c   ┆values of a pointer type are NIL┆
0x0b260…0b280        20 28 6e 6f 20 70 6f 69 6e 74 65 72 29 20 61 6e 64 20 0a 70 6f 69 6e 74 65 72 73 20 74 6f 20 68   ┆ (no pointer) and  pointers to h┆
0x0b280…0b2a0        65 61 70 2d 61 6c 6c 6f 63 61 74 65 64 20 76 61 72 69 61 62 6c 65 73 20 6f 66 20 61 20 73 70 65   ┆eap-allocated variables of a spe┆
0x0b2a0…0b2c0        63 69 66 69 65 64 20 74 79 70 65 2c 20 0a 63 61 6c 6c 65 64 20 74 68 65 20 62 61 73 65 20 74 79   ┆cified type,  called the base ty┆
0x0b2c0…0b2e0        70 65 20 6f 66 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 79 70 65 2e 20 41 20 70 6f 69 6e 74 65   ┆pe of the pointer type. A pointe┆
0x0b2e0…0b300        72 20 6d 61 79 20 62 65 20 0a 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 61 72   ┆r may be  used to access the var┆
0x0b300…0b320        69 61 62 6c 65 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 ec   ┆iable it points to.             ┆
0x0b320…0b340        0a 54 68 65 20 63 6f 6d 6d 6f 6e 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 73   ┆ The common type specification s┆
0x0b340…0b360        70 65 63 69 66 69 65 73 20 74 68 65 20 62 61 73 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 64   ┆pecifies the base type of the  d┆
0x0b360…0b380        65 66 69 6e 65 64 20 70 6f 69 6e 74 65 72 20 74 79 70 65 2e 20 54 68 65 20 69 6e 69 74 69 61 6c   ┆efined pointer type. The initial┆
0x0b380…0b3a0        20 76 61 6c 75 65 20 6f 66 20 61 20 70 6f 69 6e 74 65 72 20 0a 76 61 72 69 61 62 6c 65 20 69 73   ┆ value of a pointer  variable is┆
0x0b3a0…0b3c0        20 4e 49 4c 2c 20 69 2e 65 2e 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 70 6f 69 6e 74 20 74 6f 20   ┆ NIL, i.e. it does not point to ┆
0x0b3c0…0b3e0        61 6e 79 20 76 61 72 69 61 62 6c 65 2e 0d 0a 0d 0a 41 20 76 61 72 69 61 62 6c 65 20 61 63 63 65   ┆any variable.    A variable acce┆
0x0b3e0…0b400        73 73 65 64 20 74 68 72 6f 75 67 68 20 61 20 70 6f 69 6e 74 65 72 20 69 73 20 63 61 6c 6c 65 64   ┆ssed through a pointer is called┆
0x0b400…0b420 (90,)  20 61 20 64 65 73 69 67 6e 61 74 65 64 20 0a 76 61 72 69 61 62 6c 65 2e 0d 0a 0d 0a 0d 0a 0d 0a   ┆ a designated  variable.        ┆
0x0b420…0b440        0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63 74   ┆  The type of the denoted object┆
0x0b440…0b460        20 6d 75 73 74 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 79 70 65 2e 20 54 68 65 20 0a 74 79   ┆ must be a pointer type. The  ty┆
0x0b460…0b480        70 65 20 6f 66 20 74 68 65 20 64 65 73 69 67 6e 61 74 65 64 20 76 61 72 69 61 62 6c 65 20 69 73   ┆pe of the designated variable is┆
0x0b480…0b4a0        20 74 68 65 20 62 61 73 65 20 74 79 70 65 20 6f 66 20 74 68 69 73 20 0a 70 6f 69 6e 74 65 72 20   ┆ the base type of this  pointer ┆
0x0b4a0…0b4c0        74 79 70 65 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65   ┆type. If the value of the denote┆
0x0b4c0…0b4e0        64 20 70 6f 69 6e 74 65 72 20 6f 62 6a 65 63 74 20 69 73 20 0a 4e 49 4c 20 61 20 66 61 75 6c 74   ┆d pointer object is  NIL a fault┆
0x0b4e0…0b500        20 6f 63 63 75 72 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20   ┆ occurs when an attempt is made ┆
0x0b500…0b520        74 6f 20 61 63 63 65 73 73 20 74 68 65 20 0a 64 65 73 69 67 6e 61 74 65 64 20 76 61 72 69 61 62   ┆to access the  designated variab┆
0x0b520…0b540        6c 65 2e 0d 0a 0d 0a 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20   ┆le.    The comparison operators ┆
0x0b540…0b560        3d 20 61 6e 64 20 3c 3e 20 6d 61 79 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f 20 70 61 69 72 73   ┆= and <> may be applied to pairs┆
0x0b560…0b580        20 6f 66 20 0a 6f 70 65 72 61 6e 64 73 20 6f 66 20 63 6f 6d 70 61 74 69 62 6c 65 20 70 6f 69 6e   ┆ of  operands of compatible poin┆
0x0b580…0b5a0        74 65 72 20 74 79 70 65 73 2e 20 54 68 65 20 72 65 73 75 6c 74 20 70 72 6f 64 75 63 65 64 20 62   ┆ter types. The result produced b┆
0x0b5a0…0b5c0        79 20 0a 74 68 65 20 3d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 72 75 65 20 69 66 20 62 6f 74   ┆y  the = operator is true if bot┆
0x0b5c0…0b5e0        68 20 70 6f 69 6e 74 65 72 73 20 64 65 73 69 67 6e 61 74 65 20 74 68 65 20 73 61 6d 65 20 0a 6f   ┆h pointers designate the same  o┆
0x0b5e0…0b600        62 6a 65 63 74 2c 20 6f 72 20 69 66 20 62 6f 74 68 20 68 61 76 65 20 76 61 6c 75 65 20 4e 49 4c   ┆bject, or if both have value NIL┆
0x0b600…0b620 (91,)  2e 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 66 61 6c 73 65 2e 20 0a 54 68 65 20 72 65   ┆. Otherwise it is false.  The re┆
0x0b620…0b640        73 75 6c 74 20 70 72 6f 64 75 63 65 64 20 62 79 20 74 68 65 20 3c 3e 20 6f 70 65 72 61 74 6f 72   ┆sult produced by the <> operator┆
0x0b640…0b660        20 69 73 20 74 68 65 20 6e 65 67 61 74 69 6f 6e 20 6f 66 20 0a 74 68 65 20 72 65 73 75 6c 74 20   ┆ is the negation of  the result ┆
0x0b660…0b680        6f 66 20 3d 2e 0d 0a 0d 0a 54 68 65 72 65 20 69 73 20 61 20 70 72 65 64 65 66 69 6e 65 64 20 66   ┆of =.    There is a predefined f┆
0x0b680…0b6a0        75 6e 63 74 69 6f 6e 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72 20 61 20 70 6f 69 6e 74 65   ┆unction to test whether a pointe┆
0x0b6a0…0b6c0        72 2c 20 6f 66 20 0a 61 6e 79 20 70 6f 69 6e 74 65 72 20 74 79 70 65 20 70 74 72 74 79 70 65 2c   ┆r, of  any pointer type ptrtype,┆
0x0b6c0…0b6e0        20 69 73 20 4e 49 4c 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 6e 69 6c 28 70 74 72 3a 20 70 74   ┆ is NIL.    FUNCTION nil(ptr: pt┆
0x0b6e0…0b700        72 74 79 70 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   ┆rtype): boolean  The result of a┆
0x0b700…0b720        20 63 61 6c 6c 20 6f 66 20 6e 69 6c 20 69 73 20 74 72 75 65 20 69 66 20 74 68 65 20 76 61 6c 75   ┆ call of nil is true if the valu┆
0x0b720…0b740        65 20 6f 66 20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 69 73 20 4e 49 4c 20 61 6e 64 20 66   ┆e of the  parameter is NIL and f┆
0x0b740…0b760        61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 0d 0a 41 20 76 61 72 69 61 62 6c 65 20 69 73   ┆alse otherwise.    A variable is┆
0x0b760…0b780        20 61 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20 68 65 61 70 20 61 6e 64 20 61 20 70 6f 69   ┆ allocated on the heap and a poi┆
0x0b780…0b7a0        6e 74 65 72 20 74 6f 20 69 74 20 0a 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 70 6f 69 6e 74 65   ┆nter to it  assigned to a pointe┆
0x0b7a0…0b7c0        72 20 76 61 72 69 61 62 6c 65 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 70 72 65 64   ┆r variable by a call of the pred┆
0x0b7c0…0b7e0        65 66 69 6e 65 64 20 0a 70 72 6f 63 65 64 75 72 65 20 6e 65 77 2c 20 77 68 65 72 65 20 74 68 65   ┆efined  procedure new, where the┆
0x0b7e0…0b800        20 70 61 72 61 6d 65 74 65 72 20 74 79 70 65 20 70 74 72 74 79 70 65 20 6d 61 79 20 62 65 20 61   ┆ parameter type ptrtype may be a┆
0x0b800…0b820 (92,)  6e 79 20 0a 70 6f 69 6e 74 65 72 20 74 79 70 65 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 6e   ┆ny  pointer type.    PROCEDURE n┆
0x0b820…0b840        65 77 28 56 41 52 20 70 74 72 3a 20 70 74 72 74 79 70 65 29 0d 0a 41 20 63 61 6c 6c 20 6f 66 20   ┆ew(VAR ptr: ptrtype)  A call of ┆
0x0b840…0b860        6e 65 77 20 63 61 75 73 65 73 20 6d 65 6d 6f 72 79 20 66 6f 72 20 61 20 76 61 72 69 61 62 6c 65   ┆new causes memory for a variable┆
0x0b860…0b880        20 6f 66 20 74 68 65 20 62 61 73 65 20 74 79 70 65 20 0a 6f 66 20 74 68 65 20 74 79 70 65 20 6f   ┆ of the base type  of the type o┆
0x0b880…0b8a0        66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 70 74 72 20 74 6f 20 62 65 20 61 6c 6c 6f 63 61   ┆f the parameter ptr to be alloca┆
0x0b8a0…0b8c0        74 65 64 20 6f 6e 20 74 68 65 20 68 65 61 70 20 0a 8c 83 c8 0a 6f 66 20 74 68 65 20 63 61 6c 6c   ┆ted on the heap      of the call┆
0x0b8c0…0b8e0        69 6e 67 20 70 72 6f 63 65 73 73 2e 20 49 66 20 61 6e 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65   ┆ing process. If an initial value┆
0x0b8e0…0b900        20 69 73 20 64 65 66 69 6e 65 64 20 66 6f 72 20 0a 74 68 65 20 76 61 72 69 61 62 6c 65 20 6f 72   ┆ is defined for  the variable or┆
0x0b900…0b920        20 61 6e 79 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 69 74 2c 20 74 68 65 20 69 6e 69 74 69   ┆ any components of it, the initi┆
0x0b920…0b940        61 6c 69 7a 61 74 69 6f 6e 20 0a 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6d 6d 65 64 69 61 74 65   ┆alization  takes place immediate┆
0x0b940…0b960        6c 79 20 61 66 74 65 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 6f   ┆ly after allocation. The value o┆
0x0b960…0b980        66 20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 62 65 63 6f 6d 65 73 20 61 20 70 6f 69 6e 74   ┆f the  parameter becomes a point┆
0x0b980…0b9a0        65 72 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 20 76 61 72 69 61 62 6c 65 2e 0d 0a 0d   ┆er to the allocated variable.   ┆
0x0b9a0…0b9c0        0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 54 59 50 45 0d 0a 20 20 63 6f 6d 70 3b 20 63 6f 6d 70 31 5f   ┆  Example:  TYPE    comp; comp1_┆
0x0b9c0…0b9e0        74 79 70 65 3b 20 2d 2d 20 66 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 0d 0a 20   ┆type; -- forward declarations   ┆
0x0b9e0…0ba00        20 63 6f 6d 70 31 5f 74 79 70 65 3d 20 52 45 43 4f 52 44 0d 0a 20 20 20 20 6e 75 6d 62 65 72 3a   ┆ comp1_type= RECORD      number:┆
0x0ba00…0ba20 (93,)  20 69 6e 74 65 67 65 72 3b 0d 0a 20 20 20 20 63 6f 6d 70 31 5f 63 68 61 69 6e 3a 20 60 63 6f 6d   ┆ integer;      comp1_chain: `com┆
0x0ba20…0ba40        70 31 5f 74 79 70 65 3b 0d 0a 20 20 20 20 63 6f 6d 70 5f 63 68 61 69 6e 3a 20 60 63 6f 6d 70 0d   ┆p1_type;      comp_chain: `comp ┆
0x0ba40…0ba60        0a 20 20 45 4e 44 28 2a 52 45 43 4f 52 44 2a 29 3b 0d 0a 20 20 63 6f 6d 70 3d 20 41 52 52 41 59   ┆   END(*RECORD*);    comp= ARRAY┆
0x0ba60…0ba80        28 78 2e 2e 79 29 20 4f 46 20 60 63 6f 6d 70 31 5f 74 79 70 65 3b 0d 0a 56 41 52 0d 0a 20 20 73   ┆(x..y) OF `comp1_type;  VAR    s┆
0x0ba80…0baa0        74 72 75 63 74 75 72 65 5f 73 74 61 72 74 3a 20 60 63 6f 6d 70 3b 0d 0a 20 20 2e 2e 2e 0d 0a 20   ┆tructure_start: `comp;    ...   ┆
0x0baa0…0bac0        20 6e 65 77 28 73 74 72 75 63 74 75 72 65 5f 73 74 61 72 74 29 3b 0d 0a 20 20 6e 65 77 28 73 74   ┆ new(structure_start);    new(st┆
0x0bac0…0bae0        72 75 63 74 75 72 65 5f 73 74 61 72 74 60 28 58 29 29 3b 0d 0a 20 20 6e 65 77 28 73 74 72 75 63   ┆ructure_start`(X));    new(struc┆
0x0bae0…0bb00        74 75 72 65 5f 73 74 61 72 74 60 28 78 29 60 2e 63 6f 6d 70 31 5f 63 68 61 69 6e 29 0d 0a 20 20   ┆ture_start`(x)`.comp1_chain)    ┆
0x0bb00…0bb20        2e 2e 2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e 38 20 53 68 69 65 6c 64 65 64 20 54 79 70 65 73 0d 0a 0d   ┆...        3.8 Shielded Types   ┆
0x0bb20…0bb40        0a 53 68 69 65 6c 64 65 64 20 74 79 70 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 63 6f 6e 6a   ┆ Shielded types are used in conj┆
0x0bb40…0bb60        75 6e 63 74 69 6f 6e 20 77 69 74 68 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 0a 6f 66 66 73 70 72 69   ┆unction with control of  offspri┆
0x0bb60…0bb80        6e 67 20 70 72 6f 63 65 73 73 65 73 20 61 6e 64 20 77 69 74 68 20 69 6e 74 65 72 2d 70 72 6f 63   ┆ng processes and with inter-proc┆
0x0bb80…0bba0        65 73 73 20 61 6e 64 20 69 6e 74 65 72 2d 6d 6f 64 75 6c 65 20 0a 63 6f 6d 6d 75 6e 69 63 61 74   ┆ess and inter-module  communicat┆
0x0bba0…0bbc0        69 6f 6e 2e 20 49 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79   ┆ion. In order that the integrity┆
0x0bbc0…0bbe0        20 6f 66 20 62 75 66 66 65 72 73 20 61 6e 64 20 6f 66 20 0a 74 68 65 20 64 61 74 61 20 73 74 72   ┆ of buffers and of  the data str┆
0x0bbe0…0bc00        75 63 74 75 72 65 73 20 6e 65 65 64 65 64 20 74 6f 20 61 64 6d 69 6e 69 73 74 65 72 20 6d 75 6c   ┆uctures needed to administer mul┆
0x0bc00…0bc20 (94,)  69 70 6c 65 20 63 6f 6f 70 65 72 61 74 69 6e 67 20 0a 70 72 6f 63 65 73 73 65 73 20 62 65 20 70   ┆iple cooperating  processes be p┆
0x0bc20…0bc40        72 65 73 65 72 76 65 64 20 69 74 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   ┆reserved it is only possible to ┆
0x0bc40…0bc60        6d 61 6e 69 70 75 6c 61 74 65 20 0a 6f 62 6a 65 63 74 73 20 6f 66 20 73 68 69 65 6c 64 65 64 20   ┆manipulate  objects of shielded ┆
0x0bc60…0bc80        74 79 70 65 73 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75   ┆types by means of predefined rou┆
0x0bc80…0bca0        74 69 6e 65 73 2e 20 0a 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 64 65 74 61 69 6c 73 20 6f 66 20   ┆tines.  Accordingly, details of ┆
0x0bca0…0bcc0        74 68 65 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 73 65 20 74 79 70 65   ┆the representation of these type┆
0x0bcc0…0bce0        73 20 0a 61 72 65 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65   ┆s  are not part of the reference┆
0x0bce0…0bd00        20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2e 20 0a 4f 6e   ┆ definition of the language.  On┆
0x0bd00…0bd20        6c 79 20 70 72 65 64 65 66 69 6e 65 64 20 73 68 69 65 6c 64 65 64 20 74 79 70 65 73 20 65 78 69   ┆ly predefined shielded types exi┆
0x0bd20…0bd40        73 74 2c 20 73 69 78 20 69 6e 20 61 6c 6c 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆st, six in all.                 ┆
0x0bd40…0bd60        0a 0d 0a 8c 84 84 0a 43 6f 6e 73 74 61 6e 74 73 20 6f 66 20 73 68 69 65 6c 64 65 64 20 74 79 70   ┆       Constants of shielded typ┆
0x0bd60…0bd80        65 73 20 64 6f 20 6e 6f 74 20 65 78 69 73 74 2e 20 56 61 72 69 61 62 6c 65 73 20 6f 66 20 0a 73   ┆es do not exist. Variables of  s┆
0x0bd80…0bda0        68 69 65 6c 64 65 64 20 74 79 70 65 73 2c 20 65 78 63 65 70 74 20 72 65 66 65 72 65 6e 63 65 2c   ┆hielded types, except reference,┆
0x0bda0…0bdc0        20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 64 65 63 6c 61 72 65 64 20 61 74 20 0a 74 68 65 20 6f 75   ┆ can only be declared at  the ou┆
0x0bdc0…0bde0        74 65 72 20 62 6c 6f 63 6b 20 6c 65 76 65 6c 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 2c 20 63 66   ┆ter block level of a program, cf┆
0x0bde0…0be00        2e 20 73 75 62 73 65 63 74 69 6f 6e 20 36 2e 32 2e 31 2e 0d 0a 0d 0a 41 6e 20 6f 62 6a 65 63 74   ┆. subsection 6.2.1.    An object┆
0x0be00…0be20 (95,)  20 6f 66 20 74 79 70 65 20 70 72 6f 63 65 73 73 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   ┆ of type process may be used to ┆
0x0be20…0be40        63 6f 6e 74 72 6f 6c 20 61 20 63 68 69 6c 64 20 0a 70 72 6f 63 65 73 73 2c 20 69 2e 65 2e 20 61   ┆control a child  process, i.e. a┆
0x0be40…0be60        6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20   ┆n incarnation of a sub-program. ┆
0x0be60…0be80        54 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 61 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 20 69   ┆The value of  a process object i┆
0x0be80…0bea0        73 20 65 69 74 68 65 72 20 4e 49 4c 20 6f 72 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61   ┆s either NIL or a reference to a┆
0x0bea0…0bec0        20 63 68 69 6c 64 20 0a 70 72 6f 63 65 73 73 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   ┆ child  process, the initial val┆
0x0bec0…0bee0        75 65 20 62 65 69 6e 67 20 4e 49 4c 2e 20 50 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 73 20 6d 61   ┆ue being NIL. Process objects ma┆
0x0bee0…0bf00        79 20 62 65 20 0a 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79 20 74 68 65 20 70 72 65 64 65 66 69   ┆y be  manipulated by the predefi┆
0x0bf00…0bf20        6e 65 64 20 72 6f 75 74 69 6e 65 73 20 63 72 65 61 74 65 2c 20 73 74 61 72 74 2c 20 73 74 6f 70   ┆ned routines create, start, stop┆
0x0bf20…0bf40        20 0a 61 6e 64 20 72 65 6d 6f 76 65 2c 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 63 68   ┆  and remove, as described in ch┆
0x0bf40…0bf60        61 70 74 65 72 20 39 2e 0d 0a 0d 0a 54 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74   ┆apter 9.    The predefined funct┆
0x0bf60…0bf80        69 6f 6e 20 6e 69 6c 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74   ┆ion nil may be used to test whet┆
0x0bf80…0bfa0        68 65 72 20 61 20 0a 70 72 6f 63 65 73 73 20 76 61 72 69 61 62 6c 65 20 68 61 73 20 76 61 6c 75   ┆her a  process variable has valu┆
0x0bfa0…0bfc0        65 20 4e 49 4c 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 6e 69 6c 28 56 41 52 20 70 72 3a 20 70   ┆e NIL.    FUNCTION nil(VAR pr: p┆
0x0bfc0…0bfe0        72 6f 63 65 73 73 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ┆rocess): boolean  The result of ┆
0x0bfe0…0c000        61 20 63 61 6c 6c 20 6f 66 20 6e 69 6c 20 69 73 20 74 72 75 65 20 69 66 20 74 68 65 20 76 61 6c   ┆a call of nil is true if the val┆
0x0c000…0c020 (96,)  75 65 20 6f 66 20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 70 72 20 69 73 20 4e 49 4c 2c 20   ┆ue of the  parameter pr is NIL, ┆
0x0c020…0c040        61 6e 64 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 0d 0a 41 6e 20 6f 62 6a 65 63   ┆and false otherwise.    An objec┆
0x0c040…0c060        74 20 6f 66 20 74 79 70 65 20 6d 61 69 6c 62 6f 78 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f   ┆t of type mailbox may be used to┆
0x0c060…0c080        20 74 72 61 6e 73 66 65 72 20 61 63 63 65 73 73 20 74 6f 20 0a 61 20 62 75 66 66 65 72 20 73 74   ┆ transfer access to  a buffer st┆
0x0c080…0c0a0        61 63 6b 20 66 72 6f 6d 20 6f 6e 65 20 70 72 6f 63 65 73 73 20 74 6f 20 61 6e 6f 74 68 65 72 2c   ┆ack from one process to another,┆
0x0c0a0…0c0c0        20 75 73 69 6e 67 20 74 68 65 20 0a 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20   ┆ using the  predefined routines ┆
0x0c0c0…0c0e0        73 69 67 6e 61 6c 2c 20 77 61 69 74 20 61 6e 64 20 72 65 74 75 72 6e 2c 20 61 73 20 64 65 73 63   ┆signal, wait and return, as desc┆
0x0c0e0…0c100        72 69 62 65 64 20 69 6e 20 0a 63 68 61 70 74 65 72 20 39 2e 20 54 68 65 20 69 6e 69 74 69 61 6c   ┆ribed in  chapter 9. The initial┆
0x0c100…0c120        20 73 74 61 74 65 20 6f 66 20 61 20 6d 61 69 6c 62 6f 78 20 69 73 20 70 61 73 73 69 76 65 2e 0d   ┆ state of a mailbox is passive. ┆
0x0c120…0c140        0a 0d 0a 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 79 70 65 20 70 6f 72 74 20 6d 61 79 20 62 65   ┆   An object of type port may be┆
0x0c140…0c160        20 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 0a 69 6e 74 65 72   ┆ used in conjunction with  inter┆
0x0c160…0c180        6d 6f 64 75 6c 65 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 61 73 20 64 65 73 63 72 69 62 65   ┆module communication as describe┆
0x0c180…0c1a0        64 20 69 6e 20 63 68 61 70 74 65 72 20 31 31 2e 20 54 68 65 20 0a 69 6e 69 74 69 61 6c 20 73 74   ┆d in chapter 11. The  initial st┆
0x0c1a0…0c1c0        61 74 65 20 6f 66 20 61 20 70 6f 72 74 20 69 73 20 63 6c 6f 73 65 64 2e 0d 0a 0d 0a 42 75 66 66   ┆ate of a port is closed.    Buff┆
0x0c1c0…0c1e0        65 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67 20 70 6f 6f 6c 73 20 61 6e   ┆ers are allocated using pools an┆
0x0c1e0…0c200        64 20 61 63 63 65 73 73 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 0a 6f 62 6a 65 63 74 73 20   ┆d accessed by means of  objects ┆
0x0c200…0c220 (97,)  6f 66 20 74 79 70 65 20 72 65 66 65 72 65 6e 63 65 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20   ┆of type reference. The value of ┆
0x0c220…0c240        61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 0a 62 75 66 66 65 72 20 73 74 61 63 6b 2c 20   ┆a reference to a  buffer stack, ┆
0x0c240…0c260        63 61 6c 6c 65 64 20 74 68 65 20 a1 64 65 73 69 67 6e 61 74 65 64 20 73 74 61 63 6b e1 2e 20 54   ┆called the  designated stack . T┆
0x0c260…0c280        68 65 20 74 6f 70 20 62 75 66 66 65 72 20 6f 66 20 0a 74 68 65 20 64 65 73 69 67 6e 61 74 65 64   ┆he top buffer of  the designated┆
0x0c280…0c2a0        20 73 74 61 63 6b 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 64 65 73 69 67 6e 61 74 65 64   ┆ stack is called the  designated┆
0x0c2a0…0c2c0        20 62 75 66 66 65 72 e1 2e 20 42 75 66 66 65 72 20 0a 73 74 61 63 6b 73 2c 20 61 6e 64 20 74 68   ┆ buffer . Buffer  stacks, and th┆
0x0c2c0…0c2e0        65 20 70 72 65 64 65 66 69 6e 65 64 20 70 72 6f 63 65 64 75 72 65 73 20 70 75 73 68 20 61 6e 64   ┆e predefined procedures push and┆
0x0c2e0…0c300        20 70 6f 70 20 77 6f 72 6b 69 6e 67 20 0a 6f 6e 20 74 68 65 6d 2c 20 61 72 65 20 64 65 73 63 72   ┆ pop working  on them, are descr┆
0x0c300…0c320        69 62 65 64 20 69 6e 20 64 65 74 61 69 6c 20 69 6e 20 63 68 61 70 74 65 72 20 31 30 2e 0d 0a 0d   ┆ibed in detail in chapter 10.   ┆
0x0c320…0c340        0a 54 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6e 69 6c 20 6d 61 79   ┆ The predefined function nil may┆
0x0c340…0c360        20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72 20 61 20 0a 72 65 66 65   ┆ be used to test whether a  refe┆
0x0c360…0c380        72 65 6e 63 65 20 69 73 20 4e 49 4c 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 6e 69 6c 28 56 41   ┆rence is NIL.    FUNCTION nil(VA┆
0x0c380…0c3a0        52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 8c 83 c8 0a   ┆R ref: reference): boolean      ┆
0x0c3a0…0c3c0        54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 6e 69 6c 20 69 73 20 74   ┆The result of a call of nil is t┆
0x0c3c0…0c3e0        72 75 65 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 66 20 69 73 20 0a 4e 49 4c 2c   ┆rue if the value of ref is  NIL,┆
0x0c3e0…0c400        20 61 6e 64 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 0d 0a 45 76 65 72 79 20 62   ┆ and false otherwise.    Every b┆
0x0c400…0c420 (98,)  75 66 66 65 72 20 68 61 73 20 66 6f 75 72 74 65 65 6e 20 61 74 74 72 69 62 75 74 65 73 20 77 68   ┆uffer has fourteen attributes wh┆
0x0c420…0c440        69 63 68 20 61 72 65 20 70 72 65 73 65 6e 74 20 65 76 65 6e 20 0a 69 66 20 74 68 65 20 62 75 66   ┆ich are present even  if the buf┆
0x0c440…0c460        66 65 72 20 69 73 20 65 6d 70 74 79 3a 0d 0a 0d 0a 2d 20 68 6f 6d 65 20 70 6f 6f 6c 3a 20 74 68   ┆fer is empty:    - home pool: th┆
0x0c460…0c480        65 20 70 6f 6f 6c 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 62 75 66 66 65 72 20 62 65 6c 6f 6e   ┆e pool to which the buffer belon┆
0x0c480…0c4a0        67 73 2c 0d 0a 2d 20 84 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 3a 20 6d 61 69 6c 62 6f 78 20   ┆gs,  -  return address: mailbox ┆
0x0c4a0…0c4c0        74 6f 20 77 68 69 63 68 20 74 68 65 20 62 75 66 66 65 72 20 6d 61 79 20 62 65 20 0a 19 82 80 80   ┆to which the buffer may be      ┆
0x0c4c0…0c4e0        72 65 74 75 72 6e 65 64 2c 0d 0a 2d 20 84 75 31 2c 20 75 32 2c 20 75 33 2c 20 75 34 3a 20 6f 62   ┆returned,  -  u1, u2, u3, u4: ob┆
0x0c4e0…0c500        6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 30 2e 2e 32 35 35 20 77 68 69 63 68 20 6d 61 79 20 62   ┆jects of type 0..255 which may b┆
0x0c500…0c520        65 20 72 65 61 64 20 0a 19 82 80 80 61 6e 64 20 77 72 69 74 74 65 6e 2c 0d 0a 2d 20 73 69 7a 65   ┆e read      and written,  - size┆
0x0c520…0c540        20 6f 66 20 74 68 65 20 62 75 66 66 65 72 2c 20 69 2e 65 2e 20 6e 75 6d 62 65 72 20 6f 66 20 62   ┆ of the buffer, i.e. number of b┆
0x0c540…0c560        79 74 65 73 2c 0d 0a 2d 20 84 6f 66 66 73 65 74 2c 20 74 6f 70 2c 20 62 79 74 65 20 63 6f 75 6e   ┆ytes,  -  offset, top, byte coun┆
0x0c560…0c580        74 3a 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 30 2e 2e 6d 61 78 69 6e 74 20 77 68 69   ┆t: objects of type 0..maxint whi┆
0x0c580…0c5a0        63 68 20 0a 19 82 80 80 6d 61 79 20 62 65 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 3b   ┆ch      may be read and written;┆
0x0c5a0…0c5c0        20 74 68 65 79 20 64 65 73 63 72 69 62 65 20 74 68 65 20 64 61 74 61 20 61 72 65 61 20 6f 66 20   ┆ they describe the data area of ┆
0x0c5c0…0c5e0        0a 19 82 80 80 74 68 65 20 62 75 66 66 65 72 2c 20 73 65 65 20 62 65 6c 6f 77 2c 0d 0a 2d 20 84   ┆     the buffer, see below,  -  ┆
0x0c5e0…0c600        65 76 65 6e 74 20 6b 69 6e 64 3a 20 69 6e 64 69 63 61 74 65 73 20 68 6f 77 20 61 6e 64 20 77 68   ┆event kind: indicates how and wh┆
0x0c600…0c620 (99,)  79 20 74 68 65 20 62 75 66 66 65 72 20 77 61 73 20 70 6c 61 63 65 64 20 69 6e 20 0a 19 82 80 80   ┆y the buffer was placed in      ┆
0x0c620…0c640        74 68 65 20 6d 61 69 6c 62 6f 78 20 66 72 6f 6d 20 77 68 69 63 68 20 69 74 20 68 61 73 20 6c 61   ┆the mailbox from which it has la┆
0x0c640…0c660        73 74 20 62 65 65 6e 20 72 65 63 65 69 76 65 64 20 6f 72 20 74 68 61 74 20 0a 19 82 80 80 74 68   ┆st been received or that      th┆
0x0c660…0c680        65 20 62 75 66 66 65 72 20 77 61 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 61 20 70 6f 6f 6c   ┆e buffer was removed from a pool┆
0x0c680…0c6a0        3b 20 73 65 65 20 64 65 74 61 69 6c 73 20 75 6e 64 65 72 20 74 68 65 20 0a 19 82 80 80 70 72 65   ┆; see details under the      pre┆
0x0c6a0…0c6c0        64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 65 76 65 6e 74 6b 69 6e 64 20 62 65 6c 6f 77   ┆defined function eventkind below┆
0x0c6c0…0c6e0        2c 0d 0a 2d 20 84 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 64 65 78 2c 20 63 72 65 64 69 74 20 63   ┆,  -  connection index, credit c┆
0x0c6e0…0c700        6f 75 6e 74 2c 20 72 65 61 73 6f 6e 3a 20 75 73 65 64 20 69 6e 20 0a 19 82 80 80 63 6f 6e 6a 75   ┆ount, reason: used in      conju┆
0x0c700…0c720        6e 63 74 69 6f 6e 20 77 69 74 68 20 49 4d 43 20 66 75 6e 63 74 69 6f 6e 73 2c 20 63 66 2e 20 63   ┆nction with IMC functions, cf. c┆
0x0c720…0c740        68 61 70 74 65 72 20 31 31 2e 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20   ┆hapter 11.    The values of the ┆
0x0c740…0c760        62 75 66 66 65 72 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 66 73 65 74 20 61 6e 64 20 74 6f 70   ┆buffer attributes offset and top┆
0x0c760…0c780        20 64 65 66 69 6e 65 20 61 6e 20 0a 61 72 65 61 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   ┆ define an  area within the buff┆
0x0c780…0c7a0        65 72 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 64 61 74 61 20 61 72 65 61 e1 2c 20 77 68 69 63   ┆er, called the  data area , whic┆
0x0c7a0…0c7c0        68 20 0a 63 6f 6d 70 72 69 73 65 73 20 74 68 65 20 28 62 79 74 65 29 20 6c 6f 63 61 74 69 6f 6e   ┆h  comprises the (byte) location┆
0x0c7c0…0c7e0        73 20 66 72 6f 6d 20 6f 66 66 73 65 74 20 74 68 72 6f 75 67 68 20 74 6f 70 2d 31 20 0a 72 65 6c   ┆s from offset through top-1  rel┆
0x0c7e0…0c800        61 74 69 76 65 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 62 75   ┆ative to the beginning of the bu┆
0x0c800…0c820 (100,) 66 66 65 72 2e 0d 0a 0d 0a 09 62 75 66 66 65 72 0d 0a 09 20 20 20 a1 20 20 20 20 20 20 20 20 20   ┆ffer.     buffer                ┆
0x0c820…0c840        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 a1   ┆                                ┆
0x0c840…0c860        21 20 20 20 20 21 20 64 61 74 61 20 61 72 65 61 20 21 20 20 20 20 20 20 20 20 20 20 20 20 21 0d   ┆!    ! data area !            ! ┆
0x0c860…0c880        0a 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 20 20 20 20 20 20 74 6f 70 0d 0a 0d 0a   ┆            offset       top    ┆
0x0c880…0c8a0        54 68 65 20 62 79 74 65 20 63 6f 75 6e 74 20 61 74 74 72 69 62 75 74 65 20 69 73 20 75 73 65 64   ┆The byte count attribute is used┆
0x0c8a0…0c8c0        20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 75 6e 69 74   ┆ to indicate the size of a  unit┆
0x0c8c0…0c8e0        20 6f 66 20 64 61 74 61 20 77 68 69 63 68 20 69 73 20 6c 6f 63 61 74 65 64 20 66 72 6f 6d 20 74   ┆ of data which is located from t┆
0x0c8e0…0c900        68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 20 0a 61 72 65 61 2c 20   ┆he beginning of the data  area, ┆
0x0c900…0c920        62 75 74 20 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6f   ┆but which does not necessarily o┆
0x0c920…0c940        63 63 75 70 79 20 74 68 65 20 77 68 6f 6c 65 20 64 61 74 61 20 0a 61 72 65 61 2e 0d 0a 0d 0a 8c   ┆ccupy the whole data  area.     ┆
0x0c940…0c960        83 bc 0a 49 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 20 61 72 65 61 20 64 65   ┆   In order for the data area de┆
0x0c960…0c980        73 63 72 69 70 74 69 6f 6e 20 74 6f 20 62 65 20 63 6f 6e 73 69 73 74 65 6e 74 2c 20 0a 6f 66 66   ┆scription to be consistent,  off┆
0x0c980…0c9a0        73 65 74 20 6d 75 73 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 6f 72 20 65 71 75 61 6c 20 74 6f   ┆set must be less thanor equal to┆
0x0c9a0…0c9c0        20 74 6f 70 2c 20 77 68 69 63 68 20 69 6e 20 74 75 72 6e 20 6d 75 73 74 20 0a 62 65 20 6c 65 73   ┆ top, which in turn must  be les┆
0x0c9c0…0c9e0        73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74   ┆s than or equal to the size of t┆
0x0c9e0…0ca00        68 65 20 62 75 66 66 65 72 2e 20 49 6e 20 0a 70 61 72 74 69 63 75 6c 61 72 2c 20 69 66 20 74 68   ┆he buffer. In  particular, if th┆
0x0ca00…0ca20 (101,) 65 20 62 75 66 66 65 72 20 69 73 20 65 6d 70 74 79 2c 20 61 6c 6c 20 74 68 72 65 65 20 61 74 74   ┆e buffer is empty, all three att┆
0x0ca20…0ca40        72 69 62 75 74 65 73 20 0a 6d 75 73 74 20 62 65 20 7a 65 72 6f 2e 0d 0a 0d 0a 49 6e 20 61 20 62   ┆ributes  must be zero.    In a b┆
0x0ca40…0ca60        75 66 66 65 72 20 73 74 61 63 6b 20 74 68 65 20 73 69 7a 65 20 61 6e 64 20 64 61 74 61 20 61 72   ┆uffer stack the size and data ar┆
0x0ca60…0ca80        65 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 0a 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68   ┆ea description  attributes of th┆
0x0ca80…0caa0        65 20 74 6f 70 20 62 75 66 66 65 72 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74   ┆e top buffer will refer to the t┆
0x0caa0…0cac0        6f 70 20 6e 6f 6e 2d 65 6d 70 74 79 20 0a 62 75 66 66 65 72 2c 20 63 66 2e 20 73 65 63 74 69 6f   ┆op non-empty  buffer, cf. sectio┆
0x0cac0…0cae0        6e 20 31 30 2e 31 2e 0d 0a 0d 0a 54 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 64 61 74 61 20 61   ┆n 10.1.    The concept of data a┆
0x0cae0…0cb00        72 65 61 20 69 73 20 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74 68 20   ┆rea is used in conjunction with ┆
0x0cb00…0cb20        74 68 65 20 49 4d 43 20 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20   ┆the IMC  functions, cf. chapter ┆
0x0cb20…0cb40        31 31 2c 20 61 6e 64 20 69 73 20 61 6c 73 6f 20 69 6e 74 65 6e 64 65 64 20 61 73 20 61 20 62 61   ┆11, and is also intended as a ba┆
0x0cb40…0cb60        73 69 73 20 0a 66 6f 72 20 74 68 65 20 65 73 74 61 62 6c 69 73 68 6d 65 6e 74 20 6f 66 20 70 72   ┆sis  for the establishment of pr┆
0x0cb60…0cb80        61 63 74 69 63 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 75 73 65 20   ┆actical conventions for the use ┆
0x0cb80…0cba0        0a 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 72 65   ┆ of the language.    FUNCTION re┆
0x0cba0…0cbc0        6c 65 61 73 65 70 6f 6f 6c 29 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 20 20   ┆leasepool)VAR p: pool;          ┆
0x0cbc0…0cbe0        20 6e 6f 5f 6f 66 5f 62 75 66 73 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 3a 20 30 2e 2e 6d 61 78 69   ┆ no_of_bufs: 1..maxint): 0..maxi┆
0x0cbe0…0cc00        6e 74 0d 0a 0d 0a 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 69 6e 64 69   ┆nt    The number of buffers indi┆
0x0cc00…0cc20 (102,) 63 61 74 65 64 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6e 6f 5f 6f 66 5f 62 75 66 73   ┆cated by the value of no_of_bufs┆
0x0cc20…0cc40        20 0a 61 72 65 20 72 65 6c 65 61 73 65 64 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 70 20 61   ┆  are released from the pool p a┆
0x0cc40…0cc60        6e 64 20 62 65 63 6f 6d 65 20 66 72 65 65 20 6d 65 6d 6f 72 79 2e 20 49 66 20 74 68 65 20 0a 72   ┆nd become free memory. If the  r┆
0x0cc60…0cc80        65 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 69 73 20 6e 6f   ┆equested number of buffers is no┆
0x0cc80…0cca0        74 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 70 6f 6f 6c 20 66 65 77 65 72 20 0a 62 75 66   ┆t present in the pool fewer  buf┆
0x0cca0…0ccc0        66 65 72 73 20 6d 61 79 20 62 65 20 72 65 6c 65 61 73 65 64 2e 20 54 68 65 20 61 63 74 75 61 6c   ┆fers may be released. The actual┆
0x0ccc0…0cce0        20 6e 75 6d 62 65 72 20 6f 66 20 72 65 6c 65 61 73 65 64 20 0a 62 75 66 66 65 72 73 69 73 20 72   ┆ number of released  buffersis r┆
0x0cce0…0cd00        65 74 75 72 6e 65 64 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e   ┆eturned as the result of the fun┆
0x0cd00…0cd20        63 74 69 6f 6e 20 63 61 6c 6c 2e 0d 0a 0d 0a 41 20 62 75 66 66 65 72 20 69 73 20 74 61 6b 65 6e   ┆ction call.    A buffer is taken┆
0x0cd20…0cd40        20 6f 75 74 20 66 72 6f 6d 20 61 20 70 6f 6f 6c 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 74 68   ┆ out from a pool by a call of th┆
0x0cd40…0cd60        65 20 0a 70 72 65 64 65 66 69 6e 65 64 20 70 72 6f 63 65 64 75 72 65 20 67 65 74 62 75 66 3a 0d   ┆e  predefined procedure getbuf: ┆
0x0cd60…0cd80        0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 67 65 74 62 75 66 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b   ┆   PROCEDURE getbuf(VAR p: pool;┆
0x0cd80…0cda0        20 56 41 52 20 72 61 3a 20 6d 61 69 6c 62 6f 78 3b 20 56 41 52 20 72 3a 20 0a 20 20 20 20 20 20   ┆ VAR ra: mailbox; VAR r:        ┆
0x0cda0…0cdc0        20 20 20 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 41 74 20 74 68 65 20 74 69 6d 65 20 6f 66   ┆    reference)    At the time of┆
0x0cdc0…0cde0        20 63 61 6c 6c 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72   ┆ call the value of the parameter┆
0x0cde0…0ce00        20 72 20 6d 75 73 74 20 62 65 20 0a 4e 49 4c 2c 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75   ┆ r must be  NIL, otherwise a fau┆
0x0ce00…0ce20 (103,) 6c 74 20 6f 63 63 75 72 73 2e 20 49 66 20 74 68 65 20 70 6f 6f 6c 20 70 20 69 73 20 65 6d 70 74   ┆lt occurs. If the pool p is empt┆
0x0ce20…0ce40        79 2c 20 69 2e 65 2e 20 0a 61 6c 6c 20 62 75 66 66 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72   ┆y, i.e.  all buffers have been r┆
0x0ce40…0ce60        65 6d 6f 76 65 64 2c 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 70 72 6f 63 65 73 73 20 77 69 6c 6c   ┆emoved, the calling process will┆
0x0ce60…0ce80        20 77 61 69 74 20 0a 75 6e 74 69 6c 20 61 20 62 75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 61 76   ┆ wait  until a buffer becomes av┆
0x0ce80…0cea0        61 69 6c 61 62 6c 65 2e 20 54 68 69 73 20 6f 63 63 75 72 73 20 77 68 65 6e 20 61 20 62 75 66 66   ┆ailable. This occurs when a buff┆
0x0cea0…0cec0        65 72 20 0a 69 73 20 70 75 74 20 62 61 63 6b 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 62 79 20 61   ┆er  is put back to the pool by a┆
0x0cec0…0cee0        6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 28 63 61 6c 6c 20 6f 66 20 70 75 74 62 75 66 2c 20   ┆nother process (call of putbuf, ┆
0x0cee0…0cf00        0a 73 65 65 20 62 65 6c 6f 77 29 2c 20 6f 72 20 77 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20   ┆ see below), or when additional ┆
0x0cf00…0cf20        6d 65 6d 6f 72 79 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 0a 70 6f 6f   ┆memory is allocated for the  poo┆
0x0cf20…0cf40        6c 20 28 63 61 6c 6c 20 6f 66 20 61 6c 6c 6f 63 70 6f 6f 6c 2c 20 73 65 65 20 61 62 6f 76 65 29   ┆l (call of allocpool, see above)┆
0x0cf40…0cf60        2e 20 57 68 65 6e 20 73 65 76 65 72 61 6c 70 72 6f 63 65 73 73 65 73 20 0a 61 74 74 65 6d 70 74   ┆. When severalprocesses  attempt┆
0x0cf60…0cf80        20 74 6f 20 74 61 6b 65 20 6f 75 74 20 62 75 66 66 65 72 73 20 66 72 6f 6d 20 61 6e 20 65 6d 70   ┆ to take out buffers from an emp┆
0x0cf80…0cfa0        74 79 20 70 6f 6f 6c 20 77 61 69 74 69 6e 67 20 74 61 6b 65 73 20 0a 70 6c 61 63 65 20 69 6e 20   ┆ty pool waiting takes  place in ┆
0x0cfa0…0cfc0        61 20 46 49 46 4f 20 71 75 65 75 65 2e 0d 0a 0d 0a 8c 83 e0 0a 57 68 65 6e 20 61 20 62 75 66 66   ┆a FIFO queue.        When a buff┆
0x0cfc0…0cfe0        65 72 20 69 20 61 76 61 69 6c 61 62 6c 65 20 69 74 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f   ┆er i available it is removed fro┆
0x0cfe0…0d000        6d 20 74 68 65 20 70 6f 6f 6c 2c 20 69 74 73 20 0a 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   ┆m the pool, its  return address ┆
0x0d000…0d020 (104,) 62 65 63 6f 6d 65 73 20 74 68 65 20 6d 61 69 6c 62 6f 78 20 69 6e 64 69 63 61 74 65 64 20 62 79   ┆becomes the mailbox indicated by┆
0x0d020…0d040        20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 72 61 2c 20 61 6e 64 20 72 20 77 69 6c 6c 20 64   ┆ the  parameter ra, and r will d┆
0x0d040…0d060        65 73 69 67 6e 61 74 65 20 61 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 63 6f 6e 73 69 73 74 69   ┆esignate a buffer stack consisti┆
0x0d060…0d080        6e 67 20 0a 6f 6e 6c 79 20 6f 66 20 74 68 65 20 72 65 6d 6f 76 65 64 20 62 75 66 66 65 72 2e 0d   ┆ng  only of the removed buffer. ┆
0x0d080…0d0a0        0a 0d 0a 57 68 65 6e 20 61 20 62 75 66 66 65 72 20 68 61 73 20 6a 75 73 74 20 62 65 65 6e 20 72   ┆   When a buffer has just been r┆
0x0d0a0…0d0c0        65 6d 6f 76 65 64 20 66 72 6f 6d 20 69 74 73 20 68 6f 6d 65 20 70 6f 6f 6c 20 69 74 73 20 0a 64   ┆emoved from its home pool its  d┆
0x0d0c0…0d0e0        61 74 61 20 61 72 65 61 20 77 69 6c 6c 20 62 65 20 74 68 65 20 77 68 6f 6c 65 20 62 75 66 66 65   ┆ata area will be the whole buffe┆
0x0d0e0…0d100        72 2c 20 69 2e 65 2e 20 6f 66 66 73 65 74 3d 7a 65 72 6f 20 61 6e 64 20 0a 74 6f 70 3d 73 69 7a   ┆r, i.e. offset=zero and  top=siz┆
0x0d100…0d120        65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 2e 20 54 68 65 20 61 74 74 72 69 62 75 74 65 73 20   ┆e of the buffer. The attributes ┆
0x0d120…0d140        75 31 2c 20 75 32 2c 20 75 33 2c 20 75 34 20 61 6e 64 20 0a 62 79 74 65 20 63 6f 75 6e 74 20 77   ┆u1, u2, u3, u4 and  byte count w┆
0x0d140…0d160        69 6c 6c 20 61 6c 6c 20 62 65 20 7a 65 72 6f 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   ┆ill all be zero. The value of th┆
0x0d160…0d180        65 20 65 76 65 6e 74 20 6b 69 6e 64 20 0a 61 74 74 72 69 62 75 74 65 20 77 69 6c 6c 20 62 65 20   ┆e event kind  attribute will be ┆
0x0d180…0d1a0        6e 6f 74 5f 65 76 65 6e 74 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 62 75 66 66 65 72   ┆not_event, indicating the buffer┆
0x0d1a0…0d1c0        20 64 6f 65 73 20 6e 6f 74 20 0a 72 65 70 72 65 73 65 6e 74 20 61 20 73 79 73 74 65 6d 20 65 76   ┆ does not  represent a system ev┆
0x0d1c0…0d1e0        65 6e 74 2e 0d 0a 0d 0a 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 73 70 65 63 69 66   ┆ent.    It is possible to specif┆
0x0d1e0…0d200        79 20 61 20 6d 61 78 69 6d 75 6d 20 74 69 6d 65 20 77 68 69 63 68 20 61 20 70 72 6f 63 65 73 73   ┆y a maximum time which a process┆
0x0d200…0d220 (105,) 20 69 73 20 0a 77 69 6c 6c 69 6e 67 20 74 6f 20 77 61 69 74 20 66 6f 72 20 61 20 62 75 66 66 65   ┆ is  willing to wait for a buffe┆
0x0d220…0d240        72 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 62 79 20 63 61 6c 6c 69 6e 67 20 0a   ┆r. This can be done by calling  ┆
0x0d240…0d260        67 65 74 62 75 66 64 65 6c 61 79 20 69 6e 73 74 65 61 64 20 6f 66 20 67 65 74 62 75 66 2c 20 63   ┆getbufdelay instead of getbuf, c┆
0x0d260…0d280        66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 39 2e 32 2e 32 2e 0d 0a 0d 0a 41 20 62 75 66 66 65 72   ┆f. subsection 9.2.2.    A buffer┆
0x0d280…0d2a0        20 69 73 20 70 75 74 20 62 61 63 6b 20 69 6e 20 69 74 73 20 68 6f 6d 65 20 70 6f 6f 6c 20 62 79   ┆ is put back in its home pool by┆
0x0d2a0…0d2c0        20 61 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 0a 70 72 65 64 65 66 69 6e 65 64 20 70 72 6f 63 65   ┆ a call of the  predefined proce┆
0x0d2c0…0d2e0        64 75 72 65 20 70 75 74 62 75 66 3a 0d 0a 0d 0a 50 52 4f 43 45 44 52 55 45 20 70 75 74 62 75 66   ┆dure putbuf:    PROCEDRUE putbuf┆
0x0d2e0…0d300        28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 41 74 20 74 68 65 20 74 69 6d 65 20   ┆(VAR r: reference)  At the time ┆
0x0d300…0d320        6f 66 20 63 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 6e 6f 74 20 62   ┆of call the parameter must not b┆
0x0d320…0d340        65 20 6c 6f 63 6b 65 64 20 28 63 66 2e 20 0a 73 65 63 74 69 6f 6e 20 35 2e 39 29 2c 20 61 6e 64   ┆e locked (cf.  section 5.9), and┆
0x0d340…0d360        20 69 74 73 20 76 61 6c 75 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e 49 4c 2c 20 6e 6f 72 20   ┆ its value must not be NIL, nor ┆
0x0d360…0d380        6d 61 79 20 74 68 65 20 0a 64 65 73 69 67 6e 61 74 65 64 20 73 74 61 63 6b 20 63 6f 6e 74 61 69   ┆may the  designated stack contai┆
0x0d380…0d3a0        6e 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 62 75 66 66 65 72 3b 20 6f 74 68 65 72 77 69 73   ┆n more than one buffer; otherwis┆
0x0d3a0…0d3c0        65 20 61 20 0a 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 54 68 65 20 62 75 66 66 65 72 20 69 73   ┆e a  fault occurs. The buffer is┆
0x0d3c0…0d3e0        20 70 75 74 20 62 61 63 6b 20 69 6e 20 69 74 73 20 68 6f 6d 65 20 70 6f 6f 6c 2c 20 61 6e 64 20   ┆ put back in its home pool, and ┆
0x0d3e0…0d400        0a 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 20 62 65 63 6f 6d 65 73 20 4e 49 4c 2e 0d 0a 0d 0a   ┆ the value of r becomes NIL.    ┆
0x0d400…0d420 (106,) 49 74 20 63 61 6e 20 62 65 20 74 65 73 74 65 64 20 77 68 65 74 68 65 72 20 61 20 62 75 66 66 65   ┆It can be tested whether a buffe┆
0x0d420…0d440        72 20 62 65 6c 6f 6e 67 73 20 74 6f 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 0a 70 6f 6f 6c 2e   ┆r belongs to a particular  pool.┆
0x0d440…0d460        0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 68 6f 6d 65 74 65 73 74 28 56 41 52 20 70 3a 20 70 6f 6f   ┆    FUNCTION hometest(VAR p: poo┆
0x0d460…0d480        6c 3b 20 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 62 6f 6f 6c 65 61 6e 20   ┆l; VAR ref: reference): boolean ┆
0x0d480…0d4a0        0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 66 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e 49   ┆ The value of ref must not be NI┆
0x0d4a0…0d4c0        4c 20 77 68 65 6e 20 68 6f 6d 65 74 65 73 74 20 69 73 20 63 61 6c 6c 65 64 2e 20 49 66 20 0a 69   ┆L when hometest is called. If  i┆
0x0d4c0…0d4e0        74 20 69 73 2c 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 54 68 65 20 72 65 73 75 6c 74   ┆t is, a fault occurs. The result┆
0x0d4e0…0d500        20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 68 6f 6d 65 74 65 73 74 20 69 73 20 0a 74 72 75 65 20   ┆ of a call of hometest is  true ┆
0x0d500…0d520        69 66 20 70 20 69 73 20 74 68 65 20 68 6f 6d 65 20 70 6f 6f 6c 20 6f 66 20 74 68 65 20 62 75 66   ┆if p is the home pool of the buf┆
0x0d520…0d540        66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 72 65 66 2c 20 0a 6f 74 68 65 72 77 69 73   ┆fer designated by ref,  otherwis┆
0x0d540…0d560        65 20 69 74 20 69 73 20 66 61 6c 73 65 2e 0d 0a 0d 0a 54 68 65 20 65 76 65 6e 74 20 6b 69 6e 64   ┆e it is false.    The event kind┆
0x0d560…0d580        20 61 74 74 72 69 62 75 74 65 20 6f 66 20 61 20 62 75 66 66 65 72 20 6d 61 79 20 62 65 20 72 65   ┆ attribute of a buffer may be re┆
0x0d580…0d5a0        61 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6b 69   ┆ad in order to  determine the ki┆
0x0d5a0…0d5c0        6e 64 20 6f 66 20 65 76 65 6e 74 20 77 68 69 63 68 20 74 68 65 20 62 75 66 66 65 72 20 72 65 70   ┆nd of event which the buffer rep┆
0x0d5c0…0d5e0        72 65 73 65 6e 74 73 2e 0d 0a 0d 0a 8c 83 c8 0a 46 55 4e 43 54 49 4f 4e 20 65 76 65 6e 74 6b 69   ┆resents.        FUNCTION eventki┆
0x0d5e0…0d600        6e 64 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 65 76 65 6e 74 5f 74 79 70 65   ┆nd(VAR r: reference): event_type┆
0x0d600…0d620 (107,) 0d 0a 0d 0a 49 66 20 65 76 65 6e 74 6b 69 6e 64 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20   ┆    If eventkind is called with ┆
0x0d620…0d640        61 20 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 76 61 6c 75 65 20 4e 49 4c 20 61 20 0a 66 61   ┆a parameter with value NIL a  fa┆
0x0d640…0d660        75 6c 74 20 6f 63 63 75 72 73 2c 20 6f 74 68 65 72 77 69 73 65 20 74 68 65 20 72 65 73 75 6c 74   ┆ult occurs, otherwise the result┆
0x0d660…0d680        20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 76 65 6e 74 20 0a 6b 69 6e 64   ┆ is the value of the event  kind┆
0x0d680…0d6a0        20 61 74 74 72 69 62 75 74 65 20 6f 66 20 74 68 65 20 64 65 73 69 67 6e 61 74 65 64 20 62 75 66   ┆ attribute of the designated buf┆
0x0d6a0…0d6c0        66 65 72 2e 20 54 68 65 20 72 65 73 75 6c 74 20 74 79 70 65 20 69 73 20 0a 74 68 65 20 70 72 65   ┆fer. The result type is  the pre┆
0x0d6c0…0d6e0        64 65 66 69 6e 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 0d 0a 20 20 65 76   ┆defined enumeration type      ev┆
0x0d6e0…0d700        65 6e 74 5f 74 79 70 65 3d 28 6e 6f 74 5f 65 76 65 6e 74 2c 20 6d 65 73 73 61 67 65 5f 65 76 65   ┆ent_type=(not_event, message_eve┆
0x0d700…0d720        6e 74 2c 20 61 6e 73 77 65 72 5f 65 76 65 6e 74 0d 0a 09 09 70 72 6f 63 65 73 73 5f 72 65 6d 6f   ┆nt, answer_event    process_remo┆
0x0d720…0d740        76 65 64 2c 20 70 6f 72 74 5f 63 6c 6f 73 65 64 2c 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 2c 0d   ┆ved, port_closed, disconnected, ┆
0x0d740…0d760        0a 09 09 6c 65 74 74 65 72 5f 73 65 6e 74 2c 20 6c 65 74 74 65 72 5f 61 72 72 69 76 65 64 2c 20   ┆   letter_sent, letter_arrived, ┆
0x0d760…0d780        6c 6f 63 61 6c 5f 63 6f 6e 6e 65 63 74 2c 0d 0a 09 09 72 65 6d 6f 74 65 5f 63 6f 6e 6e 65 63 74   ┆local_connect,    remote_connect┆
0x0d780…0d7a0        2c 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 2c 20 0a 09 09 72 65 73 65 74 5f 63 6f 6d   ┆, reset_indication,    reset_com┆
0x0d7a0…0d7c0        70 6c 65 74 69 6f 6e 2c 20 63 72 65 64 69 74 2c 20 64 61 74 61 5f 73 65 6e 74 2c 20 0d 0a 09 09   ┆pletion, credit, data_sent,     ┆
0x0d7c0…0d7e0        64 61 74 61 5f 61 72 72 69 76 65 64 2c 20 64 61 74 61 5f 6f 76 65 72 72 75 6e 2c 20 64 75 6d 6d   ┆data_arrived, data_overrun, dumm┆
0x0d7e0…0d800        79 5f 6c 65 74 74 65 72 2c 0d 0a 09 09 64 75 6d 6d 79 5f 6c 63 6e 63 74 2c 20 64 75 6d 6d 79 5f   ┆y_letter,    dummy_lcnct, dummy_┆
0x0d800…0d820 (108,) 72 63 6e 63 74 2c 20 64 75 6d 6d 79 5f 72 69 6e 64 69 63 2c 0d 0a 09 09 64 75 6d 6d 79 5f 72 63   ┆rcnct, dummy_rindic,    dummy_rc┆
0x0d820…0d840        6d 70 6c 2c 20 64 75 6d 6d 79 5f 63 72 65 64 69 74 2c 20 64 75 6d 6d 79 5f 73 65 6e 74 2c 0d 0a   ┆mpl, dummy_credit, dummy_sent,  ┆
0x0d840…0d860        09 09 64 75 6d 6d 79 5f 61 72 72 69 76 65 64 29 2e 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6e   ┆  dummy_arrived).    The value n┆
0x0d860…0d880        6f 74 5f 65 76 65 6e 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 62 75 66 66 65 72 20 74 68   ┆ot_event indicates the buffer th┆
0x0d880…0d8a0        61 73 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 0a 66 72 6f 6d 20 61 20 70 6f 6f 6c 20 6f 72   ┆as been obtained  from a pool or┆
0x0d8a0…0d8c0        20 69 74 73 20 65 76 65 6e 74 20 6b 69 6e 64 20 68 61 73 20 62 65 65 6e 20 72 65 73 65 74 2e 20   ┆ its event kind has been reset. ┆
0x0d8c0…0d8e0        54 68 65 20 76 61 6c 75 65 20 0a 6d 65 73 73 61 67 65 5f 65 76 65 6e 74 20 69 6e 64 69 63 61 74   ┆The value  message_event indicat┆
0x0d8e0…0d900        65 73 20 74 68 65 20 62 75 66 66 65 72 20 68 61 73 20 62 65 65 6e 20 73 69 67 6e 61 6c 6c 65 64   ┆es the buffer has been signalled┆
0x0d900…0d920        20 66 72 6f 6d 20 61 20 0a 70 72 6f 63 65 73 73 2c 20 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e   ┆ from a  process, cf. subsection┆
0x0d920…0d940        20 39 2e 32 2e 32 2e 20 54 68 65 20 76 61 6c 75 65 20 61 6e 73 77 65 72 5f 65 76 65 6e 74 20 0a   ┆ 9.2.2. The value answer_event  ┆
0x0d940…0d960        69 6e 64 69 63 61 74 65 73 20 74 68 65 20 62 75 66 66 65 72 20 68 61 73 20 62 65 65 6e 20 72 65   ┆indicates the buffer has been re┆
0x0d960…0d980        74 75 72 6e 65 64 20 62 79 20 61 20 70 72 6f 63 65 73 73 2c 20 63 66 2e 20 0a 73 75 62 73 65 63   ┆turned by a process, cf.  subsec┆
0x0d980…0d9a0        74 69 6f 6e 20 39 2e 32 2e 32 2e 20 54 68 65 20 76 61 6c 75 65 20 70 72 6f 63 65 73 73 5f 72 65   ┆tion 9.2.2. The value process_re┆
0x0d9a0…0d9c0        6d 6f 76 65 64 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 0a 62 75 66 66 65 72 20 68 61 73 20   ┆moved indicates the  buffer has ┆
0x0d9c0…0d9e0        62 65 65 6e 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 61 20 70 72 6f 63 65 73 73 20 77 68 69   ┆been returned from a process whi┆
0x0d9e0…0da00        63 68 20 77 61 73 20 72 65 6d 6f 76 65 64 2c 20 0a 63 66 2e 20 73 65 63 74 69 6f 6e 20 39 2e 31   ┆ch was removed,  cf. section 9.1┆
0x0da00…0da20 (109,) 2e 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 76 61 6c 75 65 73 20 69 6e 64 69 63 61 74 65 20   ┆. The remaining values indicate ┆
0x0da20…0da40        49 4d 43 20 65 76 65 6e 74 73 2c 20 0a 63 66 2e 20 63 68 61 70 74 65 72 20 31 31 2e 0d 0a 0d 0a   ┆IMC events,  cf. chapter 11.    ┆
0x0da40…0da60        54 68 65 20 6f 6e 6c 79 20 77 61 79 20 61 20 70 72 6f 63 65 73 73 20 63 61 6e 20 6d 6f 64 69 66   ┆The only way a process can modif┆
0x0da60…0da80        79 20 74 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 61 74 74 72 69 62 75 74 65 20 0a 6f 66 20 61   ┆y the event kind attribute  of a┆
0x0da80…0daa0        20 62 75 66 66 65 72 20 77 68 69 6c 65 20 72 65 74 61 69 6e 69 6e 67 20 61 63 63 65 73 73 20 69   ┆ buffer while retaining access i┆
0x0daa0…0dac0        73 20 62 79 20 72 65 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20   ┆s by resetting it.    PROCEDURE ┆
0x0dac0…0dae0        72 65 73 65 74 65 76 65 6e 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a   ┆resetevent(VAR r: reference)    ┆
0x0dae0…0db00        49 66 20 72 65 73 65 74 65 76 65 6e 74 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 70   ┆If resetevent is called with a p┆
0x0db00…0db20        61 72 61 6d 65 74 65 72 20 77 69 74 68 20 76 61 6c 75 65 20 4e 49 4c 20 61 20 0a 66 61 75 6c 74   ┆arameter with value NIL a  fault┆
0x0db20…0db40        20 6f 63 63 75 72 73 2c 20 6f 74 68 65 72 77 69 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20   ┆ occurs, otherwise the value of ┆
0x0db40…0db60        74 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 0a 61 74 74 72 69 62 75 74 65 20 6f 66 20 74 68 65   ┆the event kind  attribute of the┆
0x0db60…0db80        20 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 6e 6f 74 5f 65   ┆ designated buffer becomes not_e┆
0x0db80…0dba0        76 65 6e 74 2e 0d 0a 0d 0a 54 68 65 20 75 2d 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 20 62   ┆vent.    The u-attributes of a b┆
0x0dba0…0dbc0        75 66 66 65 72 20 6d 61 79 20 62 65 20 72 65 61 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c   ┆uffer may be read using the foll┆
0x0dbc0…0dbe0        6f 77 69 6e 67 20 0a 66 6f 75 72 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73   ┆owing  four predefined functions┆
0x0dbe0…0dc00        3a 0d 0a 0d 0a 8c 83 d4 0a 46 55 4e 43 54 49 4f 4e 20 75 31 28 56 41 52 20 72 3a 20 72 65 66 65   ┆:        FUNCTION u1(VAR r: refe┆
0x0dc00…0dc20 (110,) 72 65 6e 63 65 29 3a 20 30 2e 2e 32 35 35 0d 0a 46 55 4e 43 54 49 4f 4e 20 75 32 28 56 41 52 20   ┆rence): 0..255  FUNCTION u2(VAR ┆
0x0dc20…0dc40        72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 32 35 35 0d 0a 46 55 4e 43 54 49 4f 4e 20   ┆r: reference): 0..255  FUNCTION ┆
0x0dc40…0dc60        75 33 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 32 35 35 0d 0a 46 55   ┆u3(VAR r: reference): 0..255  FU┆
0x0dc60…0dc80        4e 43 54 49 4f 4e 20 75 34 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e   ┆NCTION u4(VAR r: reference): 0..┆
0x0dc80…0dca0        32 35 35 0d 0a 0d 0a 49 66 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   ┆255    If one of these functions┆
0x0dca0…0dcc0        20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 70 61 72 61 6d 65 74 65 72 20 77 69 74 68   ┆ is called with a parameter with┆
0x0dcc0…0dce0        20 0a 76 61 6c 75 65 20 4e 49 4c 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 4f 74 68 65   ┆  value NIL a fault occurs. Othe┆
0x0dce0…0dd00        72 77 69 73 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 0a 69 6e 64 69 63 61 74   ┆rwise the result is the  indicat┆
0x0dd00…0dd20        65 64 20 75 2d 61 74 74 72 69 62 75 74 65 20 6f 66 20 74 68 65 20 64 65 73 69 67 6e 61 74 65 64   ┆ed u-attribute of the designated┆
0x0dd20…0dd40        20 62 75 66 66 65 72 2e 0d 0a 0d 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 61 20 62 75 66 66 65 72   ┆ buffer.    The size of a buffer┆
0x0dd40…0dd60        20 6d 61 79 20 62 65 20 72 65 61 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 65 64 65 66 69 6e 65   ┆ may be read using the predefine┆
0x0dd60…0dd80        64 20 0a 66 75 6e 63 74 69 6f 6e 20 62 75 66 73 69 7a 65 3a 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e   ┆d  function bufsize:    FUNCTION┆
0x0dd80…0dda0        20 62 75 66 73 69 7a 65 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d   ┆ bufsize(VAR r: reference): 0..m┆
0x0dda0…0ddc0        61 78 69 6e 74 0d 0a 49 66 20 62 75 66 73 69 7a 65 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68   ┆axint  If bufsize is called with┆
0x0ddc0…0dde0        20 61 20 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 76 61 6c 75 65 20 4e 49 4c 20 61 20 66 61   ┆ a parameter with value NIL a fa┆
0x0dde0…0de00        75 6c 74 20 0a 6f 63 63 75 72 73 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 73 69 7a 65 20   ┆ult  occurs. Otherwise the size ┆
0x0de00…0de20 (111,) 6f 66 20 74 68 65 20 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 69 73 20 0a 72 65 74   ┆of the designated buffer is  ret┆
0x0de20…0de40        75 72 6e 65 64 20 61 73 20 72 65 73 75 6c 74 2e 0d 0a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   ┆urned as result.    The followin┆
0x0de40…0de60        67 20 73 69 78 20 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20 6d 61 79 20 62 65   ┆g six predefined routines may be┆
0x0de60…0de80        20 75 73 65 64 20 74 6f 20 72 65 61 64 20 0a 61 6e 64 20 73 65 74 20 74 68 65 20 76 61 6c 75 65   ┆ used to read  and set the value┆
0x0de80…0dea0        73 20 6f 66 20 74 68 65 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 66 73 65 74 2c 20 74 6f 70 20   ┆s of the attributes offset, top ┆
0x0dea0…0dec0        61 6e 64 20 62 79 74 65 20 0a 63 6f 75 6e 74 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 6f 66 66   ┆and byte  count.    FUNCTION off┆
0x0dec0…0dee0        73 65 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74   ┆set(VAR r: reference): 0..maxint┆
0x0dee0…0df00        0d 0a 46 55 4e 43 54 49 4f 4e 20 74 6f 70 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29   ┆  FUNCTION top(VAR r: reference)┆
0x0df00…0df20        3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 46 55 4e 43 54 49 4f 4e 20 62 79 74 65 63 6f 75 6e 74 28   ┆: 0..maxint  FUNCTION bytecount(┆
0x0df20…0df40        56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 0d 0a   ┆VAR r: reference): 0..maxint    ┆
0x0df40…0df60        49 66 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 74 68 72 65 65 20 66 75 6e 63 74 69 6f 6e 73 20   ┆If one of these three functions ┆
0x0df60…0df80        69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 70 61 72 61 6d 65 74 65 72 20 0a 77 69 74 68   ┆is called with a parameter  with┆
0x0df80…0dfa0        20 76 61 6c 75 65 20 4e 49 4c 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 4f 74 68 65 72   ┆ value NIL a fault occurs. Other┆
0x0dfa0…0dfc0        77 69 73 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 0a 76 61 6c 75 65 20 6f 66   ┆wise the result is the  value of┆
0x0dfc0…0dfe0        20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 61 74 74 72 69 62 75 74 65 20 6f 66 20 74 68 65 20   ┆ the indicated attribute of the ┆
0x0dfe0…0e000        64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20   ┆designated buffer.    PROCEDURE ┆
0x0e000…0e020 (112,) 73 65 74 6f 6f 73 65 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 76 61 6c 3a 20   ┆setooset(VAR r: reference; val: ┆
0x0e020…0e040        30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 50 52 4f 43 45 44 55 52 45 20 73 65 74 74 6f 70 28 56 41 52   ┆0..maxint)  PROCEDURE settop(VAR┆
0x0e040…0e060        20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 76 61 6c 2e 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a   ┆ r: reference; val. 0..maxint)  ┆
0x0e060…0e080        50 52 4f 43 45 44 55 52 45 20 73 65 74 62 79 74 65 63 6f 75 6e 74 28 56 41 52 20 72 3a 20 72 65   ┆PROCEDURE setbytecount(VAR r: re┆
0x0e080…0e0a0        66 65 72 65 6e 63 65 3b 20 76 61 6c 2e 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 0d 0a 49 66 20 6f   ┆ference; val. 0..maxint)    If o┆
0x0e0a0…0e0c0        6e 65 20 6f 66 20 74 68 65 73 65 20 74 68 72 65 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 63   ┆ne of these three functions is c┆
0x0e0c0…0e0e0        61 6c 6c 65 64 20 77 69 74 68 20 61 20 72 65 66 65 72 65 6e 63 65 20 0a 70 61 72 61 6d 65 74 65   ┆alled with a reference  paramete┆
0x0e0e0…0e100        72 20 77 69 74 68 20 76 61 6c 75 65 20 4e 49 4c 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e   ┆r with value NIL a fault occurs.┆
0x0e100…0e120        20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 76 61 6c 75 65 20 0a 6f 66 20 74 68 65 20 76 61 6c   ┆ Otherwise the value  of the val┆
0x0e120…0e140        20 70 61 72 61 6d 65 74 65 72 20 69 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 61 74 20 61   ┆ parameter is assigned to that a┆
0x0e140…0e160        74 74 72 69 62 75 74 65 20 6f 66 20 74 68 65 20 0a 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66   ┆ttribute of the  designated buff┆
0x0e160…0e180        65 72 20 77 68 69 63 68 20 69 73 20 69 6e 64 69 63 61 74 65 64 20 62 79 20 74 68 65 20 70 72 6f   ┆er which is indicated by the pro┆
0x0e180…0e1a0        63 65 64 75 72 65 20 6e 61 6d 65 2e 0d 0a 0d 0a 8c 83 c8 0a 43 68 61 69 6e 20 28 6c 69 6e 6b 65   ┆cedure name.        Chain (linke┆
0x0e1a0…0e1c0        64 20 6c 69 73 74 73 29 20 6f 66 20 62 75 66 66 65 72 20 73 74 61 63 6b 73 20 6d 61 79 20 62 65   ┆d lists) of buffer stacks may be┆
0x0e1c0…0e1e0        20 62 75 69 6c 74 20 61 6e 64 20 0a 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79 20 6d 65 61 6e 73   ┆ built and  manipulated by means┆
0x0e1e0…0e200        20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 74 79 70 65 73 20 72 65 66 65 72 65 6e   ┆ of objects of the types referen┆
0x0e200…0e220 (113,) 63 65 20 61 6e 64 20 0a 63 68 61 69 6e 20 61 6e 64 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64   ┆ce and  chain and the predefined┆
0x0e220…0e240        20 72 6f 75 74 69 6e 65 73 20 63 68 61 69 6e 69 6e 73 65 72 74 2c 20 63 68 61 69 6e 65 78 74 72   ┆ routines chaininsert, chainextr┆
0x0e240…0e260        61 63 74 2c 20 0a 63 68 61 69 6e 75 70 2c 20 63 68 61 69 6e 64 6f 77 6e 2c 20 63 68 61 69 6e 73   ┆act,  chainup, chaindown, chains┆
0x0e260…0e280        74 61 72 74 2c 20 63 68 61 69 6e 72 65 73 65 74 20 61 6e 64 20 64 65 73 63 72 69 62 65 64 20 69   ┆tart, chainreset and described i┆
0x0e280…0e2a0        6e 20 0a 73 65 63 74 69 6f 6e 20 31 30 2e 32 2e 20 41 20 63 68 61 69 6e 20 6f 62 6a 65 63 74 20   ┆n  section 10.2. A chain object ┆
0x0e2a0…0e2c0        73 65 72 76 65 73 20 61 73 20 61 20 68 61 6e 64 6c 65 20 74 6f 20 73 75 63 68 20 61 20 0a 6c 69   ┆serves as a handle to such a  li┆
0x0e2c0…0e2e0        73 74 2e 20 41 63 63 65 73 73 20 74 6f 20 61 20 6c 69 73 74 20 63 61 6e 6e 6f 74 20 62 65 20 74   ┆st. Access to a list cannot be t┆
0x0e2e0…0e300        72 61 6e 73 66 65 72 72 65 64 20 76 69 61 20 61 20 6d 61 69 6c 62 6f 78 2e 0d 0a 0d 0a 54 68 65   ┆ransferred via a mailbox.    The┆
0x0e300…0e320        20 72 6f 75 74 69 6e 65 73 20 65 76 65 6e 74 6b 69 6e 64 2c 20 72 65 73 65 74 65 76 65 6e 74 2c   ┆ routines eventkind, resetevent,┆
0x0e320…0e340        20 75 31 2c 20 75 32 2c 20 75 33 2c 20 75 34 2c 20 73 65 74 75 31 2c 20 0a 73 65 74 75 32 2c 20   ┆ u1, u2, u3, u4, setu1,  setu2, ┆
0x0e340…0e360        73 65 74 75 33 2c 20 73 65 74 75 34 2c 20 62 75 66 73 69 7a 65 2c 20 6f 66 66 73 65 74 2c 20 74   ┆setu3, setu4, bufsize, offset, t┆
0x0e360…0e380        6f 70 2c 20 62 79 74 65 63 6f 75 6e 74 2c 20 0a 73 65 74 6f 66 66 73 65 74 2c 20 73 65 74 74 6f   ┆op, bytecount,  setoffset, setto┆
0x0e380…0e3a0        70 2c 20 61 6e 64 20 73 65 74 62 79 74 65 63 6f 75 6e 74 20 6d 61 79 20 61 6c 73 6f 20 62 65 20   ┆p, and setbytecount may also be ┆
0x0e3a0…0e3c0        63 61 6c 6c 65 64 20 77 69 74 68 20 0a 61 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 79 70 65   ┆called with  a parameter of type┆
0x0e3c0…0e3e0        20 63 68 61 69 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 65 2e 20 49 6e 20   ┆ chain instead of reference. In ┆
0x0e3e0…0e400        74 68 69 73 20 0a 63 61 73 65 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20 61 74 74 72 69 62 75 74   ┆this  case the relevant attribut┆
0x0e400…0e420 (114,) 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 69 73 20 0a 61 63 63 65   ┆e of the current buffer is  acce┆
0x0e420…0e440        73 73 65 64 2e 20 54 68 65 20 63 68 61 69 6e 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 65 6d 70 74   ┆ssed. The chain must not be empt┆
0x0e440…0e460        79 3b 20 69 66 20 73 6f 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 0d 0a b0 a1   ┆y; if so a fault occurs.        ┆
0x0e460…0e480        33 2e 39 20 53 74 72 75 63 74 75 72 65 64 20 54 79 70 65 73 0d 0a 0d 0a 41 6e 20 6f 62 6a 65 63   ┆3.9 Structured Types    An objec┆
0x0e480…0e4a0        74 20 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 69 73 20 61 20 73 74 72 75   ┆t of a structured type is a stru┆
0x0e4a0…0e4c0        63 74 75 72 65 64 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 0a 73 75 62 6f 62 6a 65 63 74 73   ┆ctured collection of  subobjects┆
0x0e4c0…0e4e0        20 6f 66 20 6f 74 68 65 72 20 28 73 69 6d 70 6c 65 72 29 20 74 79 70 65 73 2e 20 54 68 65 20 76   ┆ of other (simpler) types. The v┆
0x0e4e0…0e500        61 6c 75 65 20 6f 66 20 73 75 63 68 20 61 6e 20 0a 6f 62 6a 65 63 74 20 69 73 20 61 20 73 74 72   ┆alue of such an  object is a str┆
0x0e500…0e520        75 63 74 75 72 65 64 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20   ┆uctured collection of values of ┆
0x0e520…0e540        74 68 65 20 73 75 62 2d 0a 6f 62 6a 65 63 74 73 2e 20 53 74 72 75 63 74 75 72 65 73 20 6d 61 79   ┆the sub- objects. Structures may┆
0x0e540…0e560        20 62 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 64 65 65 70 2c 20 69 2e 65 2e 20 73 75 62 2d 0a   ┆ be arbitrarily deep, i.e. sub- ┆
0x0e560…0e580        6f 62 6a 65 63 74 73 20 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 6f 62 6a 65 63 74 20 6d   ┆objects of a structured object m┆
0x0e580…0e5a0        61 79 20 74 68 65 6d 73 65 6c 76 65 73 20 62 65 20 6f 66 20 0a 73 74 72 75 63 74 75 72 65 64 20   ┆ay themselves be of  structured ┆
0x0e5a0…0e5c0        74 79 70 65 73 2e 20 54 68 65 20 74 79 70 65 73 6f 66 20 74 68 65 20 73 75 62 6f 62 6a 65 63 74   ┆types. The typesof the subobject┆
0x0e5c0…0e5e0        73 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66 20 61 20 0a 73 74 72 75 63 74 75 72 74 65 64 20 74   ┆s of objects of a  structurted t┆
0x0e5e0…0e600        79 70 65 20 61 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 63 6f 6e 73 74 69 74 75 65 6e 74 20   ┆ype are called the  constituent ┆
0x0e600…0e620 (115,) 74 79 70 65 73 e1 2e 20 53 75 62 2d 0a 6f 62 6a 65 63 74 73 20 77 68 69 63 68 20 61 72 65 20 6e   ┆types . Sub- objects which are n┆
0x0e620…0e640        6f 74 20 6f 66 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 20 61 72 65 20 63 61 6c 6c 65   ┆ot of structured types are calle┆
0x0e640…0e660        64 20 0a a1 63 6f 6d 70 6f 6e 65 6e 74 73 e1 2e 20 54 68 65 20 74 6f 74 61 6c 20 73 65 74 20 6f   ┆d   components . The total set o┆
0x0e660…0e680        66 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 0a 6f 62   ┆f components of a structured  ob┆
0x0e680…0e6a0        6a 65 63 74 20 61 72 65 3a 20 74 68 6f 73 65 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 77 68 69 63   ┆ject are: those sub-objects whic┆
0x0e6a0…0e6c0        68 20 61 72 65 20 74 68 65 6d 73 65 6c 76 65 73 20 0a 63 6f 6d 70 6f 6e 65 6e 74 73 20 70 6c 75   ┆h are themselves  components plu┆
0x0e6c0…0e6e0        73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 69 6e   ┆s the components of the remainin┆
0x0e6e0…0e700        67 20 73 75 62 2d 6f 62 6a 65 63 74 73 2e 0d 0a 0d 0a 49 66 20 61 6e 79 20 63 6f 6d 70 6f 6e 65   ┆g sub-objects.    If any compone┆
0x0e700…0e720        6e 74 20 74 79 70 65 20 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 69 73 20   ┆nt type of a structured type is ┆
0x0e720…0e740        70 72 6f 74 65 63 74 65 64 20 0a 28 70 6f 69 6e 74 65 72 20 6f 72 20 73 68 69 65 6c 64 65 64 29   ┆protected  (pointer or shielded)┆
0x0e740…0e760        20 74 68 65 20 73 74 72 75 63 74 75 72 65 64 20 74 79 65 20 69 73 20 61 6c 73 6f 20 73 61 69 64   ┆ the structured tye is also said┆
0x0e760…0e780        20 74 6f 20 62 65 20 0a 70 72 6f 74 65 63 74 65 64 2e 0d 0a 0d 0a 54 68 65 20 63 6f 6d 70 61 72   ┆ to be  protected.    The compar┆
0x0e780…0e7a0        69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 3d 20 61 6e 64 20 3c 3e 20 6d 61 79 20 62 65 20 61   ┆ison operators = and <> may be a┆
0x0e7a0…0e7c0        70 70 6c 69 65 64 20 74 6f 20 70 61 69 72 73 20 6f 66 20 0a 6f 70 65 72 61 6e 64 73 20 6f 66 20   ┆pplied to pairs of  operands of ┆
0x0e7c0…0e7e0        74 68 65 20 73 61 6d 65 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 2c 20 70 72 6f 76 69 64   ┆the same structured type, provid┆
0x0e7e0…0e800        65 64 20 74 68 65 79 20 61 70 70 6c 79 20 74 6f 20 0a 61 6c 6c 20 63 6f 6d 70 6f 6e 65 6e 74 73   ┆ed they apply to  all components┆
0x0e800…0e820 (116,) 2e 20 54 68 65 20 72 65 73 75 6c 74 20 70 72 6f 64 75 63 65 64 20 62 79 20 74 68 65 20 3d 20 6f   ┆. The result produced by the = o┆
0x0e820…0e840        70 65 72 61 74 6f 72 20 69 73 20 0a 74 72 75 65 20 69 66 20 61 6c 6c 20 63 6f 6d 70 6f 6e 65 6e   ┆perator is  true if all componen┆
0x0e840…0e860        74 20 76 61 6c 75 65 73 20 61 72 65 20 70 61 69 72 77 69 73 65 20 65 71 75 61 6c 2c 20 6f 74 68   ┆t values are pairwise equal, oth┆
0x0e860…0e880        65 72 77 69 73 65 20 0a 66 61 6c 73 65 2e 20 54 68 65 20 72 65 73 75 6c 74 20 70 72 6f 64 63 75   ┆erwise  false. The result prodcu┆
0x0e880…0e8a0        65 64 20 62 79 20 3c 3e 20 69 73 20 6a 75 73 74 20 74 68 65 20 6f 70 70 6f 73 69 74 65 2c 20 69   ┆ed by <> is just the opposite, i┆
0x0e8a0…0e8c0        2e 65 2e 20 0a 74 72 75 65 20 69 66 20 61 6e 79 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 6f 6e 65   ┆.e.  true if any pair of compone┆
0x0e8c0…0e8e0        6e 74 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 0d 0a 0d 0a 8c 83 e0 0a   ┆nt values are not equal.        ┆
0x0e8e0…0e900        41 20 73 74 72 75 63 74 75 72 65 20 74 79 70 65 20 69 73 20 61 6e 20 61 72 72 61 79 20 74 79 70   ┆A structure type is an array typ┆
0x0e900…0e920        65 20 6f 72 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f   ┆e or a record type,  depending o┆
0x0e920…0e940        6e 20 74 68 65 20 77 61 79 20 69 74 20 69 73 20 62 75 69 6c 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆n the way it is built.          ┆
0x0e940…0e960        0d 0a 49 66 20 74 68 65 20 6b 65 79 77 6f 72 64 20 50 41 43 4b 45 44 20 69 73 20 70 72 65 73 65   ┆  If the keyword PACKED is prese┆
0x0e960…0e980        6e 74 20 74 68 65 20 64 65 66 69 6e 65 64 20 74 79 70 65 20 69 73 20 63 61 6c 6c 65 64 20 0a 61   ┆nt the defined type is called  a┆
0x0e980…0e9a0        20 70 61 63 6b 65 64 20 74 79 70 65 2e 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 74 79 70   ┆ packed type. objects of the typ┆
0x0e9a0…0e9c0        65 20 61 72 65 20 61 6c 73 6f 20 63 61 6c 6c 65 64 20 70 61 63 6b 65 64 2e 20 0a 50 61 63 6b 65   ┆e are also called packed.  Packe┆
0x0e9c0…0e9e0        64 20 74 79 70 65 73 20 63 6f 6e 73 74 69 74 75 74 65 20 61 20 73 75 62 2d 63 6c 61 73 73 20 6f   ┆d types constitute a sub-class o┆
0x0e9e0…0ea00        66 20 74 68 65 20 63 6c 61 73 73 20 6f 66 20 0a 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73   ┆f the class of  structured types┆
0x0ea00…0ea20 (117,) 2e 20 50 61 63 6b 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 63 6f 64   ┆. Packing indicates that the cod┆
0x0ea20…0ea40        65 20 67 65 6e 65 72 61 74 65 64 20 0a 62 79 20 61 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 61 63   ┆e generated  by a compiler to ac┆
0x0ea40…0ea60        63 65 73 73 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 64 65 66 69 6e 65 64 20 74 79 70 65   ┆cess objects of the defined type┆
0x0ea60…0ea80        20 73 68 6f 75 6c 64 20 0a 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 63 6f 6d 70 61 63   ┆ should  be optimized for compac┆
0x0ea80…0eaa0        74 6e 65 73 73 20 6f 66 20 6f 62 6a 65 63 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 72   ┆tness of object representation r┆
0x0eaa0…0eac0        61 74 68 65 72 20 0a 74 68 61 6e 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 2e 20 41 6e 20 69   ┆ather  than execution time. An i┆
0x0eac0…0eae0        6d 70 6f 72 74 61 6e 74 20 73 75 62 2d 63 6c 61 73 73 20 6f 66 20 70 61 63 6b 65 64 20 74 79 70   ┆mportant sub-class of packed typ┆
0x0eae0…0eb00        65 73 20 0a 69 73 20 74 68 65 20 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 73 2c 20 63 66   ┆es  is the descriptive types, cf┆
0x0eb00…0eb20        2e 20 73 65 63 74 69 6f 6e 20 33 2e 31 31 2e 0d 0a 0d 0a 41 20 70 61 63 6b 65 64 20 6f 62 6a 65   ┆. section 3.11.    A packed obje┆
0x0eb20…0eb40        63 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 77 68 69 63 68 20   ┆ct may contain components which ┆
0x0eb40…0eb60        65 69 74 68 65 72 20 64 6f 20 6e 6f 74 20 0a 73 74 61 72 74 20 6f 6e 20 61 20 62 79 74 65 20 62   ┆either do not  start on a byte b┆
0x0eb60…0eb80        6f 75 6e 64 61 72 79 20 6f 72 20 64 6f 20 6e 6f 74 20 6f 63 63 75 70 79 20 61 20 6d 75 6c 74 69   ┆oundary or do not occupy a multi┆
0x0eb80…0eba0        70 6c 65 20 6f 66 20 38 20 0a 62 69 74 73 20 28 6f 72 20 62 6f 74 68 29 2e 20 53 75 63 68 20 61   ┆ple of 8  bits (or both). Such a┆
0x0eba0…0ebc0        20 63 6f 6d 70 6f 6e 65 6e 74 20 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 69 72 72 65 67 75 6c 61   ┆ component is called an irregula┆
0x0ebc0…0ebe0        72 20 0a 6f 62 6a 65 63 74 2e 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f   ┆r  object. It may not be used fo┆
0x0ebe0…0ec00        72 20 72 65 74 79 70 69 6e 67 20 69 6e 20 61 20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 20 0a   ┆r retyping in a with statement  ┆
0x0ec00…0ec20 (118,) 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 35 2e 38 29 20 6f 72 20 61 73 20 61 6e 20 61 63 74 75 61   ┆(cf. section 5.8) or as an actua┆
0x0ec20…0ec40        6c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62   ┆l parameter to be  transferred b┆
0x0ec40…0ec60        79 20 61 64 64 72 65 73 73 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 36 2e 32 29 2e 0d 0a 0d 0a   ┆y address (cf. section 6.2).    ┆
0x0ec60…0ec80        41 72 72 61 79 20 61 6e 64 20 72 65 63 6f 72 64 20 74 79 70 65 73 20 61 72 65 20 64 65 73 63 72   ┆Array and record types are descr┆
0x0ec80…0eca0        69 62 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 0a 73 75 62 73 65   ┆ibed in the following two  subse┆
0x0eca0…0ecc0        63 74 69 6f 6e 73 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 55 6e 6c 65 73 73 20 61 20 70 61 63 6b   ┆ctions.     Note:  Unless a pack┆
0x0ecc0…0ece0        65 64 20 74 79 70 65 20 69 73 20 64 65 73 63 72 69 70 74 69 76 65 2c 20 63 66 2e 20 73 65 63 74   ┆ed type is descriptive, cf. sect┆
0x0ece0…0ed00        69 6f 6e 20 33 2e 31 31 2c 20 74 68 65 20 0a 70 72 65 63 69 73 65 20 65 66 66 65 63 74 20 6f 66   ┆ion 3.11, the  precise effect of┆
0x0ed00…0ed20        20 70 61 63 6b 69 6e 67 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 70 61 72 74   ┆ packing is not defined. In part┆
0x0ed20…0ed40        69 63 75 6c 61 72 2c 20 69 66 20 0a 74 68 65 20 74 79 70 65 20 68 61 73 20 63 6f 6e 73 74 69 74   ┆icular, if  the type has constit┆
0x0ed40…0ed60        75 65 6e 74 20 74 79 70 65 73 20 77 68 69 63 68 20 61 72 65 20 6e 6f 74 20 73 74 61 74 69 63 2c   ┆uent types which are not static,┆
0x0ed60…0ed80        20 70 61 63 6b 69 6e 67 20 0a 63 61 6e 6e 6f 74 20 62 65 20 65 78 70 65 63 74 65 64 20 74 6f 20   ┆ packing  cannot be expected to ┆
0x0ed80…0eda0        68 61 76 65 20 61 6e 79 20 65 66 66 65 63 74 2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e 39 2e 31 20 41 72   ┆have any effect.        3.9.1 Ar┆
0x0eda0…0edc0        72 61 79 20 54 79 70 65 73 0d 0a 0d 0a 54 68 65 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 6f 66 20   ┆ray Types    The sub-objects of ┆
0x0edc0…0ede0        61 6e 20 61 72 72 61 79 20 61 72 65 20 63 61 6c 6c 65 64 20 65 6c 65 6d 65 6e 74 73 2e 20 54 68   ┆an array are called elements. Th┆
0x0ede0…0ee00        65 20 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 62 79 20 69 6e 64   ┆e  elements are organized by ind┆
0x0ee00…0ee20 (119,) 65 78 69 6e 67 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 ec 0a 54 68 65 20 74 79 70 65 20 73 70 65   ┆exing.              The type spe┆
0x0ee20…0ee40        63 69 66 69 65 64 20 62 65 74 77 65 65 6e 20 74 68 65 20 70 61 72 61 6e 74 68 65 73 65 73 20 69   ┆cified between the parantheses i┆
0x0ee40…0ee60        73 20 63 61 6c 6c 65 64 20 74 68 65 20 0a 69 6e 64 65 78 20 74 79 70 65 2e 20 49 74 20 6d 75 73   ┆s called the  index type. It mus┆
0x0ee60…0ee80        74 20 62 65 20 61 6e 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 2e 20 41 6c 6c 20 65 6c 65 6d 65 6e   ┆t be an ordinal type. All elemen┆
0x0ee80…0eea0        74 73 20 6f 66 20 61 6e 20 0a 6f 62 6a 65 63 74 20 6f 66 20 74 68 65 20 64 65 66 69 6e 65 64 20   ┆ts of an  object of the defined ┆
0x0eea0…0eec0        61 72 72 61 79 20 74 79 70 65 20 61 72 65 20 6f 66 20 74 68 65 20 74 79 70 65 20 73 70 65 63 69   ┆array type are of the type speci┆
0x0eec0…0eee0        66 69 65 64 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 4f 46 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 65   ┆fied  following OF, called the e┆
0x0eee0…0ef00        6c 65 6d 65 6e 74 20 74 79 70 65 2e 20 45 76 65 72 79 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 65   ┆lement type. Every object of the┆
0x0ef00…0ef20        20 0a 61 72 72 61 79 20 74 79 70 65 20 68 61 73 20 70 72 65 63 69 73 65 6c 79 20 6f 6e 65 20 65   ┆  array type has precisely one e┆
0x0ef20…0ef40        6c 65 6d 65 6e 74 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 0a 76 61 6c   ┆lement associated with each  val┆
0x0ef40…0ef60        75 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 74 79 70 65 2e 0d 0a 0d 0a 54 68 65 20 73 79 6e   ┆ue of the index type.    The syn┆
0x0ef60…0ef80        74 61 78 20 41 52 52 41 59 28 74 82 31 81 2c 20 74 82 32 81 2c 20 2e 2e 2e 2c 20 74 82 6e 81 29   ┆tax ARRAY(t 1 , t 2 , ..., t n )┆
0x0ef80…0efa0        20 4f 46 20 65 6c 65 6d 65 6e 74 5f 74 79 70 65 0d 0a 69 73 20 70 65 72 6d 69 73 73 69 62 6c 65   ┆ OF element_type  is permissible┆
0x0efa0…0efc0        20 61 73 20 73 68 6f 72 74 68 61 6e 64 20 66 6f 72 0d 0a 41 52 52 41 59 28 74 82 31 81 29 20 4f   ┆ as shorthand for  ARRAY(t 1 ) O┆
0x0efc0…0efe0        46 20 41 52 52 41 59 28 74 82 32 81 29 20 4f 46 20 2e 2e 2e 20 41 52 52 41 59 28 74 82 6e 81 29   ┆F ARRAY(t 2 ) OF ... ARRAY(t n )┆
0x0efe0…0f000        20 4f 46 20 65 6c 65 6d 65 6e 74 5f 74 79 70 65 2e 0d 0a 53 69 6d 69 6c 61 72 6c 79 20 50 41 43   ┆ OF element_type.  Similarly PAC┆
0x0f000…0f020 (120,) 4b 45 44 20 41 52 52 41 59 28 54 82 31 81 2c 20 74 82 32 81 2c 20 2e 2e 2e 2c 20 74 82 6e 81 29   ┆KED ARRAY(T 1 , t 2 , ..., t n )┆
0x0f020…0f040        20 4f 46 20 65 6c 65 6d 65 6e 74 5f 74 79 70 65 0d 0a 69 73 20 6c 65 67 61 6c 20 73 68 6f 72 74   ┆ OF element_type  is legal short┆
0x0f040…0f060        68 61 6e 64 20 66 6f 72 20 50 41 43 4b 45 44 20 41 52 52 41 59 28 74 82 31 81 29 20 4f 46 20 50   ┆hand for PACKED ARRAY(t 1 ) OF P┆
0x0f060…0f080        41 43 4b 45 44 20 41 52 52 41 59 28 74 82 32 81 29 20 0a 4f 46 20 2e 2e 2e 20 50 41 43 4b 45 44   ┆ACKED ARRAY(t 2 )  OF ... PACKED┆
0x0f080…0f0a0        20 41 52 52 41 59 28 74 82 6e 81 29 20 4f 46 20 65 6c 65 6d 65 6e 74 20 74 79 70 65 2e 0d 0a 0d   ┆ ARRAY(t n ) OF element type.   ┆
0x0f0a0…0f0c0        0a 54 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 62 6a 65 63 74   ┆ The elements of an array object┆
0x0f0c0…0f0e0        20 61 72 65 20 61 63 63 65 73 73 65 64 20 62 79 20 69 6e 64 65 78 69 6e 67 2e 0d 0a 0d 0a 0d 0a   ┆ are accessed by indexing.      ┆
0x0f0e0…0f100        0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65   ┆    The type of the denoted obje┆
0x0f100…0f120        63 74 20 6d 75 73 74 20 62 65 20 61 6e 20 61 72 72 61 79 20 74 79 70 65 2e 20 54 68 65 20 0a 69   ┆ct must be an array type. The  i┆
0x0f120…0f140        6e 64 65 78 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 62 65 20 61 73 73 69 67 6e 61 62   ┆ndex expression must be assignab┆
0x0f140…0f160        6c 65 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 74 79 70 65 20 6f 66 20 0a 74 68 69 73 20 74 79   ┆le to the index type of  this ty┆
0x0f160…0f180        70 65 2e 20 49 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77 68 65 6e 20 61 63 63 65 73 73 20   ┆pe. It is evaluated when access ┆
0x0f180…0f1a0        69 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20 0a 69 6e 64 65 78 65 64 20 65 6c 65 6d 65 6e 74 2e   ┆is made to the  indexed element.┆
0x0f1a0…0f1c0        20 74 68 65 20 69 6e 64 65 78 65 64 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 61 74 20 65 6c 65   ┆ the indexed element is that ele┆
0x0f1c0…0f1e0        6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 61 72 72 61 79 20 6f 62 6a 65 63 74 20 77 68 69 63 68 69   ┆ment of the  array object whichi┆
0x0f1e0…0f200        73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74   ┆s associated with the value of t┆
0x0f200…0f220 (121,) 68 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20   ┆he  expression. The type of the ┆
0x0f220…0f240        69 6e 64 65 78 65 64 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 0a   ┆indexed element is the element  ┆
0x0f240…0f260        74 79 70 65 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 74 79 70 65 2e 0d 0a 0d 0a 54 68 65 20 73   ┆type of the array type.    The s┆
0x0f260…0f280        79 6e 74 61 78 20 61 28 69 82 31 81 2c 20 69 82 32 81 2c 20 2e 2e 2e 2c 20 69 82 6e 81 29 2c 20   ┆yntax a(i 1 , i 2 , ..., i n ), ┆
0x0f280…0f2a0        77 68 65 72 65 20 61 20 64 65 6e 6f 74 65 73 20 61 6e 20 61 72 72 61 79 20 0a 6f 62 6a 65 63 74   ┆where a denotes an array  object┆
0x0f2a0…0f2c0        2c 20 69 73 20 70 65 72 6d 69 73 73 69 62 6c 65 20 61 73 20 73 68 6f 72 74 68 61 6e 64 20 66 6f   ┆, is permissible as shorthand fo┆
0x0f2c0…0f2e0        72 20 61 28 69 82 31 29 28 69 82 32 29 20 2e 2e 2e 20 28 69 82 6e 81 29 2e 0d 0a 0d 0a a1 4e 6f   ┆r a(i 1)(i 2) ... (i n ).     No┆
0x0f2e0…0f300        74 65 3a 0d 0a 54 68 65 20 61 62 6f 76 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 69 6d 70 6c 69   ┆te:  The above description impli┆
0x0f300…0f320        65 73 20 74 68 61 74 20 69 6e 20 67 65 6e 65 72 61 6c 20 61 20 72 61 6e 67 65 20 63 68 65 63 6b   ┆es that in general a range check┆
0x0f320…0f340        20 0a 69 73 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 6e 20 61 72 72 61 79 20 65 6c 65   ┆  is performed when an array ele┆
0x0f340…0f360        6d 65 6e 74 20 69 73 20 61 63 63 65 73 73 65 64 20 62 79 20 69 6e 64 65 78 69 6e 67 2e 20 0a 41   ┆ment is accessed by indexing.  A┆
0x0f360…0f380        20 63 6f 6d 70 69 6c 65 72 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 61 6c 6c 6f 77 20 69   ┆ compiler may optionally allow i┆
0x0f380…0f3a0        6e 64 65 78 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 20 0a 73 75 70 70 72 65 73 73 65 64 2e   ┆ndex checking to be  suppressed.┆
0x0f3a0…0f3a4        0d 0a 0d 0a                                                                                       ┆    ┆
0x0f3a4…0f3a7        FormFeed {
0x0f3a4…0f3a7          0c 83 b0                                                                                          ┆   ┆
0x0f3a4…0f3a7        }
0x0f3a7…0f3c0        0a a1 45 78 61 6d 70 6c 65 e1 3a 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20                        ┆  Example : (cf. section ┆
0x0f3c0…0f3e0        33 2e 33 29 0d 0a 56 41 52 0d 0a 20 20 61 6d 61 74 72 69 78 3a 20 6d 61 74 72 69 78 5f 31 30 3b   ┆3.3)  VAR    amatrix: matrix_10;┆
0x0f3e0…0f400        0d 0a 20 20 74 65 6d 70 5f 63 6f 6c 75 6d 6e 3a 20 63 6f 6c 75 6d 6e 28 31 30 29 3b 0d 0a 20 20   ┆    temp_column: column(10);    ┆
0x0f400…0f420 (122,) 2e 2e 2e 0d 0a 20 20 74 65 6d 70 5f 63 6f 6c 75 6d 6e 3a 3d 61 6d 61 74 72 69 78 28 69 29 3b 20   ┆...    temp_column:=amatrix(i); ┆
0x0f420…0f440        2d 2d 20 61 73 73 69 67 6e 6d 65 6e 74 20 6f 66 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6c 75 6d 6e   ┆-- assignment of complete column┆
0x0f440…0f460        0d 0a 20 20 61 6d 61 74 72 69 78 28 69 2c 6a 29 3a 3d 61 6d 61 74 72 69 78 28 6a 2c 69 29 3b 20   ┆    amatrix(i,j):=amatrix(j,i); ┆
0x0f460…0f480        2d 2d 20 73 69 6e 67 6c 65 20 63 6f 6d 70 6f 6e 65 6e 74 0d 0a 20 20 2e 2e 2e 0d 0a 0d 0a 0d 0a   ┆-- single component    ...      ┆
0x0f480…0f4a0        b0 a1 33 2e 39 2e 32 20 52 65 63 6f 72 64 20 54 79 70 65 73 0d 0a 0d 0a 54 68 65 20 73 75 62 2d   ┆  3.9.2 Record Types    The sub-┆
0x0f4a0…0f4c0        6f 62 6a 65 63 74 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72 65 20 63 61 6c 6c 65 64 20 66   ┆objects of a record are called f┆
0x0f4c0…0f4e0        69 65 6c 64 73 2e 20 54 68 65 20 66 69 65 6c 64 73 20 0a 61 72 65 20 6f 72 67 61 6e 69 7a 65 64   ┆ields. The fields  are organized┆
0x0f4e0…0f500        20 62 79 20 6e 61 6d 69 6e 67 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 41 6c 6c 20 74   ┆ by naming.                All t┆
0x0f500…0f520        68 65 20 66 69 65 6c 64 20 6e 61 6d 65 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 20   ┆he field names in a record type ┆
0x0f520…0f540        64 65 66 69 6e 69 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 0a 64 63 69 73 74 69 6e 63 74 2e 20 45   ┆definition must be  dcistinct. E┆
0x0f540…0f560        61 63 68 20 66 69 65 6c 64 20 6e 61 6d 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 6e 64 20 69 64   ┆ach field name introduces and id┆
0x0f560…0f580        65 6e 74 69 66 69 65 73 20 61 20 0a 66 69 65 6c 64 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74   ┆entifies a  field. The type of t┆
0x0f580…0f5a0        68 65 20 66 69 65 6c 64 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 2c   ┆he field, called the field type,┆
0x0f5a0…0f5c0        20 69 73 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 74 79 70   ┆ is  specified by the common typ┆
0x0f5c0…0f5e0        65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 3a 2e 20 41 20 0a   ┆e specification following :. A  ┆
0x0f5e0…0f600        66 69 65 6c 64 20 74 79 70 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 73 70 65 63 69 66 69 65 64 20   ┆field type may not be specified ┆
0x0f600…0f620 (123,) 62 79 20 61 6e 20 27 65 6e 75 6d 65 72 61 74 69 6f 6e 2d 74 79 70 65 20 0a 64 65 66 69 6e 69 74   ┆by an 'enumeration-type  definit┆
0x0f620…0f640        69 6f 6e 27 2e 0d 0a 0d 0a 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20   ┆ion'.    The fields of a record ┆
0x0f640…0f660        61 72 65 20 61 63 63 65 73 73 65 64 20 62 79 20 73 65 6c 65 63 74 69 6f 6e 20 62 79 20 6e 61 6d   ┆are accessed by selection by nam┆
0x0f660…0f680        65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 74 79 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74   ┆e.          The tye of the denot┆
0x0f680…0f6a0        65 64 20 6f 62 6a 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 2e   ┆ed object must be a record type.┆
0x0f6a0…0f6c0        20 54 68 65 20 0a 66 69 65 6c 64 20 6e 61 6d 65 20 6d 75 73 74 20 6f 63 63 75 72 20 69 6e 20 74   ┆ The  field name must occur in t┆
0x0f6c0…0f6e0        68 65 20 64 65 66 69 6e 69 74 69 6f 6e 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 79 70 65 2e   ┆he definitionof the record type.┆
0x0f6e0…0f700        20 0a 54 68 65 20 73 65 6c 65 63 74 65 64 20 66 69 65 6c 64 20 69 73 20 74 68 61 74 20 66 69 65   ┆  The selected field is that fie┆
0x0f700…0f720        6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 62 6a 65 63 74 20 77 68 69 63 68 20 0a 69   ┆ld of the record object which  i┆
0x0f720…0f740        73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20 66 69 65 6c 64 20 6e 61 6d 65 2e 20   ┆s identified by the field name. ┆
0x0f740…0f760        49 74 73 20 74 79 70 65 20 69 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 0a 66 69 65 6c 64   ┆Its type is the specified  field┆
0x0f760…0f780        20 74 79 70 65 2e 0d 0a 0d 0a 8c 83 d4 0a 41 6e 20 61 62 62 72 65 76 69 61 74 65 64 20 73 79 6e   ┆ type.        An abbreviated syn┆
0x0f780…0f7a0        74 61 78 20 66 6f 72 20 66 69 65 6c 64 20 61 63 63 65 73 73 20 6d 61 79 20 62 65 20 75 73 65 64   ┆tax for field access may be used┆
0x0f7a0…0f7c0        20 69 6e 20 77 69 74 68 20 0a 73 74 61 74 65 6d 65 6e 74 73 2c 20 63 66 2e 20 73 65 63 74 69 6f   ┆ in with  statements, cf. sectio┆
0x0f7c0…0f7e0        6e 20 35 2e 38 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 56 41 52 0d 0a 20 20 72 65 63 3a   ┆n 5.8.     Example:  VAR    rec:┆
0x0f7e0…0f800        20 52 45 43 4f 52 44 0d 0a 20 20 20 20 66 31 2c 66 32 3a 20 69 6e 74 65 67 65 72 3b 0d 0a 09 66   ┆ RECORD      f1,f2: integer;   f┆
0x0f800…0f820 (124,) 33 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 20 20 45 4e 44 28 2a 52 45 43 4f 52 44 2a 29 3b 0d 0a 20 20   ┆3: boolean    END(*RECORD*);    ┆
0x0f820…0f840        2e 2e 2e 0d 0a 20 20 72 65 63 2e 66 31 3a 3d 72 65 63 2e 66 31 2b 72 65 63 2e 66 32 0d 0a 20 20   ┆...    rec.f1:=rec.f1+rec.f2    ┆
0x0f840…0f860        6f 72 0d 0a 20 20 57 49 54 48 20 72 65 63 20 44 4f 20 66 31 3a 3d 66 31 2b 66 32 0d 0a 0d 0a 0d   ┆or    WITH rec DO f1:=f1+f2     ┆
0x0f860…0f880        0a b0 a1 33 2e 39 2e 33 20 4e 6f 74 61 74 69 6f 6e 20 66 6f 72 20 56 61 6c 75 65 73 20 6f 66 20   ┆   3.9.3 Notation for Values of ┆
0x0f880…0f8a0        53 74 72 75 63 74 75 72 65 64 20 54 79 70 65 73 0d 0a 0d 0a 56 61 6c 75 65 73 20 6f 66 20 61 20   ┆Structured Types    Values of a ┆
0x0f8a0…0f8c0        73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 6d 61 79 20 62 65 20 64 65 6e 6f 74 65 64 20 62   ┆structured type may be denoted b┆
0x0f8c0…0f8e0        79 20 6c 69 73 74 73 20 6f 66 20 0a 65 6c 65 6d 65 6e 74 20 6f 72 20 66 69 65 6c 64 20 76 61 6c   ┆y lists of  element or field val┆
0x0f8e0…0f900        75 65 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20   ┆ues.                        The ┆
0x0f900…0f920        27 62 6f 75 6e 64 2d 74 79 70 65 5f 6e 61 6d 65 27 20 6f 72 20 27 70 61 72 61 6d 65 74 65 72 69   ┆'bound-type_name' or 'parameteri┆
0x0f920…0f940        7a 65 64 20 74 79 70 65 20 62 69 6e 64 69 6e 67 27 20 0a 73 70 65 63 69 66 69 65 73 20 74 68 65   ┆zed type binding'  specifies the┆
0x0f940…0f960        20 74 79 70 65 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 64 20 76 61 6c 75 65 2c 20 77   ┆ type of the structured value, w┆
0x0f960…0f980        68 69 63 68 20 6d 75 73 74 20 62 65 20 61 20 0a 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 2e   ┆hich must be a  structured type.┆
0x0f980…0f9a0        20 54 68 65 20 63 6f 6e 73 74 72 75 63 74 20 62 65 74 77 65 65 6e 20 28 3a 20 61 6e 64 20 3a 29   ┆ The construct between (: and :)┆
0x0f9a0…0f9c0        20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6c 69 73 74 20 6f 66 20 76 61 6c 75   ┆ is  evaluated to a list of valu┆
0x0f9c0…0f9e0        65 73 2c 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ┆es, by evaluating the expression┆
0x0f9e0…0fa00        73 20 0a 69 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 6f 63 63 75 72 72 65 6e 63 65 2e 20 49   ┆s  in the order of occurrence. I┆
0x0fa00…0fa20 (125,) 66 20 74 68 65 20 74 79 70 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 61 20 0a 27 70   ┆f the type is specified by a  'p┆
0x0fa20…0fa40        61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 79 65 20 62 69 6e 64 69 6e 67 27 20 69 74 20 69 73 20   ┆arameterized tye binding' it is ┆
0x0fa40…0fa60        65 73 74 61 62 6c 69 73 68 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 0a 76 61 6c 75 65 20 6c 69   ┆established before the  value li┆
0x0fa60…0fa80        73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 2e 0d 0a 0d 0a 8c 83 c8 0a 49 66 20 74 68 65 20 73   ┆st is evaluated.        If the s┆
0x0fa80…0faa0        74 72 75 63 74 75 72 65 64 20 74 79 70 65 20 69 73 20 61 6e 20 61 72 72 61 79 20 74 79 70 65 20   ┆tructured type is an array type ┆
0x0faa0…0fac0        74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 0a 6c 69 73 74 20 61 72 65 20 74 68 65 20   ┆the values in the  list are the ┆
0x0fac0…0fae0        65 6c 65 6d 65 6e 74 20 76 61 6c 75 65 73 20 69 6e 20 69 6e 64 65 78 20 6f 72 64 65 72 2e 20 54   ┆element values in index order. T┆
0x0fae0…0fb00        68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 76 61 6c 75 65 73 20 6d 75 73 74 20 65 71 75 61 6c 20   ┆he number of  values must equal ┆
0x0fb00…0fb20        74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 61 6e 64 20 74 68 65 20 74   ┆the number of elements and the t┆
0x0fb20…0fb40        79 70 65 20 6f 66 20 0a 65 61 63 68 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 73 73 69 67   ┆ype of  each value must be assig┆
0x0fb40…0fb60        6e 61 62 6c 65 20 74 6f 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 74 79 70 65 3b 20 6f 74 68 65 72   ┆nable to the element type; other┆
0x0fb60…0fb80        77 69 73 65 20 0a 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 61 20 27 72 65 70 65 61 74 65   ┆wise  a fault occurs. a 'repeate┆
0x0fb80…0fba0        64 20 76 61 6c 75 65 27 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 69 73 20 0a 65 71 75 69 76 61   ┆d value', if present, is  equiva┆
0x0fba0…0fbc0        6c 65 6e 74 20 74 6f 20 61 20 6e 75 6d 62 65 72 20 6f 66 72 65 70 65 61 74 65 64 20 6f 63 63 75   ┆lent to a number ofrepeated occu┆
0x0fbc0…0fbe0        72 72 65 6e 63 65 73 20 6f 66 20 69 74 73 20 0a 27 76 61 6c 75 65 5f 65 78 70 72 65 73 73 69 6f   ┆rrences of its  'value_expressio┆
0x0fbe0…0fc00        6e 27 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f   ┆n'; however, the expression is o┆
0x0fc00…0fc20 (126,) 6e 6c 79 20 0a 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 20 74 68 65 20 6e 75 6d 62 65 72 20   ┆nly  evaluated once. the number ┆
0x0fc20…0fc40        69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 20 0a 63   ┆is given by the ordinal value  c┆
0x0fc40…0fc60        6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65   ┆orresponding to the value of the┆
0x0fc60…0fc80        20 27 72 65 70 65 74 69 74 69 6f 6e 5f 65 78 70 72 65 73 73 69 6f 6e 27 20 0a 77 68 69 63 68 20   ┆ 'repetition_expression'  which ┆
0x0fc80…0fca0        6d 75 73 74 20 62 65 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20   ┆must be a non-negative integer. ┆
0x0fca0…0fcc0        69 66 20 74 68 65 20 6e 75 6d 62 65 72 20 69 73 20 0a 6e 65 67 61 74 69 76 65 20 61 20 66 61 75   ┆if the number is  negative a fau┆
0x0fcc0…0fce0        6c 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 64 20   ┆lt occurs.    If the structured ┆
0x0fce0…0fd00        74 79 70 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 20 74 68 65 20 76 61 6c 75 65 73   ┆type is a record type the values┆
0x0fd00…0fd20        20 69 6e 20 0a 74 68 65 6c 69 73 74 20 61 72 65 20 74 68 65 20 66 69 65 6c 64 20 76 61 6c 75 65   ┆ in  thelist are the field value┆
0x0fd20…0fd40        73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 65 6c   ┆s in the order in which the fiel┆
0x0fd40…0fd60        64 20 0a 6e 61 6d 65 73 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e   ┆d  names occur in the definition┆
0x0fd60…0fd80        20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 79 70 65 2e 20 54 68 65 20 6e 75 6d 62 65 72 20   ┆ of the record type. The number ┆
0x0fd80…0fda0        0a 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74 20 65 71 75 61 6c 20 74 68 65 20 6e 75 6d 62 65 72   ┆ of values must equal the number┆
0x0fda0…0fdc0        20 6f 66 20 66 69 65 6c 64 73 20 61 6e 64 20 74 68 65 20 74 79 70 65 20 6f 66 20 0a 65 61 63 68   ┆ of fields and the type of  each┆
0x0fdc0…0fde0        20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 73 73 69 67 6e 61 62 6c 65 20 74 6f 20 74 68 65   ┆ value must be assignable to the┆
0x0fde0…0fe00        20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 66 69 65 6c 64 20 0a 74 79 70 65 3b 20 6f 74 68 65   ┆ corresponding field  type; othe┆
0x0fe00…0fe20 (127,) 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 49 66 20 74 68 65 20 72 65 63   ┆rwise a fault occurs. If the rec┆
0x0fe20…0fe40        6f 72 64 20 74 79 70 65 20 63 6f 6e 74 61 69 6e 73 20 0a 75 6e 75 73 65 64 20 66 69 65 6c 64 73   ┆ord type contains  unused fields┆
0x0fe40…0fe60        20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 31 31 29 20 6e 6f 20 76 61 6c 75 65 20 73 68 6f   ┆ (cf. section 3.11) no value sho┆
0x0fe60…0fe80        75 6c 64 20 62 65 20 67 69 76 65 6e 20 0a 66 6f 72 20 74 68 65 73 65 2e 20 54 68 65 79 20 61 72   ┆uld be given  for these. They ar┆
0x0fe80…0fea0        65 20 69 6d 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 76 61 6c 75 65 20 7a 65 72 6f 2e 20   ┆e implicitly set to value zero. ┆
0x0fea0…0fec0        49 6e 20 74 68 65 20 0a 63 61 73 65 20 6f 66 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 20 61 20   ┆In the  case of a record type a ┆
0x0fec0…0fee0        27 72 65 70 65 61 74 65 64 20 76 61 6c 75 65 27 20 6d 75 73 74 20 6e 6f 74 20 6f 63 63 75 72 2e   ┆'repeated value' must not occur.┆
0x0fee0…0ff00        0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6d 61 79 20 62   ┆    The type specification may b┆
0x0ff00…0ff20        65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65 20 74 79 70 65 20 69 74 20 0a 73 70 65 63   ┆e omitted when the type it  spec┆
0x0ff20…0ff40        69 66 69 65 73 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63   ┆ifies can be inferred from the c┆
0x0ff40…0ff60        6f 6e 74 65 78 74 2c 20 69 2e 65 2e 20 69 6e 20 74 68 65 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74   ┆ontext, i.e. in the  following t┆
0x0ff60…0ff80        77 6f 20 73 69 74 75 61 74 69 6f 6e 73 3a 0d 0a 0d 0a 31 2e 20 84 54 68 65 20 27 73 74 72 75 63   ┆wo situations:    1.  The 'struc┆
0x0ff80…0ffa0        74 75 72 65 64 20 76 61 6c 75 65 27 20 6f 63 63 75 72 73 20 61 73 20 61 20 27 76 61 6c 75 65 5f   ┆tured value' occurs as a 'value_┆
0x0ffa0…0ffc0        65 78 70 72 65 73 73 69 6f 6e 27 20 0a 19 83 80 80 77 69 74 68 69 6e 20 61 20 6c 61 72 67 65 72   ┆expression'      within a larger┆
0x0ffc0…0ffe0        20 27 73 74 72 75 63 74 75 72 65 64 20 76 61 6c 75 65 27 0d 0a 0d 0a 32 2e 20 84 54 68 65 20 27   ┆ 'structured value'    2.  The '┆
0x0ffe0…10000        73 74 72 75 63 74 75 72 65 64 20 76 61 6c 75 65 27 20 6f 63 63 75 72 73 20 61 73 20 61 6e 20 0a   ┆structured value' occurs as an  ┆
0x10000…10020 (128,) 19 83 80 80 27 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 5f 65 78 70 72 65 73 73 69 6f 6e 27 20   ┆    'initialization_expression' ┆
0x10020…10040        69 6e 20 61 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 0d 0a a1 45   ┆in a variable declaration.     E┆
0x10040…10060        78 61 6d 70 6c 65 e1 3a 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 33 29 0d 0a 43 4f 4e 53   ┆xample : (cf. section 3.3)  CONS┆
0x10060…10080        54 0d 0a 20 20 69 64 65 6e 74 69 66 79 5f 33 3d 6d 61 74 72 69 78 5f 33 28 3a 28 3a 31 2c 30 2c   ┆T    identify_3=matrix_3(:(:1,0,┆
0x10080…100a0        30 3a 29 2c 20 28 3a 30 2c 31 2c 31 3a 29 2c 20 28 3a 30 2c 30 2c 31 3a 29 3a 29 3b 0d 0a 20 20   ┆0:), (:0,1,1:), (:0,0,1:):);    ┆
0x100a0…100c0        6e 75 6c 5f 6c 69 73 74 3d 20 6c 69 73 74 28 3a 6c 65 6e 67 74 68 2a 2a 2a 30 3a 29 3b 0d 0a 56   ┆nul_list= list(:length***0:);  V┆
0x100c0…100e0        41 52 0d 0a 20 20 61 34 3a 20 6d 61 74 72 69 78 28 34 29 3a 3d 20 28 3a 34 2a 2a 2a 28 3a 34 2a   ┆AR    a4: matrix(4):= (:4***(:4*┆
0x100e0…10100        2a 2a 30 3a 29 3a 29 3b 20 2d 2d 20 69 6e 69 74 69 61 6c 6c 79 20 6e 75 6c 6c 0d 0a 0d 0a 0d 0a   ┆**0:):); -- initially null      ┆
0x10100…10120        8c 83 e0 0a b0 a1 33 2e 39 2e 34 20 53 74 72 69 6e 67 20 54 79 70 65 73 0d 0a 0d 0a 54 68 65 20   ┆      3.9.4 String Types    The ┆
0x10120…10140        66 61 6d 69 6c 79 20 6f 66 20 6f 6e 65 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 63 68 61 72 61 63   ┆family of one-dimensional charac┆
0x10140…10160        74 65 72 20 73 74 72 69 6e 67 20 28 61 72 72 61 79 29 20 74 79 70 65 73 20 0a 69 73 20 70 72 65   ┆ter string (array) types  is pre┆
0x10160…10180        64 65 66 69 6e 65 64 3a 0d 0a 0d 0a 73 74 72 69 6e 67 28 6c 65 6e 67 74 68 3a 20 30 2e 2e 32 35   ┆defined:    string(length: 0..25┆
0x10180…101a0        35 29 3d 20 41 52 52 41 59 28 31 2e 2e 6c 65 6e 67 74 68 29 20 4f 46 20 63 68 61 72 0d 0a 0d 0a   ┆5)= ARRAY(1..length) OF char    ┆
0x101a0…101c0        56 61 6c 75 65 73 20 6f 66 20 74 79 70 65 73 20 66 72 6f 6d 20 74 68 65 20 73 74 72 69 6e 67 20   ┆Values of types from the string ┆
0x101c0…101e0        66 61 6d 69 6c 79 20 6d 61 79 20 62 65 20 64 65 6e 6f 74 65 64 20 62 79 20 0a 63 68 61 72 61 63   ┆family may be denoted by  charac┆
0x101e0…10200        74 65 72 20 73 74 72 69 6e 67 73 2e 20 41 20 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 69   ┆ter strings. A character stringi┆
0x10200…10220 (129,) 73 20 61 20 73 74 72 69 6e 67 20 6f 66 20 67 72 61 70 68 69 63 20 0a 73 79 6d 62 6f 6c 73 2c 20   ┆s a string of graphic  symbols, ┆
0x10220…10240        65 61 63 68 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20 63 68 61 72 61 63 74 65 72 20 76 61   ┆each representing a character va┆
0x10240…10260        6c 75 65 2c 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 0a 64 6f 75 62 6c 65 20 71 75 6f 74 65 73 2e   ┆lue, enclosed in  double quotes.┆
0x10260…10280        20 54 68 65 20 64 6f 75 62 6c 65 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 20 6d 61 79 20   ┆ The double quote character may ┆
0x10280…102a0        69 74 73 65 6c 66 20 62 65 20 70 61 72 74 20 0a 6f 66 20 61 20 63 68 61 72 61 63 74 65 72 20 73   ┆itself be part  of a character s┆
0x102a0…102c0        74 72 69 6e 67 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20 6d 75 73 74 20 62 65 20 69   ┆tring. In this case it must be i┆
0x102c0…102e0        6e 64 69 63 61 74 65 64 20 62 79 20 0a 74 77 6f 20 61 64 6a 61 63 65 6e 74 20 6f 63 63 75 72 72   ┆ndicated by  two adjacent occurr┆
0x102e0…10300        65 6e 63 65 73 20 6f 66 20 74 68 65 20 22 20 67 72 61 70 68 69 63 20 73 79 6d 62 6f 6c 2e 20 49   ┆ences of the " graphic symbol. I┆
0x10300…10320        6e 64 69 76 69 64 75 61 6c 20 0a 6e 6f 6e 2d 67 72 61 70 68 69 63 20 63 68 61 72 61 63 74 65 72   ┆ndividual  non-graphic character┆
0x10320…10340        73 20 6d 61 79 20 62 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 63 68 61 72 61 63 74 65 72   ┆s may be included in a character┆
0x10340…10360        20 73 74 72 69 6e 67 20 0a 62 79 20 6d 65 61 6e 73 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65   ┆ string  by means of the concate┆
0x10360…10380        6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 26 2e 0d 0a 0d 0a 54 68 65 20 73 70 65 63 69 66   ┆nation operator &.    The specif┆
0x10380…103a0        69 63 20 74 79 70 65 20 6f 66 20 61 20 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 2c 20 69   ┆ic type of a character string, i┆
0x103a0…103c0        2e 65 2e 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 0a 6d 65 6d 62 65 72 20 6f 66 20 74 68   ┆.e. the particular  member of th┆
0x103c0…103e0        65 20 73 74 72 69 6e 67 20 66 61 6d 69 6c 79 20 6f 66 20 77 68 69 63 68 20 69 74 20 64 65 6e 6f   ┆e string family of which it deno┆
0x103e0…10400        74 65 73 20 61 20 76 61 6c 75 65 2c 20 69 73 20 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 69   ┆tes a value, is  determined by i┆
0x10400…10420 (130,) 74 73 20 6c 65 6e 67 74 68 2c 20 69 2e 65 2e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68   ┆ts length, i.e. the number of ch┆
0x10420…10440        61 72 61 63 74 65 72 73 20 69 74 20 0a 63 6f 6e 73 69 73 74 73 20 6f 66 2e 0d 0a 0d 0a 41 73 20   ┆aracters it  consists of.    As ┆
0x10440…10460        61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 65 61 74 75 72 65 20 63 68 61 72 61 63   ┆an implementation feature charac┆
0x10460…10480        74 65 72 20 73 74 72 69 6e 67 73 20 6d 61 79 20 62 65 20 0a 74 72 75 6e 63 61 74 65 64 20 6f 72   ┆ter strings may be  truncated or┆
0x10480…104a0        20 65 78 74 65 6e 64 65 64 20 77 69 74 68 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 20 77 68   ┆ extended with NUL characters wh┆
0x104a0…104c0        65 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 0a 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 2c 20   ┆en appropriate  in the context, ┆
0x104c0…104e0        65 2e 67 2e 20 77 68 65 6e 20 6f 63 63 75 72 72 69 6e 67 6f 6e 20 74 68 65 20 72 69 67 68 74 20   ┆e.g. when occurringon the right ┆
0x104e0…10500        68 61 6e 64 20 73 69 64 65 20 6f 66 20 0a 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 73 74 61 74   ┆hand side of  an assignment stat┆
0x10500…10520        65 6d 65 6e 74 20 77 68 65 72 65 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f   ┆ement where the corresponding co┆
0x10520…10540        6d 70 6f 6e 65 6e 74 20 6f 6e 20 0a 74 68 65 20 6c 65 66 74 20 68 61 6e 64 20 73 69 64 65 20 69   ┆mponent on  the left hand side i┆
0x10540…10560        73 20 6f 66 20 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 77 69 74 68 20 64 69 66 66 65 72 65 6e   ┆s of a string type with differen┆
0x10560…10580        74 20 0a 6c 65 6e 67 74 68 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 73 3a 0d 0a 22 74 68 69 73 20   ┆t  length.     Examples:  "this ┆
0x10580…105a0        69 73 20 61 20 73 74 72 69 6e 67 22 0d 0a 22 78 22 22 78 22 20 28 2a 20 61 20 73 74 72 69 6e 67   ┆is a string"  "x""x" (* a string┆
0x105a0…105c0        20 6f 66 20 6c 65 6e 67 74 68 20 33 20 2a 29 0d 0a 22 2a 2a 2a 20 69 6c 6c 65 67 61 6c 20 69 6e   ┆ of length 3 *)  "*** illegal in┆
0x105c0…105e0        70 75 74 20 6d 65 73 73 61 67 65 22 20 26 20 42 45 4c 20 26 20 43 52 20 26 20 4c 46 20 2d 2d 20   ┆put message" & BEL & CR & LF -- ┆
0x105e0…10600        73 74 72 69 6e 67 28 32 38 29 0d 0a 0d 0a 0d 0a b0 a1 33 2e 31 30 20 54 79 70 65 20 43 6f 6d 70   ┆string(28)        3.10 Type Comp┆
0x10600…10620 (131,) 61 74 69 62 69 6c 69 74 79 0d 0a 0d 0a 54 68 65 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 72   ┆atibility    The compatibility r┆
0x10620…10640        65 6c 61 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 73 65 63 74 69 6f 6e   ┆elations defined in this section┆
0x10640…10660        20 61 72 65 20 75 73 65 64 20 0a 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 6e 20 61 20 76   ┆ are used  to determine when a v┆
0x10660…10680        61 6c 75 65 20 6d 61 79 20 62 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 6e 20 6f 62 6a 65 63   ┆alue may be assigned to an objec┆
0x10680…106a0        74 2c 20 0a 8c 83 c8 0a 65 69 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c 79 20 77 68 65 6e 20 61   ┆t,      either explicitly when a┆
0x106a0…106c0        6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 65 63 75 74   ┆n assignment statement is execut┆
0x106c0…106e0        65 64 20 0a 6f 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   ┆ed  or implicitly in connection ┆
0x106e0…10700        77 69 74 68 20 70 61 72 61 6d 65 74 65 72 20 70 61 73 73 69 6e 67 2e 0d 0a 0d 0a 54 68 65 20 65   ┆with parameter passing.    The e┆
0x10700…10720        73 73 65 6e 74 69 61 6c 20 72 65 6c 61 74 69 6f 6e 20 69 73 20 a1 61 73 73 69 67 6e 6d 65 6e 74   ┆ssential relation is  assignment┆
0x10720…10740        20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 e1 2e 20 48 6f 77 65 76 65 72 2c 20 0a 74 68 65 20 62   ┆ compatibility . However,  the b┆
0x10740…10760        61 73 69 73 20 66 6f 72 20 74 68 61 74 20 72 65 6c 61 74 69 6f 6e 20 69 73 20 74 68 65 20 63 6f   ┆asis for that relation is the co┆
0x10760…10780        6d 70 61 74 69 62 69 6c 69 74 79 20 72 65 6c 61 74 69 6f 6e 20 0a 62 65 74 77 65 65 6e 20 74 79   ┆mpatibility relation  between ty┆
0x10780…107a0        70 65 73 20 77 68 69 63 68 20 69 73 20 74 68 65 72 65 66 6f 72 65 20 64 65 66 69 6e 65 64 20 66   ┆pes which is therefore defined f┆
0x107a0…107c0        69 72 73 74 2e 20 54 68 65 20 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 72 65 6c 61 74 69 6f   ┆irst. The  compatibility relatio┆
0x107c0…107e0        6e 20 61 70 70 6c 69 65 73 20 74 6f 20 65 73 74 61 62 6c 69 73 68 65 64 20 74 79 70 65 73 2e 0d   ┆n applies to established types. ┆
0x107e0…10800        0a 0d 0a 54 77 6f 20 74 79 70 65 73 20 61 72 65 20 73 61 69 64 20 74 6f 20 62 65 20 74 68 65 20   ┆   Two types are said to be the ┆
0x10800…10820 (132,) 73 61 6d 65 20 69 66 3a 0d 0a 2d 20 62 6f 74 68 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 70 72   ┆same if:  - both are the same pr┆
0x10820…10840        65 64 65 66 69 6e 65 64 20 74 79 70 65 2c 20 6f 72 0d 0a 2d 20 62 6f 74 68 20 61 72 65 20 73 70   ┆edefined type, or  - both are sp┆
0x10840…10860        65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 73 61 6d 65 20 62 6f 75 6e 64 2d 74 79 70 65 5f 6e   ┆ecified as the same bound-type_n┆
0x10860…10880        61 6d 65 2c 20 6f 72 0d 0a 2d 20 84 62 6f 74 68 20 61 72 65 20 73 70 65 63 69 66 69 65 64 20 61   ┆ame, or  -  both are specified a┆
0x10880…108a0        73 20 61 20 62 69 6e 64 69 6e 67 20 6f 66 20 74 68 65 20 73 61 6d 65 20 70 61 72 61 6d 65 74 65   ┆s a binding of the same paramete┆
0x108a0…108c0        72 69 7a 65 64 2d 0a 19 82 80 80 74 79 70 65 5f 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 76 61 6c   ┆rized-     type_name and the val┆
0x108c0…108e0        75 65 73 20 6f 66 20 74 68 65 20 61 63 74 75 61 6c 20 74 79 70 65 20 70 61 72 61 6d 65 74 65 72   ┆ues of the actual type parameter┆
0x108e0…10900        73 20 61 72 65 20 0a 19 82 80 80 70 61 69 72 77 69 73 65 20 65 71 75 61 6c 2e 0d 0a 0d 0a 54 77   ┆s are      pairwise equal.    Tw┆
0x10900…10920        6f 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 61 69 64 20 74 6f 20 62 65 20 6f 66 20 74 68 65 20   ┆o objects are said to be of the ┆
0x10920…10940        73 61 6d 65 20 74 79 70 65 20 69 66 20 74 68 65 69 72 20 74 79 70 65 73 20 0a 61 72 65 20 74 68   ┆same type if their types  are th┆
0x10940…10960        65 20 73 61 6d 65 20 28 63 66 2e 20 61 62 6f 76 65 29 2c 20 69 66 20 74 68 65 79 20 61 72 65 20   ┆e same (cf. above), if they are ┆
0x10960…10980        76 61 72 69 61 62 6c 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 0a 69 6e 20 74 68 65 20 73 61 6d   ┆variables introduced  in the sam┆
0x10980…109a0        65 20 6c 69 73 74 20 6f 66 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 2c 20 63 66 2e 20 73 75   ┆e list of variable names, cf. su┆
0x109a0…109c0        62 73 65 63 74 69 6f 6e 20 33 2e 31 32 2e 32 2c 20 0a 6f 72 20 69 66 20 74 68 65 79 20 61 72 65   ┆bsection 3.12.2,  or if they are┆
0x109c0…109e0        20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 6b 69 6e 64 20 76 61 6c 75 65   ┆ formal parameters of kind value┆
0x109e0…10a00        20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 0a 74 68 65 20 73 61 6d 65 20 66 6f 72 6d 61 6c 20   ┆ introduced in  the same formal ┆
0x10a00…10a20 (133,) 6e 61 6d 65 20 6c 69 73 74 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 36 2e 31 2e 0d 0a 0d 0a 54   ┆name list, cf. section 6.1.    T┆
0x10a20…10a40        77 6f 20 74 79 70 65 73 20 61 72 65 20 73 61 69 64 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62   ┆wo types are said to be compatib┆
0x10a40…10a60        6c 65 20 69 66 3a 0d 0a 2d 20 74 68 65 79 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 74 79 70 65   ┆le if:  - they are the same type┆
0x10a60…10a80        20 28 63 66 2e 20 61 62 6f 76 65 29 2c 20 6f 72 0d 0a 2d 20 84 6f 6e 65 20 69 73 20 61 20 73 75   ┆ (cf. above), or  -  one is a su┆
0x10a80…10aa0        62 72 61 6e 67 65 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 62 6f 74 68 20 61 72 65   ┆brange of the other (or both are┆
0x10aa0…10ac0        20 73 75 62 72 61 6e 67 65 73 20 6f 66 20 0a 19 82 80 80 74 68 65 20 73 61 6d 65 20 74 79 70 65   ┆ subranges of      the same type┆
0x10ac0…10ae0        29 2c 20 6f 72 0d 0a 2d 20 62 6f 74 68 20 61 72 65 20 73 65 74 20 74 79 70 65 73 20 61 6e 64 20   ┆), or  - both are set types and ┆
0x10ae0…10b00        74 68 65 20 62 61 73 65 20 74 79 70 65 73 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 2c 20 6f   ┆the base types are compatible, o┆
0x10b00…10b20        72 0d 0a 2d 20 62 6f 74 68 20 61 72 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 60 74 6e 61 6d   ┆r  - both are specified as `tnam┆
0x10b20…10b40        65 2c 20 77 68 65 72 65 20 74 6e 61 6d 65 20 69 73 20 61 20 74 79 70 65 20 6e 61 6d 65 2e 0d 0a   ┆e, where tname is a type name.  ┆
0x10b40…10b60        0d 0a 54 79 70 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 20 64 65 66   ┆  Type computation rules are def┆
0x10b60…10b80        69 6e 65 64 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 28 63 66 2e 20 0a 63 68 61 70 74   ┆ined for expressions (cf.  chapt┆
0x10b80…10ba0        65 72 20 34 29 20 73 6f 20 61 73 20 74 6f 20 61 73 73 6f 63 69 61 74 65 20 65 76 65 72 79 20 65   ┆er 4) so as to associate every e┆
0x10ba0…10bc0        78 70 72 65 73 73 69 6f 6e 20 77 69 74 68 20 61 20 74 79 70 65 2c 20 0a 65 69 74 68 65 72 20 61   ┆xpression with a type,  either a┆
0x10bc0…10be0        6e 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65 64 20 74 79 70 65 2c 20 6f 72 20   ┆n explicitly specified type, or ┆
0x10be0…10c00        61 20 70 72 65 64 65 66 69 6e 65 64 20 74 79 70 65 20 0a 64 65 74 65 72 6d 69 6e 65 64 20 69 6d   ┆a predefined type  determined im┆
0x10c00…10c20 (134,) 70 6c 69 63 69 74 6c 79 20 62 79 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65   ┆plicitly by the structure of the┆
0x10c20…10c40        20 65 78 70 72 65 73 73 69 6f 6e 2e 20 41 6e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 20   ┆ expression. An  expression exp ┆
0x10c40…10c60        6f 66 20 74 79 70 65 20 74 82 32 81 20 69 73 20 64 65 66 69 6e 65 64 20 74 6f 20 62 65 20 61 73   ┆of type t 2  is defined to be as┆
0x10c60…10c80        73 69 67 6d 65 6e 74 20 0a 63 6f 6d 70 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 74 79 70 65   ┆sigment  comptable with the type┆
0x10c80…10ca0        20 74 82 31 81 20 69 66 3a 0d 0a 0d 0a 2d 20 84 74 82 31 81 20 61 6e 64 20 74 82 32 81 20 61 72   ┆ t 1  if:    -  t 1  and t 2  ar┆
0x10ca0…10cc0        65 20 63 6f 6d 70 61 74 69 62 6c 65 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 73 20 61 6e 64 20 74   ┆e compatible ordinal types and t┆
0x10cc0…10ce0        68 65 20 76 61 6c 75 65 20 6f 66 20 0a 19 82 80 80 65 78 70 20 69 73 20 77 69 74 68 69 6e 20 74   ┆he value of      exp is within t┆
0x10ce0…10d00        68 65 20 72 61 6e 67 65 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74 82 31 81 2c 20 69 66 20   ┆he range specified for t 1 , if ┆
0x10d00…10d20        61 6e 79 2c 20 6f 72 0d 0a 8c 83 bc 0a 2d 20 84 74 82 31 81 20 61 6e 64 20 74 82 32 81 20 61 72   ┆any, or      -  t 1  and t 2  ar┆
0x10d20…10d40        65 20 63 6f 6d 70 61 74 69 62 6c 65 20 73 65 74 20 74 79 70 65 73 20 61 6e 64 20 61 6c 6c 20 6d   ┆e compatible set types and all m┆
0x10d40…10d60        65 6d 62 65 72 73 20 6f 66 20 74 68 65 20 0a 19 82 80 80 76 61 6c 75 65 20 6f 66 20 65 78 70 20   ┆embers of the      value of exp ┆
0x10d60…10d80        61 72 65 20 77 69 74 68 69 6e 20 74 68 65 20 72 61 6e 67 65 20 73 70 65 63 69 66 69 65 64 20 66   ┆are within the range specified f┆
0x10d80…10da0        6f 72 20 74 82 31 81 2c 20 6f 72 0d 0a 2d 20 84 74 82 31 81 20 61 6e 64 20 74 82 32 81 20 61 72   ┆or t 1 , or  -  t 1  and t 2  ar┆
0x10da0…10dc0        65 20 63 6f 6d 70 61 74 69 62 6c 65 20 6d 61 63 68 69 6e 65 20 70 6f 69 6e 74 65 72 2c 20 73 68   ┆e compatible machine pointer, sh┆
0x10dc0…10de0        69 65 6c 64 65 64 2c 20 6f 72 20 0a 19 82 80 80 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73   ┆ielded, or      structured types┆
0x10de0…10e00        2c 20 6f 72 0d 0a 2d 20 74 82 31 81 20 61 6e 64 20 74 82 32 81 20 61 72 65 20 62 6f 74 68 20 73   ┆, or  - t 1  and t 2  are both s┆
0x10e00…10e20 (135,) 74 72 69 6e 67 20 74 79 70 65 73 2c 20 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 33 2e 39 2e   ┆tring types, cf. subsection 3.9.┆
0x10e20…10e40        34 2e 0d 0a 0d 0a 54 68 72 6f 75 67 68 6f 75 74 20 74 68 69 73 20 6d 61 6e 75 61 6c 20 74 68 65   ┆4.    Throughout this manual the┆
0x10e40…10e60        20 73 68 6f 72 74 68 61 6e 64 20 66 6f 72 6d 20 22 61 73 73 69 67 6e 61 62 6c 65 20 74 6f 22 20   ┆ shorthand form "assignable to" ┆
0x10e60…10e80        0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20 22 61 73 73 69 67 6e 6d   ┆ may be used instead of "assignm┆
0x10e80…10ea0        65 6e 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 22 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c   ┆ent compatible with".     Exampl┆
0x10ea0…10ec0        65 3a 0d 0a 49 6e 20 65 61 63 68 20 6c 69 6e 65 20 62 65 6c 6f 77 20 74 68 65 20 74 79 70 65 73   ┆e:  In each line below the types┆
0x10ec0…10ee0        20 6f 66 20 61 20 61 6e 64 20 62 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 0d 0a 61 3a 20   ┆ of a and b are compatible.  a: ┆
0x10ee0…10f00        62 6f 6f 6c 65 61 6e 3b 09 09 62 3a 20 62 6f 6f 6c 65 61 6e 3b 0d 0a 61 3a 20 64 65 66 5f 74 79   ┆boolean;  b: boolean;  a: def_ty┆
0x10f00…10f20        70 65 3b 09 09 62 3a 20 64 65 66 5f 74 79 70 65 3b 0d 0a 61 3a 20 70 61 72 61 6d 5f 74 79 70 65   ┆pe;  b: def_type;  a: param_type┆
0x10f20…10f40        28 37 29 3b 09 62 3a 20 70 61 72 61 6d 5f 74 79 70 65 28 37 29 3b 0d 0a 61 3a 20 31 2e 2e 31 30   ┆(7); b: param_type(7);  a: 1..10┆
0x10f40…10f60        3b 09 09 62 3a 20 32 2e 2e 31 35 3b 0d 0a 61 3a 20 53 45 54 20 4f 46 20 31 2e 2e 31 30 3b 09 62   ┆;  b: 2..15;  a: SET OF 1..10; b┆
0x10f60…10f80        3a 20 53 45 54 20 4f 46 20 32 2e 2e 31 35 3b 0d 0a 61 3a 20 60 70 74 72 74 79 70 65 3b 09 09 62   ┆: SET OF 2..15;  a: `ptrtype;  b┆
0x10f80…10fa0        3a 20 60 70 74 72 74 79 70 65 3b 0d 0a 0d 0a 0d 0a b0 a1 33 2e 31 31 20 4f 62 6a 65 63 74 20 4c   ┆: `ptrtype;        3.11 Object L┆
0x10fa0…10fc0        61 79 6f 75 74 0d 0a 0d 0a 49 6e 20 67 65 6e 65 72 61 6c 20 74 68 65 20 64 65 66 69 6e 69 74 69   ┆ayout    In general the definiti┆
0x10fc0…10fe0        6f 6e 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 20 64 6f 65 73 20 6e 6f 74 20 70 72 65 73   ┆on of the language does not pres┆
0x10fe0…11000        63 72 69 62 65 20 0a 61 6e 79 20 73 70 65 63 69 66 69 63 20 6c 61 79 6f 75 74 20 66 6f 72 20 6f   ┆cribe  any specific layout for o┆
0x11000…11020 (136,) 62 6a 65 63 74 73 2c 20 61 6e 64 20 74 68 75 73 20 74 68 65 20 77 61 79 20 6f 62 6a 65 63 74 73   ┆bjects, and thus the way objects┆
0x11020…11040        20 0a 61 72 65 20 6c 61 69 64 20 6f 75 74 20 69 6e 20 6d 65 6d 6f 72 79 20 61 6e 64 20 74 68 65   ┆  are laid out in memory and the┆
0x11040…11060        20 77 61 79 20 74 68 65 69 72 20 76 61 6c 75 65 73 20 61 72 65 20 0a 72 65 70 72 65 73 65 6e 74   ┆ way their values are  represent┆
0x11060…11080        65 64 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   ┆ed depend on the implementation ┆
0x11080…110a0        69 6e 20 71 75 65 73 74 69 6f 6e 2e 20 49 6e 20 0a 6f 72 64 65 72 20 74 6f 20 61 6c 6c 6f 77 20   ┆in question. In  order to allow ┆
0x110a0…110c0        63 6f 6f 70 65 72 61 74 69 6f 6e 20 77 69 74 68 20 70 72 6f 63 65 73 73 65 73 20 77 68 6f 73 65   ┆cooperation with processes whose┆
0x110c0…110e0        20 70 72 6f 67 72 61 6d 73 20 61 72 65 20 0a 6e 6f 74 20 77 72 69 74 74 65 6e 20 69 6e 20 52 65   ┆ programs are  not written in Re┆
0x110e0…11100        61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 74 68 65 73 65 20 61 73 70 65 63 74 73 20 6f 66 20   ┆al-Time Pascal these aspects of ┆
0x11100…11120        61 6e 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 61 6c 77 61 79 73 20 62   ┆an  implementation must always b┆
0x11120…11140        65 20 64 6f 63 75 6d 65 6e 74 65 64 20 63 61 72 65 66 75 6c 6c 79 2e 0d 0a 0d 0a 42 79 20 73 70   ┆e documented carefully.    By sp┆
0x11140…11160        65 63 69 66 79 69 6e 67 20 61 20 a1 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 e1 2c 20 68   ┆ecifying a  descriptive type , h┆
0x11160…11180        6f 77 65 76 65 72 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 0a 77 69 74 68 69 6e 20 63   ┆owever, it is possible  within c┆
0x11180…111a0        65 72 74 61 69 6e 20 6c 69 6d 69 74 73 20 66 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 6d 65 72   ┆ertain limits for the programmer┆
0x111a0…111c0        20 74 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6c 61   ┆ to explicitly  determine the la┆
0x111c0…111e0        79 6f 75 74 20 6f 66 20 6f 62 6a 65 63 74 73 2e 20 44 65 73 63 72 69 70 74 69 76 65 20 74 79 70   ┆yout of objects. Descriptive typ┆
0x111e0…11200        65 73 20 0a 63 6f 6e 73 74 69 74 75 74 65 20 61 20 73 75 62 63 6c 61 73 73 20 6f 66 20 70 61 63   ┆es  constitute a subclass of pac┆
0x11200…11220 (137,) 6b 65 64 20 74 79 70 65 73 2c 20 72 65 63 75 72 73 69 76 65 6c 79 20 64 65 66 69 6e 65 64 20 0a   ┆ked types, recursively defined  ┆
0x11220…11240        61 73 20 68 61 76 69 6e 67 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 74 79 70 65 73 20 77 68 69 63   ┆as having constituent types whic┆
0x11240…11260        68 20 61 72 65 20 61 6c 6c 20 65 69 74 68 65 72 20 6d 61 63 68 69 6e 65 20 6f 72 20 0a 73 74 61   ┆h are all either machine or  sta┆
0x11260…11280        74 69 63 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 73 2c 20 6f 72 20 74 68 65 6d 73 65 6c 76 65 73   ┆tic ordinal types, or themselves┆
0x11280…112a0        20 64 65 73 63 72 69 70 74 69 76 65 2e 0d 0a 0d 0a 54 68 69 73 20 64 65 66 69 6e 69 74 69 6f 6e   ┆ descriptive.    This definition┆
0x112a0…112c0        20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 61 6c 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 74 79 70 65   ┆ implies that all component type┆
0x112c0…112e0        73 20 6f 66 20 61 20 0a 64 65 73 63 72 69 70 74 69 76 65 20 74 79 65 20 61 72 65 20 6f 72 64 69   ┆s of a  descriptive tye are ordi┆
0x112e0…11300        6e 61 6c 20 6f 72 20 6d 61 63 68 69 6e 65 20 74 79 70 65 73 2e 20 43 6f 6d 70 6f 6e 65 6e 74 73   ┆nal or machine types. Components┆
0x11300…11320        20 6f 66 20 0a 8c 83 c8 0a 6d 61 63 68 69 6e 65 20 74 79 70 65 73 20 61 72 65 20 6c 61 69 64 20   ┆ of      machine types are laid ┆
0x11320…11340        6f 75 74 20 61 73 20 6d 61 63 68 69 6e 65 20 62 79 74 65 73 20 6f 72 20 77 6f 72 64 73 20 28 63   ┆out as machine bytes or words (c┆
0x11340…11360        66 2e 20 0a 73 65 63 74 69 6f 6e 20 33 2e 35 29 2c 20 61 6e 64 20 74 68 65 20 72 65 70 72 65 73   ┆f.  section 3.5), and the repres┆
0x11360…11380        65 6e 74 61 74 69 6f 6e 20 6f 66 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 0a 63 6f 6d 70 6f 6e   ┆entation of ordinal type  compon┆
0x11380…113a0        65 6e 74 73 20 69 73 20 70 72 65 73 65 6e 74 6c 79 20 64 65 73 63 72 69 62 65 64 2e 20 4e 6f 74   ┆ents is presently described. Not┆
0x113a0…113c0        69 63 65 20 74 68 61 74 20 74 68 65 20 0a 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 6e 6c 79 20 63   ┆ice that the  description only c┆
0x113c0…113e0        6f 76 65 72 73 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66 20   ┆overs sub-objects of objects of ┆
0x113e0…11400        0a 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 73 2e 0d 0a 0d 0a 41 20 63 6f 6d 70 6f 6e 65   ┆ descriptive types.    A compone┆
0x11400…11420 (138,) 6e 74 20 6f 66 20 61 6e 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 20 69 73 20 72 65 70 72 65 73 65   ┆nt of an ordinal type is represe┆
0x11420…11440        6e 74 65 64 20 61 73 20 61 20 62 69 6e 61 72 79 20 0a 6e 75 6d 62 65 72 20 69 6e 20 61 20 6d 61   ┆nted as a binary  number in a ma┆
0x11440…11460        78 69 6d 75 6d 20 6f 66 20 31 36 20 62 69 74 73 2e 20 49 66 20 74 68 65 20 74 79 70 65 20 69 6e   ┆ximum of 16 bits. If the type in┆
0x11460…11480        63 6c 75 64 65 73 20 0a 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 65 20 74 77 6f 27   ┆cludes  negative values the two'┆
0x11480…114a0        73 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 75   ┆s complement representation is u┆
0x114a0…114c0        73 65 64 2e 20 0a 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 75 73 65 64 20 74 6f   ┆sed.  The number of bits used to┆
0x114c0…114e0        20 72 65 70 72 65 73 65 6e 74 20 6f 62 6a 65 63 74 73 20 6f 66 20 73 6f 6d 65 20 74 79 70 65 20   ┆ represent objects of some type ┆
0x114e0…11500        0a 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 2e   ┆ depends on the range of values.┆
0x11500…11520        20 4c 65 74 20 6d 69 6e 76 61 6c 20 61 6e 64 20 6d 61 78 76 61 6c 20 62 65 20 74 68 65 20 0a 6f   ┆ Let minval and maxval be the  o┆
0x11520…11540        72 64 69 6e 61 6c 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74   ┆rdinal values corresponding to t┆
0x11540…11560        68 65 20 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 20 76 61 6c 75 65 20 6f 66 20 0a 74 68 65 20   ┆he first and last value of  the ┆
0x11560…11580        74 79 70 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 6e 20 74 68 65 20 6e 75 6d   ┆type, respectively. Then the num┆
0x11580…115a0        62 65 72 20 6f 66 20 62 69 74 73 20 75 73 65 64 20 66 6f 72 20 0a 6f 62 6a 65 63 74 73 20 6f 66   ┆ber of bits used for  objects of┆
0x115a0…115c0        20 74 68 65 20 74 79 70 65 20 69 73 3a 0d 0a 0d 0a 6d 69 6e 76 61 6c 3c 30 2c 20 6d 61 78 76 61   ┆ the type is:    minval<0, maxva┆
0x115c0…115e0        6c 3c 30 3a 20 6c 6f 67 82 32 81 28 2d 6d 69 6e 76 61 6c 29 2b 31 0d 0a 6d 69 6e 76 61 6c 3c 30   ┆l<0: log 2 (-minval)+1  minval<0┆
0x115e0…11600        2c 20 6d 61 78 76 61 6c 3e 30 3a 20 6d 61 78 20 20 6c 6f 67 82 32 81 28 2d 6d 69 6e 76 61 6c 29   ┆, maxval>0: max  log 2 (-minval)┆
0x11600…11620 (139,) 2c 20 6c 6f 67 82 32 81 28 6d 61 78 76 61 6c 2b 31 29 20 20 2b 31 0d 0a 6d 69 6e 76 61 6c 3e 30   ┆, log 2 (maxval+1)  +1  minval>0┆
0x11620…11640        2c 20 6d 61 78 76 61 6c 3e 30 3a 20 6c 6f 67 82 32 81 28 6d 61 78 76 61 6c 2b 31 29 0d 0a 0d 0a   ┆, maxval>0: log 2 (maxval+1)    ┆
0x11640…11660        54 68 65 20 6e 75 6d 62 65 72 73 20 6f 62 74 61 69 6e 65 64 20 62 79 20 74 68 65 73 65 20 66 6f   ┆The numbers obtained by these fo┆
0x11660…11680        72 6d 75 6c 61 65 20 6d 75 73 74 20 62 65 20 72 6f 75 6e 64 65 64 20 75 70 20 74 6f 20 0a 6f 62   ┆rmulae must be rounded up to  ob┆
0x11680…116a0        74 61 69 6e 20 69 6e 74 65 67 72 61 6c 20 6e 75 6d 62 65 72 73 2e 0d 0a 0d 0a 41 73 20 73 75 62   ┆tain integral numbers.    As sub┆
0x116a0…116c0        2d 6f 62 6a 65 63 74 73 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 6f 66 20 61 20 64 65 73 63 72   ┆-objects of an object of a descr┆
0x116c0…116e0        69 70 74 69 76 65 20 74 79 70 65 20 6e 65 65 64 20 6e 6f 74 20 0a 6f 63 63 75 70 79 20 77 68 6f   ┆iptive type need not  occupy who┆
0x116e0…11700        6c 65 20 62 79 74 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6f 62 6a 65 63 74 20 69 73 20 63 6f 6e   ┆le bytes the total object is con┆
0x11700…11720        73 69 64 65 72 64 20 61 73 20 61 20 0a 62 69 74 73 74 72 69 6e 67 20 72 61 74 68 65 72 20 74 68   ┆siderd as a  bitstring rather th┆
0x11720…11740        61 6e 20 61 73 20 61 20 62 79 74 65 73 74 72 69 6e 67 2e 20 54 68 65 20 6f 72 64 65 72 69 6e 67   ┆an as a bytestring. The ordering┆
0x11740…11760        6f 66 20 62 69 74 73 20 0a 77 69 74 68 69 6e 20 73 75 63 68 20 61 20 62 69 74 73 74 72 69 6e 67   ┆of bits  within such a bitstring┆
0x11760…11780        20 69 73 20 64 65 66 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0d 0a 0d 0a 2d 20 62 69 74   ┆ is defined as follows:    - bit┆
0x11780…117a0        73 20 77 69 74 68 69 6e 20 73 65 70 61 72 61 74 65 20 62 79 74 65 73 20 61 72 65 20 6f 72 64 65   ┆s within separate bytes are orde┆
0x117a0…117c0        72 65 64 20 62 79 20 62 79 74 65 20 61 64 64 72 65 73 73 2c 0d 0a 2d 20 84 62 69 74 73 20 77 69   ┆red by byte address,  -  bits wi┆
0x117c0…117e0        74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 62 79 74 65 20 61 72 65 20 6f 72 64 65 72 65 64 20 62   ┆thin the same byte are ordered b┆
0x117e0…11800        79 20 73 69 67 6e 69 66 69 63 61 6e 63 65 2c 20 0a 19 82 80 80 69 2e 65 2e 20 6c 65 61 73 74 20   ┆y significance,      i.e. least ┆
0x11800…11820 (140,) 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 66 69 72 73 74 2e 0d 0a 0d 0a 54 68 69 73 20   ┆significant bits first.    This ┆
0x11820…11840        69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 77 68 6f 6c 65 20 62 69 74 73 74 72 69 6e 67   ┆implies that the whole bitstring┆
0x11840…11860        20 77 69 6c 6c 20 62 65 20 6f 72 64 65 72 65 64 20 62 79 20 0a 73 69 67 6e 69 66 69 63 61 6e 63   ┆ will be ordered by  significanc┆
0x11860…11872        65 2c 20 73 65 65 20 46 69 67 2e 20 32 2e 0d 0a 0d 0a                                             ┆e, see Fig. 2.    ┆
0x11872…11875        FormFeed {
0x11872…11875          0c 83 98                                                                                          ┆   ┆
0x11872…11875        }
0x11875…11880        0a 20 20 20 20 20 20 20 20 20 20                                                                  ┆           ┆
0x11880…118a0        20 20 20 20 20 62 69 74 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 a1 20 30 20   ┆     bit number               0 ┆
0x118a0…118c0        31 20 32 20 33 20 34 20 35 20 36 20 37 20 0d 0a 20 20 20 20 20 20 20 20 20 30 20 a1 21 20 20 20   ┆1 2 3 4 5 6 7            0  !   ┆
0x118c0…118e0        20 20 20 20 20 20 20 20 20 20 20 20 21 e1 20 20 20 57 68 65 6e 20 76 69 65 77 65 64 20 69 6e 20   ┆            !    When viewed in ┆
0x118e0…11900        74 68 69 73 20 66 61 73 68 69 6f 6e 2c 0d 0a 72 65 6c 61 74 69 76 65 20 31 20 a1 21 20 20 20 20   ┆this fashion,  relative 1  !    ┆
0x11900…11920        20 20 20 20 20 20 20 20 20 20 20 21 e1 20 20 20 69 2e 65 2e 20 74 68 65 20 73 69 67 6e 69 66 69   ┆           !    i.e. the signifi┆
0x11920…11940        63 61 6e 63 65 20 6f 66 20 62 69 74 0d 0a 20 20 62 79 74 65 20 20 20 2e 20 a1 21 20 20 20 20 20   ┆cance of bit    byte   .  !     ┆
0x11940…11960        20 20 20 20 20 20 20 20 20 20 21 e1 20 20 20 69 20 69 73 20 74 68 65 20 69 74 68 20 70 6f 77 65   ┆          !    i is the ith powe┆
0x11960…11980        72 20 6f 66 20 32 2c 20 62 69 74 73 0d 0a 20 61 64 64 72 65 73 73 20 2e 20 a1 21 20 20 20 20 20   ┆r of 2, bits   address .  !     ┆
0x11980…119a0        20 20 20 20 20 20 20 20 20 20 21 e1 20 20 20 61 72 65 20 6f 72 64 65 72 65 64 20 61 73 20 74 68   ┆          !    are ordered as th┆
0x119a0…119c0        65 20 63 68 61 72 61 63 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 6e 20 b0 f0 a1 21 20 20 20   ┆e characters           n    !   ┆
0x119c0…119e0        20 20 20 20 20 20 20 20 20 20 20 20 21 e1 20 20 20 6f 6e 20 61 20 74 65 78 74 20 70 61 67 65 2e   ┆            !    on a text page.┆
0x119e0…11a00        0d 0a 0d 0a 46 69 67 75 72 65 20 32 3a 20 42 69 74 73 74 72 69 6e 67 20 6f 72 64 65 72 69 6e 67   ┆    Figure 2: Bitstring ordering┆
0x11a00…11a20 (141,) 2e 0d 0a 0d 0a 41 6e 20 6f 72 64 65 72 69 6e 67 20 69 73 20 61 6c 73 6f 20 64 65 66 69 6e 65 64   ┆.    An ordering is also defined┆
0x11a20…11a40        20 66 6f 72 20 74 68 65 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 6f 66 20 61 6e 20 6f 62 6a 65 63   ┆ for the sub-objects of an objec┆
0x11a40…11a60        74 20 0a 6f 66 20 61 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 3a 20 69 6e 20 74 68 65 20   ┆t  of a structured type: in the ┆
0x11a60…11a80        73 61 63 65 20 6f 66 20 61 6e 20 61 72 72 61 79 20 74 79 70 65 20 62 79 20 69 6e 64 65 78 3b 20   ┆sace of an array type by index; ┆
0x11a80…11aa0        0a 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 20 62 79   ┆ in the case of a record type by┆
0x11aa0…11ac0        20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20 6e 61 6d 65 73 20 0a 69   ┆ the order of the field names  i┆
0x11ac0…11ae0        6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 79 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0d 0a 0d   ┆n the record type definition.   ┆
0x11ae0…11b00        0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c 65 20 72 75 6c 65 20 64 65 66 69 6e   ┆ The following simple rule defin┆
0x11b00…11b20        65 73 20 74 68 65 20 6c 61 79 6f 75 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 66 20 61 20 0a 64   ┆es the layout of objects of a  d┆
0x11b20…11b40        65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 3a 20 77 69 74 68 69 6e 20 74 68 65 20 62 69 74 73   ┆escriptive type: within the bits┆
0x11b40…11b60        74 72 69 6e 67 20 6f 63 63 75 70 69 65 64 20 62 79 20 74 68 65 20 0a 6f 62 6a 65 63 74 20 73 75   ┆tring occupied by the  object su┆
0x11b60…11b80        62 6f 62 6a 65 63 74 73 20 61 72 65 20 6c 6f 63 61 74 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c   ┆bobjects are located contiguousl┆
0x11b80…11ba0        79 20 61 6e 64 20 69 6e 20 6f 72 64 65 72 2e 20 0a 4e 6f 74 69 63 65 20 74 68 61 74 20 74 68 69   ┆y and in order.  Notice that thi┆
0x11ba0…11bc0        73 20 72 75 6c 65 2c 20 6c 69 6b 65 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   ┆s rule, like the definition of a┆
0x11bc0…11be0        20 64 65 73 63 72 69 70 74 69 76 65 20 0a 74 79 70 65 2c 20 69 73 20 72 65 63 75 72 73 69 76 65   ┆ descriptive  type, is recursive┆
0x11be0…11c00        2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 6f 69 6e 74 73 20 63 6f 6d 70 6c 65 74 65 20   ┆. The following points complete ┆
0x11c00…11c20 (142,) 74 68 65 20 72 75 6c 65 3a 0d 0a 0d 0a 2d 20 84 65 76 65 72 79 20 64 65 66 69 6e 69 74 69 6f 6e   ┆the rule:    -  every definition┆
0x11c20…11c40        20 6f 66 20 61 20 64 65 73 63 72 69 70 74 69 76 65 20 74 79 70 65 20 69 73 20 69 6d 70 6c 69 63   ┆ of a descriptive type is implic┆
0x11c40…11c60        69 74 6c 79 20 0a 19 82 80 80 65 78 74 65 6e 64 65 64 20 77 69 74 68 20 61 6e 20 75 6e 75 73 65   ┆itly      extended with an unuse┆
0x11c60…11c80        64 20 63 6f 6d 70 6f 6e 65 6e 74 20 61 6e 64 20 74 68 65 20 65 6e 64 20 73 6f 20 74 68 61 74 20   ┆d component and the end so that ┆
0x11c80…11ca0        0a 19 82 80 80 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 74 79 70 65 20 6f 63 63 75 70 79 20   ┆     objects of the type occupy ┆
0x11ca0…11cc0        61 6e 20 69 6e 74 65 67 72 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 2c 20 69 66 20   ┆an integral number of bytes, if ┆
0x11cc0…11ce0        0a 19 82 80 80 74 68 69 73 20 70 72 6f 70 65 72 74 79 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64   ┆     this property is not alread┆
0x11ce0…11d00        79 20 73 61 74 69 73 66 69 65 64 20 62 79 20 74 68 65 20 74 79 70 65 20 61 73 20 0a 19 82 80 80   ┆y satisfied by the type as      ┆
0x11d00…11d20        73 74 61 74 65 64 2c 0d 0a 2d 20 84 6e 6f 20 63 6f 6d 70 6f 6e 65 6e 74 20 6d 61 79 20 63 72 6f   ┆stated,  -  no component may cro┆
0x11d20…11d40        73 73 20 74 77 6f 20 62 79 74 65 20 62 6f 75 6e 64 61 72 69 65 73 2e 20 57 68 65 6e 20 70 6f 73   ┆ss two byte boundaries. When pos┆
0x11d40…11d60        73 69 62 6c 65 2c 20 0a 19 82 80 80 61 6e 20 75 6e 75 73 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 20   ┆sible,      an unused component ┆
0x11d60…11d80        69 73 20 69 6e 73 65 72 74 65 64 20 74 6f 20 66 69 6c 6c 20 75 70 20 61 20 62 79 74 65 20 73 6f   ┆is inserted to fill up a byte so┆
0x11d80…11da0        20 74 68 61 74 20 0a 19 82 80 80 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 20 69 73 20 61 76 6f   ┆ that      this situation is avo┆
0x11da0…11dc0        69 64 65 64 2e 0d 0a 0d 0a 41 6e 20 75 6e 75 73 65 64 20 66 69 65 6c 64 20 6f 66 20 61 20 64 65   ┆ided.    An unused field of a de┆
0x11dc0…11de0        73 63 72 69 70 74 69 76 65 20 72 65 63 6f 72 64 20 74 79 70 65 20 6d 61 79 20 62 65 20 0a 73 70   ┆scriptive record type may be  sp┆
0x11de0…11e00        65 63 69 66 69 65 64 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61   ┆ecified explicitly in order to a┆
0x11e00…11e20 (143,) 64 6a 75 73 74 20 74 68 65 20 70 6f 73 69 74 69 6f 6e 69 6e 67 20 6f 66 20 0a 73 75 62 73 65 71   ┆djust the positioning of  subseq┆
0x11e20…11e40        75 65 6e 74 20 66 69 65 6c 64 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 bc 0a 41 6e 20 75 6e 75   ┆uent fields.              An unu┆
0x11e40…11e60        73 65 64 2d 73 70 65 63 69 66 69 63 61 74 69 6f 6e 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   ┆sed-specificationis equivalent t┆
0x11e60…11e80        6f 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 0a 66 69 65 6c 64 20 6f 66   ┆o the declaration of a  field of┆
0x11e80…11ea0        20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 79 70 65 20 77 68 69 63 68 20 6d 75 73 74 20 62   ┆ the specified type which must b┆
0x11ea0…11ec0        65 20 61 20 73 74 61 74 69 63 20 6f 72 64 69 6e 61 6c 20 0a 74 79 70 65 2e 20 54 68 65 20 66 69   ┆e a static ordinal  type. The fi┆
0x11ec0…11ee0        65 6c 64 20 69 73 20 6e 6f 74 20 61 63 63 65 73 73 69 62 6c 65 2c 20 69 2e 65 2e 20 69 74 20 63   ┆eld is not accessible, i.e. it c┆
0x11ee0…11f00        61 6e 6e 6f 74 20 62 65 20 0a 73 65 6c 65 63 74 65 64 2e 20 41 73 73 69 67 6e 6d 65 6e 74 20 74   ┆annot be  selected. Assignment t┆
0x11f00…11f20        6f 20 61 6e 20 75 6e 75 73 65 64 20 66 69 65 6c 64 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6d 61   ┆o an unused field can only be ma┆
0x11f20…11f40        64 65 20 62 79 20 0a 61 73 73 69 67 6e 69 6e 67 20 61 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20   ┆de by  assigning a value to the ┆
0x11f40…11f60        72 65 63 6f 72 64 20 6f 62 6a 65 63 74 20 61 73 20 61 20 77 68 6f 6c 65 2e 0d 0a 0d 0a a1 4e 6f   ┆record object as a whole.     No┆
0x11f60…11f80        74 65 3a 0d 0a 49 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20   ┆te:  If the comparison operator ┆
0x11f80…11fa0        3d 20 61 6e 64 20 3c 3e 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 6f 62 6a 65 63 74 73 20   ┆= and <> are applied to objects ┆
0x11fa0…11fc0        0a 6f 66 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 20 77 69 74 68 20 75 6e 75 73 65 64   ┆ of structured types with unused┆
0x11fc0…11fe0        20 63 6f 6d 70 6f 6e 65 6e 74 73 20 74 68 65 79 20 61 72 65 20 61 6c 73 6f 20 0a 61 70 70 6c 69   ┆ components they are also  appli┆
0x11fe0…12000        65 64 20 74 6f 20 75 6e 75 73 65 64 20 66 69 65 6c 64 73 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65   ┆ed to unused fields.     Example┆
0x12000…12020 (144,) 3a 0d 0a 43 6f 6e 73 69 64 65 72 20 74 68 65 20 74 79 70 65 73 0d 0a 20 20 72 65 63 5f 74 79 70   ┆:  Consider the types    rec_typ┆
0x12020…12040        65 3d 20 52 45 43 4f 52 44 0d 0a 20 20 20 20 61 3a 20 69 6e 74 65 67 65 72 3b 0d 0a 20 20 20 20   ┆e= RECORD      a: integer;      ┆
0x12040…12060        62 3a 20 30 2e 2e 32 35 35 3b 0d 0a 20 20 20 20 63 3a 20 30 2e 2e 37 3b 0d 0a 20 20 20 20 64 3a   ┆b: 0..255;      c: 0..7;      d:┆
0x12060…12080        20 2d 33 2e 2e 34 3b 0d 0a 20 20 20 20 65 3a 20 2d 31 30 30 30 2e 2e 31 30 30 30 3b 0d 0a 20 20   ┆ -3..4;      e: -1000..1000;    ┆
0x12080…120a0        20 20 66 3a 20 63 68 61 72 3b 0d 0a 20 20 20 20 67 3a 20 62 6f 6f 6c 65 61 6e 3b 0d 0a 20 20 20   ┆  f: char;      g: boolean;     ┆
0x120a0…120c0        20 68 3a 20 69 6e 74 65 67 65 72 0d 0a 20 20 45 4e 44 28 2a 52 45 43 4f 52 44 3a 29 0d 0a 0d 0a   ┆ h: integer    END(*RECORD:)    ┆
0x120c0…120e0        20 20 61 72 72 5f 74 79 70 65 20 3d 41 52 52 41 59 28 31 2e 2e 34 29 20 4f 46 20 30 2e 2e 32 30   ┆  arr_type =ARRAY(1..4) OF 0..20┆
0x120e0…12100        30 30 20 28 2a 20 31 31 20 62 69 74 73 20 2a 29 0d 0a 0d 0a 54 79 70 69 63 61 6c 20 6c 61 79 6f   ┆00 (* 11 bits *)    Typical layo┆
0x12100…12120        75 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 20 61   ┆uts for objects of these types a┆
0x12120…12140        72 65 20 73 68 6f 77 6e 20 74 6f 20 74 68 65 20 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 66 69 67   ┆re shown to the  left in the fig┆
0x12140…12160        75 72 65 20 62 65 6c 6f 77 3b 20 6e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 72 65 70 72 65 73   ┆ure below; note that this repres┆
0x12160…12180        65 6e 74 61 74 69 6f 6e 20 69 73 20 0a 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   ┆entation is  not specified by th┆
0x12180…121a0        65 20 6c 61 6e 67 75 61 67 65 2e 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 6b 65 79 77   ┆e language. However, if the keyw┆
0x121a0…121c0        6f 72 64 20 0a 50 41 43 4b 45 44 20 68 61 64 20 62 65 65 6e 20 70 72 65 73 65 6e 74 20 62 65 66   ┆ord  PACKED had been present bef┆
0x121c0…121e0        6f 72 65 20 52 45 43 4f 52 44 2f 41 52 52 41 59 2c 20 74 68 65 20 74 79 70 65 73 20 77 6f 75 6c   ┆ore RECORD/ARRAY, the types woul┆
0x121e0…12200        64 20 0a 68 61 76 65 20 62 65 65 6e 20 64 65 73 63 72 69 70 74 69 76 65 20 61 6e 64 20 74 68 65   ┆d  have been descriptive and the┆
0x12200…12220 (145,) 69 72 20 6c 61 79 6f 75 74 20 70 72 65 73 63 72 69 62 65 64 20 74 6f 20 62 65 20 61 73 20 0a 73   ┆ir layout prescribed to be as  s┆
0x12220…12236        68 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 0d 0a 0d 0a                                 ┆hown to the right.    ┆
0x12236…12239        FormFeed {
0x12236…12239          0c 83 8c                                                                                          ┆   ┆
0x12236…12239        }
0x12239…12240        0a 72 65 63 5f 74 79                                                                              ┆ rec_ty┆
0x12240…12260        70 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 a1 20 30 20 31 20 32 20 33 20 34 20 35 20 36 20 37   ┆pe:              0 1 2 3 4 5 6 7┆
0x12260…12280        20 e1 20 20 20 20 20 20 20 20 20 20 a1 20 30 20 31 20 32 20 33 20 34 20 35 20 36 20 37 20 0d 0a   ┆              0 1 2 3 4 5 6 7   ┆
0x12280…122a0        20 20 20 20 20 20 20 20 30 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 e1 20   ┆        0  !                 !  ┆
0x122a0…122c0        20 20 20 20 20 20 20 30 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 0d 0a 20   ┆       0  !                 !   ┆
0x122c0…122e0        20 20 20 20 20 20 20 31 20 a1 21 20 20 20 20 20 20 20 61 20 20 20 20 20 20 20 21 e1 20 20 20 20   ┆       1  !       a       !     ┆
0x122e0…12300        20 20 20 20 31 20 b0 f0 a1 21 20 20 20 20 20 20 20 61 20 20 20 20 20 20 20 21 0d 0a 20 20 20 20   ┆    1    !       a       !      ┆
0x12300…12320        20 20 20 20 32 20 a1 21 20 20 20 20 20 20 20 62 20 20 20 20 20 20 20 21 e1 20 20 20 20 20 20 20   ┆    2  !       b       !        ┆
0x12320…12340        20 32 20 a1 21 20 20 20 20 20 20 20 62 20 20 20 20 20 20 20 21 0d 0a 20 20 20 20 20 20 20 20 33   ┆ 2  !       b       !          3┆
0x12340…12360        20 a1 21 20 20 20 20 20 20 20 63 20 20 20 20 20 20 20 21 e1 20 20 20 20 20 20 20 20 33 20 a1 21   ┆  !       c       !         3  !┆
0x12360…12380        20 20 63 20 20 21 20 20 20 64 20 20 20 21 3f 21 0d 0a 20 20 20 20 20 20 20 20 34 20 a1 21 20 20   ┆  c  !   d   !?!          4  !  ┆
0x12380…123a0        20 20 20 20 20 64 20 20 20 20 20 20 20 21 e1 20 20 20 20 20 20 20 20 34 20 a1 21 20 20 20 20 20   ┆     d       !         4  !     ┆
0x123a0…123c0        65 2d 31 30 20 20 20 20 20 20 21 0d 0a 20 20 20 20 20 20 20 20 35 20 a1 21 e1 20 20 20 20 20 20   ┆e-10      !          5  !       ┆
0x123c0…123e0        20 20 20 20 20 20 20 20 20 a1 21 e1 20 20 20 20 20 20 20 20 35 20 a1 21 20 65 2d 68 69 21 20 20   ┆          !         5  ! e-hi!  ┆
0x123e0…12400        66 2d 31 30 20 20 20 21 0d 0a 20 20 20 20 20 20 20 20 36 20 a1 21 20 20 20 20 20 20 20 65 20 20   ┆f-10   !          6  !       e  ┆
0x12400…12420 (146,) 20 20 20 20 20 21 e1 20 20 20 20 20 20 20 20 36 20 a1 21 20 66 2d 68 69 21 67 21 20 20 20 3f 20   ┆     !         6  ! f-hi!g!   ? ┆
0x12420…12440        20 20 21 0d 0a 20 20 20 20 20 20 20 20 37 20 a1 21 20 20 20 20 20 20 20 66 20 20 20 20 20 20 20   ┆  !          7  !       f       ┆
0x12440…12460        21 e1 20 20 20 20 20 20 20 20 37 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21   ┆!         7  !                 !┆
0x12460…12480        0d 0a 20 20 20 20 20 20 20 20 38 20 a1 21 20 20 20 20 20 20 20 67 20 20 20 20 20 20 20 21 e1 20   ┆          8  !       g       !  ┆
0x12480…124a0        20 20 20 20 20 20 20 38 20 a1 21 20 20 20 20 20 20 68 20 20 20 20 20 20 20 20 21 0d 0a 20 20 20   ┆       8  !      h        !     ┆
0x124a0…124c0        20 20 20 20 20 39 20 b0 f0 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 0d 0a 20   ┆     9    !                 !   ┆
0x124c0…124e0        20 20 20 20 20 20 31 30 20 a1 21 20 20 20 20 20 20 20 68 20 20 20 20 20 20 20 21 0d 0a 0d 0a 61   ┆      10  !       h       !    a┆
0x124e0…12500        72 72 5f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 a1 20 30 20 31 20 32 20 33 20 34 20   ┆rr_type:              0 1 2 3 4 ┆
0x12500…12520        35 20 36 20 37 20 e1 20 20 20 20 20 20 20 20 20 20 a1 20 30 20 31 20 32 20 33 20 34 20 35 20 36   ┆5 6 7              0 1 2 3 4 5 6┆
0x12520…12540        20 37 20 0d 0a 20 20 20 20 20 20 20 20 30 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆ 7           0  !               ┆
0x12540…12560        20 a1 21 e1 20 20 20 20 20 20 20 20 30 20 a1 e1 21 20 20 20 28 31 a1 29 20 20 20 20 20 20 20 20   ┆  !         0   !   (1 )        ┆
0x12560…12580        20 21 0d 0a 20 20 20 20 20 20 20 20 31 20 a1 21 20 20 20 20 20 28 31 29 20 20 20 20 20 20 20 21   ┆ !          1  !     (1)       !┆
0x12580…125a0        e1 20 20 20 20 20 20 20 20 31 20 a1 21 20 20 20 20 20 21 e1 20 20 20 20 20 a1 20 20 20 20 21 0d   ┆         1  !     !           ! ┆
0x125a0…125c0        0a 20 20 20 20 20 20 20 20 32 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 e1   ┆         2  !                 ! ┆
0x125c0…125e0        20 20 20 20 20 20 20 20 32 20 a1 21 20 20 20 20 20 20 20 28 32 29 20 21 20 20 3f 21 0d 0a 20 20   ┆        2  !       (2) !  ?!    ┆
0x125e0…12600        20 20 20 20 20 20 33 20 a1 21 20 20 20 20 20 28 32 29 20 20 20 20 20 20 20 21 e1 20 20 20 20 20   ┆      3  !     (2)       !      ┆
0x12600…12620 (147,) 20 20 20 33 20 21 20 20 20 28 33 a1 29 20 20 20 20 20 20 20 20 20 21 0d 0a 20 20 20 20 20 20 20   ┆   3 !   (3 )         !         ┆
0x12620…12640        20 34 20 a1 21 e1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 e1 20 20 20 20 20 20 20 20   ┆ 4  !                 !         ┆
0x12640…12660        34 20 a1 21 20 20 20 20 20 21 e1 20 28 34 29 20 a1 20 20 20 20 21 0d 0a 20 20 20 20 20 20 20 20   ┆4  !     !  (4)      !          ┆
0x12660…12680        35 20 a1 21 20 20 20 20 20 28 33 29 20 20 20 20 20 20 20 21 e1 20 20 20 20 20 20 20 20 35 20 a1   ┆5  !     (3)       !         5  ┆
0x12680…126a0        21 20 20 20 20 20 20 20 20 20 20 20 21 20 20 3f 21 0d 0a 20 20 20 20 20 20 20 20 36 20 a1 21 e1   ┆!           !  ?!          6  ! ┆
0x126a0…126c0        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a1 21 0d 0a 20 20 20 20 20 20 20 20 37 20 a1 21 20   ┆                !          7  ! ┆
0x126c0…126e0        20 20 20 20 28 34 29 20 20 20 20 20 20 20 21 0d 0a 0d 0a 46 69 67 75 72 65 20 33 3a 20 45 78 61   ┆    (4)       !    Figure 3: Exa┆
0x126e0…12700        6d 70 6c 65 20 6f 66 20 6f 62 6a 65 63 74 20 6c 61 79 6f 75 74 2e 0d 0a 0d 0a 0d 0a b0 a1 33 2e   ┆mple of object layout.        3.┆
0x12700…12720        31 32 20 4f 62 6a 65 63 74 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 0d 0a 0d 0a 44 65 63 6c 61 72   ┆12 Object Declarations    Declar┆
0x12720…12740        61 74 69 6f 6e 73 20 6f 66 20 6f 62 6a 65 63 74 73 20 6d 61 79 20 6f 63 63 75 72 20 69 6e 20 74   ┆ations of objects may occur in t┆
0x12740…12760        68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 6f 66 20 0a 61 20 70 72 6f 67 72 61   ┆he declaration part of  a progra┆
0x12760…12780        6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20   ┆m or routine block, cf. chapter ┆
0x12780…127a0        36 2e 0d 0a 0d 0a 41 6e 20 6f 62 6a 65 63 74 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 6e 63 74   ┆6.    An object declaration inct┆
0x127a0…127c0        72 6f 64 75 63 65 73 20 61 6e 64 20 6e 61 6d 65 73 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 69 63   ┆roduces and names an object whic┆
0x127c0…127e0        68 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20   ┆h  may be used in the remainder ┆
0x127e0…127f3        6f 66 20 74 68 65 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a 0d 0a                                          ┆of the block.      ┆
0x127f3…127f6        FormFeed {
0x127f3…127f6          0c 83 bc                                                                                          ┆   ┆
0x127f3…127f6        }
0x127f6…12800        0a b0 a1 33 2e 31 32 2e 31 20                                                                     ┆   3.12.1 ┆
0x12800…12820 (148,) 43 6f 6e 73 74 61 6e 74 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 0d 0a 0d 0a 41 20 63 6f 6e 73 74   ┆Constant Declarations    A const┆
0x12820…12840        61 6e 74 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73 65 72 76 65 73 20 74 6f 20 6e 61 6d 65 20 61   ┆ant declaration serves to name a┆
0x12840…12860        20 63 6f 6e 73 74 61 6e 74 20 6f 62 6a 65 63 74 2c 20 0a 69 2e 65 2e 20 61 6e 20 6f 62 6a 65 63   ┆ constant object,  i.e. an objec┆
0x12860…12880        74 20 77 68 6f 73 65 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74   ┆t whose value can be computed at┆
0x12880…128a0        20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 0a 61 6e 64 20 77 68 69 63 68 20 63 61 6e 6e 6f 74 20   ┆ compile-time  and which cannot ┆
0x128a0…128c0        62 65 20 61 6c 74 65 72 65 64 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 62 79 20 61 73 73 69 67 6e   ┆be altered dynamically by assign┆
0x128c0…128e0        6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 45 61 63 68 20 63 6f 6e 73 74 61 6e 74 20 6e   ┆ment.            Each constant n┆
0x128e0…12900        61 6d 65 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 63 6f 6e 73 74 61 6e 74 20 64 65 63   ┆ame introduced in a constant dec┆
0x12900…12920        6c 61 72 61 74 69 6f 6e 20 0a 64 65 6e 6f 74 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 62 6a   ┆laration  denotes a constant obj┆
0x12920…12940        65 63 74 20 74 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 77 68 69 63 68 20   ┆ect the type and value of which ┆
0x12940…12960        69 73 20 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ┆is  determined by the expression┆
0x12960…12980        20 66 6f 6c 6c 6f 77 69 6e 67 20 3d 2e 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 0a 6d 75   ┆ following =. The expression  mu┆
0x12980…129a0        73 74 20 62 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 64   ┆st be a constant expression as d┆
0x129a0…129c0        65 73 63 72 69 62 65 64 20 69 6e 20 63 68 61 70 74 65 72 20 34 2e 20 54 68 65 20 0a 74 79 70 65   ┆escribed in chapter 4. The  type┆
0x129c0…129e0        20 6f 66 20 61 20 63 6f 6e 73 74 61 6e 74 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 72 6f 74 65   ┆ of a constant must not be prote┆
0x129e0…12a00        63 74 65 64 2e 0d 0a 0d 0a 0d 0a a1 33 2e 31 32 2e 32 20 56 61 72 69 61 62 6c 65 20 44 65 63 6c   ┆cted.       3.12.2 Variable Decl┆
0x12a00…12a20 (149,) 61 72 61 74 69 6f 6e 73 0d 0a 0d 0a 41 20 76 61 72 69 61 62 6c 65 20 6f 72 20 73 68 61 72 65 64   ┆arations    A variable or shared┆
0x12a20…12a40        20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73 65 72 76 65 73 20 74 6f 20 6e 61 6d 65 20 6f 6e 65 20   ┆ declaration serves to name one ┆
0x12a40…12a60        6f 72 20 6d 6f 72 65 20 0a 73 74 61 63 6b 2d 61 6c 6c 6f 63 61 74 65 64 20 70 72 69 76 61 74 65   ┆or more  stack-allocated private┆
0x12a60…12a80        20 6f 72 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 6f 70 74 69 6f 6e 61   ┆ or shared variables and optiona┆
0x12a80…12aa0        6c 6c 79 20 0a 74 6f 20 73 70 65 63 69 66 79 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 73 20 66   ┆lly  to specify initial values f┆
0x12aa0…12ac0        6f 72 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 75 63 68 20 76 61 72 69 61 62 6c 65 73 2e 0d   ┆or instances of such variables. ┆
0x12ac0…12ae0        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆                                ┆
0x12ae0…12b00        0a 54 68 65 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 27   ┆ The variables introduced in a '┆
0x12b00…12b20        76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 27 20 61 72 65 20 0a 70 72 69 76 61   ┆variable declaration' are  priva┆
0x12b20…12b40        74 65 20 76 61 72 69 61 62 6c 65 73 2c 20 69 2e 65 2e 20 74 68 65 79 20 63 61 6e 20 6f 6e 6c 79   ┆te variables, i.e. they can only┆
0x12b40…12b60        20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 0a 8c 83 e0 0a 70 72 6f 63 65 73 73   ┆ be accessed by the      process┆
0x12b60…12b80        20 69 6e 20 77 68 6f 73 65 20 73 74 61 63 6b 20 74 68 65 79 20 61 72 65 20 61 6c 6c 6f 63 61 74   ┆ in whose stack they are allocat┆
0x12b80…12ba0        65 64 2e 20 54 68 65 20 76 61 72 69 61 62 6c 65 73 20 0a 69 6e 74 72 6f 64 75 63 65 64 20 69 6e   ┆ed. The variables  introduced in┆
0x12ba0…12bc0        20 61 20 27 73 68 61 72 65 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 27 20 61 72 65 20 73 68 61 72   ┆ a 'shared declaration' are shar┆
0x12bc0…12be0        65 64 20 76 61 72 69 61 62 6c 65 73 20 0a 77 68 69 63 68 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20   ┆ed variables  which can only be ┆
0x12be0…12c00        61 63 63 65 73 73 65 64 20 69 6e 20 72 65 67 69 6f 6e 20 73 74 61 74 65 6d 65 6e 74 73 2e 0d 0a   ┆accessed in region statements.  ┆
0x12c00…12c20 (150,) 0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65   ┆  The type of each variable name┆
0x12c20…12c40        64 20 69 6e 20 61 20 76 61 72 69 61 62 6c 65 20 6f 72 20 73 68 61 72 65 64 20 0a 64 65 63 6c 61   ┆d in a variable or shared  decla┆
0x12c40…12c60        72 61 74 69 6f 6e 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 66 69 72 73 74 20 66 6f 6c   ┆ration is given by the first fol┆
0x12c60…12c80        6c 6f 77 69 6e 67 20 74 79 70 65 20 0a 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 61 6e 64 20 74   ┆lowing type  specification and t┆
0x12c80…12ca0        68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 62 79 20 74 68 65 20 65 78 70 72 65 73 73 69   ┆he initial value by the expressi┆
0x12ca0…12cc0        6f 6e 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 3a 3d 2c 20 69 66 20 70 72 65 73 65 6e 74 2e 20 54 68   ┆on  following :=, if present. Th┆
0x12cc0…12ce0        65 20 74 79 70 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 62 65   ┆e type of the expression must be┆
0x12ce0…12d00        20 0a 61 73 73 69 67 6e 61 62 6c 65 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 79   ┆  assignable to the specified ty┆
0x12d00…12d20        70 65 20 6f 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 2e 20 57 68 65 6e 20 0a 73 65 76 65 72 61   ┆pe of the variable. When  severa┆
0x12d20…12d40        6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 72 65 20 6c 69 73 74 65 64 2c 20 73 65 70   ┆l variable names are listed, sep┆
0x12d40…12d60        61 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 20 65 61 63 68 20 0a 6e 61 6d 65 20 69 6e 74   ┆arated by commas, each  name int┆
0x12d60…12d80        72 6f 64 75 63 65 73 20 61 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66   ┆roduces a variable of the specif┆
0x12d80…12da0        69 65 64 20 74 79 70 65 2e 20 54 68 65 20 74 79 70 65 20 0a 6f 66 20 61 20 73 68 61 72 65 64 20   ┆ied type. The type  of a shared ┆
0x12da0…12dc0        76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 72 6f 63 65 73 73 2c 20 72 65   ┆variable must not be process, re┆
0x12dc0…12de0        66 65 72 65 6e 63 65 2c 20 6f 72 20 0a 63 68 61 69 6e 3b 20 6e 6f 72 20 6d 61 79 20 74 68 65 73   ┆ference, or  chain; nor may thes┆
0x12de0…12e00        65 20 74 79 70 65 73 20 6f 63 63 75 72 20 61 73 20 63 6f 6d 70 6f 6e 65 6e 74 20 74 79 70 65 73   ┆e types occur as component types┆
0x12e00…12e20 (151,) 20 69 6e 20 74 68 65 20 0a 74 79 70 65 73 20 6f 66 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c   ┆ in the  types of shared variabl┆
0x12e20…12e40        65 73 2e 0d 0a 0d 0a 57 68 65 6e 20 61 20 76 61 72 69 61 62 6c 65 20 6f 72 20 73 68 61 72 65 64   ┆es.    When a variable or shared┆
0x12e40…12e60        20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 73 20 65 6c 61 62 6f 72 61 74 65 64 20 74 68 65 20 0a   ┆ declaration is elaborated the  ┆
0x12e60…12e80        73 70 65 63 69 66 69 65 64 20 74 79 70 65 73 20 61 72 65 20 65 73 74 61 62 6c 69 73 68 65 64 3b   ┆specified types are established;┆
0x12e80…12ea0        20 6d 65 6d 6f 72 79 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20 0a 73 74 61   ┆ memory is allocated on the  sta┆
0x12ea0…12ec0        63 6b 20 66 6f 72 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68   ┆ck for an instance of each of th┆
0x12ec0…12ee0        65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 73 3b 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 69   ┆e named variables; the  initiali┆
0x12ee0…12f00        7a 61 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20   ┆zation expressions, if present, ┆
0x12f00…12f20        61 72 65 20 65 76 61 6c 75 61 74 65 64 3b 20 61 6e 64 20 0a 74 68 65 20 76 61 6c 75 65 73 20 6f   ┆are evaluated; and  the values o┆
0x12f20…12f40        66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 63 6f 6d 65 20 69 6e 69 74 69 61 6c   ┆f the expressions become initial┆
0x12f40…12f60        20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 0a 76 61 72 69 61 62 6c 65 73 2e 20 41 6e 20 69 6e   ┆ values of the  variables. An in┆
0x12f60…12f80        69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 6e 6f 74   ┆itialization expression must not┆
0x12f80…12fa0        20 63 6f 6e 74 61 69 6e 20 0a 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 73 2e 20 48 6f 77 65 76 65   ┆ contain  function calls. Howeve┆
0x12fa0…12fc0        72 2c 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 62 73 2c   ┆r, the predefined functions abs,┆
0x12fc0…12fe0        20 62 79 74 2c 20 0a 63 68 72 2c 20 69 6e 74 2c 20 6f 72 64 2c 20 70 72 65 64 2c 20 73 75 63 63   ┆ byt,  chr, int, ord, pred, succ┆
0x12fe0…13000        2c 20 61 6e 64 20 77 72 64 20 6d 61 79 20 62 65 20 75 73 65 64 2e 0d 0a 0d 0a 56 61 72 69 61 62   ┆, and wrd may be used.    Variab┆
0x13000…13020 (152,) 6c 65 73 20 6f 66 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 69 6e 69 74   ┆les of components for which init┆
0x13020…13040        69 61 6c 20 76 61 6c 75 65 73 20 6f 72 20 73 74 61 74 65 73 20 0a 61 72 65 20 70 72 65 64 65 66   ┆ial values or states  are predef┆
0x13040…13060        69 6e 65 64 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79   ┆ined are initialized accordingly┆
0x13060…13080        2e 20 54 68 65 20 69 6e 69 74 69 61 6c 20 0a 76 61 6c 75 65 20 6f 66 20 61 20 76 61 72 69 61 62   ┆. The initial  value of a variab┆
0x13080…130a0        6c 65 20 66 6f 72 20 77 68 69 63 68 20 61 6e 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 69 73   ┆le for which an initial value is┆
0x130a0…130c0        20 6e 65 69 74 68 65 72 20 0a 70 72 65 64 65 66 69 6e 65 64 20 6e 6f 72 20 73 70 65 63 69 66 69   ┆ neither  predefined nor specifi┆
0x130c0…130e0        65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 0d 0a 49 6e 20 61 20 73 74 72 75 63 74 75   ┆ed is undefined.    In a structu┆
0x130e0…13100        72 65 64 20 76 61 6c 75 65 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 61 6e 20 69 6e 69 74 69 61   ┆red value occurring in an initia┆
0x13100…13120        6c 69 7a 61 74 69 6f 6e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20 6e 6f 74 61 74 69 6f   ┆lization  expression the notatio┆
0x13120…13140        6e 20 3f 20 6d 61 79 20 62 65 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f   ┆n ? may be used for components o┆
0x13140…13160        66 20 0a 70 72 6f 74 65 63 74 65 64 20 74 79 70 65 73 2e 20 54 68 69 73 20 6d 61 6b 65 73 20 69   ┆f  protected types. This makes i┆
0x13160…13180        74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 0a 70 72 65 64 65   ┆t possible to combine the  prede┆
0x13180…131a0        66 69 6e 65 64 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 73 65 20 63 6f   ┆fined initialization of these co┆
0x131a0…131c0        6d 70 6f 6e 65 6e 74 73 20 77 69 74 68 20 61 6e 20 0a 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65   ┆mponents with an  explicitly spe┆
0x131c0…131e0        63 69 66 69 65 64 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 6d   ┆cified initialization of the rem┆
0x131e0…13200        61 69 6e 69 6e 67 20 0a 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 0d 0a 41 20 76 61 72 73 69 7a 65   ┆aining  components.    A varsize┆
0x13200…13220 (153,) 20 63 61 6c 6c 20 69 73 20 73 69 6d 69 6c 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 20 66 75   ┆ call is similar in form to a fu┆
0x13220…13240        6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 49 74 20 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73 69 7a 65   ┆nction call. It  allows the size┆
0x13240…13260        20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 20 63 6f 6d   ┆ of a variable to be used in com┆
0x13260…13280        70 75 74 61 74 69 6f 6e 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 f8 0a 54 68 65 20 27 76 61 72   ┆putations.              The 'var┆
0x13280…132a0        69 61 62 6c 65 5f 6e 61 6d 65 27 20 6d 75 73 74 20 62 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ┆iable_name' must be the name of ┆
0x132a0…132c0        61 20 76 61 72 69 61 62 6c 65 2e 20 49 74 20 6d 75 73 74 20 0a 68 61 76 65 20 62 65 65 6e 20 69   ┆a variable. It must  have been i┆
0x132c0…132e0        6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74   ┆ntroduced in a variable declarat┆
0x132e0…13300        69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 61 20 76 61 72 73 69 7a 65 20 63 61 6c   ┆ion. The value of  a varsize cal┆
0x13300…13320        6c 20 69 73 20 74 68 65 20 73 69 7a 65 20 28 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 29 20   ┆l is the size (number of bytes) ┆
0x13320…13340        6f 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 0a 61 73 20 63 6f 6d 70 75 74 65 64 20 77 68 65   ┆of the variable  as computed whe┆
0x13340…13360        6e 69 74 73 20 74 79 70 65 20 77 61 73 20 65 73 74 61 62 6c 69 73 68 65 64 2e 20 54 68 65 20 74   ┆nits type was established. The t┆
0x13360…13380        79 70 65 20 6f 66 20 61 20 0a 76 61 72 73 69 7a 65 20 63 61 6c 6c 20 69 73 20 69 6e 74 65 67 65   ┆ype of a  varsize call is intege┆
0x13380…133a0        72 2e 0d 0a 0d 0a 0d 0a a1 b0 33 2e 31 33 20 4e 6f 74 61 74 69 6f 6e 20 66 6f 72 20 4f 62 6a 65   ┆r.        3.13 Notation for Obje┆
0x133a0…133c0        63 74 73 20 61 6e 64 20 56 61 6c 75 65 73 0d 0a 0d 0a 41 6e 20 6f 62 6a 65 63 74 20 77 68 69 63   ┆cts and Values    An object whic┆
0x133c0…133e0        68 20 69 73 20 64 65 63 6c 61 72 65 64 20 6f 72 20 70 61 72 74 20 6f 66 20 61 20 28 6c 61 72 67   ┆h is declared or part of a (larg┆
0x133e0…13400        65 72 29 20 64 65 63 6c 61 72 65 64 20 0a 6f 62 6a 65 63 74 20 6f 72 20 61 63 63 65 73 73 65 64   ┆er) declared  object or accessed┆
0x13400…13420 (154,) 20 74 68 72 6f 75 67 68 20 61 20 64 65 63 6c 61 72 65 64 20 70 6f 69 6e 74 65 72 2c 20 6d 61 79   ┆ through a declared pointer, may┆
0x13420…13440        20 62 65 20 0a 72 65 66 65 72 72 65 64 20 74 6f 20 62 79 20 64 65 6e 6f 74 61 74 69 6f 6e 2e 0d   ┆ be  referred to by denotation. ┆
0x13440…13460        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63   ┆               The denoted objec┆
0x13460…13480        74 20 69 73 20 73 61 69 64 20 74 6f 20 62 65 20 a1 61 63 63 65 73 73 65 64 e1 20 77 68 65 6e 3a   ┆t is said to be  accessed  when:┆
0x13480…134a0        20 61 6e 20 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 77 68 69   ┆ an  assignment statement in whi┆
0x134a0…134c0        63 68 20 69 74 20 61 70 70 65 61 72 73 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64 20 0a   ┆ch it appears on the left hand  ┆
0x134c0…134e0        73 69 64 65 20 69 73 20 65 78 65 63 75 74 65 64 3b 20 6f 72 20 74 68 65 20 66 61 63 74 6f 72 20   ┆side is executed; or the factor ┆
0x134e0…13500        77 68 69 63 68 20 69 74 20 63 6f 6e 73 74 69 74 75 74 65 73 20 69 6e 20 73 6f 6d 65 20 0a 65 78   ┆which it constitutes in some  ex┆
0x13500…13520        70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 2e 0d 0a 0d 0a 49 66 20 74 68 65   ┆pression is evaluated.    If the┆
0x13520…13540        20 27 6f 62 6a 65 63 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 20 69 73 20 61 6e 20 27 6f 62 6a 65   ┆ 'object denotation' is an 'obje┆
0x13540…13560        63 74 5f 6e 61 6d 65 27 20 69 74 73 20 74 79 70 65 20 69 73 20 0a 74 68 65 20 74 79 70 65 20 6f   ┆ct_name' its type is  the type o┆
0x13560…13580        66 20 74 68 65 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 20 61 73 20 64 65 74 65 72 6d 69 6e 65 64   ┆f the named object as determined┆
0x13580…135a0        20 62 79 20 69 74 73 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 2e 20 54 68 65 20 74 79 70 65 73 20   ┆ by its  declaration. The types ┆
0x135a0…135c0        6f 66 20 74 68 65 20 6f 74 68 65 72 20 66 6f 72 6d 73 20 6f 66 20 64 65 6e 6f 74 65 64 20 6f 62   ┆of the other forms of denoted ob┆
0x135c0…135e0        6a 65 63 74 73 20 0a 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 70 72 65 76 69 6f 75 73   ┆jects  are described in previous┆
0x135e0…13600        20 73 65 63 74 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 63 68 61 70 74 65 72 2e 0d 0a 0d 0a 54 68   ┆ sections of this chapter.    Th┆
0x13600…13620 (155,) 65 20 74 61 72 67 65 74 6f 66 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 6d 61 79 20 65 69 74   ┆e targetof an assignment may eit┆
0x13620…13640        68 65 72 20 62 65 20 61 20 76 61 72 69 61 62 6c 65 20 6f 62 6a 65 63 74 20 0a 6f 72 20 74 68 65   ┆her be a variable object  or the┆
0x13640…13660        20 69 6d 70 6c 69 63 69 74 20 72 65 73 75 6c 74 20 6f 62 6a 65 63 74 20 61 73 73 6f 63 69 61 74   ┆ implicit result object associat┆
0x13660…13680        65 64 20 77 69 74 68 20 61 20 66 75 6e 63 74 69 6f 6e 20 0a 63 61 6c 6c 2e 0d 0a 0d 0a 0d 0a 0d   ┆ed with a function  call.       ┆
0x13680…136a0        0a 0d 0a 0d 0a 8c 83 bc 0a 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 64 65 6e 6f 74 61 74 69   ┆         When an object denotati┆
0x136a0…136c0        6f 6e 20 6f 63 63 75 72 73 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 64 65 6e 6f 74 61 74 69   ┆on occurs as a variable denotati┆
0x136c0…136e0        6f 6e 69 74 20 0a 6d 75 73 74 20 64 65 6e 6f 74 65 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 69 63   ┆onit  must denote an object whic┆
0x136e0…13700        68 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 6f 72 20 70 61 72 74 20 6f 66 20 61 20 0a 76 61   ┆h is a variable or part of a  va┆
0x13700…13720        72 69 61 62 6c 65 20 69 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 68 65 61 70 20 6f 66 20 61   ┆riable in the stack or heap of a┆
0x13720…13740        20 70 72 6f 63 65 73 73 2c 20 6f 72 20 73 75 70 65 72 69 6d 70 6f 73 65 64 20 0a 6f 6e 20 61 20   ┆ process, or superimposed  on a ┆
0x13740…13760        62 75 66 66 65 72 20 69 6e 20 61 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 2e 20 49 74 20 6d   ┆buffer in a lock statement. It m┆
0x13760…13780        75 73 74 20 6e 6f 74 20 62 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 0a 6f 72 20 70 61 72 74 20 6f   ┆ust not be a constant  or part o┆
0x13780…137a0        66 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0d 0a 0d 0a 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   ┆f a constant.    When a function┆
0x137a0…137c0        20 6e 61 6d 65 20 6f 63 63 75 72 73 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 64 65 6e 6f 74   ┆ name occurs as a variable denot┆
0x137c0…137e0        61 74 69 6f 6e 20 69 74 20 0a 64 65 6e 6f 74 65 73 20 74 68 65 20 69 6d 70 6c 69 63 69 74 6c 79   ┆ation it  denotes the implicitly┆
0x137e0…13800        20 64 65 63 6c 61 72 65 64 20 72 65 73 75 6c 74 20 6f 62 6a 65 63 74 20 6f 66 20 61 6e 20 0a 61   ┆ declared result object of an  a┆
0x13800…13820 (156,) 63 74 69 76 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 74 20 6e 61 6d   ┆ctivation of the function it nam┆
0x13820…13840        65 73 2e 20 41 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 20 6d 61 79 20 62 65 20 0a 75 73 65 64   ┆es. A function name may be  used┆
0x13840…13860        20 69 6e 20 74 68 69 73 20 66 61 73 68 69 6f 6e 20 6f 6e 6c 79 20 69 6e 20 74 68 65 20 61 63 74   ┆ in this fashion only in the act┆
0x13860…13880        69 6f 6e 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a 66 75 6e 63 74 69 6f 6e 2c 20 69 2e 65 2e 20   ┆ion part of the  function, i.e. ┆
0x13880…138a0        6e 6f 74 20 69 6e 20 69 6e 6e 65 72 20 62 6c 6f 63 6b 73 2e 0d 0a 0d 0a 54 68 65 20 74 79 70 65   ┆not in inner blocks.    The type┆
0x138a0…138c0        20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 64 65 6e 6f 74 61 74 69 6f 6e 69 73 20 74 68 65 20   ┆ of a variable denotationis the ┆
0x138c0…138e0        74 79 70 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65 64 20 0a 6f 62 6a 65 63 74 20 6f 72 20 74   ┆type of the denoted  object or t┆
0x138e0…13900        68 65 20 72 65 73 75 6c 74 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2c 20   ┆he result type of the function, ┆
0x13900…13920        77 68 69 63 68 65 76 65 72 20 0a 61 70 70 6c 69 65 73 2e 0d 0a 0d 0a 56 61 6c 75 65 73 20 77 68   ┆whichever  applies.    Values wh┆
0x13920…13940        69 63 68 20 61 72 65 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 62 6a 65 63 74   ┆ich are not the values of object┆
0x13940…13960        73 20 6f 72 20 73 75 62 2d 6f 62 6a 65 63 74 73 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e   ┆s or sub-objects  may be used in┆
0x13960…13980        20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆ expressions.                   ┆
0x13980…139a0        0a 0d 0a 0d 0a 41 20 76 61 6c 75 65 20 64 65 6e 6f 74 61 74 69 6f 6e 20 64 65 6e 6f 74 65 73 20   ┆     A value denotation denotes ┆
0x139a0…139c0        74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e 20 61 6e 6f 6e 79 6d 6f 75 73 20 6f 62 6a 65 63 74   ┆the value of an anonymous object┆
0x139c0…139e0        2c 20 0a 74 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 77 68 69 63 68 20 69   ┆,  the type and value of which i┆
0x139e0…13a00        73 20 61 73 20 64 65 73 63 72 69 62 65 64 20 66 6f 72 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20   ┆s as described for the relevant ┆
0x13a00…13a1f (157,) 0a 6f 6e 65 20 6f 66 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 6d 73 2e 0d 0a 0d 0a      ┆ one of the possible forms.    ┆
0x13a1f…13a22        FormFeed {
0x13a1f…13a22          0c 83 8c                                                                                          ┆   ┆
0x13a1f…13a22        }
0x13a22…13a23        0a                                                                                                ┆ ┆
0x13a23…13a26        FormFeed {
0x13a23…13a26          0c 80 80                                                                                          ┆   ┆
0x13a23…13a26        }
0x13a26…13a40        0a 14 b3 06 0b 0d 0a a1 b0 34 2e 20 45 58 50 52 45 53 53 49 4f 4e 53 0d 0a 0d                     ┆         4. EXPRESSIONS   ┆
0x13a40…13a60        0a 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 73 63 72 69 62 65 73 20 65 69 74 68 65 72 20   ┆ An expression describes either ┆
0x13a60…13a80        61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20 61 64 64 72 65 73 73 65 64 20 6f 72 20 0a 73 6f   ┆an object to be addressed or  so┆
0x13a80…13aa0        6d 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 74 6f 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 62   ┆me computation to be performed b┆
0x13aa0…13ac0        79 20 61 70 70 6c 79 69 6e 67 20 6f 70 65 72 61 74 6f 72 73 20 61 6e 64 20 0a 66 75 6e 63 74 69   ┆y applying operators and  functi┆
0x13ac0…13ae0        6f 6e 73 2c 20 70 72 65 64 65 66 69 6e 65 64 20 61 73 20 77 65 6c 6c 20 61 73 20 70 72 6f 67 72   ┆ons, predefined as well as progr┆
0x13ae0…13b00        61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 2c 20 74 6f 20 0a 76 61 6c 75 65 73 20 6f 66 20 6f 62 6a   ┆ammer-defined, to  values of obj┆
0x13b00…13b20        65 63 74 73 20 61 73 20 74 68 65 79 20 61 72 65 20 61 74 20 74 68 65 20 74 69 6d 65 20 6f 66 20   ┆ects as they are at the time of ┆
0x13b20…13b40        63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 6e 64 20 0a 74 6f 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c   ┆computation and  to constant val┆
0x13b40…13b60        75 65 73 20 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 65 6e 6f 74 65 64 20 64 69 72 65 63 74 6c   ┆ues which may be denoted directl┆
0x13b60…13b80        79 20 69 6e 20 74 68 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 20 6f 70 65   ┆y in the  expression.    The ope┆
0x13b80…13ba0        72 61 74 6f 72 73 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 20 61 72 65 20 64 69 76 69 64   ┆rators of the language are divid┆
0x13ba0…13bc0        65 64 20 69 6e 20 67 72 6f 75 70 73 20 77 69 74 68 20 0a 64 69 66 66 65 72 65 6e 74 20 70 72 65   ┆ed in groups with  different pre┆
0x13bc0…13be0        63 65 64 65 6e 63 65 2e 20 49 6e 20 6f 72 64 65 72 20 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20   ┆cedence. In order of increasing ┆
0x13be0…13c00        70 72 65 63 65 64 65 6e 63 65 20 74 68 65 20 0a 67 72 6f 75 70 73 20 61 72 65 3a 20 72 65 6c 61   ┆precedence the  groups are: rela┆
0x13c00…13c20 (158,) 74 69 6f 6e 61 6c 20 6f 70 65 72 61 74 6f 72 73 2c 20 61 64 64 69 74 69 6f 6e 2d 74 79 70 65 20   ┆tional operators, addition-type ┆
0x13c20…13c40        6f 70 65 72 61 74 6f 72 73 2c 20 0a 6d 75 6c 74 69 70 6c 69 63 61 74 69 6f 6e 2d 74 79 70 65 20   ┆operators,  multiplication-type ┆
0x13c40…13c60        6f 70 65 72 61 74 6f 72 73 2c 20 61 6e 64 20 74 68 65 20 6e 65 67 61 74 69 6f 6e 20 6f 70 65 72   ┆operators, and the negation oper┆
0x13c60…13c80        61 74 6f 72 2e 0d 0a 0d 0a 41 6c 6c 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 64 65 73 63 72   ┆ator.    All operators are descr┆
0x13c80…13ca0        69 62 65 64 20 69 6e 20 63 68 61 70 74 65 72 20 33 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e   ┆ibed in chapter 3 in conjunction┆
0x13ca0…13cc0        20 77 69 74 68 20 0a 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 79   ┆ with  the description of the ty┆
0x13cc0…13ce0        70 65 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 74 68 65 79 20 61 70 70 6c 79 20 74   ┆pes of the operands they apply t┆
0x13ce0…13d00        6f 2e 20 0a 53 6f 6d 65 20 6f 70 65 72 61 74 6f 72 73 20 65 78 69 73 74 20 69 6e 20 73 65 76 65   ┆o.  Some operators exist in seve┆
0x13d00…13d20        72 61 6c 20 73 65 6d 61 6e 74 69 63 61 6c 6c 79 20 64 69 73 74 69 6e 63 74 20 0a 76 65 72 73 69   ┆ral semantically distinct  versi┆
0x13d20…13d40        6f 6e 73 2c 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   ┆ons, applicable to different typ┆
0x13d40…13d60        65 73 20 6f 66 20 6f 70 65 72 61 6e 64 73 20 61 6e 64 20 0a 70 72 6f 64 75 63 69 6e 67 20 72 65   ┆es of operands and  producing re┆
0x13d60…13d80        73 75 6c 74 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e   ┆sults in different ways dependin┆
0x13d80…13da0        67 20 6f 6e 20 74 68 65 20 6f 70 65 72 61 6e 64 20 0a 74 79 70 65 73 2c 20 65 2e 67 2e 20 3c 3d   ┆g on the operand  types, e.g. <=┆
0x13da0…13dc0        20 6d 61 79 20 62 65 20 75 73 65 64 20 66 6f 72 20 69 6e 74 65 67 65 72 20 28 6f 72 20 69 6e 20   ┆ may be used for integer (or in ┆
0x13dc0…13de0        67 65 6e 65 72 61 6c 3a 20 0a 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 29 20 63 6f 6d 70 61 72 69   ┆general:  ordinal value) compari┆
0x13de0…13e00        73 6f 6e 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 66 6f 72 20 73 65 74 20 63 6f 6d 70 61 72 69 73   ┆son, as well as for set comparis┆
0x13e00…13e20 (159,) 6f 6e 20 0a 28 69 6e 63 6c 75 73 69 6f 6e 29 2e 0d 0a 0d 0a 49 6e 20 73 65 63 74 69 6f 6e 20 34   ┆on  (inclusion).    In section 4┆
0x13e20…13e40        2e 31 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 67 69 76 65 6e 2c 20 66 6f 72 20 65 61 63 68 20   ┆.1 reference is given, for each ┆
0x13e40…13e60        6f 70 65 61 74 6f 72 2c 20 74 6f 20 61 6c 6c 20 0a 73 65 63 74 69 6f 6e 73 20 77 68 65 72 65 20   ┆opeator, to all  sections where ┆
0x13e60…13e80        61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 61 74 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65   ┆a version of that operator is de┆
0x13e80…13ea0        73 63 72 69 62 65 64 2e 20 54 68 65 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 6c 65 63 74 69 6f   ┆scribed. The  following selectio┆
0x13ea0…13ec0        6e 20 72 75 6c 65 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f   ┆n rule is used in the applicatio┆
0x13ec0…13ee0        6e 20 6f 66 20 0a 6f 70 65 72 61 74 6f 72 73 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 65 78 70   ┆n of  operators occurring in exp┆
0x13ee0…13f00        72 65 73 73 69 6f 6e 73 3a 20 49 66 20 74 68 65 20 74 79 70 65 73 20 6f 66 20 74 68 65 20 0a 6f   ┆ressions: If the types of the  o┆
0x13f00…13f20        70 65 72 61 6e 64 28 73 29 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 61 6e 20 6f 70 65 72 61 74   ┆perand(s) provided for an operat┆
0x13f20…13f40        6f 72 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 0a 76 65 72   ┆or correspond to one of the  ver┆
0x13f40…13f60        73 69 6f 6e 73 20 6f 66 20 74 68 61 74 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 61   ┆sions of that operator, then tha┆
0x13f60…13f80        74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 0a 69 73 20 73 65   ┆t version of the operator  is se┆
0x13f80…13fa0        6c 65 63 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ┆lected. Otherwise the expression┆
0x13fa0…13fc0        20 69 73 20 69 6c 6c 65 67 61 6c 2e 20 54 68 65 20 74 79 70 65 20 0a 6f 66 20 74 68 65 20 72 65   ┆ is illegal. The type  of the re┆
0x13fc0…13fe0        73 75 6c 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20   ┆sult is determined according to ┆
0x13fe0…14000        74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 0a 74 68 65 20 73 65 6c 65 63 74 65 64   ┆the description of  the selected┆
0x14000…14020 (160,) 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 65 20 72 65   ┆ version of the operator. The re┆
0x14020…14040        73 75 6c 74 20 6d 61 79 20 61 67 61 69 6e 20 0a 62 65 20 75 73 65 64 20 61 73 20 61 6e 20 6f 70   ┆sult may again  be used as an op┆
0x14040…14060        65 72 61 6e 64 20 6f 66 20 61 6e 6f 74 68 65 72 20 6f 70 65 72 61 74 6f 72 20 61 6e 64 20 74 68   ┆erand of another operator and th┆
0x14060…14080        65 20 73 65 6c 65 63 74 69 6f 6e 20 0a 72 75 6c 65 20 6d 61 79 20 74 68 65 6e 20 62 65 20 61 70   ┆e selection  rule may then be ap┆
0x14080…140a0        70 6c 69 65 64 20 72 65 70 65 61 74 65 64 6c 79 2e 0d 0a 0d 0a 41 6e 20 65 78 70 72 65 73 73 69   ┆plied repeatedly.    An expressi┆
0x140a0…140c0        6f 6e 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20 61 73 20 61 6e 20 61 63 74 75 61 6c 20 70 61   ┆on which is used as an actual pa┆
0x140c0…140e0        72 61 6d 65 65 72 20 77 68 65 72 65 20 74 68 65 20 0a 6b 69 6e 64 20 6f 66 20 74 68 65 20 63 6f   ┆rameer where the  kind of the co┆
0x140e0…14100        72 72 65 73 70 6f 6e 64 69 6e 67 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 69 73 20   ┆rresponding formal parameter is ┆
0x14100…14120        76 61 72 69 61 62 6c 65 2c 20 0a 73 68 61 72 65 64 20 6f 72 20 69 6e 73 70 65 63 74 20 28 63 66   ┆variable,  shared or inspect (cf┆
0x14120…14140        2e 20 63 68 61 70 74 65 72 20 36 29 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 66 6f 72 6d 20   ┆. chapter 6) must have the form ┆
0x14140…14160        6f 66 20 61 6e 20 0a 8c 83 c8 0a 27 6f 62 6a 65 63 74 20 64 65 6e 6f 74 61 74 69 6f 6e 27 2e 20   ┆of an      'object denotation'. ┆
0x14160…14180        53 75 63 68 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 a1   ┆Such an expressionis called an  ┆
0x14180…141a0        6f 62 6a 65 63 74 20 0a 19 80 80 84 65 78 70 72 65 73 73 69 6f 6e e1 2e 20 54 68 65 20 65 76 61   ┆object      expression . The eva┆
0x141a0…141c0        6c 75 61 74 69 6f 6e 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 65 78 70 72 65 73 73 69 6f 6e 20   ┆luation of an object expression ┆
0x141c0…141e0        73 74 6f 70 73 20 0a 77 68 65 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 64   ┆stops  when the address of the d┆
0x141e0…14200        65 6e 6f 74 65 64 20 6f 62 6a 65 63 74 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 75 74 65 64 2e   ┆enoted object has been computed.┆
0x14200…14220 (161,) 20 49 6e 20 0a 61 6c 6c 20 6f 74 68 65 72 20 63 61 73 65 73 20 74 68 65 20 65 76 61 6c 75 61 74   ┆ In  all other cases the evaluat┆
0x14220…14240        69 6f 6e 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 70 72 6f 63 65 65 64 73 20 0a 75   ┆ion of an expression proceeds  u┆
0x14240…14260        6e 74 69 6c 20 61 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 2c 20   ┆ntil a value has been obtained, ┆
0x14260…14280        61 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 73   ┆as described in the  following s┆
0x14280…142a0        65 63 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 34 2e 31 20 45 76 61 6c 75 61 74 69 6f 6e 20 6f 66   ┆ection.        4.1 Evaluation of┆
0x142a0…142c0        20 45 78 70 72 65 73 73 69 6f 6e 73 0d 0a 0d 0a 54 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f   ┆ Expressions    The evaluation o┆
0x142c0…142e0        66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 79 69 65 6c 64 73 20 61 20 74 79 70 65 20 61 6e   ┆f an expression yields a type an┆
0x142e0…14300        64 20 61 20 76 61 6c 75 65 2e 20 0a 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 65 73 63 72 69 62   ┆d a value.  This section describ┆
0x14300…14320        65 73 20 68 6f 77 20 74 68 65 20 74 79 65 20 61 6e 64 20 76 61 6c 75 65 20 61 72 65 20 6f 62 74   ┆es how the tye and value are obt┆
0x14320…14340        61 69 6e 65 64 20 0a 66 72 6f 6d 20 74 68 65 20 74 79 70 65 73 20 61 6e 64 20 76 61 6c 75 65 73   ┆ained  from the types and values┆
0x14340…14360        20 6f 66 20 74 68 65 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   ┆ of the parts of the expression ┆
0x14360…14380        0a 77 68 69 63 68 20 63 6f 6e 73 74 69 74 75 74 65 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61   ┆ which constitute the operands a┆
0x14380…143a0        74 20 74 68 65 20 76 61 72 69 6f 75 73 20 73 74 61 67 65 73 20 6f 66 20 0a 63 6f 6d 70 75 74 61   ┆t the various stages of  computa┆
0x143a0…143c0        74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆tion.                           ┆
0x143c0…143e0        0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74   ┆       The expression is evaluat┆
0x143e0…14400        65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 65 78 70   ┆ed by evaluating the simple  exp┆
0x14400…14420 (162,) 72 65 73 73 69 6f 6e 28 73 29 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 6f 63 63 75 72   ┆ression(s) in the order of occur┆
0x14420…14440        72 65 6e 63 65 2e 20 54 68 65 6e 2c 20 69 66 20 6e 6f 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20   ┆rence. Then, if no  operator is ┆
0x14440…14460        70 72 65 73 65 6e 74 2c 20 74 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 74   ┆present, the type and value of t┆
0x14460…14480        68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 0a 61 72 65 20 74 68 65 20 74 79 70 65 20 61 6e 64 20   ┆he expression  are the type and ┆
0x14480…144a0        76 61 6c 75 65 20 6f 66 20 74 68 65 20 28 6f 6e 6c 79 29 20 73 69 6d 70 6c 65 20 65 78 70 72 65   ┆value of the (only) simple expre┆
0x144a0…144c0        73 73 69 6f 6e 2e 20 0a 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74   ┆ssion.  Otherwise the appropriat┆
0x144c0…144e0        65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 70 70   ┆e version of the operator is app┆
0x144e0…14500        6c 69 65 64 20 0a 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 73 69 6d 70 6c   ┆lied  to the values of the simpl┆
0x14500…14520        65 20 65 78 70 72 65 73 73 69 6f 6e 73 3b 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65   ┆e expressions; the result is the┆
0x14520…14540        20 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 73 20 74   ┆  value of the expression, its t┆
0x14540…14560        79 70 65 20 62 65 69 6e 67 20 62 6f 6f 6c 65 61 6e 20 66 6f 72 20 61 6c 6c 20 0a 72 65 6c 61 74   ┆ype being boolean for all  relat┆
0x14560…14580        69 6f 6e 61 6c 20 6f 70 65 72 61 74 6f 72 73 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆ional operators.                ┆
0x14580…145a0        8c 84 a8 0a 41 20 6c 65 61 64 69 6e 67 20 2b 20 6f 72 20 2d 20 69 6d 70 6c 69 65 73 20 61 6e 20   ┆    A leading + or - implies an ┆
0x145a0…145c0        69 6d 70 6c 69 63 69 74 20 6c 65 66 74 20 74 65 72 6d 20 77 69 74 68 20 74 79 70 65 20 0a 69 6e   ┆implicit left term with type  in┆
0x145c0…145e0        74 65 67 65 72 20 61 6e 64 20 76 61 6c 75 65 20 30 2e 0d 0a 0d 0a 06 76 65 72 73 69 6f 6e 73 20   ┆teger and value 0.     versions ┆
0x145e0…14600        28 73 65 63 74 69 6f 6e 29 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65   ┆(section)                  The e┆
0x14600…14620 (163,) 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 65 78 70 72 65 73 73 69 6f 6e   ┆valuation of a simple expression┆
0x14620…14640        20 70 72 6f 63 65 65 64 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 0a 72 69 67 68 74 2e 20 54   ┆ proceeds from left to  right. T┆
0x14640…14660        68 65 20 6c 65 66 74 6d 6f 73 74 20 74 65 72 6d 20 28 70 6f 73 73 69 62 6c 79 20 61 6e 20 69 6d   ┆he leftmost term (possibly an im┆
0x14660…14680        70 6c 69 63 69 74 20 30 29 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 2c 20 79 69 65 6c 64 69 6e   ┆plicit 0) is  evaluated, yieldin┆
0x14680…146a0        67 20 61 20 a1 70 72 65 6c 69 6d 69 6e 61 72 79 20 72 65 73 75 6c 74 e1 2e 20 54 68 65 20 66 6f   ┆g a  preliminary result . The fo┆
0x146a0…146c0        6c 6c 6f 77 69 6e 67 20 69 73 20 0a 74 68 65 6e 20 70 65 72 66 6f 72 6d 65 64 20 72 65 70 65 61   ┆llowing is  then performed repea┆
0x146c0…146e0        74 65 64 6c 79 3a 0d 0a 0d 0a 54 68 65 20 70 72 65 6c 69 6d 69 6e 61 72 79 20 72 65 73 75 6c 74   ┆tedly:    The preliminary result┆
0x146e0…14700        20 69 73 20 75 73 65 64 20 61 73 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20   ┆ is used as left operand of the ┆
0x14700…14720        0a 6c 65 66 74 6d 6f 73 74 20 72 65 6d 61 69 6e 69 6e 67 20 6f 70 65 72 61 74 6f 72 2e 20 54 68   ┆ leftmost remaining operator. Th┆
0x14720…14740        65 20 6c 65 66 74 6d 6f 73 74 20 72 65 6d 61 69 6e 69 6e 67 20 74 65 72 6d 20 69 73 20 0a 65 76   ┆e leftmost remaining term is  ev┆
0x14740…14760        61 6c 75 61 74 65 64 20 61 6e 64 20 75 73 65 64 20 61 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e   ┆aluated and used as right operan┆
0x14760…14780        64 2e 20 54 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69 6f 6e 20 0a 6f 66 20 74   ┆d. The appropriate version  of t┆
0x14780…147a0        68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 6e 20 61 70 70 6c 69 65 64 20 61 6e 64 20   ┆he operator is then applied and ┆
0x147a0…147c0        70 72 6f 64 75 63 65 73 20 61 20 6e 65 77 20 0a 70 72 65 6c 69 6d 69 6e 61 72 79 20 72 65 73 75   ┆produces a new  preliminary resu┆
0x147c0…147e0        6c 74 2e 0d 0a 0d 0a 57 68 65 6e 20 6e 6f 20 6d 6f 72 65 20 6f 70 65 72 61 74 6f 72 73 20 61 6e   ┆lt.    When no more operators an┆
0x147e0…14800        64 20 74 65 72 6d 73 20 61 72 65 20 6c 65 66 74 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 65 78 70   ┆d terms are left the simple  exp┆
0x14800…14820 (164,) 72 65 73 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 6c 65 74 65 6c 79 20 65 76 61 6c   ┆ression has been completely eval┆
0x14820…14840        75 61 74 65 64 3b 20 74 68 65 20 66 69 6e 61 6c 20 74 79 70 65 20 61 6e 64 20 0a 76 61 6c 75 65   ┆uated; the final type and  value┆
0x14840…14860        20 6f 66 20 74 68 65 20 70 72 65 6c 69 6d 69 6e 61 72 79 20 72 65 73 75 6c 74 20 63 6f 6e 73 74   ┆ of the preliminary result const┆
0x14860…14880        69 74 75 74 65 20 74 68 65 20 74 79 70 65 20 61 6e 64 20 0a 76 61 6c 75 65 20 6f 66 20 74 68 65   ┆itute the type and  value of the┆
0x14880…148a0        20 73 69 6d 70 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 72 65 20 69 73 20   ┆ simple expression.    There is ┆
0x148a0…148c0        6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 72 75 6c 65 20 64 65 73 63 72 69   ┆one exception to the rule descri┆
0x148c0…148e0        62 65 64 20 61 62 6f 76 65 3a 20 69 66 20 74 68 65 20 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20   ┆bed above: if the  left operand ┆
0x148e0…14900        6f 66 20 74 68 65 20 4f 52 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 6f 66 20 74 79 70 65 20 62 6f   ┆of the OR-operator is of type bo┆
0x14900…14920        6f 6c 65 61 6e 20 61 6e 64 20 68 61 73 20 0a 76 61 6c 75 65 20 74 72 75 65 2c 20 74 68 65 6e 20   ┆olean and has  value true, then ┆
0x14920…14940        74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72   ┆the evaluation of the right oper┆
0x14940…14960        61 6e 64 20 69 73 20 0a 6f 6d 69 74 74 65 64 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 73 20 74 79   ┆and is  omitted; however, its ty┆
0x14960…14980        70 65 20 6d 75 73 74 20 73 74 69 6c 6c 20 62 65 20 62 6f 6f 6c 65 61 6e 2e 0d 0a 0d 0a 0d 0a 0d   ┆pe must still be boolean.       ┆
0x14980…149a0        0a 0d 0a 0d 0a 0d 0a 8c 83 c8 0a 06 76 65 72 73 69 6f 6e 20 28 73 65 63 74 69 6f 6e 29 0d 0a 0d   ┆            version (section)   ┆
0x149a0…149c0        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   ┆                 The evaluation ┆
0x149c0…149e0        6f 66 20 61 20 74 65 72 6d 20 70 72 6f 63 65 65 64 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20   ┆of a term proceeds from left to ┆
0x149e0…14a00        72 69 67 68 74 20 69 6e 20 74 68 65 20 0a 73 61 6d 65 20 66 61 73 68 69 6f 6e 20 61 73 20 66 6f   ┆right in the  same fashion as fo┆
0x14a00…14a20 (165,) 72 20 61 20 73 69 6d 70 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 2e 65 2e 20 73 75 62 73   ┆r a simple expression (i.e. subs┆
0x14a20…14a40        74 69 74 75 74 65 20 0a 27 66 61 63 74 6f 72 27 20 66 6f 72 20 27 74 65 72 6d 27 20 61 6e 64 20   ┆titute  'factor' for 'term' and ┆
0x14a40…14a60        27 74 65 72 6d 27 20 66 6f 72 20 27 73 69 6d 70 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 27 20 69   ┆'term' for 'simple expression' i┆
0x14a60…14a80        6e 20 0a 74 68 65 20 61 62 6f 76 65 20 64 65 73 63 72 69 70 74 69 6f 6e 29 2e 0d 0a 0d 0a 54 68   ┆n  the above description).    Th┆
0x14a80…14aa0        65 72 65 20 69 73 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 67 65 6e 65   ┆ere is one exception to the gene┆
0x14aa0…14ac0        72 61 6c 20 72 75 6c 65 3a 20 69 66 20 74 68 65 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6f   ┆ral rule: if the left  operand o┆
0x14ac0…14ae0        66 20 74 68 65 20 41 4e 44 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 6f 66 20 74 79 70 65 20 62 6f   ┆f the AND-operator is of type bo┆
0x14ae0…14b00        6f 6c 65 61 6e 20 61 6e 64 20 68 61 73 20 76 61 6c 75 65 20 0a 66 61 6c 73 65 2c 20 74 68 65 6e   ┆olean and has value  false, then┆
0x14b00…14b20        20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 69 67 68 74 20 6f 70 65   ┆ the evaluation of the right ope┆
0x14b20…14b40        72 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 3b 20 0a 68 6f 77 65 76 65 72 2c 20 69 74 73 20 74   ┆rand is omitted;  however, its t┆
0x14b40…14b60        79 70 65 20 6d 75 73 74 20 73 74 69 6c 6c 20 62 65 20 62 6f 6f 6c 65 61 6e 2e 0d 0a 0d 0a 0d 0a   ┆ype must still be boolean.      ┆
0x14b60…14b80        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 61   ┆                      The type a┆
0x14b80…14ba0        6e 64 20 76 61 6c 75 65 20 6f 66 20 61 20 66 61 63 74 6f 72 20 61 72 65 20 6f 62 74 61 69 6e 65   ┆nd value of a factor are obtaine┆
0x14ba0…14bc0        64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 0a 62 65 6c 6f 77 20 66 6f 72 20 65 61 63 68 20 6f   ┆d as described  below for each o┆
0x14bc0…14be0        66 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 6d 73 3a 0d 0a 0d 0a 6f 62 6a 65 63 74 20   ┆f the possible forms:    object ┆
0x14be0…14c00        64 65 6e 6f 74 61 74 69 6f 6e 3a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 61   ┆denotation:  The value of the fa┆
0x14c00…14c20 (166,) 63 74 6f 72 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65 64   ┆ctor is the value of the denoted┆
0x14c20…14c40        20 6f 62 6a 65 63 74 20 0a 61 74 20 74 68 65 20 74 69 6d 65 20 6f 66 20 65 76 61 6c 75 61 74 69   ┆ object  at the time of evaluati┆
0x14c40…14c60        6f 6e 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 61 63 74 6f 72 20 69 73 20 74 68   ┆on. The type of the factor is th┆
0x14c60…14c80        65 20 0a 8c 83 c8 0a 74 79 70 65 20 6f 66 20 74 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63   ┆e      type of the denoted objec┆
0x14c80…14ca0        74 2c 20 65 78 63 65 70 74 20 69 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 20 0a 73 75 62   ┆t, except if this type is a  sub┆
0x14ca0…14cc0        72 61 6e 67 65 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 74 79 70 65 20 6f 66 20   ┆range in which case the type of ┆
0x14cc0…14ce0        74 68 65 20 66 61 63 74 6f 72 20 69 73 20 74 68 65 20 62 61 73 65 20 0a 74 79 70 65 20 6f 66 20   ┆the factor is the base  type of ┆
0x14ce0…14d00        74 68 65 20 73 75 62 72 61 6e 67 65 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   ┆the subrange. If the value of th┆
0x14d00…14d20        65 20 6f 62 6a 65 63 74 20 69 73 20 0a 75 6e 64 65 66 69 6e 65 64 20 28 6e 6f 74 20 69 6e 69 74   ┆e object is  undefined (not init┆
0x14d20…14d40        69 61 6c 69 7a 65 64 29 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e   ┆ialized) the effect of evaluatin┆
0x14d40…14d60        67 20 74 68 65 20 0a 66 61 63 74 6f 72 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0d 0a 0d   ┆g the  factor is not defined.   ┆
0x14d60…14d80        0a 76 61 6c 75 65 20 64 65 6e 6f 74 61 74 69 6f 6e 3a 0d 0a 54 68 65 20 74 79 70 65 20 61 6e 64   ┆ value denotation:  The type and┆
0x14d80…14da0        20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 61 63 74 6f 72 20 61 72 65 20 74 68 65 20 74 79 70   ┆ value of the factor are the typ┆
0x14da0…14dc0        65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 0a 74 68 65 20 64 65 6e 6f 74 65 64 20 76 61 6c 75   ┆e and value of  the denoted valu┆
0x14dc0…14de0        65 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 31 33 2e 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e   ┆e, cf. section 3.13.    function┆
0x14de0…14e00        20 63 61 6c 6c 3a 09 34 2e 32 0d 0a 74 79 70 65 73 69 7a 65 20 63 61 6c 6c 3a 09 33 2e 32 0d 0a   ┆ call: 4.2  typesize call: 3.2  ┆
0x14e00…14e20 (167,) 76 61 72 73 69 7a 65 20 63 61 6c 6c 3a 09 09 33 2e 31 32 2e 32 0d 0a 6c 69 6e 6b 20 63 61 6c 6c   ┆varsize call:  3.12.2  link call┆
0x14e20…14e40        3a 09 09 39 2e 31 0d 0a 75 6e 6c 69 6e 6b 20 63 61 6c 6c 3a 09 09 39 2e 31 0d 0a 63 72 65 61 74   ┆:  9.1  unlink call:  9.1  creat┆
0x14e40…14e60        65 20 63 61 6c 6c 3a 09 09 39 2e 31 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c   ┆e call:  9.1    The type and val┆
0x14e60…14e80        75 65 20 6f 66 20 74 68 65 20 66 61 63 74 6f 72 20 61 72 65 20 74 68 65 20 74 79 70 65 20 61 6e   ┆ue of the factor are the type an┆
0x14e80…14ea0        64 20 76 61 6c 75 65 20 6f 66 20 0a 74 68 65 20 63 61 6c 6c 2c 20 61 73 20 64 65 73 63 72 69 62   ┆d value of  the call, as describ┆
0x14ea0…14ec0        65 64 20 69 6e 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 73 65 63 74 69 6f 6e 2e 0d 0a 0d 0a   ┆ed in the indicated section.    ┆
0x14ec0…14ee0        28 65 78 70 72 65 73 73 69 6f 6e 29 3a 0d 0a 54 68 65 20 66 61 63 74 6f 72 20 69 73 20 65 76 61   ┆(expression):  The factor is eva┆
0x14ee0…14f00        6c 75 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73   ┆luated by evaluating the express┆
0x14f00…14f20        69 6f 6e 2e 20 54 68 65 20 0a 74 79 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66   ┆ion. The  tye and value of the f┆
0x14f20…14f40        61 63 74 6f 72 20 61 72 65 20 74 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20   ┆actor are the type and value of ┆
0x14f40…14f60        74 68 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 4e 4f 54 20 6e 65 67 5f 66 61 63 74   ┆the  expression.    NOT neg_fact┆
0x14f60…14f80        6f 72 3a 0d 0a 74 68 65 20 74 79 70 65 20 61 6e 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66   ┆or:  the type and value of the f┆
0x14f80…14fa0        61 63 74 6f 72 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67   ┆actor are obtained by evaluating┆
0x14fa0…14fc0        20 0a 74 68 65 20 6e 65 67 5f 66 61 63 74 6f 72 20 61 6e 64 20 61 70 70 6c 79 69 6e 67 20 74 68   ┆  the neg_factor and applying th┆
0x14fc0…14fe0        65 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 0a 4e 4f   ┆e appropriate version of the  NO┆
0x14fe0…15000        54 2d 6f 70 65 72 61 74 6f 72 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2e 20 54 68 65 20 76 65   ┆T-operator to the result. The ve┆
0x15000…15020 (168,) 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 4e 4f 54 2d 6f 70 65 72 61 74 6f 72 20 0a 61 72 65 20   ┆rsions of the NOT-operator  are ┆
0x15020…15040        64 65 73 63 72 69 62 65 64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 33 2e 34 2e 31 20 61 6e   ┆described in subsection 3.4.1 an┆
0x15040…15060        64 20 73 65 63 74 69 6f 6e 20 33 2e 35 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 54 68 65 20 70 72   ┆d section 3.5.     Note:  The pr┆
0x15060…15080        65 63 65 64 65 6e 63 65 20 72 75 6c 65 73 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63   ┆ecedence rules of Real-Time Pasc┆
0x15080…150a0        61 6c 20 61 72 65 20 74 68 6f 73 65 20 6f 66 20 0a 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c   ┆al are those of  standard Pascal┆
0x150a0…150c0        20 77 68 69 63 68 20 64 69 66 66 65 72 20 66 72 6f 6d 20 74 68 65 20 72 75 6c 65 73 20 6f 66 20   ┆ which differ from the rules of ┆
0x150c0…150e0        6f 74 68 65 72 20 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 20 28 65 2e   ┆other  programming languages (e.┆
0x150e0…15100        67 2e 20 41 4c 47 4f 4c 20 61 6e 64 20 50 4c 2f 4d 20 6c 61 6e 67 75 61 67 65 73 29 2e 0d 0a 0d   ┆g. ALGOL and PL/M languages).   ┆
0x15100…15101        0a                                                                                                ┆ ┆
0x15101…15104        FormFeed {
0x15101…15104          0c 83 b0                                                                                          ┆   ┆
0x15101…15104        }
0x15104…15120        0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 41 73 20 61 20 63 6f 6e 73 65 71 75 65 6e 63 65               ┆  Example:  As a consequence┆
0x15120…15140        20 6f 66 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65 20 72 75 6c 65 73 20 74 68 65 20 66 6f 6c   ┆ of the precedence rules the fol┆
0x15140…15160        6c 6f 77 69 6e 67 20 69 73 20 0a 6e 6f 74 20 61 20 6c 65 67 61 6c 20 65 78 70 72 65 73 73 69 6f   ┆lowing is  not a legal expressio┆
0x15160…15180        6e 3a 0d 0a 20 09 30 3c 78 20 41 4e 44 20 78 3c 31 30 0d 0a 54 68 65 20 65 78 70 72 65 73 73 69   ┆n:    0<x AND x<10  The expressi┆
0x15180…151a0        6f 6e 20 73 68 6f 75 6c 64 20 62 65 20 77 72 69 74 74 65 6e 20 61 73 3a 0d 0a 09 28 30 3c 78 29   ┆on should be written as:   (0<x)┆
0x151a0…151c0        20 41 4e 44 20 28 78 3c 31 30 29 0d 0a 0d 0a 0d 0a b0 a1 34 2e 32 20 46 75 6e 63 74 69 6f 6e 20   ┆ AND (x<10)        4.2 Function ┆
0x151c0…151e0        43 61 6c 6c 0d 0a 0d 0a 41 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 63 61 75 73 65 73 20 61   ┆Call    A function call causes a┆
0x151e0…15200        20 76 61 6c 75 65 20 74 6f 20 62 65 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 6e 20 0a 61 63 74   ┆ value to be computed by an  act┆
0x15200…15220 (169,) 69 76 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 66 75 6e 63 74 69 6f   ┆ivation of the indicated functio┆
0x15220…15240        6e 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 20   ┆n.            The function name ┆
0x15240…15260        6d 75 73 74 20 62 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   ┆must be the name of a function, ┆
0x15260…15280        65 69 74 68 65 72 20 0a 70 72 65 64 65 66 69 6e 65 64 20 6f 72 20 70 72 6f 67 72 61 6d 6d 65 72   ┆either  predefined or programmer┆
0x15280…152a0        2d 64 65 66 69 6e 65 64 2e 20 45 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69   ┆-defined. Evaluation of a functi┆
0x152a0…152c0        6f 6e 20 0a 63 61 6c 6c 20 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 74 77 6f 20 73 74 65 70   ┆on  call takes place in two step┆
0x152c0…152e0        73 3a 0d 0a 0d 0a 31 2e 20 84 54 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20   ┆s:    1.  The actual parameters ┆
0x152e0…15300        61 72 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 0a 19   ┆are evaluated in the order of   ┆
0x15300…15320        83 80 80 6f 63 63 75 72 72 65 6e 63 65 2e 0d 0a 32 2e 20 84 41 6e 20 61 63 74 69 76 61 74 69 6f   ┆   occurrence.  2.  An activatio┆
0x15320…15340        6e 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74   ┆n of the block associated with t┆
0x15340…15360        68 65 20 66 75 6e 63 74 69 6f 6e 20 0a 19 83 80 80 6e 61 6d 65 20 69 73 20 63 72 65 61 74 65 64   ┆he function      name is created┆
0x15360…15380        20 61 6e 64 20 65 78 65 63 75 74 65 64 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 36 2e 0d 0a 0d   ┆ and executed, cf. chapter 6.   ┆
0x15380…153a0        0a 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 69   ┆ The type of the function call i┆
0x153a0…153c0        73 20 74 68 65 20 72 65 73 75 6c 74 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 66 75 6e 63 74 69   ┆s the result type of the  functi┆
0x153c0…153e0        6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   ┆on. The value of the function ca┆
0x153e0…15400        6c 6c 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 0a 69 6d 70 6c 69 63 69 74   ┆ll is the value of the  implicit┆
0x15400…15420 (170,) 20 72 65 73 75 6c 74 20 6f 62 6a 65 63 74 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74   ┆ result object associated with t┆
0x15420…15440        68 65 20 61 63 74 69 76 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 66 75 6e 63 74 69 6f 6e 20 62   ┆he activation of the  function b┆
0x15440…15460        6c 6f 63 6b 20 77 68 65 6e 20 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 69 74 73 20 61   ┆lock when the execution of its a┆
0x15460…15480        63 74 69 6f 6e 20 70 61 72 74 20 0a 74 65 72 6d 69 6e 61 74 65 73 2e 20 49 66 20 74 68 65 20 76   ┆ction part  terminates. If the v┆
0x15480…154a0        61 6c 75 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 28 6e 6f 20 61 73 73 69 67 6e 6d 65 6e 74   ┆alue is undefined (no assignment┆
0x154a0…154c0        29 20 74 68 65 20 0a 65 66 66 65 63 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   ┆) the  effect of evaluating the ┆
0x154c0…154e0        66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0d 0a 0d   ┆function call is not defined.   ┆
0x154e0…15500        0a 0d 0a b0 a1 34 2e 33 20 43 6f 6e 73 74 61 6e 74 20 45 78 70 72 65 73 73 69 6f 6e 73 0d 0a 0d   ┆     4.3 Constant Expressions   ┆
0x15500…15520        0a 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 76 61   ┆ Constant expressions can be eva┆
0x15520…15540        6c 75 61 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 20 4f 6e 6c 79 20 0a 63 6f   ┆luated at compile-time. Only  co┆
0x15540…15560        6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 62 65 20 75 73 65 64 20 69   ┆nstant expressions may be used i┆
0x15560…15580        6e 20 63 6f 6e 73 74 61 6e 74 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 0a 49 66 20 61 6c 6c   ┆n constant declarations.  If all┆
0x15580…155a0        20 65 78 70 72 65 73 73 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 61 20 74 79 70 65 20 64 65 66 69   ┆ expressions used in a type defi┆
0x155a0…155c0        6e 69 74 69 6f 6e 20 61 72 65 20 63 6f 6e 73 74 61 6e 74 20 0a 65 78 70 72 65 73 73 69 6f 6e 73   ┆nition are constant  expressions┆
0x155c0…155e0        20 74 68 65 20 74 79 70 65 20 69 73 20 73 61 69 64 20 74 6f 20 62 65 20 73 74 61 74 69 63 2e 0d   ┆ the type is said to be static. ┆
0x155e0…15600        0a 0d 0a 8c 83 ec 0a 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20   ┆       Constant expressions are ┆
0x15600…15620 (171,) 72 65 63 75 72 73 69 76 65 6c 79 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 0a 66 6f 6c 6c   ┆recursively defined by the  foll┆
0x15620…15640        6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 0d 0a 0d 0a 31 2e 20 41 6c 6c 20 64 65   ┆owing restrictions.    1. All de┆
0x15640…15660        6e 6f 74 65 64 20 6f 62 6a 65 63 74 73 20 6d 75 73 74 20 62 65 20 63 6f 6e 73 74 61 6e 74 73 2e   ┆noted objects must be constants.┆
0x15660…15680        0d 0a 32 2e 20 84 4f 6e 6c 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 70 72 65 64 65 66   ┆  2.  Only the following (predef┆
0x15680…156a0        69 6e 65 64 29 20 66 75 6e 63 74 69 6f 6e 73 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 3a 20 0a   ┆ined) functions may be called:  ┆
0x156a0…156c0        19 83 80 80 61 62 73 2c 20 63 68 72 2c 20 69 6e 74 2c 20 6f 72 64 2c 20 70 72 65 64 2c 20 73 75   ┆    abs, chr, int, ord, pred, su┆
0x156c0…156e0        63 63 2c 20 77 72 64 2c 20 61 6e 64 20 62 79 74 2e 0d 0a 33 2e 20 41 6e 79 20 74 79 70 65 73 69   ┆cc, wrd, and byt.  3. Any typesi┆
0x156e0…15700        7a 65 20 63 61 6c 6c 20 6d 75 73 74 20 6e 61 6d 65 20 61 20 73 74 61 74 69 63 20 74 79 70 65 2e   ┆ze call must name a static type.┆
0x15700…15720        0d 0a 34 2e 20 84 27 6c 69 6e 6b 20 63 61 6c 6c 27 2c 20 27 75 6e 6c 69 6e 6b 20 63 61 6c 6c 27   ┆  4.  'link call', 'unlink call'┆
0x15720…15740        2c 20 61 6e 64 20 27 63 72 65 61 74 65 20 63 61 6c 6c 27 20 6d 75 73 74 20 6e 6f 74 20 0a 19 83   ┆, and 'create call' must not    ┆
0x15740…15760        80 80 6f 63 63 75 72 2e 0d 0a 35 2e 20 46 61 63 74 6f 72 73 20 6f 66 20 73 65 74 20 74 79 70 65   ┆  occur.  5. Factors of set type┆
0x15760…15773        73 20 6d 75 73 74 20 6e 6f 74 20 6f 63 63 75 72 2e 0d 0a                                          ┆s must not occur.  ┆
0x15773…15776        FormFeed {
0x15773…15776          0c 80 f8                                                                                          ┆   ┆
0x15773…15776        }
0x15776…15780        0a b0 a1 35 2e 20 53 54 41 54                                                                     ┆   5. STAT┆
0x15780…157a0        45 4d 45 4e 54 53 0d 0a 0d 0a 54 68 69 73 20 63 68 61 70 74 65 72 20 63 6f 6e 74 61 69 6e 73 20   ┆EMENTS    This chapter contains ┆
0x157a0…157c0        73 75 62 73 65 63 74 69 6f 6e 73 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 73 79 6e 74 61   ┆subsections describing the synta┆
0x157c0…157e0        78 20 61 6e 64 20 0a 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20   ┆x and  the use of the different ┆
0x157e0…15800        73 74 61 74 65 6d 65 6e 74 73 20 77 68 69 63 68 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e   ┆statements which are included in┆
0x15800…15820 (172,) 20 0a 74 68 65 20 52 65 61 6c 20 54 69 6d 65 20 50 61 73 63 61 6c 20 6c 61 6e 67 75 61 67 65 2e   ┆  the Real Time Pascal language.┆
0x15820…15840        20 4d 6f 73 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 0a 61 6c 73   ┆ Most of the statements are  als┆
0x15840…15860        6f 20 66 6f 75 6e 64 20 69 6e 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 20 61 6e 64 20 61   ┆o found in standard Pascal and a┆
0x15860…15880        72 65 20 77 65 6c 6c 20 6b 6e 6f 77 6e 20 6c 61 6e 67 75 61 67 65 20 0a 65 6c 65 6d 65 6e 74 73   ┆re well known language  elements┆
0x15880…158a0        2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 31 20 43 6f 6d 70 6f 75 6e 64 20 53 74 61 74 65 6d 65 6e 74 0d   ┆.        5.1 Compound Statement ┆
0x158a0…158c0        0a 0d 0a 54 68 65 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 64   ┆   The statements of a program d┆
0x158c0…158e0        65 73 63 72 69 62 65 20 74 68 65 20 61 63 74 69 6f 6e 73 20 77 68 69 63 68 20 61 72 65 20 0a 65   ┆escribe the actions which are  e┆
0x158e0…15900        78 65 63 75 74 65 64 20 62 79 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 2e 20 54 68 65 73 65   ┆xecuted by an incarnation. These┆
0x15900…15920        20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 65 64 20 0a 69 6e 20 61 20   ┆ statements are collected  in a ┆
0x15920…15940        63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54   ┆compound statement.            T┆
0x15940…15960        68 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63 75 74 65 64 20 6f 6e 65 20 61   ┆he statements are executed one a┆
0x15960…15980        74 20 61 20 74 69 6d 65 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 0a 6f 72 64 65 72   ┆t a time in the specified  order┆
0x15980…159a0        2e 20 57 68 65 6e 20 61 6c 6c 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 74 68   ┆. When all have been executed th┆
0x159a0…159c0        65 20 63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d 65 6e 74 20 0a 68 61 73 20 62 65 65 6e 20 63   ┆e compound statement  has been c┆
0x159c0…159e0        6f 6d 70 6c 65 74 65 6c 79 20 65 78 65 63 75 74 65 64 20 6f 72 20 a1 65 78 68 61 75 73 74 65 64   ┆ompletely executed or  exhausted┆
0x159e0…15a00        e1 2e 0d 0a 0d 0a 42 65 6c 6f 77 2c 20 61 6c 6c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 6d 73   ┆ .    Below, all statement forms┆
0x15a00…15a20 (173,) 20 61 72 65 20 67 69 76 65 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 72 65 66 65 72 65 6e   ┆ are given together with referen┆
0x15a20…15a40        63 65 20 0a 74 6f 20 74 68 65 69 72 20 70 72 65 63 69 73 65 20 64 65 63 72 69 70 74 69 6f 6e 3a   ┆ce  to their precise decription:┆
0x15a40…15a60        0d 0a 0d 0a 06 73 65 63 74 69 6f 6e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆     section                    ┆
0x15a60…15a80        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 84 c0 0a a1 4e 6f 74   ┆                             Not┆
0x15a80…15aa0        65 3a 0d 0a 53 74 61 74 65 20 6d 65 6e 74 20 6d 61 79 20 62 65 20 65 6d 70 74 79 2e 0d 0a 0d 0a   ┆e:  State ment may be empty.    ┆
0x15aa0…15ac0        0d 0a b0 a1 35 2e 32 20 44 61 74 61 20 54 72 61 6e 73 66 65 72 20 53 74 61 74 65 6d 65 6e 74 73   ┆    5.2 Data Transfer Statements┆
0x15ac0…15ae0        0d 0a 0d 0a 41 73 73 69 67 6e 6d 65 6e 74 20 61 6e 64 20 65 78 63 68 61 6e 67 65 20 73 74 61 74   ┆    Assignment and exchange stat┆
0x15ae0…15b00        65 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 62 61 73 69 63 20 62 75 69 6c 64 69 6e 67 20 0a 62   ┆ements are the basic building  b┆
0x15b00…15b20        6c 6f 63 6b 73 20 66 6f 72 20 6f 74 68 65 72 20 74 79 70 65 73 20 6f 66 20 73 74 61 74 65 6d 65   ┆locks for other types of stateme┆
0x15b20…15b40        6e 74 73 2e 20 54 68 65 79 20 73 65 72 76 65 20 74 6f 20 74 72 61 6e 73 66 65 72 20 0a 76 61 6c   ┆nts. They serve to transfer  val┆
0x15b40…15b60        75 65 73 20 74 6f 20 6f 62 6a 65 63 74 73 2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 32 2e 31 20 41 73 73   ┆ues to objects.        5.2.1 Ass┆
0x15b60…15b80        69 67 6e 6d 65 6e 74 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69   ┆ignment Statement    The executi┆
0x15b80…15ba0        6f 6e 20 6f 66 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63 61   ┆on of an assignment statement ca┆
0x15ba0…15bc0        75 73 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 0a 76 61 6c 75 65 20 6f 66 20 61 20 76 61 72   ┆uses the current  value of a var┆
0x15bc0…15be0        69 61 62 6c 65 20 74 6f 20 62 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61 20 6e 65 77 20   ┆iable to be replaced with a new ┆
0x15be0…15c00        76 61 6c 75 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 61 6e 20 65 78 70 72 65 73 73 69 6f   ┆value  specified by an expressio┆
0x15c00…15c20 (174,) 6e 2e 20 54 68 65 20 72 69 67 68 74 20 68 61 6e 64 20 73 69 64 65 20 65 78 70 72 65 73 73 69 6f   ┆n. The right hand side expressio┆
0x15c20…15c40        6e 20 0a 6d 75 73 74 20 62 65 20 6f 66 20 61 20 74 79 70 65 20 77 68 69 63 68 20 69 73 20 61 73   ┆n  must be of a type which is as┆
0x15c40…15c60        73 69 67 6e 6d 65 6e 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 28 63 66 2e 20 0a 73 65 63 74 69 6f   ┆signment compatible (cf.  sectio┆
0x15c60…15c80        6e 20 33 2e 31 30 29 20 77 69 74 68 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 76 61 72   ┆n 3.10) with the type of the var┆
0x15c80…15ca0        69 61 62 6c 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66   ┆iable.          The execution of┆
0x15ca0…15cc0        20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 70   ┆ an assignment statement takes p┆
0x15cc0…15ce0        6c 61 63 65 20 69 6e 20 66 6f 75 72 20 0a 73 74 65 70 73 3a 0d 0a 0d 0a 31 29 20 84 54 68 65 20   ┆lace in four  steps:    1)  The ┆
0x15ce0…15d00        76 61 72 69 61 62 6c 65 20 64 65 6e 6f 74 61 74 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64   ┆variable denotation is evaluated┆
0x15d00…15d20        20 61 73 20 61 6e 20 6f 62 6a 65 63 74 20 0a 19 83 80 80 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a   ┆ as an object      expression.  ┆
0x15d20…15d40        0d 0a 32 29 20 54 68 65 20 72 69 67 68 74 20 68 61 6e 64 20 73 69 64 65 20 65 78 70 72 65 73 73   ┆  2) The right hand side express┆
0x15d40…15d60        69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 2e 0d 0a 0d 0a 33 29 20 84 74 68 65 20 72 75 6e   ┆ion is evaluated.    3)  the run┆
0x15d60…15d80        2d 74 69 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 74 79 70 65 20 63 68 65 63 6b 69 6e 67 2c   ┆-time part of the type checking,┆
0x15d80…15da0        20 69 6e 63 6c 75 64 69 6e 67 20 74 65 73 74 73 20 0a 19 83 80 80 66 6f 72 20 72 61 6e 67 65 20   ┆ including tests      for range ┆
0x15da0…15dc0        63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 41 20 66 61 75   ┆constraints, is performed. A fau┆
0x15dc0…15de0        6c 74 20 6f 63 63 75 72 73 20 69 66 20 0a 19 83 80 80 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e   ┆lt occurs if      some constrain┆
0x15de0…15e00        74 20 69 73 20 76 69 6f 6c 61 74 65 64 2e 0d 0a 0d 0a 34 29 20 84 54 68 65 20 76 61 6c 75 65 20   ┆t is violated.    4)  The value ┆
0x15e00…15e20 (175,) 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20 76   ┆of the expression replaces the v┆
0x15e20…15e40        61 6c 75 65 20 6f 66 20 74 68 65 20 0a 19 83 80 80 76 61 72 69 61 62 6c 65 2e 0d 0a 0d 0a 8c 83   ┆alue of the      variable.      ┆
0x15e40…15e60        bc 0a 41 73 73 69 67 6e 6d 65 6e 74 73 20 63 61 6e 6e 6f 74 20 62 65 20 6d 61 64 65 20 74 6f 20   ┆  Assignments cannot be made to ┆
0x15e60…15e80        76 61 72 69 61 62 6c 65 73 20 6f 66 20 73 68 69 65 6c 64 65 64 20 74 79 70 65 73 20 6f 72 20 0a   ┆variables of shielded types or  ┆
0x15e80…15ea0        6f 66 20 73 74 72 75 63 74 75 72 65 64 20 74 79 70 65 73 20 77 69 74 68 20 73 68 69 65 6c 64 65   ┆of structured types with shielde┆
0x15ea0…15ec0        64 20 63 6f 6d 70 6f 6e 65 6e 74 20 74 79 70 65 73 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 73 3a   ┆d component types.     Examples:┆
0x15ec0…15ee0        0d 0a 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 3a 3d 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 2b 31   ┆  current_index:=current_index+1┆
0x15ee0…15f00        0d 0a 63 61 74 61 6c 6f 67 28 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 29 2e 61 75 74 68 6f 72 3a   ┆  catalog(current_index).author:┆
0x15f00…15f20        3d 22 41 6e 64 65 72 73 65 6e 20 48 20 43 22 0d 0a 6d 61 74 72 69 78 3a 3d 20 6d 61 74 72 69 78   ┆="Andersen H C"  matrix:= matrix┆
0x15f20…15f40        5f 74 79 70 65 28 3a 28 3a 31 2c 20 30 2c 20 30 3a 29 2e 0d 0a 09 09 20 20 20 20 20 20 20 28 3a   ┆_type(:(:1, 0, 0:).           (:┆
0x15f40…15f60        30 2c 20 31 2c 20 30 3a 29 2c 0d 0a 09 09 20 20 20 20 20 20 20 28 3a 30 2c 20 30 2c 20 31 3a 29   ┆0, 1, 0:),           (:0, 0, 1:)┆
0x15f60…15f80        3a 29 0d 0a 0d 0a 0d 0a a1 b0 35 2e 32 2e 32 20 45 78 63 68 61 6e 67 65 20 53 74 61 74 65 6d 65   ┆:)        5.2.2 Exchange Stateme┆
0x15f80…15fa0        6e 74 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 77 6f 20 76 61 72 69 61 62 6c 65   ┆nt    The values of two variable┆
0x15fa0…15fc0        73 20 6d 61 79 20 62 65 20 65 78 63 68 61 6e 67 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20   ┆s may be exchanged by executing ┆
0x15fc0…15fe0        61 6e 20 0a 65 78 63 68 61 6e 67 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆an  exchange statement.         ┆
0x15fe0…16000        0a 54 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63 74 73 20 6d 75 73 74 20 62 65 20 76 61 72   ┆ The denoted objects must be var┆
0x16000…16020 (176,) 69 61 62 6c 65 73 2c 20 61 6e 64 20 74 68 65 79 20 6d 75 73 74 20 62 65 20 6f 66 20 0a 74 68 65   ┆iables, and they must be of  the┆
0x16020…16040        20 73 61 6d 65 20 74 79 70 65 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 31 30 2e 20 54 68   ┆ same type, cf. section 3.10. Th┆
0x16040…16060        69 73 20 74 79 70 65 2c 20 6f 72 20 61 6e 79 20 6f 66 20 69 74 73 20 0a 63 6f 6d 70 6f 6e 65 6e   ┆is type, or any of its  componen┆
0x16060…16080        74 73 20 74 79 70 65 73 2c 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6d 61 69 6c 62 6f 78 2c 20 70   ┆ts types, must not be mailbox, p┆
0x16080…160a0        6f 6f 6c 2c 20 63 68 61 69 6e 2c 20 6f 72 20 70 6f 72 74 2e 0d 0a 0d 0a 54 68 65 20 65 78 65 63   ┆ool, chain, or port.    The exec┆
0x160a0…160c0        75 74 69 6f 6e 20 6f 66 20 61 6e 20 65 78 63 68 61 6e 67 65 20 73 74 61 74 65 6d 65 6e 74 20 74   ┆ution of an exchange statement t┆
0x160c0…160e0        61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 74 77 6f 20 0a 73 74 65 70 73 3a 0d 0a 0d 0a 31 29 20   ┆akes place in two  steps:    1) ┆
0x160e0…16100        84 54 68 65 20 61 64 64 72 65 73 73 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64 20   ┆ The addresses of the left hand ┆
0x16100…16120        73 69 64 65 20 61 6e 64 20 72 69 67 68 74 20 68 61 6e 64 20 73 69 64 65 20 0a 19 83 80 80 76 61   ┆side and right hand side      va┆
0x16120…16140        72 69 61 62 6c 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2c 20 69 6e 20 74 68 61 74 20 6f   ┆riables are evaluated, in that o┆
0x16140…16160        72 64 65 72 2e 0d 0a 0d 0a 32 29 20 84 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 6f   ┆rder.    2)  The values of the o┆
0x16160…16180        62 6a 65 63 74 73 20 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73 65 73 20   ┆bjects located at the addresses ┆
0x16180…161a0        0a 19 83 80 80 65 76 61 6c 75 61 74 65 64 20 69 6e 20 73 74 65 70 20 31 20 61 72 65 20 69 6e 74   ┆     evaluated in step 1 are int┆
0x161a0…161c0        65 72 63 68 61 6e 67 65 64 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 74 77 6f 20 76 61 72 69 61 62 6c   ┆erchanged.    If the two variabl┆
0x161c0…161e0        65 73 20 61 72 65 20 6f 66 20 74 79 70 65 20 72 65 66 65 72 65 6e 63 65 20 6f 72 20 70 72 6f 63   ┆es are of type reference or proc┆
0x161e0…16200        65 73 73 20 6f 72 20 69 66 20 0a 74 68 65 79 20 68 61 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20   ┆ess or if  they have components ┆
0x16200…16220 (177,) 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65 20 69 6e 74 65 72 63 68 61 6e 67 65 20 74   ┆of these types the interchange t┆
0x16220…16240        61 6b 65 73 20 0a 70 6c 61 63 65 20 61 73 20 61 6e 20 69 6e 64 69 76 69 73 69 62 6c 65 20 6f 70   ┆akes  place as an indivisible op┆
0x16240…16260        65 72 61 74 69 6f 6e 20 73 6f 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66   ┆eration so that the integrity of┆
0x16260…16280        20 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 62 75 66 66 65 72 73 20 61 6e 64 20 70 72 6f 63   ┆  references to buffers and proc┆
0x16280…16297        65 73 73 65 73 20 69 73 20 70 72 65 73 65 72 76 65 64 2e 0d 0a 0d 0a                              ┆esses is preserved.    ┆
0x16297…1629a        FormFeed {
0x16297…1629a          0c 83 bc                                                                                          ┆   ┆
0x16297…1629a        }
0x1629a…162a0        0a a1 45 78 61 6d                                                                                 ┆  Exam┆
0x162a0…162c0        70 6c 65 73 3a 0d 0a 63 75 72 72 65 6e 74 5f 62 75 66 66 65 72 5f 72 65 66 3a 3d 3a 74 65 6d 70   ┆ples:  current_buffer_ref:=:temp┆
0x162c0…162e0        5f 62 75 66 66 65 72 0d 0a 6d 61 74 72 69 78 28 69 29 3a 3d 3a 6d 61 74 72 69 78 28 6a 29 0d 0a   ┆_buffer  matrix(i):=:matrix(j)  ┆
0x162e0…16300        0d 0a 0d 0a b0 a1 35 2e 33 20 49 66 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 41 6e 20 69 66 20   ┆      5.3 If Statement    An if ┆
0x16300…16320        73 74 61 74 65 6d 65 6e 74 20 73 65 6c 65 63 74 73 20 66 6f 72 20 65 78 65 63 75 74 69 6f 6e 20   ┆statement selects for execution ┆
0x16320…16340        6f 6e 65 20 6f 66 20 74 77 6f 20 28 70 6f 73 73 69 62 6c 79 20 0a 65 6d 70 74 79 29 20 73 74 61   ┆one of two (possibly  empty) sta┆
0x16340…16360        74 65 6d 65 6e 74 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f   ┆tements depending on the value o┆
0x16360…16380        66 20 61 20 63 6f 6e 64 69 74 69 6f 6e 2e 20 54 68 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 73   ┆f a condition. The  expression s┆
0x16380…163a0        70 65 63 69 66 79 69 6e 67 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 6d 75 73 74 20 62 65 20   ┆pecifying the condition must be ┆
0x163a0…163c0        6f 66 20 74 68 65 20 0a 70 72 65 64 65 66 69 6e 65 64 20 74 79 70 65 20 62 6f 6f 6c 65 61 6e 2e   ┆of the  predefined type boolean.┆
0x163c0…163e0        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20   ┆            The execution of an ┆
0x163e0…16400        69 66 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 74 77 6f 20   ┆if statement takes place in two ┆
0x16400…16420 (178,) 73 74 65 70 73 3a 0d 0a 0d 0a 31 29 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 62 6f   ┆steps:    1) The value of the bo┆
0x16420…16440        6f 6c 65 61 6e 5f 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 2e 0d 0a   ┆olean_expression is evaluated.  ┆
0x16440…16460        0d 0a 32 29 20 84 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65   ┆  2)  If the expression evaluate┆
0x16460…16480        73 20 74 6f 20 74 72 75 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 0a 19 83 80 80 66 6f 6c   ┆s to true the statement      fol┆
0x16480…164a0        6c 6f 77 69 6e 67 20 54 48 45 4e 20 69 73 20 65 78 65 63 75 74 65 64 2e 20 4f 74 68 65 72 77 69   ┆lowing THEN is executed. Otherwi┆
0x164a0…164c0        73 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 0a 19 83 80 80 45 4c 53 45   ┆se the statement after      ELSE┆
0x164c0…164e0        20 28 69 66 20 70 72 65 73 65 6e 74 29 20 69 73 20 65 78 65 63 75 74 65 64 2e 0d 0a 0d 0a 54 68   ┆ (if present) is executed.    Th┆
0x164e0…16500        65 20 61 6d 62 69 67 75 6f 75 73 20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 09 09 49 46 20 65 31 20   ┆e ambiguous statement:    IF e1 ┆
0x16500…16520        54 48 45 4e 20 49 46 20 65 32 20 54 48 45 4e 20 73 31 20 45 4c 53 45 20 73 32 0d 0a 69 73 20 64   ┆THEN IF e2 THEN s1 ELSE s2  is d┆
0x16520…16540        65 66 69 6e 65 64 20 74 6f 20 62 65 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 3a 0d 0a 09 09 49   ┆efined to be equivalent to:    I┆
0x16540…16560        46 20 65 31 20 54 48 45 4e 20 42 45 47 49 4e 0d 0a 09 09 20 20 49 46 20 65 32 20 54 48 45 4e 20   ┆F e1 THEN BEGIN      IF e2 THEN ┆
0x16560…16580        73 31 20 45 4c 53 45 20 73 32 0d 0a 09 09 45 4e 44 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 73 3a 0d   ┆s1 ELSE s2    END     Examples: ┆
0x16580…165a0        0a 49 46 20 64 61 79 3d 53 74 75 72 64 61 79 20 54 48 45 4e 0d 0a 20 20 64 61 79 3a 3d 53 75 6e   ┆ IF day=Sturday THEN    day:=Sun┆
0x165a0…165c0        64 61 79 0d 0a 45 4c 53 45 0d 0a 20 20 64 61 79 3a 3d 73 75 63 63 28 64 61 79 29 0d 0a 0d 0a 49   ┆day  ELSE    day:=succ(day)    I┆
0x165c0…165e0        46 20 74 65 73 74 20 54 48 45 4e 20 70 72 6f 64 75 63 65 5f 74 65 73 74 5f 72 65 63 6f 72 64 0d   ┆F test THEN produce_test_record ┆
0x165e0…16600        0a 0d 0a 0d 0a 8c 83 e0 0a b0 a1 35 2e 34 20 43 61 73 65 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d   ┆           5.4 Case Statement   ┆
0x16600…16620 (179,) 0a 41 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 73 65 6c 65 63 74 73 20 66 6f 72 20 65 78   ┆ A case statement selects for ex┆
0x16620…16640        65 63 75 74 69 6f 6e 20 6f 6e 65 20 6f 66 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 0a 61 6c 74 65   ┆ecution one of a number of  alte┆
0x16640…16660        72 6e 61 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   ┆rnative statements, depending on┆
0x16660…16680        20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e 20 0a 65 78 70 72 65 73 73 69 6f 6e 2e 20 54 68   ┆ the value of an  expression. Th┆
0x16680…166a0        65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 62 65 20 6f 66 20 61 6e 20 6f 72 64 69 6e   ┆e expression must be of an ordin┆
0x166a0…166c0        61 6c 20 74 79 70 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆al type.                        ┆
0x166c0…166e0        0d 0a 0d 0a 0d 0a 0d 0a 41 20 63 61 73 65 20 65 6c 65 6d 65 6e 74 20 69 73 20 61 20 73 74 61 74   ┆        A case element is a stat┆
0x166e0…16700        65 6d 65 6e 74 20 6c 61 62 65 6c 6c 65 64 20 62 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 0a 63   ┆ement labelled by one or more  c┆
0x16700…16720        6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 54 68 65 73 65 20 63 6f 6e 73 74   ┆onstant expressions. These const┆
0x16720…16740        61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 63 61 6c 6c 65 64 20 0a 63 61 73 65 20 6c 61   ┆ant expressions, called  case la┆
0x16740…16760        62 65 6c 73 2c 20 6d 75 73 74 20 61 6c 6c 20 62 65 20 6f 66 20 61 20 74 79 70 65 20 63 6f 6d 70   ┆bels, must all be of a type comp┆
0x16760…16780        61 74 69 62 6c 65 20 77 69 74 68 20 74 68 61 74 20 6f 66 20 0a 74 68 65 20 73 65 6c 65 63 74 69   ┆atible with that of  the selecti┆
0x16780…167a0        6e 67 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 43 6f 6e 73 65 63 75 74 69 76 65 20 76 61 6c 75 65   ┆ng expression. Consecutive value┆
0x167a0…167c0        73 20 6d 61 79 20 62 65 20 67 69 76 65 6e 20 61 73 20 0a 61 20 72 61 6e 67 65 2c 20 65 2e 67 2e   ┆s may be given as  a range, e.g.┆
0x167c0…167e0        20 66 69 72 73 74 2e 2e 6c 61 73 74 2e 20 41 6c 6c 20 74 68 65 20 63 61 73 65 20 6c 61 62 65 6c   ┆ first..last. All the case label┆
0x167e0…16800        73 20 6f 66 20 6f 6e 65 20 63 61 73 65 20 0a 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65   ┆s of one case  statement must be┆
0x16800…16820 (180,) 20 64 69 73 74 69 6e 63 74 2e 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61   ┆ distinct.    The execution of a┆
0x16820…16840        20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 74   ┆ case statement takes place in t┆
0x16840…16860        68 72 65 65 20 0a 73 74 65 70 73 3a 20 0d 0a 0d 0a 31 29 20 45 76 61 6c 75 61 74 69 6f 6e 20 6f   ┆hree  steps:     1) Evaluation o┆
0x16860…16880        66 20 74 68 65 20 73 65 6c 65 63 74 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 32   ┆f the selecting expression.    2┆
0x16880…168a0        29 20 84 54 68 65 20 63 61 73 65 20 65 6c 65 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6c 61 62   ┆)  The case element with the lab┆
0x168a0…168c0        65 6c 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 19 83 80 80 76 61 6c   ┆el corresponding to the      val┆
0x168c0…168e0        75 65 20 6f 66 20 74 68 65 20 73 65 6c 65 63 74 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69   ┆ue of the selecting expression i┆
0x168e0…16900        73 20 73 65 6c 65 63 74 65 64 20 66 6f 72 20 0a 19 83 80 80 65 78 65 63 75 74 69 6f 6e 2e 0d 0a   ┆s selected for      execution.  ┆
0x16900…16920        0d 0a 20 20 20 84 54 68 65 20 22 6c 61 62 65 6c 22 20 4f 54 48 45 52 57 49 53 45 20 28 6b 65 79   ┆      The "label" OTHERWISE (key┆
0x16920…16940        77 6f 72 64 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 6c 6c 20 76 61 6c 75 65 73 20   ┆word) corresponds to all values ┆
0x16940…16960        0a 19 83 80 80 6f 66 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 73 65 6c 65 63 74 69 6e   ┆     of the type of the selectin┆
0x16960…16980        67 20 65 78 70 72 65 73 73 69 6f 6e 20 77 68 69 63 68 20 64 6f 20 6e 6f 74 20 0a 8c 83 c8 0a 19   ┆g expression which do not       ┆
0x16980…169a0        83 80 80 6f 63 63 75 72 20 61 73 20 63 61 73 65 20 6c 61 62 65 6c 73 2e 20 41 20 66 61 75 6c 74   ┆   occur as case labels. A fault┆
0x169a0…169c0        20 6f 63 63 75 72 73 20 69 66 20 6e 6f 20 63 61 73 65 20 65 6c 65 6d 65 6e 74 20 0a 19 83 80 80   ┆ occurs if no case element      ┆
0x169c0…169e0        63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20   ┆corresponds to the value of the ┆
0x169e0…16a00        73 65 6c 65 63 74 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 33 29 20 45 78 65 63   ┆selecting expression.    3) Exec┆
0x16a00…16a20 (181,) 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 73 65   ┆ution of the statement of the se┆
0x16a20…16a40        6c 65 63 74 65 64 20 63 61 73 65 20 65 6c 65 6d 65 6e 74 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a   ┆lected case element.     Note:  ┆
0x16a40…16a60        55 70 6f 6e 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 6c 65 63 74 65 64 20   ┆Upon completion of the selected ┆
0x16a60…16a80        73 74 61 74 65 6d 65 6e 74 20 74 68 65 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 0a 69 73   ┆statement the case statement  is┆
0x16a80…16aa0        20 61 6c 73 6f 20 63 6f 6d 70 6c 65 74 65 64 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 43   ┆ also completed.     Example:  C┆
0x16aa0…16ac0        41 53 45 20 6d 6f 6e 74 68 20 4f 46 0d 0a 20 20 4a 61 6e 75 61 72 79 2e 2e 4d 61 79 3a 09 2e 2e   ┆ASE month OF    January..May: ..┆
0x16ac0…16ae0        2e 2e 3b 0d 0a 20 20 4f 63 74 6f 62 65 72 2c 20 44 65 63 65 6d 62 65 72 3a 09 2e 2e 2e 2e 0d 0a   ┆..;    October, December: ....  ┆
0x16ae0…16b00        4f 54 48 45 52 57 49 53 45 09 09 2e 2e 2e 2e 0d 0a 45 4e 44 20 28 2a 20 6f 66 20 63 61 73 65 20   ┆OTHERWISE  ....  END (* of case ┆
0x16b00…16b20        2a 29 0d 0a 0d 0a 0d 0a b0 a1 35 2e 35 20 52 65 70 65 74 69 74 69 76 65 20 53 74 61 74 65 6d 65   ┆*)        5.5 Repetitive Stateme┆
0x16b20…16b40        6e 74 73 0d 0a 0d 0a 41 20 72 65 70 65 74 69 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 73 70   ┆nts    A repetitive statement sp┆
0x16b40…16b60        65 63 69 66 69 65 73 20 74 68 61 74 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 6f 20 62   ┆ecifies that a statement is to b┆
0x16b60…16b80        65 20 0a 65 78 65 63 75 74 65 64 20 72 65 70 65 61 74 65 64 6c 79 2c 20 7a 65 72 6f 20 6f 72 20   ┆e  executed repeatedly, zero or ┆
0x16b80…16ba0        6d 6f 72 65 20 74 69 6d 65 73 2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 35 2e 31 20 46 6f 72 20 53 74 61   ┆more times.        5.5.1 For Sta┆
0x16ba0…16bc0        74 65 6d 65 6e 74 0d 0a 0d 0a 41 20 66 6f 72 20 6c 6f 6f 70 20 6d 61 79 20 62 65 20 75 73 65 64   ┆tement    A for loop may be used┆
0x16bc0…16be0        20 69 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 6f 20 62 65 20 65 78 65 63 75 74 65   ┆ if a statement is to be execute┆
0x16be0…16c00        64 20 61 20 0a 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 61 6e 64 2f 6f   ┆d a  fixed number of times and/o┆
0x16c00…16c20 (182,) 72 20 65 6c 61 62 6f 72 61 74 65 73 20 6f 6e 20 63 6f 6e 73 65 63 75 74 69 76 65 20 0a 76 61 6c   ┆r elaborates on consecutive  val┆
0x16c20…16c40        75 65 73 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 28 69 74 65 72 61 74 69 6f 6e 29 2e 0d 0a 0d   ┆ues of an object (iteration).   ┆
0x16c40…16c60        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20   ┆             The execution of a ┆
0x16c60…16c80        66 6f 72 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 66 69 76   ┆for statement takes place in fiv┆
0x16c80…16ca0        65 20 73 74 65 70 73 2c 20 0a 77 68 65 72 65 20 74 68 72 65 65 20 6d 61 79 20 62 65 20 72 65 70   ┆e steps,  where three may be rep┆
0x16ca0…16cc0        65 61 74 65 64 3a 0d 0a 0d 0a 8c 83 c8 0a 31 29 20 84 54 68 65 20 73 74 61 72 74 20 61 6e 64 20   ┆eated:        1)  The start and ┆
0x16cc0…16ce0        73 74 6f 70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 61   ┆stop expressions are evaluated a┆
0x16ce0…16d00        6e 64 20 64 65 66 69 6e 65 20 0a 19 83 80 80 61 6e 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 2c 20   ┆nd define      an ordinal type, ┆
0x16d00…16d20        69 2e 65 2e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 75 73 74 20 62 65 20 6f 66 20   ┆i.e. the expressions must be of ┆
0x16d20…16d40        74 68 65 20 73 61 6d 65 20 0a 19 83 80 80 74 79 70 65 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62   ┆the same      type, which must b┆
0x16d40…16d60        65 20 61 6e 20 6f 72 64 69 6e 61 6c 20 74 79 70 65 2e 0d 0a 0d 0a 32 29 20 84 54 68 65 20 a1 63   ┆e an ordinal type.    2)  The  c┆
0x16d60…16d80        6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69 61 62 6c 65 e1 20 69 73 20 61 6c 6c 6f 63 61 74 65   ┆ontrolling variable  is allocate┆
0x16d80…16da0        64 20 61 73 20 61 6e 20 69 6d 70 6c 69 63 69 74 6c 79 20 0a 19 83 80 80 64 65 63 6c 61 72 65 64   ┆d as an implicitly      declared┆
0x16da0…16dc0        20 76 61 72 69 61 62 6c 65 2c 20 6c 6f 63 61 6c 20 74 6f 20 74 68 65 20 66 6f 72 20 73 74 61 74   ┆ variable, local to the for stat┆
0x16dc0…16de0        65 6d 65 6e 74 2e 20 49 74 73 20 6e 61 6d 65 20 0a 19 83 80 80 69 73 20 74 68 65 20 27 66 6f 72   ┆ement. Its name      is the 'for┆
0x16de0…16e00        5f 6e 61 6d 65 27 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f 6c 6c   ┆_name'. The type of the controll┆
0x16e00…16e20 (183,) 69 6e 67 20 76 61 72 69 61 62 6c 65 20 0a 19 83 80 80 69 73 20 74 68 65 20 74 79 70 65 20 6f 66   ┆ing variable      is the type of┆
0x16e20…16e40        20 74 68 65 20 73 74 61 72 74 20 61 6e 64 20 73 74 6f 70 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   ┆ the start and stop expressions.┆
0x16e40…16e60        20 54 68 65 20 0a 19 83 80 80 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63   ┆ The      initial value of the c┆
0x16e60…16e80        6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69 61 62 6c 65 20 69 73 20 74 68 61 74 20 6f 66 20 74   ┆ontrolling variable is that of t┆
0x16e80…16ea0        68 65 20 0a 19 83 80 80 73 74 61 72 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 33 29 20   ┆he      start expression.    3) ┆
0x16ea0…16ec0        84 54 68 65 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 63 6f 6e 64 69 74 69 6f 6e 69 73 20 74 65 73   ┆ The termination conditionis tes┆
0x16ec0…16ee0        74 65 64 2e 20 54 68 61 74 20 69 73 2c 20 69 66 20 54 4f 20 69 73 20 0a 19 83 80 80 73 70 65 63   ┆ted. That is, if TO is      spec┆
0x16ee0…16f00        69 66 69 65 64 2c 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 20 73 74 61 74   ┆ified, execution of the for stat┆
0x16f00…16f20        65 6d 65 6e 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 68 65 6e 20 0a 19 83 80 80 74 68 65 20 76   ┆ement terminates when      the v┆
0x16f20…16f40        61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69 61 62 6c 65   ┆alue of the controlling variable┆
0x16f40…16f60        20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 0a 19 83 80 80 76 61 6c 75 65 20   ┆ is greater than the      value ┆
0x16f60…16f80        6f 66 20 74 68 65 20 73 74 6f 70 20 65 78 70 72 65 73 73 69 6f 6e 3b 20 69 66 20 44 4f 57 4e 54   ┆of the stop expression; if DOWNT┆
0x16f80…16fa0        4f 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 0a 19 83 80 80 77 68 65 6e 20 74 68 65 20 76 61   ┆O is specified,      when the va┆
0x16fa0…16fc0        6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69 61 62 6c 65 20   ┆lue of the controlling variable ┆
0x16fc0…16fe0        69 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 19 83 80 80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74   ┆is less than      the value of t┆
0x16fe0…17000        68 65 20 73 74 6f 70 20 65 78 70 72 65 73 73 69 6f 6e 2e 0d 0a 0d 0a 34 29 20 84 54 68 65 20 73   ┆he stop expression.    4)  The s┆
0x17000…17020 (184,) 74 61 74 65 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 69 73 20 65 78 65 63 75 74 65   ┆tatement following DO is execute┆
0x17020…17040        64 20 77 69 74 68 20 74 68 65 20 0a 19 83 80 80 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69   ┆d with the      controlling vari┆
0x17040…17060        61 62 6c 65 20 61 63 74 69 6e 67 20 61 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 28 69 2e 65 2e 20   ┆able acting as a constant (i.e. ┆
0x17060…17080        69 74 20 6d 75 73 74 20 0a 19 83 80 80 6e 6f 74 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 20 6c   ┆it must      not appear on the l┆
0x17080…170a0        65 66 74 20 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 0a   ┆eft hand side of an assignment  ┆
0x170a0…170c0        19 83 80 80 73 74 61 74 65 6d 65 6e 74 2c 20 6e 6f 72 20 6d 61 79 20 69 74 20 62 65 20 70 61 73   ┆    statement, nor may it be pas┆
0x170c0…170e0        73 65 64 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 70 61 72 61 6d 65 74 65 72 20 0a 19 83 80   ┆sed as a variable parameter     ┆
0x170e0…17100        80 6f 66 20 61 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 29 2e 0d 0a 0d 0a 35 29 20 84 54 68 65 20   ┆ of a routine call).    5)  The ┆
0x17100…17120        76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 76 61 72 69 61 62 6c   ┆value of the controlling variabl┆
0x17120…17140        65 20 69 73 20 75 70 64 61 74 65 64 2c 20 65 78 63 65 70 74 20 0a 19 83 80 80 69 66 20 69 74 20   ┆e is updated, except      if it ┆
0x17140…17160        68 61 73 20 61 6c 72 65 61 64 79 20 72 65 61 63 68 65 64 20 74 68 65 20 75 70 70 65 72 20 6f 72   ┆has already reached the upper or┆
0x17160…17180        20 6c 6f 77 65 72 20 62 6f 75 6e 64 20 6f 66 20 74 68 65 20 0a 19 83 80 80 70 65 72 6d 69 73 73   ┆ lower bound of the      permiss┆
0x17180…171a0        69 62 6c 65 20 72 61 6e 67 65 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 65 78 65 63 75 74 69   ┆ible range in which case executi┆
0x171a0…171c0        6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 20 0a 19 83 80 80 73 74 61 74 65 6d 65 6e 74 20 74 65 72   ┆on of the for      statement ter┆
0x171c0…171e0        6d 69 6e 61 74 65 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 54 68 65 20 69 74 65 72 61 74 69   ┆minates immediately. The iterati┆
0x171e0…17200        6f 6e 20 63 61 6e 20 0a 19 83 80 80 65 69 74 68 65 72 20 62 65 20 77 69 74 68 20 69 6e 63 72 65   ┆on can      either be with incre┆
0x17200…17220 (185,) 61 73 69 6e 67 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20   ┆asing values of the controlling ┆
0x17220…17240        0a 19 83 80 80 76 61 72 69 61 62 6c 65 20 6f 72 20 77 69 74 68 20 64 65 63 72 65 61 73 69 6e 67   ┆     variable or with decreasing┆
0x17240…17260        20 76 61 6c 75 65 73 2e 20 69 66 20 54 4f 20 69 73 20 73 70 65 63 69 66 69 65 64 20 0a 19 83 80   ┆ values. if TO is specified     ┆
0x17260…17280        80 74 68 65 20 6f 72 64 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 72 6f   ┆ the ordinal value of the contro┆
0x17280…172a0        6c 6c 69 6e 67 20 76 61 72 69 61 62 6c 65 20 69 73 20 0a 19 83 80 80 69 6e 63 72 65 6d 65 6e 74   ┆lling variable is      increment┆
0x172a0…172c0        65 64 20 69 6e 20 73 74 65 70 73 20 6f 66 20 6f 6e 65 20 28 73 75 63 63 29 2e 20 49 66 20 44 4f   ┆ed in steps of one (succ). If DO┆
0x172c0…172e0        57 4e 54 4f 20 69 73 20 0a 19 83 80 80 73 70 65 63 69 66 69 65 64 20 74 68 65 20 69 74 65 72 61   ┆WNTO is      specified the itera┆
0x172e0…17300        74 69 6f 6e 20 69 73 20 77 69 74 68 20 64 65 63 72 65 61 73 69 6e 67 20 76 61 6c 75 65 73 20 28   ┆tion is with decreasing values (┆
0x17300…17320        70 72 65 64 29 2e 20 0a 19 83 80 80 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20 63 6f 6e 74 69 6e   ┆pred).      the execution contin┆
0x17320…17340        75 65 73 20 61 74 20 73 74 65 70 20 33 29 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 54 68 65 20 74   ┆ues at step 3).     Note:  The t┆
0x17340…17360        77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63   ┆wo expressions are evaluated onc┆
0x17360…17380        65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 0a 72 65 70 65 74 69 74 69 6f 6e 2e 20 49 66 20 74 68   ┆e, before the  repetition. If th┆
0x17380…173a0        65 20 74 65 72 6d 69 6e 61 6c 74 69 6f 6e 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 73 61 74 69   ┆e terminaltion condition is sati┆
0x173a0…173c0        73 66 69 65 64 20 0a 8c 83 c8 0a 62 65 66 6f 72 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74   ┆sfied      before the very first┆
0x173c0…173e0        20 72 65 70 65 74 69 74 69 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 28 66 6f 6c 6c 6f   ┆ repetition the statement (follo┆
0x173e0…17400        77 69 6e 67 20 0a 44 4f 29 20 6f 66 20 74 68 65 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 20 69   ┆wing  DO) of the for statement i┆
0x17400…17420 (186,) 73 20 6e 6f 74 20 65 78 65 63 75 74 65 64 20 61 74 20 61 6c 6c 2e 0d 0a 0d 0a a1 45 78 61 6d 70   ┆s not executed at all.     Examp┆
0x17420…17440        6c 65 3a 0d 0a 46 4f 52 20 6d 6f 6e 74 68 3a 3d 4a 61 6e 75 61 72 79 20 54 4f 20 44 65 63 65 6d   ┆le:  FOR month:=January TO Decem┆
0x17440…17460        62 65 72 20 44 4f 0d 0a 20 20 46 4f 52 20 64 61 74 65 3a 3d 31 20 54 4f 20 6e 75 6d 62 65 72 5f   ┆ber DO    FOR date:=1 TO number_┆
0x17460…17480        6f 66 5f 64 61 79 73 28 6d 6f 6e 74 68 29 20 44 4f 0d 0a 20 20 20 20 64 61 69 6c 79 5f 61 63 74   ┆of_days(month) DO      daily_act┆
0x17480…174a0        69 76 69 74 79 28 64 61 74 65 2c 6d 6f 6e 74 68 29 0d 0a 0d 0a 0d 0a b0 a1 35 2e 35 2e 32 20 4c   ┆ivity(date,month)        5.5.2 L┆
0x174a0…174c0        6f 6f 70 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 54 68 65 20 6c 6f 6f 70 20 73 74 61 74 65 6d   ┆oop Statement    The loop statem┆
0x174c0…174e0        65 6e 74 20 63 6f 6e 73 74 69 74 75 74 65 73 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c   ┆ent constitutes an unconditional┆
0x174e0…17500        20 72 65 70 65 74 69 74 69 76 65 20 0a 63 6f 6e 74 72 6f 6c 20 73 74 72 75 63 74 75 72 65 2c 20   ┆ repetitive  control structure, ┆
0x17500…17520        77 68 69 63 68 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 66 69 6e 65 20 61 6e 20 22   ┆which may be used to define an "┆
0x17520…17540        69 6e 66 69 6e 69 74 65 22 20 0a 6d 61 69 6e 20 6c 6f 6f 70 20 6f 66 20 61 20 70 72 6f 67 72 61   ┆infinite"  main loop of a progra┆
0x17540…17560        6d 2c 20 6f 6e 6c 79 20 74 65 72 6d 69 6e 61 74 65 64 20 69 6e 20 63 61 73 65 20 6f 66 20 61 20   ┆m, only terminated in case of a ┆
0x17560…17580        66 61 75 6c 74 20 0a 6f 72 20 70 61 72 65 6e 74 20 65 6e 66 6f 72 63 65 64 20 70 72 6f 63 65 73   ┆fault  or parent enforced proces┆
0x17580…175a0        73 20 74 65 72 6d 69 6e 61 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 6c 6f   ┆s termination.            The lo┆
0x175a0…175c0        6f 70 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 72 65 70 65 61 74 65 64 20   ┆op statement specifies repeated ┆
0x175c0…175e0        65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 73 74 61 74 65 6d 65 6e 74 20 73 65 71 75   ┆execution of the  statement sequ┆
0x175e0…17600        65 6e 63 65 20 69 6e 20 74 68 65 20 73 74 61 74 65 64 20 6f 72 64 65 72 2e 20 54 68 65 20 6c 6f   ┆ence in the stated order. The lo┆
0x17600…17620 (187,) 6f 70 20 6d 61 79 20 62 65 20 6c 65 66 74 20 0a 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66   ┆op may be left  as the result of┆
0x17620…17640        20 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20 6a 75 6d 70 20 73 74 61 74 65 6d 65   ┆ the execution of a jump stateme┆
0x17640…17660        6e 74 20 28 63 66 2e 20 0a 73 65 63 74 69 6f 6e 20 35 2e 37 29 2e 0d 0a 0d 0a a1 45 78 61 6d 70   ┆nt (cf.  section 5.7).     Examp┆
0x17660…17680        6c 65 3a 0d 0a 4c 4f 4f 50 0d 0a 20 20 6e 65 78 74 5f 62 3a 3d 72 65 61 64 5f 6e 65 78 74 5f 62   ┆le:  LOOP    next_b:=read_next_b┆
0x17680…176a0        75 66 66 65 72 3b 0d 0a 20 20 70 72 65 70 61 72 65 5f 62 75 66 66 65 72 28 6e 65 78 74 5f 62 29   ┆uffer;    prepare_buffer(next_b)┆
0x176a0…176c0        3b 0d 0a 20 20 73 65 6e 64 5f 62 75 66 66 65 72 28 6e 65 78 74 5f 62 29 0d 0a 45 4e 44 4c 4f 4f   ┆;    send_buffer(next_b)  ENDLOO┆
0x176c0…176e0        50 0d 0a 0d 0a 0d 0a b0 a1 35 2e 35 2e 33 20 57 68 69 6c 65 20 53 74 61 74 65 6d 65 6e 74 0d 0a   ┆P        5.5.3 While Statement  ┆
0x176e0…17700        0d 0a 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 65 70 65 74 69 74 69 6f 6e 20 6f 66 20 61 20 73 74   ┆  Conditional repetition of a st┆
0x17700…17720        61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 0a   ┆atement where the condition is  ┆
0x17720…17740        63 68 65 63 6b 65 64 20 62 65 66 6f 72 65 20 65 61 63 68 20 65 78 65 63 75 74 69 6f 6e 20 6d 61   ┆checked before each execution ma┆
0x17740…17760        79 20 62 65 20 61 63 68 69 65 76 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 20 0a 77 68 69   ┆y be achieved by means of a  whi┆
0x17760…17780        6c 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 f8 0a 54 68 65 20 76   ┆le statement.              The v┆
0x17780…177a0        61 6c 75 65 20 6f 66 20 74 68 65 20 62 6f 6f 6c 65 61 6e 5f 65 78 70 72 65 73 73 69 6f 6e 20 69   ┆alue of the boolean_expression i┆
0x177a0…177c0        73 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 65 61 63 68 20 0a 65 78 65 63 75 74 69   ┆s evaluated before each  executi┆
0x177c0…177e0        6f 6e 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 74 65 73 74 2d 61 6e   ┆on of the statement. The test-an┆
0x177e0…17800        64 2d 65 78 65 63 75 74 65 20 73 65 71 75 65 6e 63 65 20 0a 67 6f 65 73 20 6f 6e 20 61 73 20 6c   ┆d-execute sequence  goes on as l┆
0x17800…17820 (188,) 6f 6e 67 20 61 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 79 69 65 6c 64 73 20 74 72 75   ┆ong as the evaluation yields tru┆
0x17820…17840        65 2c 20 77 68 65 6e 20 74 68 65 20 0a 72 65 73 75 6c 74 20 62 65 63 6f 6d 65 73 20 66 61 6c 73   ┆e, when the  result becomes fals┆
0x17840…17860        65 2c 20 70 6f 73 73 69 62 6c 79 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2c 20 65 78 65 63   ┆e, possibly the first time, exec┆
0x17860…17880        75 74 69 6f 6e 20 6f 66 20 0a 74 68 65 20 77 68 69 6c 65 20 73 74 61 74 65 6d 65 6e 74 20 74 65   ┆ution of  the while statement te┆
0x17880…178a0        72 6d 69 6e 61 74 65 73 2e 0d 0a 0d 0a 54 68 65 20 77 68 69 6c 65 20 73 74 61 74 65 6d 65 6e 74   ┆rminates.    The while statement┆
0x178a0…178c0        3a 0d 0a 20 20 57 48 49 4c 45 20 65 78 70 20 44 4f 20 73 74 0d 0a 69 73 20 65 71 75 69 76 61 6c   ┆:    WHILE exp DO st  is equival┆
0x178c0…178e0        65 6e 74 20 74 6f 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   ┆ent to following combination of ┆
0x178e0…17900        6c 6f 6f 70 2c 20 69 66 20 61 6e 64 20 0a 65 78 69 74 6c 6f 6f 70 20 73 74 61 74 65 6d 65 6e 74   ┆loop, if and  exitloop statement┆
0x17900…17920        73 3a 0d 0a 20 20 4c 4f 4f 50 20 49 46 20 4e 4f 54 20 65 78 70 20 54 48 45 4e 20 45 58 49 54 4c   ┆s:    LOOP IF NOT exp THEN EXITL┆
0x17920…17940        4f 4f 50 3b 20 73 74 20 45 4e 44 4c 4f 4f 50 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 63 75   ┆OOP; st ENDLOOP     Example:  cu┆
0x17940…17960        72 72 65 6e 74 5f 69 6e 64 65 78 3a 3d 66 69 72 73 74 5f 69 6e 64 65 78 3b 0d 0a 57 48 49 4c 45   ┆rrent_index:=first_index;  WHILE┆
0x17960…17980        20 74 61 62 6c 65 28 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 29 20 3c 3e 20 73 6f 75 67 68 74 5f   ┆ table(current_index) <> sought_┆
0x17980…179a0        65 6c 65 6d 65 6e 74 20 44 4f 0d 0a 20 20 63 75 72 72 66 65 6e 74 5f 69 6e 64 65 78 3a 3d 63 75   ┆element DO    currfent_index:=cu┆
0x179a0…179c0        72 72 65 6e 74 5f 69 6e 64 65 78 2b 31 0d 0a 0d 0a 0d 0a b0 a1 35 2e 35 2e 34 20 52 65 70 65 61   ┆rrent_index+1        5.5.4 Repea┆
0x179c0…179e0        74 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 45 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20 73 65   ┆t Statement    Execution of a se┆
0x179e0…17a00        71 75 65 6e 63 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 75 6e 74 69 6c 20 73 6f 6d 65 20   ┆quence of statements until some ┆
0x17a00…17a20 (189,) 63 6f 6e 64 69 74 69 6f 6e 20 0a 69 73 20 73 61 74 69 73 66 69 65 64 20 6d 61 79 20 62 65 20 61   ┆condition  is satisfied may be a┆
0x17a20…17a40        63 68 69 65 76 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 20 72 65 70 65 61 74 20 73 74 61   ┆chieved by means of a repeat sta┆
0x17a40…17a60        74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 45 76 65 72 79 20 74 69 6d 65 20 74 68   ┆tement.            Every time th┆
0x17a60…17a80        65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 68 61 73 20 62 65 65   ┆e sequence of statements has bee┆
0x17a80…17aa0        6e 20 65 78 65 63 75 74 65 64 2c 20 74 68 65 20 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20 62 6f   ┆n executed, the  value of the bo┆
0x17aa0…17ac0        6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   ┆olean expression is evaluated an┆
0x17ac0…17ae0        64 20 65 78 65 63 75 74 69 6f 6e 20 0a 6f 66 20 74 68 65 20 72 65 70 65 61 74 20 73 74 61 74 65   ┆d execution  of the repeat state┆
0x17ae0…17b00        6d 65 6e 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 68 65 6e 20 74 68 65 20 65 76 61 6c 75 61 74   ┆ment terminates when the evaluat┆
0x17b00…17b20        69 6f 6e 20 0a 79 69 65 6c 64 73 20 74 72 75 65 2e 0d 0a 0d 0a 54 68 65 20 72 65 70 65 61 74 20   ┆ion  yields true.    The repeat ┆
0x17b20…17b40        73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 52 45 50 45 41 54 20 73 31 3b 20 2e 2e 3b 20 73 6e 20 55   ┆statement    REPEAT s1; ..; sn U┆
0x17b40…17b60        4e 54 49 4c 20 65 78 70 0d 0a 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 20 66   ┆NTIL exp  is equivalent to the f┆
0x17b60…17b80        6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 6c 6f 6f   ┆ollowing special form of the loo┆
0x17b80…17ba0        70 20 0a 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 20 20 4c 4f 4f 50 20 73 31 3b 20 2e 2e 2e 3b 20 73   ┆p  statement:    LOOP s1; ...; s┆
0x17ba0…17bc0        6e 3b 20 49 46 20 65 78 70 20 54 48 45 4e 20 45 58 49 54 4c 4f 4f 50 20 45 4e 44 4c 4f 4f 50 0d   ┆n; IF exp THEN EXITLOOP ENDLOOP ┆
0x17bc0…17be0        0a 0d 0a 8c 83 c8 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 52 45 50 45 41 54 0d 0a 20 20 77 61 69 74   ┆        Example:  REPEAT    wait┆
0x17be0…17c00        28 6d 61 69 6e 5f 6d 61 69 6c 62 6f 78 2c 20 72 65 66 29 3b 0d 0a 20 20 66 69 6e 61 6c 5f 6d 65   ┆(main_mailbox, ref);    final_me┆
0x17c00…17c20 (190,) 73 73 61 67 65 3a 3d 64 6f 5f 70 72 6f 63 65 73 73 28 72 65 66 29 3b 0d 0a 20 20 72 65 74 75 72   ┆ssage:=do_process(ref);    retur┆
0x17c20…17c40        6e 28 72 65 66 29 0d 0a 55 4e 54 49 4c 20 66 69 6e 61 6c 5f 6d 65 73 73 61 67 65 0d 0a 0d 0a 0d   ┆n(ref)  UNTIL final_message     ┆
0x17c40…17c60        0a b0 a1 35 2e 36 20 50 72 6f 63 65 64 75 72 65 20 43 61 6c 6c 0d 0a 0d 0a 41 20 70 72 6f 63 65   ┆   5.6 Procedure Call    A proce┆
0x17c60…17c80        64 75 72 65 20 63 61 6c 6c 20 73 65 72 76 65 73 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20   ┆dure call serves to establish a ┆
0x17c80…17ca0        62 69 6e 64 69 6e 67 20 62 65 74 77 65 65 6e 20 0a 61 63 74 75 61 6c 20 61 6e 64 20 66 6f 72 6d   ┆binding between  actual and form┆
0x17ca0…17cc0        61 6c 20 70 61 72 61 6d 65 74 65 72 73 2c 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6c 6f 63 61 6c   ┆al parameters, to allocate local┆
0x17cc0…17ce0        6c 79 20 64 65 63 6c 61 72 65 64 20 0a 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 74 6f 20 69   ┆ly declared  variables, and to i┆
0x17ce0…17d00        6e 76 6f 6b 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20   ┆nvoke execution of the compound ┆
0x17d00…17d20        73 74 61 74 65 6d 65 6e 74 20 0a 6f 66 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 62 6c 6f 63   ┆statement  of the procedure bloc┆
0x17d20…17d40        6b 20 69 6e 20 69 74 73 20 70 72 6f 70 65 72 20 73 75 72 72 6f 75 6e 64 69 6e 67 73 2e 20 41 20   ┆k in its proper surroundings. A ┆
0x17d40…17d60        0a 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20   ┆ procedure call consists of the ┆
0x17d60…17d80        70 72 6f 63 65 64 75 72 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 0a 6c 69   ┆procedure name followed by a  li┆
0x17d80…17da0        73 74 20 6f 66 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 73 2e 20 49 66 20 74 68 65 20   ┆st of actual parameters. If the ┆
0x17da0…17dc0        70 72 6f 63 65 64 75 72 65 20 69 73 20 64 65 63 6c 61 72 65 64 20 0a 77 69 74 68 6f 75 74 20 66   ┆procedure is declared  without f┆
0x17dc0…17de0        6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 2c 20 74 68 65 20 63 61 6c 6c 20 63 6f 6e 73 69   ┆ormal parameters, the call consi┆
0x17de0…17e00        73 74 73 20 6f 66 20 74 68 65 20 0a 70 72 6f 63 65 64 75 72 65 20 6e 61 6d 65 20 6f 6e 6c 79 2e   ┆sts of the  procedure name only.┆
0x17e00…17e20 (191,) 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20 70   ┆            The execution of a p┆
0x17e20…17e40        72 6f 63 65 64 75 72 65 20 63 61 6c 6c 20 74 61 6b 65 73 20 70 6c 61 63 65 20 69 6e 20 74 77 6f   ┆rocedure call takes place in two┆
0x17e40…17e60        20 73 74 65 70 73 3a 0d 0a 0d 0a 31 29 20 84 54 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65   ┆ steps:    1)  The actual parame┆
0x17e60…17e80        74 65 72 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20   ┆ters are evaluated in the order ┆
0x17e80…17ea0        6f 66 20 0a 19 83 80 80 6f 63 63 75 72 72 65 6e 63 65 2e 0d 0a 0d 0a 32 29 20 84 41 6e 20 61 63   ┆of      occurrence.    2)  An ac┆
0x17ea0…17ec0        74 69 76 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 61 73 73 6f 63 69 61 74 65 64   ┆tivation of the block associated┆
0x17ec0…17ee0        20 77 69 74 68 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 0a 19 83 80 80 6e 61 6d 65 20 69 73   ┆ with the procedure      name is┆
0x17ee0…17f00        20 63 72 65 61 74 65 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20 70 61   ┆ created, including parameter pa┆
0x17f00…17f20        73 73 69 6e 67 2c 20 61 6e 64 20 74 68 65 20 0a 19 83 80 80 61 63 74 69 6f 6e 20 70 61 72 74 20   ┆ssing, and the      action part ┆
0x17f20…17f40        6f 66 20 74 68 65 20 62 6c 6f 63 6b 20 69 73 20 65 78 65 63 75 74 65 64 20 28 63 66 2e 20 63 68   ┆of the block is executed (cf. ch┆
0x17f40…17f60        61 70 74 65 72 20 36 29 2e 20 0a 19 83 80 80 57 68 65 6e 20 74 68 65 20 65 78 65 63 75 74 69 6f   ┆apter 6).      When the executio┆
0x17f60…17f80        6e 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 20   ┆n terminates the procedure call ┆
0x17f80…17fa0        69 73 20 0a 19 83 80 80 63 6f 6d 70 6c 65 74 65 64 2e 0d 0a 0d 0a 44 65 74 61 69 6c 65 64 20 72   ┆is      completed.    Detailed r┆
0x17fa0…17fc0        75 6c 65 73 20 66 6f 72 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 64   ┆ules for actual parameters are d┆
0x17fc0…17fe0        65 63 72 69 62 65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 0a 36 2e 31 2e 0d 0a 0d 0a 0d 0a 8c 83   ┆ecribed in section  6.1.        ┆
0x17fe0…18000        c8 0a b0 a1 35 2e 37 20 4a 75 6d 70 20 53 74 61 74 65 6d 65 6e 74 73 0d 0a 0d 0a 54 68 65 20 73   ┆    5.7 Jump Statements    The s┆
0x18000…18020 (192,) 74 61 74 65 6d 65 6e 74 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 69 73 20 73 65 63 74   ┆tatements described in this sect┆
0x18020…18040        69 6f 6e 20 73 65 72 76 65 20 74 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 0a 6d 6f 64 69 66 79 20   ┆ion serve to explicitly  modify ┆
0x18040…18060        74 68 65 20 6f 72 64 65 72 20 6f 66 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d   ┆the order of execution of statem┆
0x18060…18080        65 6e 74 73 20 62 79 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 0a 63 6f 6e 74 72 6f 6c 20 74 6f   ┆ents by transferring  control to┆
0x18080…180a0        20 61 6e 20 69 6d 70 6c 69 63 69 74 6c 79 20 6f 72 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 64   ┆ an implicitly or explicitly ind┆
0x180a0…180c0        69 63 61 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 37 2e 31 20 45   ┆icated statement.        5.7.1 E┆
0x180c0…180e0        78 69 74 6c 6f 6f 70 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 45 78 65 63 75 74 69 6f 6e 20 6f   ┆xitloop Statement    Execution o┆
0x180e0…18100        66 20 61 6e 20 65 78 69 74 6c 6f 6f 70 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20 74   ┆f an exitloop statement causes t┆
0x18100…18120        68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 0a 61 6e 20 65 6e 63 6c 6f 73 69 6e 67 20 72 65   ┆he execution of  an enclosing re┆
0x18120…18140        70 65 74 69 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20   ┆petitive statement (cf. section ┆
0x18140…18160        35 2e 35 29 20 74 6f 20 0a 74 65 72 6d 69 6e 61 74 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65   ┆5.5) to  terminate.          The┆
0x18160…18180        20 72 65 70 65 74 69 74 69 6f 6e 20 65 78 69 74 65 64 20 69 73 20 74 68 65 20 69 6e 6e 65 72 6d   ┆ repetition exited is the innerm┆
0x18180…181a0        6f 73 74 20 6f 6e 65 2e 20 41 6e 20 65 78 69 74 6c 6f 6f 70 20 0a 73 74 61 74 65 6d 65 6e 74 20   ┆ost one. An exitloop  statement ┆
0x181a0…181c0        6d 61 79 20 6f 6e 6c 79 20 61 70 70 65 61 72 20 77 69 74 68 69 6e 20 61 20 72 65 70 65 74 69 74   ┆may only appear within a repetit┆
0x181c0…181e0        69 76 65 20 73 74 61 74 65 6d 65 6e 74 2c 20 0a 69 2e 65 2e 20 72 65 70 65 61 74 2c 20 66 6f 72   ┆ive statement,  i.e. repeat, for┆
0x181e0…18200        2c 20 77 68 69 6c 65 20 6f 72 20 6c 6f 6f 70 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a a1 45   ┆, while or loop statement.     E┆
0x18200…18220 (193,) 78 61 6d 70 6c 65 3a 0d 0a 54 68 65 20 67 65 6e 65 72 61 6c 69 7a 65 64 20 6c 6f 6f 70 20 63 6f   ┆xample:  The generalized loop co┆
0x18220…18240        6e 74 72 6f 6c 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 6f 6e 73 74 72 75 63 74   ┆ntrol structure may be construct┆
0x18240…18260        65 64 20 61 73 20 0a 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 6c 6f 6f 70 20 73   ┆ed as  a combination of a loop s┆
0x18260…18280        74 61 74 65 6d 65 6e 74 2c 20 61 6e 20 69 66 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6e 64 20 61   ┆tatement, an if statement, and a┆
0x18280…182a0        6e 20 0a 65 78 69 74 6c 6f 6f 70 20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 0d 0a 4c 4f 4f 50 0d 0a   ┆n  exitloop statement:    LOOP  ┆
0x182a0…182c0        20 20 73 5f 31 5f 31 3b 20 2e 2e 2e 3b 20 73 5f 31 5f 6e 3b 0d 0a 20 20 49 46 20 62 6f 6f 6c 5f   ┆  s_1_1; ...; s_1_n;    IF bool_┆
0x182c0…182e0        63 6f 6e 64 69 74 69 6f 6e 20 54 48 45 4e 20 45 58 49 54 4c 4f 4f 50 3b 0d 0a 20 20 73 5f 32 5f   ┆condition THEN EXITLOOP;    s_2_┆
0x182e0…18300        31 3b 20 2e 2e 2e 3b 20 73 5f 32 5f 6d 0d 0a 45 4e 44 4c 4f 4f 50 0d 0a 0d 0a 0d 0a b0 a1 35 2e   ┆1; ...; s_2_m  ENDLOOP        5.┆
0x18300…18320        37 2e 32 20 43 6f 6e 74 69 6e 75 65 6c 6f 6f 70 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 54 68   ┆7.2 Continueloop Statement    Th┆
0x18320…18340        65 20 63 6f 6e 74 69 6e 75 65 6c 6f 6f 70 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69   ┆e continueloop statement specifi┆
0x18340…18360        65 73 20 74 68 61 74 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 72 74 20 0a 6f 66 20 61   ┆es that the remaining part  of a┆
0x18360…18380        6e 20 69 74 65 72 61 74 69 6f 6e 6f 66 20 61 20 6c 6f 6f 70 20 69 73 20 74 6f 20 62 65 20 73 6b   ┆n iterationof a loop is to be sk┆
0x18380…183a0        69 70 70 65 64 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 e0 0a 54 68 65 20 73 74 61 74 65 6d 65 6e   ┆ipped.              The statemen┆
0x183a0…183c0        74 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65 20 69 6e 6e 65 72 6d 6f 73 74 20 65 6e 63 6c 6f   ┆t applies to the innermost enclo┆
0x183c0…183e0        73 69 6e 67 20 72 65 70 65 74 69 74 69 76 65 20 0a 73 74 61 74 65 6d 65 6e 74 20 77 68 69 63 68   ┆sing repetitive  statement which┆
0x183e0…18400        20 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20 65 78 69 73 74 2e 20 44 65 70 65 6e 64 69 6e 67   ┆ must therefore exist. Depending┆
0x18400…18420 (194,) 20 6f 6e 20 74 68 65 20 6b 69 6e 64 20 0a 6f 66 20 72 65 70 65 74 69 74 69 6f 6e 20 73 74 61 74   ┆ on the kind  of repetition stat┆
0x18420…18440        65 6d 65 6e 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 35 2e 35 29 20 74 68 65 20 73 70 65 63   ┆ement (cf. section 5.5) the spec┆
0x18440…18460        69 66 69 63 20 0a 65 66 66 65 63 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 69 6e 75 65 6c 6f 6f 70   ┆ific  effect of the continueloop┆
0x18460…18480        20 73 74 61 74 65 6d 65 6e 74 20 69 73 3a 0d 0a 0d 0a a1 66 6f 72 20 73 74 61 74 65 6d 65 6e 74   ┆ statement is:     for statement┆
0x18480…184a0        3a 0d 0a 53 74 65 70 20 34 20 74 65 72 6d 69 6e 61 74 65 73 2c 20 61 6e 64 20 65 78 65 63 75 74   ┆:  Step 4 terminates, and execut┆
0x184a0…184c0        69 6f 6e 20 63 6f 6e 74 69 6e 75 65 73 20 61 74 20 73 74 65 70 20 35 2e 0d 0a 0d 0a a1 6c 6f 6f   ┆ion continues at step 5.     loo┆
0x184c0…184e0        70 20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 45 78 65 63 75 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65   ┆p statement:  Execution continue┆
0x184e0…18500        73 20 77 69 74 68 20 74 68 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72   ┆s with the first statement after┆
0x18500…18520        20 4c 4f 4f 50 2e 0d 0a 0d 0a a1 77 68 69 6c 65 20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 54 68 65   ┆ LOOP.     while statement:  The┆
0x18520…18540        20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 6c 6c   ┆ remainder of the statement foll┆
0x18540…18560        6f 77 69 6e 67 20 44 4f 20 69 73 20 73 6b 69 70 70 65 64 2e 20 0a 45 78 65 63 75 74 69 6f 6e 20   ┆owing DO is skipped.  Execution ┆
0x18560…18580        63 6f 6e 74 69 6e 75 65 73 20 77 69 74 68 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66   ┆continues with the evaluation of┆
0x18580…185a0        20 74 68 65 20 6c 6f 6f 70 20 0a 63 6f 6e 64 69 74 69 6f 6e 2e 0d 0a 0d 0a a1 72 65 70 65 61 74   ┆ the loop  condition.     repeat┆
0x185a0…185c0        20 73 74 61 74 65 6d 65 6e 74 3a 0d 0a 54 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68   ┆ statement:  The remainder of th┆
0x185c0…185e0        65 20 73 74 61 74 65 6d 65 6e 74 20 73 65 71 75 65 6e 63 65 20 75 70 20 74 6f 20 55 4e 54 49 4c   ┆e statement sequence up to UNTIL┆
0x185e0…18600        20 69 73 20 0a 73 6b 69 70 70 65 64 2e 20 45 78 65 63 75 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65   ┆ is  skipped. Execution continue┆
0x18600…18620 (195,) 73 20 77 69 74 68 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 6f 6f   ┆s with the evaluation of the loo┆
0x18620…18640        70 20 0a 63 6f 6e 64 69 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 37 2e 33 20 45 78 69 74 20   ┆p  condition.        5.7.3 Exit ┆
0x18640…18660        53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 41 6e 20 65 78 69 74 20 73 74 61 74 65 6d 65 6e 74 20 68   ┆Statement    An exit statement h┆
0x18660…18680        61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 61 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 45   ┆as the effect of a jump to the E┆
0x18680…186a0        4e 44 20 6f 66 20 74 68 65 20 0a 63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d 65 6e 74 20 6f 66   ┆ND of the  compound statement of┆
0x186a0…186c0        20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 45   ┆ the enclosing block.          E┆
0x186c0…186e0        78 65 63 75 74 69 6f 6e 6f 66 20 61 6e 20 65 78 69 74 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75   ┆xecutionof an exit statement cau┆
0x186e0…18700        73 65 73 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 65 78 65 63 75 74 69 6f   ┆ses termination of the  executio┆
0x18700…18720        6e 20 6f 66 20 74 68 65 20 61 63 74 69 6f 6e 20 70 61 72 74 20 6f 66 20 74 68 65 20 6e 65 61 72   ┆n of the action part of the near┆
0x18720…18740        65 73 74 20 65 6e 63 6c 6f 73 69 6e 67 20 0a 72 6f 75 74 69 6e 65 6f 72 20 70 72 6f 67 72 61 6d   ┆est enclosing  routineor program┆
0x18740…18760        20 62 6c 6f 63 6b 20 61 73 20 69 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d   ┆ block as if the compound statem┆
0x18760…1877c        65 6e 74 20 68 61 64 20 0a 62 65 65 6e 20 65 78 68 61 75 73 74 65 64 2e 0d 0a 0d 0a               ┆ent had  been exhausted.    ┆
0x1877c…1877f        FormFeed {
0x1877c…1877f          0c 83 a4                                                                                          ┆   ┆
0x1877c…1877f        }
0x1877f…18780        0a                                                                                                ┆ ┆
0x18780…187a0        a1 45 78 61 6d 70 6c 65 3a 0d 0a 42 45 47 49 4e 20 28 2a 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d   ┆ Example:  BEGIN (* main program┆
0x187a0…187c0        20 2a 29 0d 0a 20 20 2e 2e 2e 0d 0a 20 20 49 46 20 65 72 72 6f 72 73 2d 64 65 74 65 63 74 65 64   ┆ *)    ...    IF errors-detected┆
0x187c0…187e0        20 54 48 45 4e 20 28 2a 20 74 65 72 6d 69 6e 61 74 65 20 74 68 65 20 70 72 6f 63 65 73 73 20 2a   ┆ THEN (* terminate the process *┆
0x187e0…18800        29 0d 0a 20 20 20 20 45 58 49 54 3b 0d 0a 20 20 2e 2e 2e 0d 0a 45 4e 44 0d 0a 0d 0a 0d 0a b0 a1   ┆)      EXIT;    ...  END        ┆
0x18800…18820 (196,) 35 2e 37 2e 34 20 47 6f 74 6f 20 61 6e 64 20 4c 61 62 65 6c 6c 65 64 20 53 74 61 74 65 6d 65 6e   ┆5.7.4 Goto and Labelled Statemen┆
0x18820…18840        74 0d 0a 0d 0a 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20 67 6f 74 6f 20 73 74 61   ┆t    The execution of a goto sta┆
0x18840…18860        74 65 6d 65 6e 74 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 65 78 70 6c 69 63 69 74 20 0a 74   ┆tement results in an explicit  t┆
0x18860…18880        72 61 6e 73 66 65 72 20 6f 66 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 61 6e 6f 74 68 65 72 20 73 74   ┆ransfer of control to another st┆
0x18880…188a0        61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 62 79 20 61 20 0a 6c 61 62 65 6c 2e 0d 0a   ┆atement specified by a  label.  ┆
0x188a0…188c0        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 41 20 6c 61 62 65 6c 6c 65 64 20 73 74 61 74 65 6d 65   ┆              A labelled stateme┆
0x188c0…188e0        6e 74 20 69 6e 74 72 6f 64 75 63 65 73 20 74 68 65 20 6c 61 62 65 6c 20 6e 61 6d 65 20 61 73 20   ┆nt introduces the label name as ┆
0x188e0…18900        64 65 6e 6f 74 69 6e 67 20 61 20 0a 6c 61 62 65 6c 20 6f 66 20 74 68 65 20 27 73 74 61 74 65 6d   ┆denoting a  label of the 'statem┆
0x18900…18920        65 6e 74 27 20 66 6f 6c 6c 6f 77 69 6e 67 3a 2e 0d 0a 0d 0a 41 20 6c 61 62 65 6c 6c 65 64 20 73   ┆ent' following:.    A labelled s┆
0x18920…18940        74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 65 63 75 74 65 64 20 62 79 20 65 78 65 63 75 74 69 6e   ┆tatement is executed by executin┆
0x18940…18960        67 20 74 68 65 20 0a 27 73 74 61 74 65 6d 65 6e 74 27 2e 0d 0a 0d 0a 45 78 65 63 75 74 69 6f 6e   ┆g the  'statement'.    Execution┆
0x18960…18980        20 6f 66 20 61 20 67 6f 74 6f 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20 74 68 65 20   ┆ of a goto statement causes the ┆
0x18980…189a0        6e 6f 72 6d 61 6c 20 6f 72 64 65 72 20 6f 66 20 0a 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   ┆normal order of  execution of th┆
0x189a0…189c0        65 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   ┆e statements within a compound s┆
0x189c0…189e0        74 61 74 65 6d 65 6e 74 20 74 6f 20 0a 62 65 20 62 72 6f 6b 65 6e 2e 20 45 78 65 63 75 74 69 6f   ┆tatement to  be broken. Executio┆
0x189e0…18a00        6e 69 73 20 72 65 73 75 6d 65 64 20 61 74 20 74 68 65 20 6c 61 62 65 6c 6c 65 64 20 73 74 61 74   ┆nis resumed at the labelled stat┆
0x18a00…18a20 (197,) 65 6d 65 6e 74 20 0a 77 68 6f 73 65 20 27 6c 61 62 65 6c 5f 6e 61 6d 65 27 20 69 73 20 69 64 65   ┆ement  whose 'label_name' is ide┆
0x18a20…18a40        6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 6f 6e 65 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 74   ┆ntical to the one occurring in t┆
0x18a40…18a60        68 65 20 0a 67 6f 74 6f 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6c 61 62 65 6c 20 6d 75   ┆he  goto statement. The label mu┆
0x18a60…18a80        73 74 20 62 65 20 76 69 73 69 62 6c 65 20 61 74 20 74 68 65 20 70 6f 69 6e 74 20 77 68 65 72 65   ┆st be visible at the point where┆
0x18a80…18aa0        20 0a 74 68 65 20 67 6f 74 6f 20 73 74 61 74 65 6d 65 6e 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a   ┆  the goto statement occurs.    ┆
0x18aa0…18ac0        41 20 67 6f 74 6f 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   ┆A goto statement cannot be used ┆
0x18ac0…18ae0        74 6f 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 66 72 6f 6d 20 74 68 65 20 0a 6f 75   ┆to transfer control from the  ou┆
0x18ae0…18b00        74 73 69 64 65 20 69 6e 74 6f 20 6f 72 20 66 72 6f 6d 20 74 68 65 20 69 6e 73 69 64 65 20 6f 75   ┆tside into or from the inside ou┆
0x18b00…18b20        74 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f   ┆t of the statement  following DO┆
0x18b20…18b40        20 6f 66 20 61 20 66 6f 72 2c 20 77 69 74 68 2c 20 6c 6f 63 6b 2c 20 6f 72 20 72 65 67 69 6f 6e   ┆ of a for, with, lock, or region┆
0x18b40…18b60        20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 47 6f 74 6f 20 69 6e 74 6f   ┆ statement.     Note:  Goto into┆
0x18b60…18b80        20 6f 72 20 6f 75 74 20 6f 66 20 61 20 62 6c 6f 63 6b 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65   ┆ or out of a block is impossible┆
0x18b80…18ba0        2e 0d 0a 0d 0a 0d 0a 8c 83 f8 0a b0 a1 35 2e 38 20 57 69 74 68 20 53 74 61 74 65 6d 65 6e 74 0d   ┆.            5.8 With Statement ┆
0x18ba0…18bc0        0a 0d 0a 41 20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 62 65 20 75 73 65 64 20   ┆   A with statement may be used ┆
0x18bc0…18be0        66 6f 72 20 74 68 72 65 65 20 70 75 72 70 6f 73 65 73 3a 0d 0a 0d 0a 2d 20 73 68 6f 72 74 68 61   ┆for three purposes:    - shortha┆
0x18be0…18c00        6e 64 20 6e 6f 74 61 74 69 6f 6e 20 66 6f 72 20 66 69 65 6c 64 20 61 63 63 65 73 73 20 69 6e 20   ┆nd notation for field access in ┆
0x18c00…18c20 (198,) 61 20 72 65 63 6f 72 64 20 6f 62 6a 65 63 74 2c 0d 0a 2d 20 6f 62 6a 65 63 74 20 72 65 6e 61 6d   ┆a record object,  - object renam┆
0x18c20…18c40        69 6e 67 2c 0d 0a 2d 20 6f 62 6a 65 63 74 20 72 65 74 79 70 69 6e 67 2e 0d 0a 0d 0a 54 68 65 20   ┆ing,  - object retyping.    The ┆
0x18c40…18c60        6c 61 74 74 65 72 20 69 73 20 74 68 65 20 66 61 63 69 6c 69 74 79 20 61 6c 6c 6f 77 69 6e 67 20   ┆latter is the facility allowing ┆
0x18c60…18c80        61 20 70 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 0a 74 79 70 65 20 74 6f 20 62 65   ┆a programmer-defined  type to be┆
0x18c80…18ca0        20 73 75 70 65 72 69 6d 70 6f 73 65 64 20 6f 6e 20 61 20 62 75 66 66 65 72 20 77 68 65 6e 20 61   ┆ superimposed on a buffer when a┆
0x18ca0…18cc0        70 70 6c 69 65 64 20 69 6e 20 61 20 6c 6f 63 6b 20 0a 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a   ┆pplied in a lock  statement.    ┆
0x18cc0…18ce0        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 64 65 6e 6f 74 65 64 20 6f 62   ┆                  The denoted ob┆
0x18ce0…18d00        6a 65 63 74 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 77 69 74 68 2d 6f 62 6a 65 63 74 e1   ┆ject is called the  with-object ┆
0x18d00…18d20        2e 20 49 74 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 0a 61 6e 20 69 72 72 65 67 75 6c 61 72 20 6f   ┆. It must not be  an irregular o┆
0x18d20…18d40        62 6a 65 63 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 39 29 2e 20 54 68 65 20 74 79 70   ┆bject (cf. section 3.9). The typ┆
0x18d40…18d60        65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 0a 74 68 65 20 27 63 6f 6d 6d 6f 6e 20 74 79 70 65   ┆e specified by  the 'common type┆
0x18d60…18d80        20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 27 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 69 73 20   ┆ specification', if present, is ┆
0x18d80…18da0        63 61 6c 6c 65 64 20 74 68 65 20 0a a1 6c 6f 63 61 6c 20 74 79 70 65 e1 2e 20 54 68 65 20 74 79   ┆called the   local type . The ty┆
0x18da0…18dc0        70 65 20 6f 66 20 74 68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 20 6d 75 73 74 20 6e 6f 74 20 62   ┆pe of the with-object must not b┆
0x18dc0…18de0        65 20 0a 70 72 6f 74 65 63 74 65 64 2c 20 6e 6f 72 20 6d 61 79 20 74 68 65 20 6c 6f 63 61 6c 20   ┆e  protected, nor may the local ┆
0x18de0…18e00        74 79 70 65 2e 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 6f 63 61 6c 20 0a 74 79 70   ┆type. The size of the local  typ┆
0x18e00…18e20 (199,) 65 20 6d 75 73 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20   ┆e must be less than or equal to ┆
0x18e20…18e40        74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 77 69 74 68 2d 0a 6f 62 6a 65 63 74 2e 0d 0a 0d   ┆the size of the with- object.   ┆
0x18e40…18e60        0a 49 66 20 74 68 65 20 41 53 2d 70 61 72 74 20 6f 66 20 61 20 77 69 74 68 20 73 74 61 74 65 6d   ┆ If the AS-part of a with statem┆
0x18e60…18e80        65 6e 74 20 69 73 20 65 6d 70 74 79 20 73 65 76 65 72 61 6c 20 77 69 74 68 2d 0a 6f 62 6a 65 63   ┆ent is empty several with- objec┆
0x18e80…18ea0        74 73 20 6d 61 79 20 62 65 20 6c 69 73 74 65 64 2e 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61   ┆ts may be listed. More specifica┆
0x18ea0…18ec0        6c 6c 79 0d 0a 20 20 20 20 57 49 54 48 20 64 82 31 81 2c 20 64 82 32 81 2c 20 2e 2e 2e 2c 20 64   ┆lly      WITH d 1 , d 2 , ..., d┆
0x18ec0…18ee0        82 6e 81 20 44 4f 20 73 74 0d 0a 69 73 20 61 63 63 65 70 74 61 62 6c 65 20 61 73 20 73 68 6f 72   ┆ n  DO st  is acceptable as shor┆
0x18ee0…18f00        74 68 61 6e 64 20 66 6f 72 0d 0a 20 20 20 20 57 49 54 48 20 64 82 31 81 20 44 4f 20 57 49 54 48   ┆thand for      WITH d 1  DO WITH┆
0x18f00…18f20        20 64 82 32 81 20 44 4f 20 2e 2e 2e 20 57 49 54 48 20 64 82 6e 81 20 44 4f 20 73 74 0d 0a 77 68   ┆ d 2  DO ... WITH d n  DO st  wh┆
0x18f20…18f40        65 72 65 20 74 68 65 20 64 82 31 81 20 61 72 65 20 6f 62 6a 65 63 74 20 64 65 6e 6f 74 61 74 69   ┆ere the d 1  are object denotati┆
0x18f40…18f48        6f 6e 73 2e 0d 0a 0d 0a                                                                           ┆ons.    ┆
0x18f48…18f4b        FormFeed {
0x18f48…18f4b          0c 83 b0                                                                                          ┆   ┆
0x18f48…18f4b        }
0x18f4b…18f60        0a 41 20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20                                    ┆ A with statement is ┆
0x18f60…18f80        65 78 65 63 75 74 65 64 20 69 6e 20 74 68 72 65 65 20 73 74 65 70 73 3a 0d 0a 61 2e 20 84 74 68   ┆executed in three steps:  a.  th┆
0x18f80…18fa0        65 20 64 65 6e 6f 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 20   ┆e denotation of the with-object ┆
0x18fa0…18fc0        69 73 20 65 76 61 6c 75 61 74 65 64 20 61 73 20 61 6e 20 0a 19 83 80 80 6f 62 6a 65 63 74 20 65   ┆is evaluated as an      object e┆
0x18fc0…18fe0        78 70 72 65 73 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74   ┆xpression, i.e. the address of t┆
0x18fe0…19000        68 65 20 6f 62 6a 65 63 74 20 69 73 20 0a 19 83 80 80 65 73 74 61 62 6c 69 73 68 65 64 3b 0d 0a   ┆he object is      established;  ┆
0x19000…19020 (200,) 32 2e 20 74 68 65 20 6c 6f 63 61 6c 20 74 79 70 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 69   ┆2. the local type, if present, i┆
0x19020…19040        73 20 65 73 74 61 62 6c 69 73 68 65 64 3b 0d 0a 33 2e 20 84 74 68 65 20 73 74 61 74 65 6d 65 6e   ┆s established;  3.  the statemen┆
0x19040…19060        74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 69 73 20 65 78 65 63 75 74 65 64 20 6f 62 73 65 72   ┆t following DO is executed obser┆
0x19060…19080        76 69 6e 67 20 74 68 65 20 0a 19 83 80 80 72 75 6c 65 73 20 64 65 73 63 72 69 62 65 64 20 62 65   ┆ving the      rules described be┆
0x19080…190a0        6c 6f 77 2e 0d 0a 0d 0a a1 66 69 65 6c 64 20 61 63 63 65 73 73 3a 0d 0a 49 66 20 74 68 65 20 74   ┆low.     field access:  If the t┆
0x190a0…190c0        79 70 65 20 6f 66 20 74 68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 20 69 73 20 61 20 72 65 63 6f   ┆ype of the with-object is a reco┆
0x190c0…190e0        72 64 20 74 79 65 20 61 6e 64 20 66 6e 61 6d 65 20 69 73 20 0a 61 20 66 69 65 6c 64 20 6e 61 6d   ┆rd tye and fname is  a field nam┆
0x190e0…19100        65 20 6f 66 20 74 68 69 73 20 72 65 63 6f 72 64 20 74 79 70 65 20 74 68 65 6e 0d 0a 20 20 20 20   ┆e of this record type then      ┆
0x19100…19120        66 6e 61 6d 65 0d 0a 6d 61 79 20 62 65 20 75 73 65 64 20 61 73 20 73 68 6f 72 74 68 61 6e 64 20   ┆fname  may be used as shorthand ┆
0x19120…19140        66 6f 72 0d 0a 20 20 20 20 6f 62 6a 2e 66 6e 61 6d 65 0d 0a 77 68 65 72 65 20 6f 62 6a 20 69 73   ┆for      obj.fname  where obj is┆
0x19140…19160        20 61 6e 20 6f 62 6a 65 63 74 20 64 65 6e 6f 74 61 74 69 6f 6e 20 64 65 6e 6f 74 69 6e 67 20 74   ┆ an object denotation denoting t┆
0x19160…19180        68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 2e 0d 0a 0d 0a a1 72 65 6e 61 6d 69 6e 67 3a 0d 0a 61   ┆he with-object.     renaming:  a┆
0x19180…191a0        20 6e 6f 6e 2d 65 6d 70 74 79 20 41 53 2d 70 61 72 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74   ┆ non-empty AS-part is equivalent┆
0x191a0…191c0        20 74 6f 20 61 20 6c 6f 63 61 6c 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 0a 61 6e 20 6f   ┆ to a local declaration of  an o┆
0x191c0…191e0        62 6a 65 63 74 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 6c 6f 63 61 6c 20 6f 62 6a 65 63 74 e1   ┆bject, called the  local object ┆
0x191e0…19200        2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 64 64 72 65 73 73 20 61 73 20 0a 74 68 65 20   ┆, with the same address as  the ┆
0x19200…19220 (201,) 77 69 74 68 2d 6f 62 6a 65 63 74 2e 20 54 68 65 20 27 6c 6f 63 61 6c 5f 6e 61 6d 65 27 20 64 65   ┆with-object. The 'local_name' de┆
0x19220…19240        6e 6f 74 65 73 20 74 68 65 20 6c 6f 63 61 6c 20 6f 62 6a 65 63 74 2e 0d 0a 0d 0a a1 72 65 74 79   ┆notes the local object.     rety┆
0x19240…19260        70 69 6e 67 3a 0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 6c 6f 63 61 6c 20 6f 62 6a   ┆ping:  The type of the local obj┆
0x19260…19280        65 63 74 20 69 73 20 74 68 65 20 6c 6f 63 61 6c 20 74 79 70 65 2c 20 69 66 20 0a 73 70 65 63 69   ┆ect is the local type, if  speci┆
0x19280…192a0        66 69 65 64 3b 20 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 74 68 65 20 74 79 70 65 20 6f   ┆fied; otherwise it is the type o┆
0x192a0…192c0        66 20 74 68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 2e 0d 0a 0d 0a a1 4e 6f 74 65 73 3a 0d 0a 74   ┆f the with-object.     Notes:  t┆
0x192c0…192e0        68 65 20 77 69 74 68 2d 6f 62 6a 65 63 74 20 69 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74 65 64   ┆he with-object is not restricted┆
0x192e0…19300        20 74 6f 20 62 65 20 6f 66 20 61 20 72 65 63 6f 72 64 20 74 79 70 65 2c 20 0a 65 76 65 6e 20 28   ┆ to be of a record type,  even (┆
0x19300…19320        73 74 72 75 63 74 75 72 65 64 29 20 63 6f 6e 73 74 61 6e 74 73 20 61 72 65 20 61 6c 6c 6f 77 65   ┆structured) constants are allowe┆
0x19320…19340        64 2e 0d 0a 0d 0a 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20   ┆d.    The address of the object ┆
0x19340…19360        69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 20 62 65 66 6f 72 65 20 74 68   ┆is evaluated only once before th┆
0x19360…19380        65 20 0a 73 74 61 74 65 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 69 73 20 65 78 65   ┆e  statement following DO is exe┆
0x19380…193a0        63 75 74 65 64 2e 0d 0a 0d 0a 54 68 65 20 72 65 74 79 70 69 6e 67 20 6f 66 20 61 6e 20 6f 62 6a   ┆cuted.    The retyping of an obj┆
0x193a0…193c0        65 63 74 20 69 73 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 66 61 63 69 6c 69 74 79 20 6f 66 20 74   ┆ect is a low-level facility of t┆
0x193c0…193e0        68 65 20 0a 6c 61 6e 67 75 61 67 65 2c 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69   ┆he  language, intended for use i┆
0x193e0…19400        6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 20 62 75 66 66 65 72 73 20 77 68 6f 73 65 20   ┆n connection with buffers whose ┆
0x19400…19420 (202,) 0a 65 78 61 63 74 20 74 79 70 65 20 69 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 62 65 66 6f 72 65 68   ┆ exact type is not known beforeh┆
0x19420…19440        61 6e 64 20 28 73 6f 6d 65 20 6f 66 20 74 68 65 20 74 79 70 65 20 0a 69 6e 66 6f 72 6d 61 74 69   ┆and (some of the type  informati┆
0x19440…19460        6f 6e 20 6d 61 79 20 62 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 63 6f 6e   ┆on may be part of the buffer con┆
0x19460…19480        74 65 6e 74 73 29 2e 20 42 75 74 20 74 68 65 20 0a 66 61 63 69 6c 69 74 79 20 6d 61 79 20 62 65   ┆tents). But the  facility may be┆
0x19480…194a0        20 75 73 65 64 20 66 72 65 65 6c 79 20 74 6f 20 61 63 68 69 65 76 65 20 61 20 72 65 6c 61 78 61   ┆ used freely to achieve a relaxa┆
0x194a0…194c0        74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 6f 74 68 65 72 77 69 73 65 20 72 69 67 6f 72 6f 75 73 20   ┆tion of the  otherwise rigorous ┆
0x194c0…194e0        6f 62 6a 65 63 74 20 74 79 70 69 6e 67 2c 20 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20 74   ┆object typing, which is one of t┆
0x194e0…19500        68 65 20 62 61 73 69 63 20 0a 66 65 61 74 75 72 65 73 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61   ┆he basic  features of the langua┆
0x19500…19520        67 65 2e 20 74 68 69 73 20 6d 65 74 68 6f 64 20 64 65 6d 61 6e 64 73 20 61 6e 20 65 78 70 6c 69   ┆ge. this method demands an expli┆
0x19520…19540        63 69 74 20 0a 8c 83 d4 0a 61 6e 64 20 63 6c 65 61 72 20 72 65 74 79 70 69 6e 67 20 73 74 61 74   ┆cit      and clear retyping stat┆
0x19540…19560        65 64 20 77 68 65 72 65 20 69 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 70 72 6f 67 72   ┆ed where it is used in the progr┆
0x19560…19580        61 6d 2c 20 0a 69 6e 20 63 6f 6e 74 72 61 73 74 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64   ┆am,  in contrast to the standard┆
0x19580…195a0        20 50 61 73 63 61 6c 20 73 6f 6c 75 74 69 6f 6e 20 75 73 69 6e 67 20 76 61 72 69 61 6e 74 20 0a   ┆ Pascal solution using variant  ┆
0x195a0…195c0        72 65 63 6f 72 64 73 2e 0d 0a 0d 0a 54 68 65 20 65 66 66 65 63 74 20 6f 66 20 61 73 73 69 67 6e   ┆records.    The effect of assign┆
0x195c0…195e0        6d 65 6e 74 20 6f 66 20 65 78 63 68 61 6e 67 65 20 62 65 74 77 65 65 6e 20 70 61 72 74 69 61 6c   ┆ment of exchange between partial┆
0x195e0…19600        6c 79 20 0a 6f 76 65 72 6c 61 70 70 69 6e 67 20 6f 62 6a 65 63 74 73 20 69 73 20 75 6e 64 65 66   ┆ly  overlapping objects is undef┆
0x19600…19620 (203,) 69 6e 65 64 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 4c 65 74 20 72 65 63 5f 76 61 72 20   ┆ined.     Example:  Let rec_var ┆
0x19620…19640        62 65 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 61 20 66 69 65 6c 64 20 6e 61 6d 65 64 20 72   ┆be a record with a field named r┆
0x19640…19660        65 63 5f 66 69 65 6c 64 2c 20 61 6e 64 20 0a 6c 65 74 20 6c 6f 63 61 6c 5f 74 79 70 65 20 63 6f   ┆ec_field, and  let local_type co┆
0x19660…19680        6e 74 61 69 6e 20 61 20 66 69 65 6c 64 20 6e 61 6d 65 64 20 6c 6f 63 5f 72 65 63 5f 66 69 65 6c   ┆ntain a field named loc_rec_fiel┆
0x19680…196a0        64 2c 20 74 68 65 6e 20 74 68 65 20 0a 66 69 65 6c 64 73 20 6d 61 79 20 62 65 20 61 63 63 65 73   ┆d, then the  fields may be acces┆
0x196a0…196c0        73 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 77 61 79 73 20 69 6e 20 74 68 65   ┆sed in the following ways in the┆
0x196c0…196e0        20 0a 73 74 61 74 65 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 3a 0d 0a 0d 0a 31 29 20   ┆  statement following DO:    1) ┆
0x196e0…19700        84 57 49 54 48 20 72 65 63 5f 76 61 72 20 44 4f 20 28 2a 20 74 68 65 20 77 65 6c 6c 2d 6b 6e 6f   ┆ WITH rec_var DO (* the well-kno┆
0x19700…19720        77 6e 20 73 74 61 6e 64 61 72 64 20 50 61 73 63 61 6c 20 66 6f 72 6d 20 2a 29 0d 0a 20 20 20 72   ┆wn standard Pascal form *)     r┆
0x19720…19740        65 63 5f 76 61 72 2e 72 65 63 5f 66 69 65 6c 64 20 6f 72 0d 0a 20 20 20 72 65 63 5f 66 69 65 6c   ┆ec_var.rec_field or     rec_fiel┆
0x19740…19760        64 0d 0a 0d 0a 32 29 20 57 49 54 48 20 72 65 63 5f 76 61 72 20 41 53 20 6c 6f 63 5f 76 61 72 20   ┆d    2) WITH rec_var AS loc_var ┆
0x19760…19780        44 4f 20 28 2a 20 73 69 6d 70 6c 65 20 72 65 6e 61 6d 69 6e 67 20 2a 29 0d 0a 20 20 20 72 65 63   ┆DO (* simple renaming *)     rec┆
0x19780…197a0        5f 76 61 72 2e 72 65 63 5f 66 69 65 6c 64 20 6f 72 0d 0a 20 20 20 72 65 63 5f 66 69 65 6c 64 20   ┆_var.rec_field or     rec_field ┆
0x197a0…197c0        20 20 20 20 20 20 20 20 6f 72 0d 0a 20 20 20 6c 6f 63 5f 76 61 72 2e 72 65 63 5f 66 69 65 6c 64   ┆        or     loc_var.rec_field┆
0x197c0…197e0        0d 0a 0d 0a 33 29 20 57 49 54 48 20 72 65 63 5f 76 61 72 20 41 53 20 6c 6f 63 5f 76 61 72 3a 20   ┆    3) WITH rec_var AS loc_var: ┆
0x197e0…19800        6c 6f 63 61 6c 5f 74 79 70 65 20 44 4f 0d 0a 20 20 20 28 2a 20 72 65 6e 61 6d 69 6e 67 20 61 6e   ┆local_type DO     (* renaming an┆
0x19800…19820 (204,) 64 20 72 65 74 79 70 69 6e 67 20 2a 29 0d 0a 20 20 20 72 65 63 5f 76 61 72 2e 72 65 63 5f 66 69   ┆d retyping *)     rec_var.rec_fi┆
0x19820…19840        65 6c 64 20 6f 72 0d 0a 20 20 20 72 65 63 5f 66 69 65 6c 64 20 20 20 20 20 20 20 20 20 6f 72 0d   ┆eld or     rec_field         or ┆
0x19840…19860        0a 20 20 20 6c 6f 63 5f 76 61 72 2e 6c 6f 63 5f 72 65 63 5f 66 69 65 6c 64 0d 0a 0d 0a a1 45 78   ┆    loc_var.loc_rec_field     Ex┆
0x19860…19880        61 6d 70 65 6c 3a 0d 0a 54 59 50 45 0d 0a 20 20 63 61 74 5f 72 65 63 6f 72 64 3d 20 52 45 43 4f   ┆ampel:  TYPE    cat_record= RECO┆
0x19880…198a0        52 44 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69 74 6c 65 3a 20 20 2e 2e 2e   ┆RD                   title:  ...┆
0x198a0…198c0        2e 0d 0a 09 09 20 20 61 75 74 68 6f 72 3a 20 2e 2e 2e 2e 0d 0a 09 09 45 4e 44 3b 0d 0a 56 41 52   ┆.      author: ....    END;  VAR┆
0x198c0…198e0        0d 0a 20 20 62 5f 63 61 74 61 6c 6f 67 3a 20 41 52 52 41 59 28 31 2e 2e 63 61 74 5f 73 69 7a 65   ┆    b_catalog: ARRAY(1..cat_size┆
0x198e0…19900        29 20 4f 46 20 63 61 74 5f 72 65 63 6f 72 64 3b 0d 0a 20 20 73 65 61 72 63 68 5f 6f 62 6a 65 63   ┆) OF cat_record;    search_objec┆
0x19900…19920        74 3a 20 63 61 74 5f 72 65 63 6f 72 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 0d 0a 8c   ┆t: cat_record;            ...   ┆
0x19920…19940        83 c8 0a 20 20 57 49 54 48 20 73 65 61 72 63 68 5f 6f 62 6a 65 63 74 20 41 53 20 73 5f 6f 20 44   ┆     WITH search_object AS s_o D┆
0x19940…19960        4f 0d 0a 20 20 20 20 57 48 49 4c 45 20 4e 4f 54 20 66 6f 75 6e 64 20 44 4f 0d 0a 20 20 20 20 20   ┆O      WHILE NOT found DO       ┆
0x19960…19980        20 57 49 54 48 20 62 5f 63 61 74 61 6c 6f 67 28 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 29 20 44   ┆ WITH b_catalog(current_index) D┆
0x19980…199a0        4f 0d 0a 20 20 20 20 20 20 20 20 49 46 20 61 75 74 68 6f 72 28 2a 20 6f 66 20 62 5f 63 61 74 61   ┆O          IF author(* of b_cata┆
0x199a0…199c0        6c 6f 67 20 2a 29 20 3c 3e 20 73 5f 6f 2e 61 75 74 68 6f 72 20 74 68 65 6e 0d 0a 20 20 20 20 20   ┆log *) <> s_o.author then       ┆
0x199c0…199e0        20 20 20 20 20 63 75 72 72 65 6e 74 5f 69 6e 64 65 78 3a 3d 63 75 72 72 65 6e 74 5f 69 6e 64 65   ┆     current_index:=current_inde┆
0x199e0…19a00        78 2b 31 0d 0a 20 20 20 20 20 20 20 20 45 4c 53 45 0d 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e   ┆x+1          ELSE            ...┆
0x19a00…19a20 (205,) 0d 0a 0d 0a 0d 0a b0 a1 35 2e 39 20 4c 6f 63 6b 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 54 68   ┆        5.9 Lock Statement    Th┆
0x19a20…19a40        65 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 6c 61 6e 67 75 61 67 65   ┆e lock statement is the language┆
0x19a40…19a60        20 63 6f 6e 73 74 72 75 63 74 20 77 68 69 63 68 20 70 72 6f 76 69 64 65 73 20 0a 61 63 63 65 73   ┆ construct which provides  acces┆
0x19a60…19a80        73 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 20 62 75   ┆s to the actual contents of a bu┆
0x19a80…19aa0        66 66 65 72 2c 20 69 2e 65 2e 20 74 6f 20 74 68 65 20 74 6f 70 20 0a 6e 6f 6e 2d 65 6d 70 74 79   ┆ffer, i.e. to the top  non-empty┆
0x19aa0…19ac0        20 62 75 66 66 65 72 20 69 6e 20 61 20 62 75 66 66 65 72 20 73 74 61 63 6b 2e 0d 0a 0d 0a 0d 0a   ┆ buffer in a buffer stack.      ┆
0x19ac0…19ae0        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63 74 20 6d   ┆            The denoted object m┆
0x19ae0…19b00        75 73 74 20 62 65 20 61 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 79 70 65 20 72 65 66 65 72 65   ┆ust be a variable of type refere┆
0x19b00…19b20        6e 63 65 20 6f 72 20 0a 63 68 61 69 6e 2e 20 49 66 20 69 74 20 69 73 20 61 20 72 65 66 65 72 65   ┆nce or  chain. If it is a refere┆
0x19b20…19b40        6e 63 65 20 69 74 73 20 76 61 6c 75 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e 49 4c 2c 20 61   ┆nce its value must not be NIL, a┆
0x19b40…19b60        6e 64 20 0a 69 66 20 69 74 20 69 73 20 61 20 63 68 61 69 6e 20 69 74 20 6d 75 73 74 20 6e 6f 74   ┆nd  if it is a chain it must not┆
0x19b60…19b80        20 62 65 20 65 6d 70 74 79 2e 20 4f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 0a 6f 63   ┆ be empty. Otherwise a fault  oc┆
0x19b80…19ba0        63 75 72 73 2e 20 54 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 74   ┆curs. The buffer designated by t┆
0x19ba0…19bc0        68 65 20 72 65 66 65 72 65 6e 63 65 2c 20 6f 72 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 62 75   ┆he reference, or the  current bu┆
0x19bc0…19be0        66 66 65 72 20 6f 66 20 74 68 65 20 63 68 61 69 6e 2c 20 77 68 69 63 68 65 76 65 72 20 61 70 70   ┆ffer of the chain, whichever app┆
0x19be0…19c00        6c 69 65 73 2c 20 6d 61 79 20 62 65 20 0a 61 63 63 65 73 73 65 64 20 69 6e 20 74 68 65 20 73 74   ┆lies, may be  accessed in the st┆
0x19c00…19c20 (206,) 61 74 65 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 61 73 20 61 6e 20 69 6d 70 6c 69   ┆atement following DO as an impli┆
0x19c20…19c40        63 69 74 6c 79 20 0a 64 65 63 6c 61 72 65 64 20 76 61 72 69 61 62 6c 65 20 74 68 65 20 6e 61 6d   ┆citly  declared variable the nam┆
0x19c40…19c60        65 20 6f 66 20 77 68 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 0a   ┆e of which is specified by the  ┆
0x19c60…19c80        27 62 75 66 66 65 72 5f 6e 61 6d 65 27 2e 20 45 69 74 68 65 72 20 74 68 65 20 77 68 6f 6c 65 20   ┆'buffer_name'. Either the whole ┆
0x19c80…19ca0        62 75 66 66 65 72 20 6f 72 20 6f 6e 6c 79 20 69 74 73 20 64 61 74 61 20 69 73 20 0a 61 63 63 65   ┆buffer or only its data is  acce┆
0x19ca0…19cc0        73 73 69 62 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 27 6c 6f 63 6b 77 6f   ┆ssible, depending on the 'lockwo┆
0x19cc0…19ce0        72 64 27 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 27 6c 6f 63 6b 77 6f 72 64 27 20 69 73 20 4c 4f 43   ┆rd'.    If the 'lockword' is LOC┆
0x19ce0…19d00        4b 20 74 68 65 20 64 61 74 61 20 61 72 65 61 20 69 73 20 61 63 63 65 73 73 69 62 6c 65 20 61 73   ┆K the data area is accessible as┆
0x19d00…19d20        20 61 20 0a 76 61 72 69 61 62 6c 65 20 6f 66 20 61 20 74 79 70 65 20 62 65 6c 6f 6e 67 69 6e 67   ┆ a  variable of a type belonging┆
0x19d20…19d40        20 74 6f 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 61 6d 69 6c 79 0d 0a 20 20 20 20 64   ┆ to the predefined family      d┆
0x19d40…19d60        61 74 61 61 72 65 61 28 6f 66 66 73 65 74 2c 20 74 6f 70 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 3d   ┆ataarea(offset, top: 0..maxint)=┆
0x19d60…19d80        0d 0a 09 09 09 20 20 50 41 43 4b 45 44 20 41 52 45 41 28 6f 66 66 73 65 74 2e 2e 74 6f 70 2d 31   ┆       PACKED AREA(offset..top-1┆
0x19d80…19da0        29 20 4f 46 20 62 79 74 65 20 0a 77 68 65 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 76   ┆) OF byte  where the parameter v┆
0x19da0…19dc0        61 6c 75 65 73 20 61 72 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 20 0a 61   ┆alues are equal to the buffer  a┆
0x19dc0…19de0        74 74 72 69 62 75 74 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 73 2e 20 54   ┆ttributes with the same names. T┆
0x19de0…19e00        68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 0a 8c 83 c8 0a   ┆he address of the variable      ┆
0x19e00…19e20 (207,) 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73 20   ┆as well as the parameter values ┆
0x19e20…19e40        61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 0a 73 74 61 74 65 6d   ┆are evaluated before the  statem┆
0x19e40…19e60        65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 20 69 73 20 65 78 65 63 75 74 65 64 2e 0d 0a 0d   ┆ent following DO is executed.   ┆
0x19e60…19e80        0a 49 66 20 74 68 65 20 27 6c 6f 63 6b 77 6f 72 64 27 20 69 73 20 4c 4f 43 4b 42 55 46 20 74 68   ┆ If the 'lockword' is LOCKBUF th┆
0x19e80…19ea0        65 20 77 68 6f 6c 65 20 62 75 66 66 65 72 20 69 73 20 61 63 63 65 73 73 69 62 6c 65 20 0a 61 73   ┆e whole buffer is accessible  as┆
0x19ea0…19ec0        20 61 20 76 61 72 69 61 62 6c 65 20 6f 66 20 61 20 74 79 70 65 20 62 65 6c 6f 6e 67 69 6e 67 20   ┆ a variable of a type belonging ┆
0x19ec0…19ee0        74 6f 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 61 6d 69 6c 79 0d 0a 20 20 20 20 62 75   ┆to the predefined family      bu┆
0x19ee0…19f00        66 66 65 72 28 62 75 66 73 69 7a 65 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 3d 20 0d 0a 20 20 20 20   ┆ffer(bufsize: 1..maxint)=       ┆
0x19f00…19f20        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 41 43 4b 45 44 20 41 52 52 41 59 28 30 2e 2e   ┆                PACKED ARRAY(0..┆
0x19f20…19f40        62 75 66 73 69 7a 65 2d 31 29 20 4f 46 20 62 79 74 65 0d 0a 77 68 65 72 65 20 74 68 65 20 76 61   ┆bufsize-1) OF byte  where the va┆
0x19f40…19f60        6c 75 65 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 65 71 75 61 6c 73 20 74 68 65 20   ┆lue of the parameter equals the ┆
0x19f60…19f80        73 69 7a 65 20 6f 66 20 74 68 65 20 0a 62 75 66 66 65 72 2e 0d 0a 0d 0a 49 66 20 61 20 6c 6f 63   ┆size of the  buffer.    If a loc┆
0x19f80…19fa0        6b 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 62 75 66 66   ┆k statement is applied to a buff┆
0x19fa0…19fc0        65 72 20 73 74 61 63 6b 20 77 69 74 68 20 6e 6f 20 0a 6e 6f 6e 2d 65 6d 70 74 79 20 62 75 66 66   ┆er stack with no  non-empty buff┆
0x19fc0…19fe0        65 72 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77   ┆er a fault occurs.    The follow┆
0x19fe0…1a000        69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20 69 6d 70 6f 73 65 64 20 6f 6e 20   ┆ing restrictions are imposed on ┆
0x1a000…1a020 (208,) 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a 6c 6f 63 6b 65 64 20 76 61 72 69 61 62 6c 65 20   ┆the use of the  locked variable ┆
0x1a020…1a040        77 68 69 6c 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f   ┆while the statement following DO┆
0x1a040…1a060        20 69 73 20 62 65 69 6e 67 20 0a 65 78 65 63 75 74 65 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61   ┆ is being  executed, including a┆
0x1a060…1a080        6e 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 73 20 6d 61 64 65 3a 20 49 66 20 61 20 72 65 66 65   ┆ny routine calls made: If a refe┆
0x1a080…1a0a0        72 65 6e 63 65 2c 20 0a 69 74 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 70   ┆rence,  it must not be used as p┆
0x1a0a0…1a0c0        61 72 74 20 6f 66 20 61 6e 20 65 78 63 68 61 6e 67 65 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20   ┆art of an exchange statement or ┆
0x1a0c0…1a0e0        61 73 20 61 20 0a 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 69 67 6e 61 6c 2c 20 72 65 74 75 72   ┆as a  parameter to signal, retur┆
0x1a0e0…1a100        6e 2c 20 6f 72 20 70 75 74 62 75 66 20 28 63 66 2e 20 63 68 61 70 74 65 72 20 39 29 2c 20 6f 72   ┆n, or putbuf (cf. chapter 9), or┆
0x1a100…1a120        20 0a 62 65 20 64 65 6c 69 76 65 72 65 64 20 74 6f 20 74 68 65 20 49 4d 43 20 28 63 66 2e 20 63   ┆  be delivered to the IMC (cf. c┆
0x1a120…1a140        68 61 70 74 65 72 20 31 31 29 2e 20 57 68 65 74 68 65 72 20 61 20 63 68 61 69 6e 20 6f 72 20 0a   ┆hapter 11). Whether a chain or  ┆
0x1a140…1a160        61 20 72 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 75 73 65 64   ┆a reference, it must not be used┆
0x1a160…1a180        20 61 73 20 61 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 61 6e 79 20 6f 66 20 0a 74 68 65 20 62   ┆ as a parameter to any of  the b┆
0x1a180…1a1a0        75 66 66 65 72 20 73 74 61 63 6b 20 6f 72 20 63 68 61 69 6e 20 6d 61 6e 69 70 75 6c 61 74 69 6f   ┆uffer stack or chain manipulatio┆
0x1a1a0…1a1c0        6e 20 72 6f 75 74 69 6e 65 73 20 28 63 66 2e 20 63 68 61 70 74 65 72 20 0a 31 30 29 2e 20 48 6f   ┆n routines (cf. chapter  10). Ho┆
0x1a1c0…1a1e0        77 65 76 65 72 2c 20 69 74 20 69 73 20 6c 65 67 61 6c 20 74 6f 20 28 63 79 6e 61 6d 69 63 61 6c   ┆wever, it is legal to (cynamical┆
0x1a1e0…1a200        6c 79 29 20 61 70 70 6c 79 20 6d 75 6c 74 69 70 6c 65 20 0a 6c 6f 63 6b 73 20 74 6f 20 74 68 65   ┆ly) apply multiple  locks to the┆
0x1a200…1a220 (209,) 20 73 61 6d 65 20 72 65 66 65 72 65 6e 63 65 20 6f 72 20 63 68 61 69 6e 20 28 65 2e 67 2e 20 69   ┆ same reference or chain (e.g. i┆
0x1a220…1a240        6e 20 61 20 72 6f 75 74 69 6e 65 20 0a 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20   ┆n a routine  called from within ┆
0x1a240…1a260        61 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 29 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d   ┆a lock statement).     Example: ┆
0x1a260…1a280        0a 4c 4f 43 4b 20 72 65 66 20 54 4f 20 64 61 74 61 5f 70 61 72 74 20 44 4f 0d 0a 20 20 57 49 54   ┆ LOCK ref TO data_part DO    WIT┆
0x1a280…1a2a0        48 20 64 61 74 61 5f 70 61 72 74 20 41 53 20 64 61 74 61 20 3a 20 6d 79 5f 62 75 66 66 65 72 5f   ┆H data_part AS data : my_buffer_┆
0x1a2a0…1a2c0        74 79 70 65 20 44 4f 0d 0a 20 20 20 20 2e 2e 2e 0d 0a 0d 0a 0d 0a b0 a1 35 2e 31 30 20 52 65 67   ┆type DO      ...        5.10 Reg┆
0x1a2c0…1a2e0        69 6f 6e 20 53 74 61 74 65 6d 65 6e 74 0d 0a 0d 0a 54 68 65 20 72 65 67 69 6f 6e 20 73 74 61 74   ┆ion Statement    The region stat┆
0x1a2e0…1a300        65 6d 65 6e 74 20 70 72 6f 76 69 64 65 73 20 61 63 63 65 73 73 20 74 6f 20 73 68 61 72 65 64 20   ┆ement provides access to shared ┆
0x1a300…1a320        76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 0a 69 74 20 69 73 20 65 6e 73 75 72 65 64 20 74 68 61   ┆variables and  it is ensured tha┆
0x1a320…1a340        74 20 74 68 65 20 61 63 63 65 73 73 20 69 73 20 65 78 63 6c 75 73 69 76 65 2e 0d 0a 0d 0a 0d 0a   ┆t the access is exclusive.      ┆
0x1a340…1a360        0d 0a 0d 0a 8c 83 d4 0a 54 68 65 20 64 65 6e 6f 74 65 64 20 6f 62 6a 65 63 74 20 6d 75 73 74 20   ┆        The denoted object must ┆
0x1a360…1a380        62 65 20 61 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 2e 20 41 73 73 6f 63 69 61 74 65 64   ┆be a shared variable. Associated┆
0x1a380…1a3a0        20 0a 77 69 74 68 20 65 76 65 72 79 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 20 69 73 20   ┆  with every shared variable is ┆
0x1a3a0…1a3c0        61 6e 20 a1 61 63 63 65 73 73 20 63 6f 75 6e 74 e1 20 77 68 69 63 68 20 69 73 20 0a 69 6e 69 74   ┆an  access count  which is  init┆
0x1a3c0…1a3e0        69 61 6c 6c 79 20 7a 65 72 6f 2e 20 41 20 72 65 67 69 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20 69   ┆ially zero. A region statement i┆
0x1a3e0…1a400        73 20 65 78 65 63 75 74 65 64 20 69 6e 20 74 68 72 65 65 20 0a 73 74 65 70 73 2e 0d 0a 0d 0a 31   ┆s executed in three  steps.    1┆
0x1a400…1a420 (210,) 2e 20 84 55 6e 6c 65 73 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 65 78 65 63 75 74 69 6e 67 20   ┆.  Unless the process executing ┆
0x1a420…1a440        74 68 65 20 72 65 67 69 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 0a 19 83 80 80 61 6c 72   ┆the region statement is      alr┆
0x1a440…1a460        65 61 64 79 20 65 78 65 63 75 74 69 6e 67 20 28 64 79 6e 61 6d 69 63 61 6c 6c 79 20 69 6e 73 69   ┆eady executing (dynamically insi┆
0x1a460…1a480        64 65 29 20 61 20 72 65 67 69 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20 0a 19 83 80 80 61 63 63 65   ┆de) a region statement      acce┆
0x1a480…1a4a0        73 73 69 6e 67 20 74 68 65 20 73 61 6d 65 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 20 69   ┆ssing the same shared variable i┆
0x1a4a0…1a4c0        74 20 77 61 69 74 73 20 28 69 73 20 0a 19 83 80 80 73 75 73 70 65 6e 64 65 64 29 20 75 6e 74 69   ┆t waits (is      suspended) unti┆
0x1a4c0…1a4e0        6c 20 74 68 65 20 61 63 63 65 73 73 20 63 6f 75 6e 74 6f 66 20 74 68 65 20 76 61 72 69 61 62 6c   ┆l the access countof the variabl┆
0x1a4e0…1a500        65 20 69 73 20 7a 65 72 6f 2e 20 0a 19 83 80 80 53 75 62 73 65 71 75 65 6e 74 6c 79 20 74 68 65   ┆e is zero.      Subsequently the┆
0x1a500…1a520        20 61 63 63 65 73 73 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 49 66   ┆ access count is incremented. If┆
0x1a520…1a540        20 73 65 76 65 72 61 6c 20 0a 19 83 80 80 70 72 6f 63 65 73 73 65 73 20 77 61 69 74 20 66 6f 72   ┆ several      processes wait for┆
0x1a540…1a560        20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20 73 68 61 72 65 64 20 76 61 72 69 61   ┆ access to the same shared varia┆
0x1a560…1a580        62 6c 65 20 0a 19 83 80 80 74 68 65 79 20 6f 62 73 65 72 76 65 20 61 20 66 69 66 6f 20 64 69 73   ┆ble      they observe a fifo dis┆
0x1a580…1a5a0        63 69 70 6c 69 6e 65 2e 0d 0a 0d 0a 32 2e 20 84 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 66 6f   ┆cipline.    2.  The statement fo┆
0x1a5a0…1a5c0        6c 6c 6f 77 69 6e 67 20 44 4f 20 69 73 20 65 78 65 63 75 74 65 64 2e 20 49 6e 20 74 68 69 73 20   ┆llowing DO is executed. In this ┆
0x1a5c0…1a5e0        73 74 61 74 65 6d 65 6e 74 20 0a 19 83 80 80 74 68 65 20 73 68 61 72 65 64 20 76 61 72 69 61 62   ┆statement      the shared variab┆
0x1a5e0…1a600        6c 65 20 6d 61 79 20 62 65 20 61 63 63 65 73 73 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 66   ┆le may be accessed in the same f┆
0x1a600…1a620 (211,) 61 73 68 69 6f 6e 20 0a 19 83 80 80 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 28 70 72 69 76   ┆ashion      as an ordinary (priv┆
0x1a620…1a640        61 74 65 29 20 76 61 72 69 61 62 6c 65 2e 0d 0a 0d 0a 33 2e 20 54 68 65 20 61 63 63 65 73 73 20   ┆ate) variable.    3. The access ┆
0x1a640…1a660        63 6f 75 6e 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 20 69 73 20   ┆count of the shared variable is ┆
0x1a660…1a680        64 65 63 72 65 6d 65 6e 74 65 64 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 0d 0a 56 41 52   ┆decremented.     Example:    VAR┆
0x1a680…1a6a0        0d 0a 20 20 72 6f 75 74 65 5f 74 61 62 6c 65 3a 20 52 45 43 4f 52 44 0d 0a 20 20 20 20 2e 2e 2e   ┆    route_table: RECORD      ...┆
0x1a6a0…1a6c0        0d 0a 20 20 50 52 4f 43 45 44 55 52 45 20 63 6c 6f 73 65 5f 64 6f 77 6e 28 6e 6f 64 65 3a 20 6e   ┆    PROCEDURE close_down(node: n┆
0x1a6c0…1a6e0        6f 64 65 5f 69 64 65 6e 74 29 3b 0d 0a 20 20 20 20 2e 2e 2e 0d 0a 20 20 20 20 52 45 47 49 4f 4e   ┆ode_ident);      ...      REGION┆
0x1a6e0…1a700        20 72 6f 75 74 65 5f 74 61 62 6c 65 20 44 4f 0d 0a 20 20 20 20 20 20 72 6f 75 74 65 5f 74 61 62   ┆ route_table DO        route_tab┆
0x1a700…1a720        6c 65 2e 6f 70 65 6e 5f 72 6f 75 74 65 73 28 6e 6f 64 65 29 3a 3d 63 6c 6f 73 65 64 3b 0d 0a 20   ┆le.open_routes(node):=closed;   ┆
0x1a720…1a72c        20 20 20 20 20 2e 2e 2e 0d 0a 0d 0a                                                               ┆     ...    ┆
0x1a72c…1a72f        FormFeed {
0x1a72c…1a72f          0c 82 e8                                                                                          ┆   ┆
0x1a72c…1a72f        }
0x1a72f…1a740        0a b0 a1 36 2e 20 50 52 4f 47 52 41 4d 53 20 41 4e                                                ┆   6. PROGRAMS AN┆
0x1a740…1a760        44 20 52 4f 55 54 49 4e 45 53 0d 0a 0d 0a 50 72 6f 67 72 61 6d 73 20 61 6e 64 20 72 6f 75 74 69   ┆D ROUTINES    Programs and routi┆
0x1a760…1a780        6e 65 73 20 61 72 65 20 76 65 72 79 20 73 69 6d 69 6c 61 72 2e 20 42 6f 74 68 20 68 61 76 65 20   ┆nes are very similar. Both have ┆
0x1a780…1a7a0        74 68 65 20 0a 67 65 6e 65 72 61 6c 20 66 6f 72 6d 20 6f 66 20 61 20 68 65 61 64 69 6e 67 20 66   ┆the  general form of a heading f┆
0x1a7a0…1a7c0        6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 62 6c 6f 63 6b 2e 20 49 6e 63 61 72 6e 61 74 69 6f 6e 73   ┆ollowed by a block. Incarnations┆
0x1a7c0…1a7e0        20 0a 6f 66 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 73 20   ┆  of program and routine blocks ┆
0x1a7e0…1a800        61 6c 73 6f 20 65 78 68 69 62 69 74 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20 0a 73 69 6d 69 6c 61   ┆also exhibit fundamental  simila┆
0x1a800…1a820 (212,) 72 69 74 69 65 73 2e 20 49 6e 20 62 6f 74 68 20 63 61 73 65 73 20 74 68 65 20 6c 69 66 65 20 6f   ┆rities. In both cases the life o┆
0x1a820…1a840        66 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 68 61 73 20 0a 74 68 72 65 65 20 73 74 61 67   ┆f an incarnation has  three stag┆
0x1a840…1a860        65 73 3a 20 70 61 72 61 6d 65 74 65 72 20 70 61 73 73 69 6e 67 2c 20 65 6c 61 62 6f 72 61 74 69   ┆es: parameter passing, elaborati┆
0x1a860…1a880        6f 6e 20 6f 66 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 73 2c 20 61 6e 64 20 65 78 65 63 75 74 69   ┆on of  declarations, and executi┆
0x1a880…1a8a0        6f 6e 20 6f 66 20 61 6e 20 61 63 74 69 6f 6e 20 70 61 72 74 2e 20 54 68 65 20 0a 64 69 66 66 65   ┆on of an action part. The  diffe┆
0x1a8a0…1a8c0        72 65 6e 63 65 73 20 68 61 76 65 20 74 6f 20 64 6f 20 77 69 74 68 20 74 77 6f 20 61 73 70 65 63   ┆rences have to do with two aspec┆
0x1a8c0…1a8e0        74 73 3a 20 63 6f 6e 74 72 6f 6c 20 61 6e 64 20 0a 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 0d 0a 0d   ┆ts: control and  environment.   ┆
0x1a8e0…1a900        0a 41 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 62 6c 6f   ┆ An incarnation of a program blo┆
0x1a900…1a920        63 6b 20 69 73 20 61 20 70 72 6f 63 65 73 73 20 6f 6e 20 69 74 73 20 6f 77 6e 20 0a 77 68 69 63   ┆ck is a process on its own  whic┆
0x1a920…1a940        68 20 6c 69 76 65 73 20 61 75 74 6f 6e 6f 6d 6f 75 73 6c 79 20 65 78 63 65 70 74 20 66 6f 72 20   ┆h lives autonomously except for ┆
0x1a940…1a960        74 68 65 20 63 6f 6e 74 72 6f 6c 20 65 78 65 72 63 69 73 65 64 20 62 79 20 0a 69 74 73 20 70 61   ┆the control exercised by  its pa┆
0x1a960…1a980        72 65 6e 74 2c 20 77 68 65 72 65 61 73 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 2c 20 6f 72   ┆rent, whereas an incarnation, or┆
0x1a980…1a9a0        20 a1 61 63 74 69 76 61 74 69 6f 6e e1 2c 20 6f 66 20 61 20 0a 72 6f 75 74 69 6e 65 20 62 6c 6f   ┆  activation , of a  routine blo┆
0x1a9a0…1a9c0        63 6b 20 69 73 20 6d 65 72 65 6c 79 20 61 6e 20 65 70 69 73 6f 64 65 20 69 6e 20 74 68 65 20 6c   ┆ck is merely an episode in the l┆
0x1a9c0…1a9e0        69 66 65 20 6f 66 20 61 20 70 72 6f 63 65 73 73 2e 20 0a 54 68 65 20 61 63 74 69 76 61 74 69 6f   ┆ife of a process.  The activatio┆
0x1a9e0…1aa00        6e 2c 20 75 6e 6c 65 73 73 20 69 74 20 63 68 6f 6f 73 65 73 20 74 6f 20 6c 6f 6f 70 20 69 6e 66   ┆n, unless it chooses to loop inf┆
0x1aa00…1aa20 (213,) 69 6e 69 74 65 6c 79 20 6f 72 20 0a 63 6f 6d 6d 69 74 73 20 61 20 66 61 75 6c 74 2c 20 68 61 73   ┆initely or  commits a fault, has┆
0x1aa20…1aa40        20 6e 6f 20 63 68 6f 69 63 65 20 62 75 74 20 74 6f 20 72 65 74 75 72 6e 20 74 6f 20 74 68 65 20   ┆ no choice but to return to the ┆
0x1aa40…1aa60        70 6f 69 6e 74 20 0a 77 68 65 72 65 20 69 74 20 77 61 73 20 63 61 6c 6c 65 64 2e 0d 0a 0d 0a 41   ┆point  where it was called.    A┆
0x1aa60…1aa80        20 70 72 6f 63 65 73 73 20 68 61 73 20 6e 6f 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 6f 66 20 64   ┆ process has no environment of d┆
0x1aa80…1aaa0        61 74 61 20 74 6f 20 61 63 63 65 73 20 61 70 61 72 74 20 66 72 6f 6d 20 0a 70 72 65 64 65 66 69   ┆ata to acces apart from  predefi┆
0x1aaa0…1aac0        6e 65 64 20 69 74 65 6d 73 20 61 6e 64 20 69 74 73 20 70 61 72 61 6d 65 74 65 72 73 2e 20 41 20   ┆ned items and its parameters. A ┆
0x1aac0…1aae0        72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 20 0a 61 63 74 69 76 61 74 69 6f 6e 2c 20 69 6e 20 61 64   ┆routine block  activation, in ad┆
0x1aae0…1ab00        64 69 74 69 6f 6e 20 74 6f 20 74 68 65 73 65 2c 20 68 61 73 20 69 74 73 20 73 74 61 74 69 63 20   ┆dition to these, has its static ┆
0x1ab00…1ab20        0a 73 75 72 72 6f 75 6e 64 69 6e 67 73 3a 20 61 6c 6c 20 74 68 65 20 73 74 61 63 6b 2d 61 6c 6c   ┆ surroundings: all the stack-all┆
0x1ab20…1ab40        6f 63 61 74 65 64 20 6f 62 6a 65 63 74 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 0a 66 6f 72 6d 61   ┆ocated objects (including  forma┆
0x1ab40…1ab60        6c 20 70 61 72 61 6d 65 74 65 72 73 29 20 64 65 63 6c 61 72 65 64 20 69 6e 20 65 6e 63 6c 6f 73   ┆l parameters) declared in enclos┆
0x1ab60…1ab80        69 6e 67 20 62 6c 6f 63 6b 73 2c 20 65 78 63 65 70 74 20 0a 74 68 6f 73 65 20 77 68 69 63 68 20   ┆ing blocks, except  those which ┆
0x1ab80…1aba0        68 61 76 65 20 62 65 65 6e 20 6d 61 64 65 20 69 6e 76 69 73 69 62 6c 65 20 62 79 20 72 65 64 65   ┆have been made invisible by rede┆
0x1aba0…1abc0        63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 0a 74 68 65 69 72 20 6e 61 6d 65 73 2c 20 63 66 2e 20 63   ┆claration of  their names, cf. c┆
0x1abc0…1abe0        68 61 70 74 65 72 20 38 2e 0d 0a 0d 0a 41 20 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69   ┆hapter 8.    A program declarati┆
0x1abe0…1ac00        6f 6e 20 6d 61 79 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20 6f 75 74 65 72 20 6c 65 76 65 6c   ┆on may appear at the outer level┆
0x1ac00…1ac20 (214,) 20 6f 66 20 61 20 0a 27 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69 74 27 2c 20 63 66 2e 20 73   ┆ of a  'compilation unit', cf. s┆
0x1ac20…1ac40        65 63 74 69 6f 6e 20 38 2e 32 2c 20 6f 72 20 69 6e 20 74 68 65 20 64 65 6c 63 61 72 61 74 69 6f   ┆ection 8.2, or in the delcaratio┆
0x1ac40…1ac60        6e 20 0a 70 61 72 74 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 2e 20 49 74 20 73   ┆n  part of a program block. It s┆
0x1ac60…1ac80        65 72 76 65 73 20 74 6f 20 6e 61 6d 65 20 61 6e 64 20 64 65 66 69 6e 65 20 61 20 0a 70 72 6f 67   ┆erves to name and define a  prog┆
0x1ac80…1aca0        72 61 6d 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 e0 0a 54 68 65 20   ┆ram.                        The ┆
0x1aca0…1acc0        68 65 61 64 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68   ┆heading specifies the name of th┆
0x1acc0…1ace0        65 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 69 74 73 20 66 6f 72 6d 61 6c 20 0a 70 61 72 61 6d 65   ┆e program and its formal  parame┆
0x1ace0…1ad00        74 65 72 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 0d 0a 41 20 72 6f 75 74 69 6e 65 20 64 65 63 6c 61   ┆ters, if any.    A routine decla┆
0x1ad00…1ad20        72 61 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20 6f 75   ┆ration may also appear at the ou┆
0x1ad20…1ad40        74 65 72 20 6c 65 76 65 6c 20 6f 66 20 0a 61 20 27 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69   ┆ter level of  a 'compilation uni┆
0x1ad40…1ad60        74 27 2c 20 6f 72 20 69 6e 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 6f   ┆t', or in the declaration part o┆
0x1ad60…1ad80        66 20 61 20 62 6c 6f 63 6b 2e 20 0a 49 74 20 73 65 72 76 65 73 20 74 6f 20 6e 61 6d 65 20 61 6e   ┆f a block.  It serves to name an┆
0x1ad80…1ada0        64 20 64 65 66 69 6e 65 20 61 20 72 6f 75 74 69 6e 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆d define a routine.             ┆
0x1ada0…1adc0        0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 69 6e 69 74 69 61 6c 20 6b 65 79 77 6f 72 64 20 69 6e 20   ┆         The initial keyword in ┆
0x1adc0…1ade0        61 20 72 6f 75 74 69 6e 65 20 68 65 61 64 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 77 68 65 74   ┆a routine heading specifies whet┆
0x1ade0…1ae00        68 65 72 20 0a 74 68 65 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f   ┆her  the routine is a function o┆
0x1ae00…1ae20 (215,) 72 20 61 20 70 72 6f 63 65 64 75 72 65 2e 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 68 65 20 0a   ┆r a procedure. In addition the  ┆
0x1ae20…1ae40        64 65 63 6c 61 72 61 74 69 6f 6e 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f   ┆declaration specifies the name o┆
0x1ae40…1ae60        66 20 74 68 65 20 72 6f 75 74 69 6e 65 2c 20 69 74 73 20 66 6f 72 6d 61 6c 20 0a 70 61 72 61 6d   ┆f the routine, its formal  param┆
0x1ae60…1ae80        65 74 65 72 73 2c 20 69 66 20 61 6e 79 2c 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f   ┆eters, if any, and in the case o┆
0x1ae80…1aea0        66 20 61 20 66 75 6e 63 74 69 6f 6e 3a 20 69 74 73 20 0a 72 65 73 75 6c 74 20 74 79 70 65 2c 20   ┆f a function: its  result type, ┆
0x1aea0…1aec0        77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 72 64 69 6e 61 6c 2c 20 6d 61 63 68 69 6e   ┆which must be an ordinal, machin┆
0x1aec0…1aee0        65 20 6f 72 20 70 6f 69 6e 74 65 72 20 0a 74 79 70 65 2e 20 54 68 65 20 27 72 6f 75 74 69 6e 65   ┆e or pointer  type. The 'routine┆
0x1aee0…1af00        20 62 6c 6f 63 6b 27 20 75 6e 6c 65 73 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 6e 65 20   ┆ block' unless specified by one ┆
0x1af00…1af20        6f 66 20 74 68 65 20 0a 6b 65 79 77 6f 72 64 73 20 45 58 54 45 52 4e 41 4c 20 6f 72 20 46 4f 52   ┆of the  keywords EXTERNAL or FOR┆
0x1af20…1af40        57 41 52 44 20 28 73 65 65 20 62 6c 6f 77 29 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69   ┆WARD (see blow) is associated wi┆
0x1af40…1af60        74 68 20 0a 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6f 66 20 70 72 6f 63 65 64 75 72 65 20 6e 61   ┆th  the function of procedure na┆
0x1af60…1af80        6d 65 2e 0d 0a 0d 0a 54 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 62 6c 6f 63 6b 73   ┆me.    The parameters and blocks┆
0x1af80…1afa0        20 6f 66 20 70 72 6f 67 72 61 6d 73 20 61 73 20 77 65 6c 6c 20 61 73 20 72 6f 75 74 69 6e 65 73   ┆ of programs as well as routines┆
0x1afa0…1afc0        20 0a 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ┆  are described in the following┆
0x1afc0…1afe0        20 74 77 6f 20 73 65 63 74 69 6f 6e 73 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 50 52 4f   ┆ two sections.     Example:  PRO┆
0x1afe0…1b000        47 52 41 4d 20 72 6f 75 74 65 72 20 28 49 4e 53 50 45 43 54 20 72 6f 75 74 73 3a 20 72 6f 75 74   ┆GRAM router (INSPECT routs: rout┆
0x1b000…1b020 (216,) 65 5f 74 61 62 6c 65 29 0d 0a 46 55 4e 43 54 49 4f 4e 20 73 65 61 72 63 68 5f 6e 61 6d 65 28 6e   ┆e_table)  FUNCTION search_name(n┆
0x1b020…1b040        61 6d 65 3a 20 6e 61 6d 65 5f 6e 6f 64 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 50 52 4f 43 45 44   ┆ame: name_node): boolean  PROCED┆
0x1b040…1b060        55 52 45 20 69 6e 73 65 72 74 5f 6e 61 6d 65 28 56 41 52 20 70 6f 73 69 74 69 6f 6e 3a 20 74 61   ┆URE insert_name(VAR position: ta┆
0x1b060…1b080        62 6c 65 5f 69 6e 64 65 78 0d 0a 09 09 20 20 20 20 20 20 20 20 6e 61 6d 65 3a 20 6e 61 6d 65 5f   ┆ble_index            name: name_┆
0x1b080…1b08f        72 65 63 6f 72 64 29 0d 0a 0d 0a b0 a1 0d 0a                                                      ┆record)        ┆
0x1b08f…1b092        FormFeed {
0x1b08f…1b092          0c 83 a4                                                                                          ┆   ┆
0x1b08f…1b092        }
0x1b092…1b0a0        0a b0 a1 36 2e 31 20 50 61 72 61 6d 65 74                                                         ┆   6.1 Paramet┆
0x1b0a0…1b0c0        65 72 73 0d 0a 0d 0a 54 68 65 20 27 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 27 20 6f   ┆ers    The 'formal parameters' o┆
0x1b0c0…1b0e0        66 20 61 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 68 65 61 64 69 6e 67 20 0a   ┆f a program or routine heading  ┆
0x1b0e0…1b100        73 70 65 63 69 66 79 20 74 68 65 20 6e 61 6d 65 73 2c 20 6b 69 6e 64 73 20 61 6e 64 20 74 79 70   ┆specify the names, kinds and typ┆
0x1b100…1b120        65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 61 72 61 6d 65 74 65 72 73 6f 66 20 0a 74 68   ┆es of the formal arametersof  th┆
0x1b120…1b140        65 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆e program or routine.           ┆
0x1b140…1b160        0a 0d 0a 0d 0a 0d 0a 0d 0a 45 61 63 68 20 27 66 6f 72 6d 61 6c 5f 6e 61 6d 65 27 20 69 6e 74 72   ┆         Each 'formal_name' intr┆
0x1b160…1b180        6f 64 75 63 65 64 73 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 2e 20 53 65 76 65 72 61 6c 20 0a   ┆oduceds one parameter. Several  ┆
0x1b180…1b1a0        70 61 72 61 6d 65 74 65 72 73 20 6d 61 79 20 62 65 20 6e 61 6d 65 64 20 69 6e 20 61 20 6c 69 73   ┆parameters may be named in a lis┆
0x1b1a0…1b1c0        74 2c 20 73 65 70 61 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2e 20 53 75 63 68 20 0a 70 61   ┆t, separated by commas. Such  pa┆
0x1b1c0…1b1e0        72 61 6d 65 74 65 72 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6b 69 6e 64 20 61 6e 64 20   ┆rameters have the same kind and ┆
0x1b1e0…1b200        74 79 70 65 2e 0d 0a 0d 0a 54 68 65 20 6b 69 6e 64 20 6f 66 20 61 20 70 61 72 61 6d 65 74 65 72   ┆type.    The kind of a parameter┆
0x1b200…1b220 (217,) 2c 20 77 68 69 63 68 20 6d 61 79 20 62 65 20 a1 76 61 72 69 61 62 6c 65 e1 2c 20 a1 69 6e 73 70   ┆, which may be  variable ,  insp┆
0x1b220…1b240        65 63 74 e1 2c 20 0a a1 73 68 61 72 65 64 e1 20 6f 72 20 a1 76 61 6c 75 65 e1 2c 20 69 73 20 73   ┆ect ,   shared  or  value , is s┆
0x1b240…1b260        70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 28 70 6f 73 73 69 62 6c 65 29 20 6b 65 79 77 6f   ┆pecified by the (possible) keywo┆
0x1b260…1b280        72 64 20 0a 70 72 65 63 65 64 69 6e 67 20 69 74 73 20 6e 61 6d 65 2e 20 49 6e 20 74 68 65 20 62   ┆rd  preceding its name. In the b┆
0x1b280…1b2a0        6c 6f 63 6b 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 0a   ┆lock of the program or routine  ┆
0x1b2a0…1b2c0        65 61 63 68 20 70 61 72 61 6d 65 74 65 72 20 61 63 74 73 20 61 73 20 61 6e 20 6f 62 6a 65 63 74   ┆each parameter acts as an object┆
0x1b2c0…1b2e0        2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 6b 69 6e 64 20 0a 64 65 74 65 72 6d 69 6e 65 73   ┆. The parameter kind  determines┆
0x1b2e0…1b300        20 68 6f 77 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6d 61 79 20 62 65 20 75 73 65 64 3a 0d 0a 0d   ┆ how this object may be used:   ┆
0x1b300…1b320        0a a1 6b 65 79 77 6f 72 64 09 70 61 72 61 6d 65 74 65 72 20 6b 69 6e 64 09 75 73 65 20 6f 66 20   ┆  keyword parameter kind use of ┆
0x1b320…1b340        6f 62 6a 65 63 74 09 09 09 09 09 0d 0a 56 41 52 09 09 76 61 72 69 61 62 6c 65 09 09 61 73 20 61   ┆object       VAR  variable  as a┆
0x1b340…1b360        20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 0d 0a 49 4e 53 50 45 43 54 09 69 6e 73 70 65   ┆ private variable  INSPECT inspe┆
0x1b360…1b380        63 74 09 09 61 73 20 61 20 63 6f 6e 73 74 61 6e 74 0d 0a 53 48 41 52 45 44 09 73 68 61 72 65 64   ┆ct  as a constant  SHARED shared┆
0x1b380…1b3a0        09 09 61 73 20 61 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 0d 0a 6e 6f 6e 65 09 76 61 6c   ┆  as a shared variable  none val┆
0x1b3a0…1b3c0        75 65 09 09 61 73 20 61 20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 0d 0a 0d 0a 54 68 65   ┆ue  as a private variable    The┆
0x1b3c0…1b3e0        20 74 79 70 65 20 6f 66 20 65 61 63 68 20 70 61 72 61 6d 65 74 65 72 2c 20 69 2e 65 2e 20 6f 66   ┆ type of each parameter, i.e. of┆
0x1b3e0…1b400        20 74 68 65 20 6f 62 6a 65 63 74 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 0a 61 63 63 65 73 73   ┆ the object which can be  access┆
0x1b400…1b420 (218,) 65 64 20 69 6e 20 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20 74 68 65 20 72 6f 67 72 61 6d 20 6f 72   ┆ed in the block of the rogram or┆
0x1b420…1b440        20 72 6f 75 74 69 6e 65 2c 20 69 73 20 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20   ┆ routine, is  determined by the ┆
0x1b440…1b460        27 66 6f 72 6d 61 6c 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 27 20 66 6f 6c 6c   ┆'formal type specification' foll┆
0x1b460…1b480        6f 77 69 6e 67 20 74 68 65 20 0a 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72   ┆owing the  name of the parameter┆
0x1b480…1b4a0        2e 20 49 66 20 74 68 65 20 27 66 6f 72 6d 61 6c 20 74 79 70 65 20 73 70 65 63 69 66 69 63 61 74   ┆. If the 'formal type specificat┆
0x1b4a0…1b4c0        69 6f 6e 27 20 69 73 20 0a 61 20 27 70 61 72 61 6d 65 74 65 72 69 7a 65 64 2d 74 79 70 65 5f 6e   ┆ion' is  a 'parameterized-type_n┆
0x1b4c0…1b4e0        61 6d 65 27 2c 20 69 2e 65 2e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 61 6d 69 6c 79 20   ┆ame', i.e. the name of a family ┆
0x1b4e0…1b500        6f 66 20 0a 63 6f 6e 66 6f 72 6d 61 6e 74 20 74 79 70 65 73 2c 20 74 68 65 20 74 79 70 65 20 6f   ┆of  conformant types, the type o┆
0x1b500…1b520        66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 0a 64 65 74 65 72   ┆f the formal parameter is  deter┆
0x1b520…1b540        6d 69 6e 65 64 20 66 6f 72 20 65 61 63 68 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68   ┆mined for each incarnation of th┆
0x1b540…1b560        65 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 62 79 20 0a 74 68 65 20 74 79 70   ┆e program or routine by  the typ┆
0x1b560…1b580        65 20 6f 66 20 74 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 0d 0a 8c 83   ┆e of the actual parameter.      ┆
0x1b580…1b5a0        d4 0a 41 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 6f 72   ┆  An incarnation of a program or┆
0x1b5a0…1b5c0        20 72 6f 75 74 69 6e 65 20 69 73 20 63 72 65 61 74 65 64 20 61 73 20 61 20 0a 72 65 73 75 6c 74   ┆ routine is created as a  result┆
0x1b5c0…1b5e0        20 6f 66 20 61 20 27 63 72 65 61 74 65 20 63 61 6c 6c 27 2c 20 27 66 75 6e 63 74 69 6f 6e 20 63   ┆ of a 'create call', 'function c┆
0x1b5e0…1b600        61 6c 6c 27 2c 20 6f 72 20 27 70 72 6f 63 65 64 75 72 65 20 0a 63 61 6c 6c 27 20 62 65 69 6e 67   ┆all', or 'procedure  call' being┆
0x1b600…1b620 (219,) 20 65 76 61 6c 75 61 74 65 64 20 6f 72 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20 63 61 6c 6c   ┆ evaluated or executed. The call┆
0x1b620…1b640        20 63 6f 6e 74 61 69 6e 73 20 61 20 0a 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20   ┆ contains a  description of the ┆
0x1b640…1b660        61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 74 6f   ┆actual parameters to be bound to┆
0x1b660…1b680        20 74 68 65 20 0a 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 66 6f 72 20 74 68 65 20   ┆ the  formal parameters for the ┆
0x1b680…1b6a0        70 61 72 74 69 63 75 6c 61 72 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 70   ┆particular incarnation of the  p┆
0x1b6a0…1b6c0        72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆rogram or routine.              ┆
0x1b6c0…1b6e0        45 61 63 68 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 63 6f 72 72 65 73 70 6f 6e 64   ┆Each actual parameter correspond┆
0x1b6e0…1b700        73 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 69 6e 20 0a 74 68   ┆s to the formal parameter in  th┆
0x1b700…1b720        65 20 73 61 6d 65 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 27 66 6f 72 6d 61 6c 20 70   ┆e same position in the 'formal p┆
0x1b720…1b740        61 72 61 6d 65 74 65 72 73 27 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 61 63 74 75 61   ┆arameters'. The number of  actua┆
0x1b740…1b760        6c 20 70 61 72 61 6d 65 74 65 72 73 20 6d 75 73 74 20 65 71 75 61 6c 20 74 68 65 20 6e 75 6d 62   ┆l parameters must equal the numb┆
0x1b760…1b780        65 72 20 6f 66 20 66 6f 72 6d 61 6c 20 0a 70 61 72 61 6d 65 74 65 72 73 2e 20 41 6e 20 61 63 74   ┆er of formal  parameters. An act┆
0x1b780…1b7a0        75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 6b 69 6e 64 20 76 61 72 69 61 62 6c 65 2c 20   ┆ual parameter of kind variable, ┆
0x1b7a0…1b7c0        69 6e 73 70 65 63 74 2c 20 0a 6f 72 20 73 68 61 72 65 64 20 6d 75 73 74 20 62 65 20 6f 66 20 74   ┆inspect,  or shared must be of t┆
0x1b7c0…1b7e0        68 65 20 73 61 6d 65 20 74 79 70 65 20 61 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ┆he same type as the correspondin┆
0x1b7e0…1b800        67 20 0a 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 2e 20 41 6e 20 61 63 74 75 61 6c 20 70   ┆g  formal parameter. An actual p┆
0x1b800…1b820 (220,) 61 72 61 6d 65 74 65 72 20 6f 66 20 6b 69 6e 64 20 76 61 6c 75 65 20 6e 65 65 64 20 0a 6f 6e 6c   ┆arameter of kind value need  onl┆
0x1b820…1b840        79 20 62 65 20 61 73 73 69 67 6e 61 62 6c 65 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61   ┆y be assignable to the formal pa┆
0x1b840…1b860        72 61 6d 65 74 65 72 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 0a 33 2e 31 30 29 2e 20 57 68 65   ┆rameter (cf. section  3.10). Whe┆
0x1b860…1b880        6e 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72   ┆n the type of a formal parameter┆
0x1b880…1b8a0        20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20   ┆ is specified as  the name of a ┆
0x1b8a0…1b8c0        66 61 6d 69 6c 79 20 6f 66 20 74 79 70 65 73 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20   ┆family of types the type of the ┆
0x1b8c0…1b8e0        63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 0a 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20   ┆corresponding  actual parameter ┆
0x1b8e0…1b900        6d 61 79 20 62 65 20 61 6e 79 20 74 79 70 65 20 69 6e 20 74 68 61 74 20 66 61 6d 69 6c 79 2e 0d   ┆may be any type in that family. ┆
0x1b900…1b920        0a 0d 0a 54 68 65 20 73 79 6d 62 6f 6c 20 3f 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 70   ┆   The symbol ? may be used in p┆
0x1b920…1b940        6c 61 63 65 20 6f 66 20 61 6e 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 0a 65 78 70   ┆lace of an actual parameter  exp┆
0x1b940…1b960        72 65 73 73 69 6f 6e 20 77 68 65 6e 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   ┆ression when the parameter is no┆
0x1b960…1b980        74 20 6f 66 20 6b 69 6e 64 20 76 61 6c 75 65 2c 20 0a 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20   ┆t of kind value,  regardless of ┆
0x1b980…1b9a0        74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72   ┆the type of the formal parameter┆
0x1b9a0…1b9c0        2e 0d 0a 0d 0a 54 68 65 20 62 69 6e 64 69 6e 67 20 6f 66 20 61 6e 20 61 63 74 75 61 6c 20 70 61   ┆.    The binding of an actual pa┆
0x1b9c0…1b9e0        72 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 0a 66 6f   ┆rameter to the corresponding  fo┆
0x1b9e0…1ba00        72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 69 74 68 65   ┆rmal parameter takes place eithe┆
0x1ba00…1ba20 (221,) 72 20 62 79 20 61 20 76 61 6c 75 65 20 74 72 61 6e 73 66 65 72 20 0a 28 22 63 61 6c 6c 20 62 79   ┆r by a value transfer  ("call by┆
0x1ba20…1ba40        20 76 61 6c 75 65 22 29 2c 20 6f 72 20 62 79 20 61 6e 20 61 64 64 72 65 73 73 20 74 72 61 6e 73   ┆ value"), or by an address trans┆
0x1ba40…1ba60        66 65 72 20 28 22 63 61 6c 6c 20 62 79 20 0a 72 65 66 65 72 65 6e 63 65 22 29 20 64 65 70 65 6e   ┆fer ("call by  reference") depen┆
0x1ba60…1ba80        64 69 6e 67 20 6f 6e 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   ┆ding on the kind of the paramete┆
0x1ba80…1baa0        72 2e 20 56 61 6c 75 65 20 0a 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 70 61 73 73 65 64 20   ┆r. Value  parameters are passed ┆
0x1baa0…1bac0        62 79 20 76 61 6c 75 65 20 74 72 61 6e 73 66 65 72 2c 20 61 6c 6c 20 6f 74 68 65 72 20 6b 69 6e   ┆by value transfer, all other kin┆
0x1bac0…1bae0        64 73 20 62 79 20 0a 61 64 64 72 65 73 73 20 74 72 61 6e 73 66 65 72 2e 0d 0a 0d 0a a1 76 61 6c   ┆ds by  address transfer.     val┆
0x1bae0…1bb00        75 65 20 74 72 61 6e 73 66 65 72 3a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 61   ┆ue transfer:  The value of the a┆
0x1bb00…1bb20        63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 62 65 63 6f 6d 65 73 20 74 68 65 20 69 6e 69 74   ┆ctual parameter becomes the init┆
0x1bb20…1bb40        69 61 6c 20 76 61 6c 75 65 20 0a 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74   ┆ial value  of the formal paramet┆
0x1bb40…1bb60        65 72 20 77 68 69 63 68 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20 73 74 61   ┆er which is allocated on the sta┆
0x1bb60…1bb80        63 6b 20 61 73 20 0a 61 6e 20 6f 62 6a 65 63 74 20 6c 6f 63 61 6c 20 74 6f 20 74 68 65 20 69 6e   ┆ck as  an object local to the in┆
0x1bb80…1bba0        63 61 72 6e 61 74 69 6f 6e 2e 0d 0a 0d 0a 8c 83 d4 0a a1 61 64 64 72 65 73 73 20 74 72 61 6e 73   ┆carnation.         address trans┆
0x1bba0…1bbc0        65 72 3a 0d 0a 54 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20   ┆er:  The actual parameter is an ┆
0x1bbc0…1bbe0        6f 62 6a 65 63 74 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 34   ┆object expression, cf. chapter 4┆
0x1bbe0…1bc00        2e 20 0a 49 74 20 6d 75 73 74 20 6e 6f 74 20 64 65 6e 6f 74 65 20 61 6e 20 69 72 72 65 67 75 6c   ┆.  It must not denote an irregul┆
0x1bc00…1bc20 (222,) 61 72 20 6f 62 6a 65 63 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 39 29 2e 20 0a 45 76   ┆ar object (cf. section 3.9).  Ev┆
0x1bc20…1bc40        61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72   ┆aluation of the actual parameter┆
0x1bc40…1bc60        20 79 69 65 6c 64 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 6e 20 0a 6f 62 6a 65 63   ┆ yields the address of an  objec┆
0x1bc60…1bc80        74 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 74 79 70 65 2e 20 54 68 72 6f 75 67 68   ┆t of the parameter type. Through┆
0x1bc80…1bca0        6f 75 74 20 74 68 65 20 6c 69 66 65 20 6f 66 20 74 68 65 20 0a 69 6e 63 61 72 6e 61 74 69 6f 6e   ┆out the life of the  incarnation┆
0x1bca0…1bcc0        20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 74 68 65 20 66   ┆ of the program or routine the f┆
0x1bcc0…1bce0        6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 0a 6e 61 6d 65 20 77 69 6c 6c 20 64 65 6e 6f 74   ┆ormal parameter  name will denot┆
0x1bce0…1bd00        65 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 0d 0a 0d 0a 41 6e 20 61 63 74 75 61 6c 20 70 61 72 61   ┆e this object.    An actual para┆
0x1bd00…1bd20        6d 65 74 65 72 20 6f 62 6a 65 63 74 20 70 61 73 73 65 64 20 74 6f 20 61 20 70 72 6f 63 65 73 73   ┆meter object passed to a process┆
0x1bd20…1bd40        20 6d 75 73 74 20 62 65 20 0a 64 65 63 6c 61 72 65 64 20 61 74 20 74 68 65 20 6f 75 74 65 72 20   ┆ must be  declared at the outer ┆
0x1bd40…1bd60        62 6c 6f 63 6b 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20 70 72 6f 63 65 73   ┆block level of the parent proces┆
0x1bd60…1bd80        73 2c 20 0a 69 2e 65 2e 20 65 69 74 68 65 72 20 69 74 20 6d 75 73 74 20 69 74 73 65 6c 66 20 62   ┆s,  i.e. either it must itself b┆
0x1bd80…1bda0        65 20 61 20 70 72 6f 63 65 73 73 20 70 61 72 61 6d 65 74 65 72 20 6f 72 20 69 74 20 6d 75 73 74   ┆e a process parameter or it must┆
0x1bda0…1bdc0        20 0a 62 65 20 64 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 64 65 63   ┆  be declared in the program dec┆
0x1bdc0…1bde0        6c 61 72 61 74 69 6f 6e 20 70 61 72 74 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 61 63 74 75 61 6c 20   ┆laration part.    If the actual ┆
0x1bde0…1be00        70 61 72 61 6d 65 74 65 72 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 3f 20 74 68 65 72   ┆parameter is specified as ? ther┆
0x1be00…1be20 (223,) 65 20 69 73 20 6e 6f 20 0a 70 61 72 61 6d 65 74 65 72 20 6f 62 6a 65 63 74 2e 20 49 66 20 61 6e   ┆e is no  parameter object. If an┆
0x1be20…1be40        20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 61 63 63 65 73 73 20 73 75 63 68 20   ┆ attempt is made to access such ┆
0x1be40…1be60        61 20 0a 6e 6f 6e 2d 65 78 69 73 74 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20 6f 62 6a 65 63 74   ┆a  non-existing parameter object┆
0x1be60…1be80        20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 6b 69 6e 64 20   ┆ a fault occurs.    If the kind ┆
0x1be80…1bea0        6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 72 69 61   ┆of the formal parameter is varia┆
0x1bea0…1bec0        6c 62 65 20 74 68 65 20 61 63 74 75 61 6c 20 0a 70 61 72 61 6d 65 74 65 72 20 6f 62 6a 65 63 74   ┆lbe the actual  parameter object┆
0x1bec0…1bee0        20 6d 75 73 74 20 62 65 20 61 20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 20 6f 72 20 63   ┆ must be a private variable or c┆
0x1bee0…1bf00        6f 6d 70 6f 6e 65 6e 74 20 6f 66 20 0a 61 20 70 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 2e   ┆omponent of  a private variable.┆
0x1bf00…1bf20        20 49 66 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d   ┆ If the kind of the formal param┆
0x1bf20…1bf40        65 74 65 72 20 69 73 20 0a 73 68 61 72 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 70 61 72 61 6d   ┆eter is  shared the actual param┆
0x1bf40…1bf60        65 74 65 72 20 6f 62 6a 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73 68 61 72 65 64 20 0a 76 61   ┆eter object must be a shared  va┆
0x1bf60…1bf80        72 69 61 62 6c 65 2e 20 43 6f 6e 76 65 72 73 65 6c 79 2c 20 69 66 20 74 68 65 20 61 63 74 75 61   ┆riable. Conversely, if the actua┆
0x1bf80…1bfa0        6c 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 20 0a 6b 69 6e 64   ┆l parameter is shared, the  kind┆
0x1bfa0…1bfc0        20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 61 6c   ┆ of the formal parameter must al┆
0x1bfc0…1bfe0        73 6f 20 62 65 20 73 68 61 72 65 64 2e 0d 0a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   ┆so be shared.    The following r┆
0x1bfe0…1c000        65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 70 72 6f 63 65 73 73 20 70 61 72   ┆estrictions apply to process par┆
0x1c000…1c020 (224,) 61 6d 65 74 65 72 73 2c 20 69 2e 65 2e 20 0a 74 6f 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72   ┆ameters, i.e.  to the formal par┆
0x1c020…1c040        61 6d 65 74 65 72 73 20 77 68 69 63 68 20 6f 63 63 75 72 20 69 6e 20 61 20 70 72 6f 67 72 61 6d   ┆ameters which occur in a program┆
0x1c040…1c060        20 68 65 61 64 69 6e 67 3a 0d 0a 2d 20 84 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 6b 69 6e 64   ┆ heading:  -  parameters of kind┆
0x1c060…1c080        20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 70 6f 6f 6c 2c 20   ┆ variable must be of type pool, ┆
0x1c080…1c0a0        6d 61 69 6c 62 6f 78 2c 20 0a 19 82 80 80 6f 72 20 70 6f 72 74 3b 0d 0a 2d 20 84 70 61 72 61 6d   ┆mailbox,      or port;  -  param┆
0x1c0a0…1c0c0        65 74 65 72 73 20 28 6f 72 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 74 68 65 72 65 6f 66 29 20 6f 66   ┆eters (or components thereof) of┆
0x1c0c0…1c0e0        20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 6d 75 73 74 20 0a 19 82 80 80 68 61 76 65 20 6d 61   ┆ pointer types must      have ma┆
0x1c0e0…1c100        69 6c 62 6f 78 20 61 73 20 74 68 65 69 72 20 62 61 73 65 20 74 79 70 65 2c 20 72 65 67 61 72 64   ┆ilbox as their base type, regard┆
0x1c100…1c120        6c 65 73 73 20 6f 66 20 6b 69 6e 64 2e 0d 0a 0d 0a a1 4e 6f 74 65 73 3a 0d 0a 41 6e 20 61 63 74   ┆less of kind.     Notes:  An act┆
0x1c120…1c140        75 61 6c 20 70 72 6f 63 65 73 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 6b 69 6e 64 20 69 6e   ┆ual process parameter of kind in┆
0x1c140…1c160        73 70 65 63 74 20 6d 61 79 20 62 65 20 61 20 0a 76 61 72 69 61 62 6c 65 2c 20 61 6e 64 20 74 68   ┆spect may be a  variable, and th┆
0x1c160…1c180        75 73 20 69 74 20 6d 61 79 20 62 65 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 65 20 70 61 72 65   ┆us it may be changed by the pare┆
0x1c180…1c18f        6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 0d 0a                                                      ┆nt process.    ┆
0x1c18f…1c192        FormFeed {
0x1c18f…1c192          0c 83 a4                                                                                          ┆   ┆
0x1c18f…1c192        }
0x1c192…1c1a0        0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 54 59                                                         ┆  Example:  TY┆
0x1c1a0…1c1c0        50 45 0d 0a 20 20 20 6c 69 73 74 3d 20 41 52 52 41 59 28 31 2e 2e 6d 61 78 5f 6c 69 73 74 5f 6c   ┆PE     list= ARRAY(1..max_list_l┆
0x1c1c0…1c1e0        65 6e 67 74 68 29 20 4f 46 20 6c 69 73 74 5f 65 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 50 52   ┆ength) OF list_element;       PR┆
0x1c1e0…1c200        4f 43 45 44 55 52 45 20 68 61 6e 64 6c 65 5f 6c 69 73 74 28 49 4e 53 50 45 43 54 20 31 73 74 3a   ┆OCEDURE handle_list(INSPECT 1st:┆
0x1c200…1c220 (225,) 20 6c 69 73 74 29 3b 0d 0a 20 20 20 2d 2d 20 31 73 74 20 69 73 20 6f 66 20 6b 69 6e 64 20 69 6e   ┆ list);     -- 1st is of kind in┆
0x1c220…1c240        73 70 65 63 74 20 74 6f 20 73 61 76 65 20 74 69 6d 65 20 61 6e 64 20 73 70 61 63 65 2c 20 61 6e   ┆spect to save time and space, an┆
0x1c240…1c260        64 20 74 6f 0d 0a 20 20 20 2d 2d 20 61 6c 6c 6f 77 20 74 68 65 20 68 61 6e 64 6c 69 6e 67 20 6f   ┆d to     -- allow the handling o┆
0x1c260…1c280        66 20 63 6f 6e 73 74 61 6e 74 20 6c 69 73 74 73 0d 0a 0d 0a 0d 0a b0 a1 36 2e 32 20 49 6e 63 61   ┆f constant lists        6.2 Inca┆
0x1c280…1c2a0        72 6e 61 74 69 6f 6e 73 20 6f 66 20 42 6c 6f 63 6b 73 0d 0a 0d 0a 41 20 62 6c 6f 63 6b 2c 20 77   ┆rnations of Blocks    A block, w┆
0x1c2a0…1c2c0        68 65 74 68 65 72 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 2c 20 63 6f 6e 73 69   ┆hether program or routine, consi┆
0x1c2c0…1c2e0        73 74 73 20 6f 66 20 61 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 61 6e 64 20 61   ┆sts of a  declaration part and a┆
0x1c2e0…1c300        6e 20 61 63 74 69 6f 6e 20 70 61 72 74 20 77 68 69 63 68 20 68 61 73 20 74 68 65 20 66 6f 72 6d   ┆n action part which has the form┆
0x1c300…1c320        20 6f 66 20 61 20 0a 63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 0d 0a 0d 0a   ┆ of a  compound statement.      ┆
0x1c320…1c340        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 42 6c 6f 63 6b 73 20 73 70 65   ┆                      Blocks spe┆
0x1c340…1c360        63 69 66 69 65 64 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 45 58   ┆cified by one of the keywords EX┆
0x1c360…1c380        54 45 52 4e 41 4c 20 61 6e 64 20 46 4f 52 57 41 52 44 20 0a 61 72 65 20 64 65 73 63 72 69 62 65   ┆TERNAL and FORWARD  are describe┆
0x1c380…1c3a0        64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 36 2e 32 2e 32 2e 0d 0a 0d 0a 54 68 65 20 64 65   ┆d in subsection 6.2.2.    The de┆
0x1c3a0…1c3c0        63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 73 20 6f 66 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 72   ┆claration parts of program and r┆
0x1c3c0…1c3e0        6f 75 74 69 6e 65 20 62 6c 6f 63 6b 73 20 61 72 65 20 0a 73 6c 69 67 68 74 6c 79 20 64 69 66 66   ┆outine blocks are  slightly diff┆
0x1c3e0…1c400        65 72 65 6e 74 20 69 6e 20 74 68 61 74 20 63 65 72 74 61 69 6e 20 66 6f 72 6d 73 20 6f 66 20 64   ┆erent in that certain forms of d┆
0x1c400…1c420 (226,) 65 63 6c 61 72 61 74 69 6f 6e 73 20 6d 61 79 20 0a 6e 6f 74 20 6f 63 63 75 72 20 69 6e 20 61 20   ┆eclarations may  not occur in a ┆
0x1c420…1c440        72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 3b 20 73 65 65 20 73 75 62 73 65 63 74 69 6f 6e 20 36 2e   ┆routine block; see subsection 6.┆
0x1c440…1c460        32 2e 31 2e 0d 0a 0d 0a 41 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 2c 20 77 68 65 74 68 65 72 20   ┆2.1.    An incarnation, whether ┆
0x1c460…1c480        6f 66 20 61 20 70 72 6f 67 72 61 6d 20 6f 72 20 72 6f 75 74 69 6e 65 2c 20 69 73 20 63 72 65 61   ┆of a program or routine, is crea┆
0x1c480…1c4a0        74 65 64 20 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 73 74 65 70   ┆ted  in the following three step┆
0x1c4a0…1c4a6        73 2e 0d 0a 0d 0a                                                                                 ┆s.    ┆
0x1c4a6…1c4a9        FormFeed {
0x1c4a6…1c4a9          0c 83 bc                                                                                          ┆   ┆
0x1c4a6…1c4a9        }
0x1c4a9…1c4c0        0a 31 29 20 84 41 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20                              ┆ 1)  Allocation of the ┆
0x1c4c0…1c4e0        6e 65 63 65 73 73 61 72 79 20 28 69 6e 69 74 69 61 6c 29 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74   ┆necessary (initial) amount of st┆
0x1c4e0…1c500        61 63 6b 20 61 6e 64 20 0a 19 83 80 80 68 65 61 70 2e 20 49 6e 20 74 68 65 20 63 61 73 65 20 6f   ┆ack and      heap. In the case o┆
0x1c500…1c520        66 20 61 20 70 72 6f 67 72 61 6d 20 74 68 69 73 20 6d 65 61 6e 73 20 61 20 77 68 6f 6c 65 20 6e   ┆f a program this means a whole n┆
0x1c520…1c540        65 77 20 0a 19 83 80 80 73 74 61 63 6b 3b 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20   ┆ew      stack; in the case of a ┆
0x1c540…1c560        72 6f 75 74 69 6e 65 20 69 74 20 6d 65 61 6e 73 20 61 6e 20 a1 61 63 74 69 76 61 74 69 6f 6e 20   ┆routine it means an  activation ┆
0x1c560…1c580        0a 19 83 80 84 72 65 63 6f 72 64 e1 20 69 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 66 20 74 68 65   ┆     record  in the stack of the┆
0x1c580…1c5a0        20 63 61 6c 6c 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 0d 0a 32 29 20 50 61 72 61 6d 65 74 65   ┆ calling process.    2) Paramete┆
0x1c5a0…1c5c0        72 20 70 61 73 73 69 6e 67 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 36 2e 31 2e 0d 0a 0d 0a 33   ┆r passing, cf. section 6.1.    3┆
0x1c5c0…1c5e0        29 20 84 45 6c 61 62 6f 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f   ┆)  Elaboration of the declaratio┆
0x1c5e0…1c600        6e 73 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 73 2c 20 61 73 20 0a 19 83 80 80 64 65 73 63 72 69   ┆ns of the blocks, as      descri┆
0x1c600…1c620 (227,) 62 65 64 20 62 65 6c 6f 77 2e 0d 0a 0d 0a 57 68 65 6e 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f   ┆bed below.    When an incarnatio┆
0x1c620…1c640        6e 20 68 61 73 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 74 68 65 20 61 63 74 69 6f 6e 73 20 70   ┆n has been created the actions p┆
0x1c640…1c660        61 72 74 20 6f 66 20 74 68 65 20 0a 62 6c 6f 63 6b 20 63 61 6e 20 62 65 20 65 78 65 63 75 74 65   ┆art of the  block can be execute┆
0x1c660…1c680        64 2c 20 63 66 2e 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 28 73 65 63 74 69 6f 6e 20 34 2e   ┆d, cf. function call (section 4.┆
0x1c680…1c6a0        32 29 2c 20 0a 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 20 28 73 65 63 74 69 6f 6e 20 35 2e 36   ┆2),  procedure call (section 5.6┆
0x1c6a0…1c6c0        29 2c 20 61 6e 64 20 63 72 65 61 74 65 20 63 61 6c 6c 20 28 73 65 63 74 69 6f 6e 20 39 2e 31 29   ┆), and create call (section 9.1)┆
0x1c6c0…1c6e0        2e 0d 0a 0d 0a 57 68 65 6e 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 63 74 69 6f   ┆.    When execution of the actio┆
0x1c6e0…1c700        6e 20 70 61 72 74 20 6f 66 20 61 20 72 6f 75 74 69 6e 65 20 74 65 72 6d 69 6e 61 74 65 73 20 0a   ┆n part of a routine terminates  ┆
0x1c700…1c720        74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 61 6c 6c 20 6c 6f 63 61 6c 20 72 65 66 65 72 65 6e 63   ┆the values of all local referenc┆
0x1c720…1c740        65 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 62 65 20 4e 49 4c 2c 20 0a 6f 74 68 65 72 77   ┆e variables must be NIL,  otherw┆
0x1c740…1c760        69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 0d 0a b0 a1 36 2e 32 2e 31   ┆ise a fault occurs.        6.2.1┆
0x1c760…1c780        20 54 68 65 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 50 61 72 74 0d 0a 0d 0a 54 68 65 20 64 65 63   ┆ The Declaration Part    The dec┆
0x1c780…1c7a0        6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 6f 66 20 61 20 62 6c 6f 63 6b 20 6e 61 6d 65 73 20 61   ┆laration part of a block names a┆
0x1c7a0…1c7c0        6e 64 20 64 65 66 69 6e 65 73 20 74 79 70 65 73 2c 20 0a 6f 62 6a 65 63 74 73 2c 20 72 6f 75 74   ┆nd defines types,  objects, rout┆
0x1c7c0…1c7e0        69 6e 65 73 20 61 6e 64 20 70 72 6f 67 72 61 6d 73 20 77 68 69 63 68 20 61 72 65 20 6c 6f 63 61   ┆ines and programs which are loca┆
0x1c7e0…1c800        6c 20 74 6f 20 74 68 65 20 62 6c 6f 63 6b 2c 20 0a 69 2e 65 2e 20 6e 6f 74 20 76 69 73 69 62 6c   ┆l to the block,  i.e. not visibl┆
0x1c800…1c820 (228,) 65 20 6f 75 74 73 69 64 65 20 74 68 65 20 62 6c 6f 63 6b 2e 20 54 68 65 20 6e 61 6d 65 73 20 69   ┆e outside the block. The names i┆
0x1c820…1c840        6e 74 72 6f 64 75 63 65 64 20 69 6e 20 0a 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6d   ┆ntroduced in  the declarations m┆
0x1c840…1c860        61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 6c 6f 63 6b 20 74 6f 20 72   ┆ay be used within the block to r┆
0x1c860…1c880        65 66 65 72 20 74 6f 20 0a 74 68 65 20 64 65 66 69 6e 65 64 20 65 6e 74 69 74 69 65 73 2c 20 63   ┆efer to  the defined entities, c┆
0x1c880…1c8a0        66 2e 20 63 68 61 70 74 65 72 20 38 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d   ┆f. chapter 8.                   ┆
0x1c8a0…1c8c0        0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 83 e0 0a 56 61 72 69 61 62 6c 65 73 20 6f 66 20 73 68 69 65   ┆               Variables of shie┆
0x1c8c0…1c8e0        6c 64 65 64 20 74 79 70 65 73 2c 20 65 78 63 65 70 74 20 72 65 66 65 72 65 6e 63 65 2c 20 61 6e   ┆lded types, except reference, an┆
0x1c8e0…1c900        64 20 76 61 72 69 61 62 6c 65 73 20 0a 77 68 69 63 68 20 68 61 76 65 20 63 6f 6d 70 6f 6e 65 6e   ┆d variables  which have componen┆
0x1c900…1c920        74 73 20 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 20 6d 61 79 20 6e 6f 74 20 62 65 20 64 65 63   ┆ts of these types may not be dec┆
0x1c920…1c940        6c 61 72 65 64 20 69 6e 20 0a 61 20 72 6f 75 74 69 6e 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20   ┆lared in  a routine declaration ┆
0x1c940…1c960        70 61 72 74 2c 20 69 2e 65 2e 20 73 75 63 68 20 76 61 72 69 61 62 6c 65 73 20 63 61 6e 20 6f 6e   ┆part, i.e. such variables can on┆
0x1c960…1c980        6c 79 20 62 65 20 0a 64 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 62 6c 6f   ┆ly be  declared in the outer blo┆
0x1c980…1c9a0        63 6b 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 2e 0d 0a 0d 0a 54 68 65 20 64 65 63 6c 61 72 61 74   ┆ck of a program.    The declarat┆
0x1c9a0…1c9c0        69 6f 6e 73 20 69 6e 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 6f 66 20   ┆ions in the declaration part of ┆
0x1c9c0…1c9e0        61 20 62 6c 6f 63 6b 20 61 72 65 20 0a 65 6c 61 62 6f 72 61 74 65 64 20 69 6e 20 74 68 65 20 6f   ┆a block are  elaborated in the o┆
0x1c9e0…1ca00        72 64 65 72 20 6f 66 20 6f 63 63 75 72 72 65 6e 63 65 2e 20 45 6c 61 62 6f 72 61 74 69 6f 6e 20   ┆rder of occurrence. Elaboration ┆
0x1ca00…1ca20 (229,) 6f 66 20 74 79 70 65 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 69 73 20 64 65 73 63 72 69 62   ┆of type  declarations is describ┆
0x1ca20…1ca40        65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 33 2e 32 2c 20 65 6c 61 62 6f 72 61 74 69 6f 6e 20 6f   ┆ed in section 3.2, elaboration o┆
0x1ca40…1ca60        66 20 0a 76 61 72 69 61 62 6c 65 20 61 6e 64 20 73 68 61 72 65 64 20 64 65 63 6c 61 72 61 74 69   ┆f  variable and shared declarati┆
0x1ca60…1ca80        6f 6e 73 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 0a   ┆ons is described in subsection  ┆
0x1ca80…1caa0        33 2e 31 32 2e 32 2c 20 61 6e 64 20 63 6f 6e 73 74 61 6e 74 20 64 65 63 6c 61 72 61 74 69 6f 6e   ┆3.12.2, and constant declaration┆
0x1caa0…1cac0        73 20 6e 65 65 64 20 6e 6f 20 65 6c 61 62 6f 72 61 74 69 6f 6e 20 61 74 20 0a 72 75 6e 2d 74 69   ┆s need no elaboration at  run-ti┆
0x1cac0…1cae0        6d 65 2e 0d 0a 0d 0a 54 68 65 20 65 6c 61 62 6f 72 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 75 74   ┆me.    The elaboration of a rout┆
0x1cae0…1cb00        69 6e 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 63 61 75 73 65   ┆ine or program declaration cause┆
0x1cb00…1cb20        73 20 0a 61 6c 6c 20 74 79 70 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 27 66 6f 72   ┆s  all types defined in the 'for┆
0x1cb20…1cb40        6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 27 20 74 6f 20 62 65 20 0a 65 73 74 61 62 6c 69 73 68   ┆mal parameters' to be  establish┆
0x1cb40…1cb60        65 64 2e 20 57 68 65 6e 20 61 20 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69   ┆ed. When a program declaration i┆
0x1cb60…1cb80        73 20 65 6c 61 62 6f 72 61 74 65 64 20 61 20 a1 73 75 62 2d 0a 19 80 80 84 70 72 6f 67 72 61 6d   ┆s elaborated a  sub-     program┆
0x1cb80…1cba0        20 6f 62 6a 65 63 74 e1 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 74 61   ┆ object  is allocated in the sta┆
0x1cba0…1cbc0        63 6b 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 0a 62 65 69 6e 67 20 63 72 65 61 74 65 64   ┆ck of the process  being created┆
0x1cbc0…1cbe0        2c 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72 6f 67 72 61   ┆, and associated with the progra┆
0x1cbe0…1cc00        6d 20 6e 61 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 64 65 63 6c 61 72 61   ┆m name  specified in the declara┆
0x1cc00…1cc20 (230,) 74 69 6f 6e 2e 20 55 6e 6c 65 73 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 20 69   ┆tion. Unless the program block i┆
0x1cc20…1cc40        73 20 0a 65 78 74 65 72 6e 61 6c 2c 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 6f 62 6a   ┆s  external, the sub-program obj┆
0x1cc40…1cc60        65 63 74 20 69 73 20 6c 69 6e 6b 65 64 20 28 61 73 20 69 66 20 62 79 20 61 6e 20 0a 69 6d 70 6c   ┆ect is linked (as if by an  impl┆
0x1cc60…1cc80        69 63 69 74 20 6c 69 6e 6b 20 63 61 6c 6c 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 39 29 20 74   ┆icit link call, cf. chapter 9) t┆
0x1cc80…1cca0        6f 20 74 68 65 20 62 6c 6f 63 6b 3b 20 6f 74 68 65 72 77 69 73 65 20 0a 69 74 20 69 73 20 69 6e   ┆o the block; otherwise  it is in┆
0x1cca0…1ccc0        69 74 69 61 6c 69 7a 65 64 20 61 73 20 68 61 76 69 6e 67 20 73 74 61 74 65 20 75 6e 6c 69 6e 6b   ┆itialized as having state unlink┆
0x1ccc0…1cce0        65 64 2e 0d 0a 0d 0a 54 68 65 20 65 6c 61 62 6f 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 65   ┆ed.    The elaboration of the de┆
0x1cce0…1cd00        63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 66 6f 72 20   ┆claration part is performed for ┆
0x1cd00…1cd20        0a 65 61 63 68 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61 20 62 6c 6f 63 6b 2c 20 61 6e   ┆ each incarnation of a block, an┆
0x1cd20…1cd40        64 20 74 68 65 20 6e 61 6d 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 74 68 65 20 0a 64   ┆d the names introduced in the  d┆
0x1cd40…1cd60        65 63 6c 61 72 61 74 69 6f 6e 73 2c 20 77 68 65 6e 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 74   ┆eclarations, when occurring in t┆
0x1cd60…1cd80        68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 2c 20 0a 72 65 66 65   ┆he remainder of the block,  refe┆
0x1cd80…1cda0        72 20 74 6f 20 74 68 6f 73 65 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 65 20 6e 61 6d 65   ┆r to those instances of the name┆
0x1cda0…1cdc0        64 20 65 6e 74 69 74 69 65 73 20 77 68 69 63 68 20 68 61 76 65 20 0a 62 65 65 6e 20 65 73 74 61   ┆d entities which have  been esta┆
0x1cdc0…1cde0        62 6c 69 73 68 65 64 20 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 70 61   ┆blished or allocated when the pa┆
0x1cde0…1ce00        72 74 69 63 75 6c 61 72 20 0a 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 6c 6f   ┆rticular  incarnation of the blo┆
0x1ce00…1ce20 (231,) 63 6b 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a 0d 0a 49 6e 20 74 68 65 20 63 61 73 65 20 6f   ┆ck was created.    In the case o┆
0x1ce20…1ce40        66 20 61 20 66 75 6e 63 74 69 6f 6e 20 62 6c 6f 63 6b 20 65 6c 61 62 6f 72 61 74 69 6f 6e 20 6f   ┆f a function block elaboration o┆
0x1ce40…1ce60        66 20 74 68 65 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 2c 20 65 76 65 6e 20 69 66   ┆f the  declaration part, even if┆
0x1ce60…1ce80        20 69 74 20 69 73 20 65 6d 70 74 79 2c 20 69 6e 63 6c 75 64 65 73 20 0a 65 73 74 61 62 6c 69 73   ┆ it is empty, includes  establis┆
0x1ce80…1cea0        68 6d 65 6e 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 74 79 70 65 20 61 6e 64 20 61 6c 6c   ┆hment of the result type and all┆
0x1cea0…1cec0        6f 63 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 0a 6f 66 20 61 6e 20 69 6d 70 6c   ┆ocation on the stack  of an impl┆
0x1cec0…1cee0        69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 a1 72 65 73 75 6c 74 20 6f 62 6a 65 63 74 e1 2e   ┆icitly declared  result object .┆
0x1cee0…1cf00        20 54 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 0a 6f 66 20 74 68 65 20 72 65 73 75 6c   ┆ The initial value  of the resul┆
0x1cf00…1cf20        74 20 6f 62 6a 65 63 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a   ┆t object is undefined.     Note:┆
0x1cf20…1cf40        0d 0a 54 68 65 20 73 74 61 74 69 63 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 6f 66 20 61 6e 20 69   ┆  The static environment of an i┆
0x1cf40…1cf60        6e 74 65 72 6e 61 6c 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 20 69 73 20 74 68 65 20 0a 73 61   ┆nternal program block is the  sa┆
0x1cf60…1cf80        6d 65 20 61 73 20 74 68 61 74 20 6f 66 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 70 72 6f 67   ┆me as that of the enclosing prog┆
0x1cf80…1cfa0        72 61 6d 20 62 6c 6f 63 6b 2c 20 69 2e 65 2e 20 6f 6e 6c 79 20 6e 61 6d 65 73 20 0a 8c 83 c8 0a   ┆ram block, i.e. only names      ┆
0x1cfa0…1cfc0        69 6e 20 63 6f 6e 74 65 78 74 73 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74 68 65 20 63 6f   ┆in contexts specified for the co┆
0x1cfc0…1cfe0        6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69 74 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 0a 38 2c 20   ┆mpilation unit, cf. chapter  8, ┆
0x1cfe0…1d000        70 72 65 64 65 66 69 6e 65 64 20 6e 61 6d 65 73 2c 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 73 20   ┆predefined names, and the names ┆
0x1d000…1d020 (232,) 6f 66 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 0a 6b 6e 6f 77 6e 20   ┆of formal parameters are  known ┆
0x1d020…1d040        66 72 6f 6d 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a   ┆from the start of the block.    ┆
0x1d040…1d060        45 6c 61 62 6f 72 61 74 69 6f 6e 20 6f 66 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 69 73 20 6e   ┆Elaboration of declarations is n┆
0x1d060…1d080        6f 74 20 74 68 65 20 6f 6e 6c 79 20 74 69 6d 65 20 74 79 70 65 73 20 6d 61 79 20 0a 62 65 20 65   ┆ot the only time types may  be e┆
0x1d080…1d0a0        73 74 61 62 6c 69 73 68 65 64 2e 20 46 75 72 74 68 65 72 20 74 79 70 65 73 20 6d 61 79 20 62 65   ┆stablished. Further types may be┆
0x1d0a0…1d0c0        20 65 73 74 61 62 6c 69 73 68 65 64 20 77 68 65 6e 20 66 6f 72 2c 20 0a 77 69 74 68 2c 20 61 6e   ┆ established when for,  with, an┆
0x1d0c0…1d0e0        64 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63 75 74 65 64 2e 0d   ┆d lock statements are executed. ┆
0x1d0e0…1d100        0a 0d 0a b0 f0 a1 45 78 61 6d 70 6c 65 20 28 6f 66 20 6e 65 73 74 65 64 20 72 6f 75 74 69 6e 65   ┆      Example (of nested routine┆
0x1d100…1d120        73 29 3a 0d 0a 0d 0a 54 59 50 45 20 70 61 72 69 74 79 3d 20 28 65 76 65 6e 2c 20 6f 64 64 29 3b   ┆s):    TYPE parity= (even, odd);┆
0x1d120…1d140        0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 62 79 74 65 5f 70 61 72 69 74 79 28 61 72 67 3a 20 62 79   ┆    FUNCTION byte_parity(arg: by┆
0x1d140…1d160        74 65 29 3a 20 70 61 72 69 74 79 3b 0d 0a 0d 0a 20 20 46 55 4e 43 54 49 4f 4e 20 65 76 65 6e 34   ┆te): parity;      FUNCTION even4┆
0x1d160…1d180        62 69 74 73 28 61 72 67 3a 20 30 2e 2e 31 35 29 3a 20 62 6f 6f 6c 65 61 6e 3b 0d 0a 20 20 20 20   ┆bits(arg: 0..15): boolean;      ┆
0x1d180…1d1a0        43 4f 4e 53 54 20 74 61 62 6c 65 3d 20 28 2e 20 30 2c 33 2c 35 2c 36 2c 39 2c 31 30 2c 31 32 2c   ┆CONST table= (. 0,3,5,6,9,10,12,┆
0x1d1a0…1d1c0        31 35 20 2e 29 3b 0d 0a 20 20 42 45 47 49 4e 20 65 76 65 6e 34 62 69 74 73 3a 3d 61 72 67 20 49   ┆15 .);    BEGIN even4bits:=arg I┆
0x1d1c0…1d1e0        4e 20 74 61 62 6c 65 20 45 4e 44 3b 0d 0a 0d 0a 42 45 47 49 4e 20 28 2a 20 62 79 74 65 20 70 61   ┆N table END;    BEGIN (* byte pa┆
0x1d1e0…1d200        72 69 74 79 20 2a 29 0d 0a 20 20 49 46 20 65 76 65 6e 34 62 69 74 73 28 69 6e 74 28 61 72 67 20   ┆rity *)    IF even4bits(int(arg ┆
0x1d200…1d220 (233,) 53 48 49 46 54 20 28 2d 34 29 29 29 20 2d 2d 20 6c 65 66 74 20 68 61 6c 66 20 62 79 74 65 0d 0a   ┆SHIFT (-4))) -- left half byte  ┆
0x1d220…1d240        20 20 20 20 3d 65 76 65 6e 34 62 69 74 73 28 69 6e 74 28 61 72 67 20 41 4e 44 20 20 48 46 29 29   ┆    =even4bits(int(arg AND  HF))┆
0x1d240…1d260        20 20 20 20 2d 2d 20 72 69 67 68 74 20 68 61 6c 66 20 62 79 74 65 0d 0a 20 20 54 48 45 4e 20 62   ┆    -- right half byte    THEN b┆
0x1d260…1d280        79 74 65 5f 70 61 72 69 74 79 3a 3d 65 76 65 6e 0d 0a 20 20 45 4c 53 45 20 62 79 74 65 5f 70 61   ┆yte_parity:=even    ELSE byte_pa┆
0x1d280…1d2a0        72 69 74 79 3a 3d 6f 64 64 0d 0a 45 4e 44 0d 0a 0d 0a 0d 0a b0 a1 36 2e 32 2e 32 20 46 6f 72 77   ┆rity:=odd  END        6.2.2 Forw┆
0x1d2a0…1d2c0        61 72 64 20 61 6e 64 20 45 78 74 65 72 6e 61 6c 20 42 6c 6f 63 6b 73 0d 0a 0d 0a 41 20 66 6f 72   ┆ard and External Blocks    A for┆
0x1d2c0…1d2e0        77 61 72 64 20 61 6e 6e 6f 75 6e 63 65 6d 65 6e 74 20 6f 66 20 61 20 64 65 63 6c 61 72 61 74 69   ┆ward announcement of a declarati┆
0x1d2e0…1d300        6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 0a 61 63 74 75 61 6c 20 62 6c 6f 63 6b 20   ┆on containing the  actual block ┆
0x1d300…1d320        6f 66 20 61 20 72 6f 75 74 69 6e 65 20 6d 61 79 20 62 65 20 67 69 76 65 6e 20 62 79 20 75 73 69   ┆of a routine may be given by usi┆
0x1d320…1d340        6e 67 20 74 68 65 20 6b 65 79 77 6f 72 64 20 0a 46 4f 52 57 41 52 44 20 69 6e 20 70 6c 61 63 65   ┆ng the keyword  FORWARD in place┆
0x1d340…1d360        20 6f 66 20 74 68 65 20 72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 2e 20 57 68 65 6e 20 61 20 66 6f   ┆ of the routine block. When a fo┆
0x1d360…1d380        72 77 61 72 64 20 0a 61 6e 6e 6f 75 6e 63 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 61 20 64 65   ┆rward  announcement is used a de┆
0x1d380…1d3a0        63 6c 61 72 61 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 75 74   ┆claration with an identical rout┆
0x1d3a0…1d3c0        69 6e 65 20 0a 68 65 61 64 69 6e 67 2c 20 69 2e 65 2e 20 61 6c 6c 20 6c 65 78 69 63 61 6c 20 65   ┆ine  heading, i.e. all lexical e┆
0x1d3c0…1d3e0        6c 65 6d 65 6e 74 73 20 69 64 65 6e 74 69 63 61 6c 2c 20 61 6e 64 20 61 6e 20 61 63 74 75 61 6c   ┆lements identical, and an actual┆
0x1d3e0…1d400        20 0a 72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 20 28 69 2e 65 2e 20 63 6f 6e 73 74 69 73 74 69 6e   ┆  routine block (i.e. constistin┆
0x1d400…1d420 (234,) 67 20 6f 66 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 2c 20 77 68 69 63 68 20 0a 6d 61   ┆g of declaration part, which  ma┆
0x1d420…1d440        79 20 62 65 20 65 6d 70 74 79 2c 20 61 6e 64 20 61 63 74 69 6f 6e 20 70 61 72 74 29 20 6d 75 73   ┆y be empty, and action part) mus┆
0x1d440…1d460        74 20 61 70 70 65 61 72 20 6c 61 74 65 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a 27 64 65 63   ┆t appear later in the same  'dec┆
0x1d460…1d480        6c 61 72 61 74 69 6f 6e 20 70 61 72 74 27 2e 20 49 6e 20 74 68 69 73 20 77 61 79 20 69 74 20 69   ┆laration part'. In this way it i┆
0x1d480…1d4a0        73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 6f 62 73 65 72 76 65 20 0a 74 68 65 20 72 75 6c 65 20   ┆s possible to observe  the rule ┆
0x1d4a0…1d4c0        6f 66 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 62 65 66 6f 72 65 20 75 73 65 2c 20 65 76 65 6e 20   ┆of declaration before use, even ┆
0x1d4c0…1d4e0        66 6f 72 20 6d 75 74 75 61 6c 6c 79 20 0a 72 65 63 75 72 73 69 76 65 20 72 6f 75 74 69 6e 65 73   ┆for mutually  recursive routines┆
0x1d4e0…1d500        2e 0d 0a 0d 0a 8c 83 d4 0a 54 68 65 20 62 6c 6f 63 6b 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20   ┆.        The block of a program ┆
0x1d500…1d520        6f 72 20 72 6f 75 74 69 6e 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 0a   ┆or routine may be specified as  ┆
0x1d520…1d540        65 78 74 65 72 6e 61 6c 2c 20 69 2e 65 2e 20 73 65 70 61 72 61 74 65 6c 79 20 63 6f 6d 70 69 6c   ┆external, i.e. separately compil┆
0x1d540…1d560        65 64 20 28 63 66 2e 20 63 68 61 70 74 65 72 20 38 29 2c 20 62 79 20 74 68 65 20 0a 6b 65 79 77   ┆ed (cf. chapter 8), by the  keyw┆
0x1d560…1d580        6f 72 64 20 45 58 54 45 52 4e 41 4c 2e 20 54 68 69 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75   ┆ord EXTERNAL. This may only be u┆
0x1d580…1d5a0        73 65 64 20 69 6e 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 0a 70 61 72 74 20 6f 66 20   ┆sed in the declaration  part of ┆
0x1d5a0…1d5c0        61 20 62 6c 6f 63 6b 20 61 70 70 65 61 72 69 6e 67 20 61 74 20 74 68 65 20 6f 75 74 65 72 6d 6f   ┆a block appearing at the outermo┆
0x1d5c0…1d5e0        73 74 20 62 6c 6f 63 6b 20 6c 65 76 65 6c 20 6f 66 20 61 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e   ┆st block level of a  compilation┆
0x1d5e0…1d600        20 75 6e 69 74 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 38 2e 32 2e 20 41 6e 20 65 78 74 65 72   ┆ unit, cf. section 8.2. An exter┆
0x1d600…1d620 (235,) 6e 61 6c 20 70 72 6f 67 72 61 6d 20 6f 72 20 0a 72 6f 75 74 69 6e 65 20 79 20 70 6f 73 73 69 62   ┆nal program or  routine y possib┆
0x1d620…1d640        6c 79 20 62 65 20 77 72 69 74 74 65 6e 20 69 6e 20 61 6e 6f 74 68 65 72 20 70 72 6f 67 72 61 6d   ┆ly be written in another program┆
0x1d640…1d660        6d 69 6e 67 20 0a 6c 61 6e 67 75 61 67 65 20 61 6e 64 20 63 6f 6d 70 69 6c 65 64 20 62 79 20 61   ┆ming  language and compiled by a┆
0x1d660…1d680        20 63 6f 6d 70 69 6c 65 72 20 66 6f 72 20 74 68 61 74 20 6c 61 6e 67 75 61 67 65 20 0a 70 72 6f   ┆ compiler for that language  pro┆
0x1d680…1d6a0        76 69 64 65 64 20 69 74 20 69 73 20 6f 62 6a 65 63 74 20 63 6f 64 65 20 66 6f 72 6d 61 74 20 63   ┆vided it is object code format c┆
0x1d6a0…1d6c0        6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65 20 52 65 61 6c 2d 0a 54 69 6d 65 20 50 61   ┆ompatible with the Real- Time Pa┆
0x1d6c0…1d6e0        73 63 61 6c 20 63 6f 6d 70 69 6c 65 72 20 69 6e 20 71 75 65 73 74 69 6f 6e 2e 0d 0a 0d 0a 44 75   ┆scal compiler in question.    Du┆
0x1d6e0…1d700        65 20 74 6f 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 73 20 62 65 74 77 65 65 6e 20 72 6f 75   ┆e to the differences between rou┆
0x1d700…1d720        74 69 6e 65 73 20 61 6e 64 20 70 72 6f 67 72 61 6d 73 20 74 68 65 20 0a 6c 69 6e 6b 69 6e 67 20   ┆tines and programs the  linking ┆
0x1d720…1d740        6f 66 20 61 20 70 72 6f 67 72 61 6d 20 74 6f 20 61 20 73 65 70 61 72 61 74 65 6c 79 20 63 6f 6d   ┆of a program to a separately com┆
0x1d740…1d760        70 69 6c 65 64 20 62 6c 6f 63 6b 20 69 73 20 0a 73 6f 6d 65 77 68 61 74 20 64 69 66 66 65 72 65   ┆piled block is  somewhat differe┆
0x1d760…1d780        6e 74 20 69 6e 20 74 68 65 20 74 77 6f 20 63 61 73 65 73 2e 0d 0a 0d 0a 44 75 72 69 6e 67 20 74   ┆nt in the two cases.    During t┆
0x1d780…1d7a0        68 65 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f   ┆he execution of an incarnation o┆
0x1d7a0…1d7c0        66 20 61 20 70 72 6f 67 72 61 6d 20 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e 20 65 78 74 65 72   ┆f a program  containing an exter┆
0x1d7c0…1d7e0        6e 61 6c 20 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 68 65 20 6c 69 6e 6b   ┆nal program declaration the link┆
0x1d7e0…1d800        69 6e 67 20 0a 62 65 74 77 65 65 6e 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 73 75 62 2d 70   ┆ing  between the resulting sub-p┆
0x1d800…1d820 (236,) 72 6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20 61   ┆rogram object and the block of a┆
0x1d820…1d840        20 0a 73 65 70 61 72 61 74 65 6c 79 20 63 6f 6d 70 69 6c 65 64 20 70 72 6f 67 72 61 6d 20 69 73   ┆  separately compiled program is┆
0x1d840…1d860        20 65 73 74 61 62 6c 69 73 68 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 0a 74 68 65   ┆ established as a result of  the┆
0x1d860…1d880        20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 6e 6b 20   ┆ evaluation of an explicit link ┆
0x1d880…1d8a0        63 61 6c 6c 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 39 2e 0d 0a 0d 0a 54 68 65 20 61 73 73 6f   ┆call, cf. chapter 9.    The asso┆
0x1d8a0…1d8c0        63 69 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 62 6c 6f 63 6b 20 6f 66 20 61 20 73   ┆ciation between the block of a s┆
0x1d8c0…1d8e0        65 70 61 72 61 74 65 6c 79 20 63 6f 6d 70 69 6c 65 64 20 0a 72 6f 75 74 69 6e 65 20 61 6e 64 20   ┆eparately compiled  routine and ┆
0x1d8e0…1d900        74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 70 72 6f 63 65 64 75 72 65 20 6e 61 6d 65 20 73   ┆the function or procedure name s┆
0x1d900…1d920        70 65 63 69 66 69 65 64 20 69 6e 20 61 6e 20 0a 65 78 74 65 72 6e 61 6c 20 72 6f 75 74 69 6e 65   ┆pecified in an  external routine┆
0x1d920…1d940        20 64 65 6c 63 61 72 61 74 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 6c 69 6e 6b 69 6e 67 20 6f   ┆ delcaration, i.e. the linking o┆
0x1d940…1d960        66 20 74 68 65 20 0a 72 6f 75 74 69 6e 65 20 62 6c 6f 63 6b 20 74 6f 20 74 68 65 20 70 72 6f 67   ┆f the  routine block to the prog┆
0x1d960…1d980        72 61 6d 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 0a 64 65 63 6c 61   ┆ram in which the external  decla┆
0x1d980…1d9a0        72 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 6d 75 73 74 20 62 65 20 65 73 74 61 62 6c 69 73 68   ┆ration occurs, must be establish┆
0x1d9a0…1d9c0        65 64 20 62 79 20 61 20 6c 69 6e 6b 61 67 65 20 65 64 69 74 6f 72 20 0a 62 65 66 6f 72 65 20 61   ┆ed by a linkage editor  before a┆
0x1d9c0…1d9e0        6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 61 6e   ┆n incarnation of the program can┆
0x1d9e0…1da00        20 62 65 20 63 72 65 61 74 65 64 2e 20 54 68 69 73 20 0a 63 61 6e 20 62 65 20 64 6f 6e 65 20 64   ┆ be created. This  can be done d┆
0x1da00…1da20 (237,) 75 72 69 6e 67 20 61 20 73 65 70 61 72 61 74 65 20 6c 69 6e 6b 2d 70 68 61 73 65 20 66 6f 6c 6c   ┆uring a separate link-phase foll┆
0x1da20…1da40        6f 77 69 6e 67 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 2c 20 6f 72 20 69 74 20 63 61 6e 20 62 65   ┆owing  compilation, or it can be┆
0x1da40…1da60        20 64 6f 6e 65 20 61 73 20 61 20 62 79 2d 65 66 66 65 63 74 20 6f 66 20 70 72 6f 67 72 61 6d 20   ┆ done as a by-effect of program ┆
0x1da60…1da80        0a 6c 69 6e 6b 69 6e 67 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0d 0a 0d 0a 54 68 65 20 61 6d 6f   ┆ linking at run-time.    The amo┆
0x1da80…1daa0        75 6e 74 20 61 6e 64 20 6b 69 6e 64 20 6f 66 20 63 68 65 63 6b 69 6e 67 20 6f 66 20 74 68 65 20   ┆unt and kind of checking of the ┆
0x1daa0…1dac0        61 67 72 65 65 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 74 68 65 20 0a 27 66 6f 72 6d 61 6c 20 70   ┆agreement between the  'formal p┆
0x1dac0…1dae0        61 72 61 6d 65 74 65 72 73 27 20 6f 66 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 70 72 6f 67 72 61   ┆arameters' of an external progra┆
0x1dae0…1db00        6d 20 6f 72 20 72 6f 75 74 69 6e 65 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 20 61 6e 64 20 74 68   ┆m or routine  declaration and th┆
0x1db00…1db20        65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72   ┆e corresponding formal parameter┆
0x1db20…1db40        20 0a 73 70 65 63 69 66 69 63 61 74 69 6f 6e 6f 66 20 74 68 65 20 73 65 70 61 72 61 74 65 6c 79   ┆  specificationof the separately┆
0x1db40…1db60        20 63 6f 6d 70 69 6c 65 64 20 62 6c 6f 63 6b 2c 20 77 68 69 63 68 20 69 73 20 0a 70 65 72 66 6f   ┆ compiled block, which is  perfo┆
0x1db60…1db80        72 6d 65 64 20 64 75 72 69 6e 67 20 6c 69 6e 6b 69 6e 67 2c 20 69 73 20 69 6d 70 6c 65 6d 65 6e   ┆rmed during linking, is implemen┆
0x1db80…1dba0        74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 2e 20 54 68 69 73 20 0a 69 73 20 74 72 75 65 20   ┆tation dependent. This  is true ┆
0x1dba0…1dbc0        66 6f 72 20 62 6f 74 68 20 63 61 73 65 73 20 6f 66 20 6c 69 6e 6b 69 6e 67 2e 20 49 6e 20 6f 72   ┆for both cases of linking. In or┆
0x1dbc0…1dbe0        64 65 72 20 74 6f 20 66 61 63 69 6c 69 74 61 74 65 20 0a 6c 69 6e 6b 69 6e 67 20 77 69 74 68 20   ┆der to facilitate  linking with ┆
0x1dbe0…1dc00        70 72 6f 67 72 61 6d 73 20 77 72 69 74 74 65 6e 20 69 6e 20 6f 74 68 65 72 20 6c 61 6e 67 75 61   ┆programs written in other langua┆
0x1dc00…1dc20 (238,) 67 65 73 20 74 68 65 20 0a 70 61 72 61 6d 65 74 65 72 20 61 6e 64 20 72 65 73 75 6c 74 20 70 61   ┆ges the  parameter and result pa┆
0x1dc20…1dc40        73 73 69 6e 67 20 66 6f 72 6d 61 74 73 20 75 73 65 64 20 62 79 20 61 6e 20 0a 8c 83 c8 0a 69 6d   ┆ssing formats used by an      im┆
0x1dc40…1dc60        70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 61 70 70 72 6f 70 72 69 61 74 65   ┆plementation must be appropriate┆
0x1dc60…1dc80        6c 79 20 63 68 6f 73 65 6e 20 61 6e 64 20 74 68 6f 72 6f 75 67 68 6c 79 20 0a 64 6f 63 75 6d 65   ┆ly chosen and thoroughly  docume┆
0x1dc80…1dca0        6e 74 65 64 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 20 28 6f 66 20 6d 75 74 75 61 6c 6c 79 20 72   ┆nted.     Example (of mutually r┆
0x1dca0…1dcc0        65 63 75 72 73 69 76 65 20 72 6f 75 74 69 6e 65 73 29 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45   ┆ecursive routines):    PROCEDURE┆
0x1dcc0…1dce0        20 66 69 72 73 74 28 70 61 72 31 2c 20 70 61 72 32 3a 20 74 79 70 65 31 29 3b 20 46 4f 52 57 41   ┆ first(par1, par2: type1); FORWA┆
0x1dce0…1dd00        52 44 3b 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 73 65 63 6f 6e 64 28 70 61 72 3a 20 70 61 72   ┆RD;    PROCEDURE second(par: par┆
0x1dd00…1dd20        5f 74 79 70 65 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 42 45 47 49 4e 0d 0a 20 20 2e 2e 2e 0d 0a 20 20   ┆_type);    ...  BEGIN    ...    ┆
0x1dd20…1dd40        66 69 72 73 74 28 61 63 74 31 2c 20 63 74 32 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 45 4e 44 3b 0d 0a   ┆first(act1, ct2);    ...  END;  ┆
0x1dd40…1dd60        0d 0a 50 52 4f 43 45 44 55 52 45 20 66 69 72 73 74 28 70 61 72 74 31 2c 20 70 61 72 32 3a 20 74   ┆  PROCEDURE first(part1, par2: t┆
0x1dd60…1dd80        79 70 65 31 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 42 45 47 49 4e 0d 0a 20 20 2e 2e 2e 0d 0a 20 20 73   ┆ype1);    ...  BEGIN    ...    s┆
0x1dd80…1dda0        65 63 6f 6e 64 28 61 63 74 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 45 4e 44 0d 0a 0d 0a 0d 0a b0 a1 36   ┆econd(act);    ...  END        6┆
0x1dda0…1ddc0        2e 32 2e 33 20 54 68 65 20 41 63 74 69 6f 6e 20 50 61 72 74 0d 0a 0d 0a 45 78 65 63 75 74 69 6f   ┆.2.3 The Action Part    Executio┆
0x1ddc0…1dde0        6e 20 6f 66 20 74 68 65 20 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 62 6c 6f 63 6b 20 6d 65 61 6e   ┆n of the actions of a block mean┆
0x1dde0…1de00        73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 69 74 73 20 0a 63 6f 6d 70 6f 75 6e 64 20 73 74 61   ┆s execution of its  compound sta┆
0x1de00…1de20 (239,) 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 63 68 61   ┆tement. This is described in cha┆
0x1de20…1de40        70 74 65 72 20 35 2e 20 0a 45 78 65 63 75 74 69 6f 6e 69 73 20 a1 74 65 72 6d 69 6e 61 74 65 64   ┆pter 5.  Executionis  terminated┆
0x1de40…1de60        e1 20 77 68 65 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73   ┆  when the compound statement is┆
0x1de60…1de80        20 0a 65 78 68 61 75 73 74 65 64 2c 20 77 68 65 6e 20 61 6e 20 65 78 69 74 20 73 74 61 74 65 6d   ┆  exhausted, when an exit statem┆
0x1de80…1dea0        65 6e 74 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 6f 72 20 77 68 65 6e 20 61 20 0a 66 61 75 6c   ┆ent is executed, or when a  faul┆
0x1dea0…1dec0        74 20 6f 63 63 75 72 73 2e 20 57 68 65 6e 20 61 20 70 72 6f 63 65 73 73 20 74 65 72 6d 69 6e 61   ┆t occurs. When a process termina┆
0x1dec0…1dee0        74 65 73 20 69 74 20 67 6f 65 73 20 69 6e 74 6f 20 61 20 0a 70 61 73 73 69 76 65 20 73 74 61 74   ┆tes it goes into a  passive stat┆
0x1dee0…1df00        65 20 77 68 65 72 65 20 69 74 20 72 65 6d 61 69 6e 73 20 75 6e 74 69 6c 20 72 65 6d 6f 76 65 64   ┆e where it remains until removed┆
0x1df00…1df20        20 62 79 20 69 74 73 20 70 61 72 65 6e 74 2e 20 0a 57 68 65 6e 20 61 20 70 72 6f 63 65 64 75 72   ┆ by its parent.  When a procedur┆
0x1df20…1df40        65 20 61 63 74 69 76 61 74 69 6f 6e 20 74 65 72 6d 69 6e 61 74 65 73 20 69 74 73 20 61 63 74 69   ┆e activation terminates its acti┆
0x1df40…1df60        76 61 74 69 6f 6e 20 72 65 63 6f 72 64 20 0a 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e   ┆vation record  is deallocated an┆
0x1df60…1df80        64 20 61 20 72 65 74 75 72 6e 20 69 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72   ┆d a return is made to the caller┆
0x1df80…1dfa0        2c 20 69 2e 65 2e 20 74 68 65 20 0a 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 20 69 73 20 63 6f   ┆, i.e. the  procedure call is co┆
0x1dfa0…1dfc0        6d 70 6c 65 74 65 64 2e 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 63 74 69 76 61 74   ┆mpleted. When a function activat┆
0x1dfc0…1dfe0        69 6f 6e 20 0a 74 65 72 6d 69 6e 61 74 65 73 20 69 74 73 20 61 63 74 69 76 61 74 69 6f 6e 20 72   ┆ion  terminates its activation r┆
0x1dfe0…1e000        65 63 6f 72 64 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 74 68 65 20 0a 66 69   ┆ecord is deallocated and the  fi┆
0x1e000…1e020 (240,) 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 72 65 73 75 6c 74   ┆nal value of the implicit result┆
0x1e020…1e040        20 6f 62 6a 65 63 74 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 74 68 65 20 66 75 6e   ┆ object is the value of  the fun┆
0x1e040…1e060        63 74 69 6f 6e 20 63 61 6c 6c 20 77 68 6f 73 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 63 61 75 73   ┆ction call whose evaluation caus┆
0x1e060…1e076        65 64 20 74 68 65 20 61 63 74 69 76 61 74 69 6f 6e 2e 0d 0a 0d 0a                                 ┆ed the activation.    ┆
0x1e076…1e079        FormFeed {
0x1e076…1e079          0c 83 d4                                                                                          ┆   ┆
0x1e076…1e079        }
0x1e079…1e080        0a b0 a1 37 2e 20 46                                                                              ┆   7. F┆
0x1e080…1e0a0        41 55 4c 54 20 48 41 4e 44 4c 49 4e 47 0d 0a 0d 0a 41 20 6e 75 6d 62 65 72 20 6f 66 20 76 69 6f   ┆AULT HANDLING    A number of vio┆
0x1e0a0…1e0c0        6c 61 74 69 6f 6e 73 6f 66 20 74 68 65 20 72 75 6c 65 73 20 6f 66 20 52 65 61 6c 2d 54 69 6d 65   ┆lationsof the rules of Real-Time┆
0x1e0c0…1e0e0        20 50 61 73 63 61 6c 20 61 72 65 20 0a 72 65 66 65 72 72 65 64 20 74 6f 20 69 6e 20 74 68 69 73   ┆ Pascal are  referred to in this┆
0x1e0e0…1e100        20 64 6f 63 75 6d 65 6e 74 20 61 73 20 66 61 75 6c 74 73 2e 20 46 61 75 6c 74 73 20 61 72 65 20   ┆ document as faults. Faults are ┆
0x1e100…1e120        65 72 72 6f 72 73 20 0a 77 68 69 63 68 20 63 61 6e 6e 6f 74 2c 20 61 74 20 6c 65 61 73 74 20 6e   ┆errors  which cannot, at least n┆
0x1e120…1e140        6f 74 20 69 6e 20 63 61 6c 6c 20 63 61 73 65 73 2c 20 62 65 20 64 65 74 65 63 74 65 64 20 61 74   ┆ot in call cases, be detected at┆
0x1e140…1e160        20 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 20 46 61 75 6c 74 73 20 77 68 69 63 68 20 61 72 65   ┆  compile-time. Faults which are┆
0x1e160…1e180        20 64 65 74 65 63 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 0a 63 61 75 73 65   ┆ detected at compile-time  cause┆
0x1e180…1e1a0        20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 72 65 6a 65 63 74 20 74 68 65 20 73 6f 75 72   ┆ the compiler to reject the sour┆
0x1e1a0…1e1c0        63 65 20 70 72 6f 67 72 61 6d 2e 20 57 68 65 6e 20 61 20 0a 66 61 75 6c 74 20 6f 63 63 75 72 73   ┆ce program. When a  fault occurs┆
0x1e1c0…1e1e0        20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 64 75 72 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 69   ┆ at run-time, during the executi┆
0x1e1e0…1e200        6f 6e 20 6f 66 20 61 6e 20 0a 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61 20 70 72 6f 67 72   ┆on of an  incarnation of a progr┆
0x1e200…1e220 (241,) 61 6d 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 68 61 70 70 65 6e 73 3a 0d 0a 0d 0a 31 2e   ┆am, the following happens:    1.┆
0x1e220…1e240        20 84 54 68 65 20 a1 65 78 63 65 70 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 e1 20 6f 66 20 74   ┆  The  exception procedure  of t┆
0x1e240…1e260        68 65 20 70 72 6f 67 72 61 6d 20 69 73 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 0a 19 83 80   ┆he program is called with a     ┆
0x1e260…1e280        80 66 61 75 6c 74 20 63 6f 64 65 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67   ┆ fault code parameter indicating┆
0x1e280…1e2a0        20 74 68 65 20 6b 69 6e 64 20 6f 66 20 66 61 75 6c 74 20 77 68 69 63 68 20 0a 19 83 80 80 6f 63   ┆ the kind of fault which      oc┆
0x1e2a0…1e2c0        63 75 72 72 65 64 2e 0d 0a 32 2e 20 84 57 68 65 6e 20 28 69 66 29 20 74 68 65 20 65 78 63 65 70   ┆curred.  2.  When (if) the excep┆
0x1e2c0…1e2e0        74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 70 72 6f 63 65   ┆tion procedure returns the proce┆
0x1e2e0…1e300        73 73 20 0a 19 83 80 80 74 65 72 6d 69 6e 61 74 65 73 20 61 6e 64 20 67 6f 65 73 20 69 6e 74 6f   ┆ss      terminates and goes into┆
0x1e300…1e320        20 61 20 70 61 73 73 69 76 65 20 73 74 61 74 65 20 61 73 20 69 66 20 65 78 65 63 75 74 69 6f 6e   ┆ a passive state as if execution┆
0x1e320…1e340        20 0a 19 83 80 80 6f 66 20 69 74 73 20 61 63 74 69 6f 6e 20 70 61 72 74 20 68 61 64 20 62 65 65   ┆      of its action part had bee┆
0x1e340…1e360        6e 20 63 6f 6d 70 6c 65 74 65 64 2e 0d 0a 0d 0a 46 61 75 6c 74 20 63 6f 64 65 73 20 61 72 65 20   ┆n completed.    Fault codes are ┆
0x1e360…1e380        69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 61 6e 64 20 6d 75 73   ┆implementation dependent and mus┆
0x1e380…1e3a0        74 20 62 65 20 0a 64 6f 63 75 6d 65 6e 74 65 64 20 66 6f 72 20 65 61 63 68 20 69 6d 70 6c 65 6d   ┆t be  documented for each implem┆
0x1e3a0…1e3c0        65 6e 74 61 74 69 6f 6e 2e 0d 0a 0d 0a 0d 0a b0 a1 37 2e 31 20 44 65 66 61 75 6c 74 20 45 78 63   ┆entation.        7.1 Default Exc┆
0x1e3c0…1e3e0        65 70 74 69 6f 6e 20 50 72 6f 63 65 64 75 72 65 0d 0a 0d 0a 45 76 65 72 79 20 69 6d 70 6c 65 6d   ┆eption Procedure    Every implem┆
0x1e3e0…1e400        65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 69 6e 63 6c 75 64 65 20 61 20 64 65 66 61 75 6c 74 20   ┆entation must include a default ┆
0x1e400…1e420 (242,) 65 78 63 65 70 74 69 6f 6e 20 0a 70 72 6f 63 65 64 75 72 65 20 77 68 69 63 68 20 6f 75 74 70 75   ┆exception  procedure which outpu┆
0x1e420…1e440        74 73 20 61 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 6f 66 20 74 68   ┆ts a snapshot of the stack of th┆
0x1e440…1e460        65 20 0a 63 61 6c 6c 69 6e 67 20 70 72 6f 63 65 73 73 20 61 6e 64 20 74 68 65 20 66 61 75 6c 74   ┆e  calling process and the fault┆
0x1e460…1e480        20 63 6f 64 65 2e 0d 0a 0d 0a 54 68 65 20 64 65 66 61 75 6c 74 20 65 78 63 65 70 74 69 6f 6e 20   ┆ code.    The default exception ┆
0x1e480…1e4a0        70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20   ┆procedure may also be called to ┆
0x1e4a0…1e4c0        0a 70 72 6f 76 69 64 65 20 74 72 61 63 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74   ┆ provide trace information about┆
0x1e4c0…1e4e0        20 61 20 70 72 6f 63 65 73 73 2e 20 53 75 63 68 20 61 6e 20 65 78 70 6c 69 63 69 74 20 0a 63 61   ┆ a process. Such an explicit  ca┆
0x1e4e0…1e500        6c 6c 20 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f   ┆ll does not cause the process to┆
0x1e500…1e520        20 74 65 72 6d 69 6e 61 74 65 2e 20 54 68 65 20 68 65 61 64 69 6e 67 20 6f 66 20 0a 74 68 65 20   ┆ terminate. The heading of  the ┆
0x1e520…1e540        64 65 66 61 75 6c 74 20 65 78 63 65 70 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 69 73 3a 0d   ┆default exception procedure is: ┆
0x1e540…1e560        0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 74 72 61 63 65 28 66 61 75 6c 74 3a 20 69 6e 74 65 67 65   ┆   PROCEDURE trace(fault: intege┆
0x1e560…1e568        72 29 0d 0a 0d 0a 0d 0a                                                                           ┆r)      ┆
0x1e568…1e56b        FormFeed {
0x1e568…1e56b          0c 83 a4                                                                                          ┆   ┆
0x1e568…1e56b        }
0x1e56b…1e580        0a b0 a1 37 2e 32 20 50 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66                                    ┆   7.2 Programmer-def┆
0x1e580…1e5a0        69 6e 65 64 20 45 78 63 65 70 74 69 6f 6e 20 50 72 6f 63 65 64 75 72 65 0d 0a 0d 0a 57 68 65 6e   ┆ined Exception Procedure    When┆
0x1e5a0…1e5c0        20 61 20 70 72 6f 63 65 64 75 72 65 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 65 78 63 65 70   ┆ a procedure with the name excep┆
0x1e5c0…1e5e0        74 69 6f 6e 20 61 6e 64 20 6f 6e 65 20 69 6e 74 65 67 65 72 2d 0a 74 79 70 65 20 70 61 72 61 6d   ┆tion and one integer- type param┆
0x1e5e0…1e600        65 74 65 72 2c 20 69 2e 65 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 65 78 63 65 70 74 69 6f   ┆eter, i.e.    PROCEDURE exceptio┆
0x1e600…1e620 (243,) 6e 28 66 61 75 6c 74 3a 20 69 6e 74 65 67 65 72 29 0d 0a 0d 0a 69 73 20 64 65 63 6c 61 72 65 64   ┆n(fault: integer)    is declared┆
0x1e620…1e640        20 28 69 6e 74 65 72 6e 61 6c 6c 79 29 20 61 74 20 74 68 65 20 6f 75 74 65 72 20 62 6c 6f 63 6b   ┆ (internally) at the outer block┆
0x1e640…1e660        20 6c 65 76 65 6c 20 6f 66 20 61 20 0a 70 72 6f 67 72 61 6d 2c 20 74 68 69 73 20 70 72 6f 63 65   ┆ level of a  program, this proce┆
0x1e660…1e680        64 75 72 65 20 62 65 63 6f 6d 65 73 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20 70 72 6f 63 65   ┆dure becomes the exception proce┆
0x1e680…1e6a0        64 75 72 65 20 6f 66 20 0a 74 68 65 20 70 72 6f 67 72 61 6d 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d   ┆dure of  the program.     Note: ┆
0x1e6a0…1e6c0        0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 61 6c 6c 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 6d 65   ┆ An ordinary call of a programme┆
0x1e6c0…1e6e0        72 2d 64 65 66 69 6e 65 64 20 65 78 63 65 70 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 0a 64   ┆r-defined exception procedure  d┆
0x1e6e0…1e700        6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61 20 70 72 6f 63 65 73 73 20 74 6f 20 74 65 72 6d 69   ┆oes not cause a process to termi┆
0x1e700…1e709        6e 61 74 65 2e 0d 0a 0d 0a                                                                        ┆nate.    ┆
0x1e709…1e70c        FormFeed {
0x1e709…1e70c          0c 81 b4                                                                                          ┆   ┆
0x1e709…1e70c        }
0x1e70c…1e720        0a b0 a1 38 2e 20 4e 41 4d 49 4e 47 20 45 4e 56 49 52 4f 4e                                       ┆   8. NAMING ENVIRON┆
0x1e720…1e740        4d 45 4e 54 53 0d 0a 0d 0a 54 68 65 20 72 75 6c 65 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20   ┆MENTS    The rules described in ┆
0x1e740…1e760        74 68 69 73 20 63 68 61 70 74 65 72 20 73 65 72 76 65 20 74 6f 20 64 65 66 69 6e 65 20 66 6f 72   ┆this chapter serve to define for┆
0x1e760…1e780        20 0a 65 76 65 72 79 20 70 6f 69 6e 74 20 69 6e 20 61 20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73   ┆  every point in a Real-Time Pas┆
0x1e780…1e7a0        63 61 6c 20 73 6f 75 72 63 65 20 74 65 78 74 20 74 68 65 20 a1 6e 61 6d 69 6e 67 20 0a 19 80 80   ┆cal source text the  naming     ┆
0x1e7a0…1e7c0        84 65 6e 76 69 72 6f 6e 6d 65 6e 74 e1 20 77 68 69 63 68 20 69 73 20 76 61 6c 69 65 64 20 61 74   ┆ environment  which is valied at┆
0x1e7c0…1e7e0        20 74 68 61 74 20 70 6f 69 6e 74 2e 20 41 20 6e 61 6d 69 6e 67 20 0a 65 6e 76 69 72 6f 6e 6d 65   ┆ that point. A naming  environme┆
0x1e7e0…1e800        6e 74 20 69 74 20 6d 75 73 74 20 68 61 76 65 20 61 6e 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6d   ┆nt it must have an independent m┆
0x1e800…1e820 (244,) 65 61 6e 69 6e 67 2c 20 69 2e 65 2e 20 61 6e 20 0a 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 74   ┆eaning, i.e. an  occurrence of t┆
0x1e820…1e840        68 65 20 6e 61 6d 65 20 6d 75 73 74 20 64 65 6e 6f 74 65 20 61 20 a2 e2 a1 70 72 6f 67 72 61 6d   ┆he name must denote a    program┆
0x1e840…1e860        20 65 6e 74 69 74 79 e1 20 0a 69 72 72 65 73 70 65 63 74 69 76 65 20 6f 66 20 74 68 65 20 73 79   ┆ entity   irrespective of the sy┆
0x1e860…1e880        6e 74 61 63 74 69 63 20 63 6f 6e 74 65 78 74 2e 20 41 20 70 72 6f 67 72 61 6d 20 65 6e 74 69 74   ┆ntactic context. A program entit┆
0x1e880…1e8a0        79 20 69 73 20 61 20 0a 76 61 6c 75 65 2c 20 61 20 74 79 70 65 2c 20 61 20 66 61 6d 69 6c 79 20   ┆y is a  value, a type, a family ┆
0x1e8a0…1e8c0        6f 66 20 63 6f 6e 66 6f 72 6d 61 6e 74 20 74 79 70 65 73 2c 20 61 6e 20 6f 62 6a 65 63 74 20 0a   ┆of conformant types, an object  ┆
0x1e8c0…1e8e0        28 77 68 69 63 68 20 6d 61 79 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 62 65 20 61 20 66 6f   ┆(which may in particular be a fo┆
0x1e8e0…1e900        72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 29 2c 20 61 20 6c 61 62 65 6c 2c 20 61 20 0a 72 6f 75   ┆rmal parameter), a label, a  rou┆
0x1e900…1e920        74 69 6e 65 2c 20 6f 72 20 61 20 28 73 75 62 2d 29 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 76 69   ┆tine, or a (sub-)program. The vi┆
0x1e920…1e940        73 69 62 69 6c 69 74 79 20 72 75 6c 65 73 20 65 6e 73 75 72 65 20 0a 74 68 61 74 20 74 68 65 20   ┆sibility rules ensure  that the ┆
0x1e940…1e960        65 6e 74 69 74 79 20 64 65 6e 6f 74 65 64 20 62 79 20 61 20 6e 61 6d 65 20 69 73 20 61 6c 77 61   ┆entity denoted by a name is alwa┆
0x1e960…1e980        79 73 20 75 6e 69 71 75 65 6c 79 20 0a 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 0d 0a 49 6e 20 6f   ┆ys uniquely  determined.    In o┆
0x1e980…1e9a0        74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 69 73 20   ┆ther words, the purpose of this ┆
0x1e9a0…1e9c0        63 68 61 70 74 65 72 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68 65 20 0a 71 75 65 73 74 69   ┆chapter is to answer the  questi┆
0x1e9c0…1e9e0        6f 6e 3a 20 57 68 65 6e 20 61 20 6e 61 6d 65 20 6f 63 63 75 72 73 20 61 74 20 73 6f 6d 65 20 70   ┆on: When a name occurs at some p┆
0x1e9e0…1ea00        6f 69 6e 74 20 69 6e 20 61 20 73 6f 75 72 63 65 20 74 65 78 74 2c 20 0a 77 68 61 74 20 64 6f 65   ┆oint in a source text,  what doe┆
0x1ea00…1ea20 (245,) 73 20 69 74 20 6d 65 61 6e 3f 20 61 6e 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68   ┆s it mean? and to ensure that th┆
0x1ea20…1ea40        65 20 6d 65 61 6e 69 6e 67 20 69 73 20 0a 75 6e 69 71 75 65 6c 79 20 64 65 66 69 6e 65 64 2e 0d   ┆e meaning is  uniquely defined. ┆
0x1ea40…1ea60        0a 0d 0a 54 68 65 20 75 6e 69 74 20 6f 66 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 6f 72 20 61   ┆   The unit of compilation for a┆
0x1ea60…1ea80        20 52 65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 0a 62   ┆ Real-Time Pascal compiler is  b┆
0x1ea80…1eaa0        61 73 69 63 61 6c 6c 79 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 72 6f 75 74 69 6e 65 20 61   ┆asically a sequence of routine a┆
0x1eaa0…1eac0        6e 64 2f 6f 72 20 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2c 20 0a 72 65 66   ┆nd/or program declarations,  ref┆
0x1eac0…1eae0        65 72 72 65 64 20 74 6f 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 20 61 20 a1   ┆erred to in the following as a  ┆
0x1eae0…1eb00        73 6f 75 72 63 65 20 74 65 78 74 e1 2e 20 54 68 65 20 0a 76 69 73 69 62 69 6c 69 74 79 20 72 75   ┆source text . The  visibility ru┆
0x1eb00…1eb20        6c 65 73 20 66 6f 72 20 6e 61 6d 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 73 6f   ┆les for names introduced in a so┆
0x1eb20…1eb40        75 72 63 65 20 74 65 78 74 20 61 72 65 20 0a 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 65 63 74   ┆urce text are  described in sect┆
0x1eb40…1eb60        69 6f 6e 20 38 2e 31 2c 20 61 6e 64 20 74 68 65 20 70 72 65 63 69 73 65 20 73 79 6e 74 61 63 74   ┆ion 8.1, and the precise syntact┆
0x1eb60…1eb80        69 63 20 66 6f 72 6d 20 6f 66 20 0a 61 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69 74 20 69   ┆ic form of  a compilation unit i┆
0x1eb80…1eba0        73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 38 2e 32 20 61 6c 6f 6e 67   ┆s described in section 8.2 along┆
0x1eba0…1ebc0        20 77 69 74 68 20 61 20 0a 64 69 73 63 75 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 6f 6c 65 20   ┆ with a  discussion of the role ┆
0x1ebc0…1ebe0        70 6c 61 79 65 64 20 62 79 20 70 72 65 64 65 66 69 6e 65 64 20 6e 61 6d 65 73 20 61 6e 64 20 6e   ┆played by predefined names and n┆
0x1ebe0…1ec00        61 6d 65 73 20 0a 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 73 6f 2d 63 61 6c 6c 65 64 20 63 6f   ┆ames  introduced in so-called co┆
0x1ec00…1ec20 (246,) 6e 74 65 78 74 73 2e 0d 0a 0d 0a 0d 0a b0 a1 38 2e 31 20 56 69 73 69 62 69 6c 69 74 79 20 52 75   ┆ntexts.        8.1 Visibility Ru┆
0x1ec20…1ec40        6c 65 73 0d 0a 0d 0a 41 6c 6c 20 6e 61 6d 65 73 20 77 68 69 63 68 20 6f 63 63 75 72 20 69 6e 20   ┆les    All names which occur in ┆
0x1ec40…1ec60        61 20 73 6f 75 72 63 65 20 74 65 78 74 20 6d 75 73 74 20 68 76 65 20 6f 6e 65 20 6f 72 20 6d 6f   ┆a source text must hve one or mo┆
0x1ec60…1ec80        72 65 20 0a 70 6f 69 6e 74 73 20 6f 66 20 a1 69 6e 74 72 6f 64 75 63 74 69 6f 6e e1 20 65 61 63   ┆re  points of  introduction  eac┆
0x1ec80…1eca0        68 20 6f 66 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 61 20 70 72 6f 67 72 61 6d 20 0a 65 6e   ┆h of which defines a program  en┆
0x1eca0…1ecc0        74 69 74 79 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 64 65 6e 6f 74 65 64 20 62 79 20 74 68 65   ┆tity which can be denoted by the┆
0x1ecc0…1ece0        20 6e 61 6d 65 20 77 69 74 68 69 6e 20 73 6f 6d 65 20 72 65 67 69 6f 6e 20 0a 6f 66 20 74 68 65   ┆ name within some region  of the┆
0x1ece0…1ed00        20 74 65 78 74 2c 20 63 61 6c 6c 65 64 20 74 68 65 20 a1 76 69 73 69 62 69 6c 69 74 79 20 72 65   ┆ text, called the  visibility re┆
0x1ed00…1ed20        67 69 6f 6e e1 20 6f 66 20 74 68 65 20 65 6e 74 69 74 79 2e 20 54 68 65 20 0a 70 6f 69 6e 74 20   ┆gion  of the entity. The  point ┆
0x1ed20…1ed40        6f 66 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6d 61 79 20 62 65 20 61 20 64 65 63 6c 61 72 61   ┆of introduction may be a declara┆
0x1ed40…1ed60        74 69 6f 6e 2c 20 61 20 66 6f 72 6d 61 6c 20 0a 70 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66   ┆tion, a formal  parameter specif┆
0x1ed60…1ed80        69 63 61 74 69 6f 6e 2c 20 61 20 6c 61 62 65 6c 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 2c 20 74   ┆ication, a labelled statement, t┆
0x1ed80…1eda0        68 65 20 41 53 2d 70 61 72 74 20 0a 6f 66 20 61 20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 2c   ┆he AS-part  of a with statement,┆
0x1eda0…1edc0        20 74 68 65 20 69 74 65 72 61 74 69 6f 6e 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61 20   ┆ the iteration description of a ┆
0x1edc0…1ede0        66 6f 72 20 0a 8c 83 c8 0a 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 61 20 37 62 75 66 66 65 72   ┆for      statement, or a 7buffer┆
0x1ede0…1ee00        5f 6e 61 6d 65 27 20 69 6e 20 61 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 2e 20 45 76 65 72   ┆_name' in a lock statement. Ever┆
0x1ee00…1ee20 (247,) 79 20 0a 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 61 20 6e 61 6d 65 20 68 61 73 20 61 20   ┆y  introduction of a name has a ┆
0x1ee20…1ee40        a1 73 63 6f 70 65 e1 2c 20 69 2e 65 2e 20 61 20 72 65 67 69 6f 6e 20 6f 66 20 74 65 78 74 20 0a   ┆ scope , i.e. a region of text  ┆
0x1ee40…1ee60        6f 76 65 72 20 77 68 69 63 68 20 74 68 65 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 68 61 73 20   ┆over which the introduction has ┆
0x1ee60…1ee80        61 6e 20 65 66 66 65 63 74 2e 20 54 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 0a 73 63 6f 70 65   ┆an effect. The concept of  scope┆
0x1ee80…1eea0        20 73 65 72 76 65 73 20 61 73 20 61 20 74 6f 6f 6c 20 69 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67   ┆ serves as a tool in determining┆
0x1eea0…1eec0        20 74 68 65 20 76 69 73 69 62 69 6c 69 74 79 20 72 65 67 69 6f 6e 20 0a 6f 66 20 61 20 6e 61 6d   ┆ the visibility region  of a nam┆
0x1eec0…1eee0        65 64 20 70 72 6f 67 72 61 6d 20 65 6e 74 69 74 79 2e 0d 0a 0d 0a 4f 6e 63 65 20 74 68 65 20 76   ┆ed program entity.    Once the v┆
0x1eee0…1ef00        69 73 69 62 69 6c 69 74 79 20 72 65 67 69 6f 6e 73 20 6f 66 20 61 6c 6c 20 70 72 6f 67 72 61 6d   ┆isibility regions of all program┆
0x1ef00…1ef20        20 65 6e 74 69 74 69 65 73 20 61 72 65 20 0a 6b 6e 6f 77 6e 20 74 68 65 20 64 65 74 65 72 6d 69   ┆ entities are  known the determi┆
0x1ef20…1ef40        6e 61 74 69 6f 6e 20 6f 66 20 61 20 6e 61 6d 69 6e 67 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 70   ┆nation of a naming environment p┆
0x1ef40…1ef60        72 6f 63 65 65 64 73 20 61 73 20 0a 66 6f 6c 6c 6f 77 73 3a 20 43 6f 6e 73 69 64 65 72 20 61 20   ┆roceeds as  follows: Consider a ┆
0x1ef60…1ef80        6e 61 6d 65 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20   ┆name occurring at some point in ┆
0x1ef80…1efa0        61 20 0a 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 65 20 70 6f 69 6e 74 20 69 73 20 77 69 74 68   ┆a  program. If the point is with┆
0x1efa0…1efc0        69 6e 20 74 68 65 20 76 69 73 69 62 69 6c 69 74 79 20 72 65 67 69 6f 6e 20 6f 66 20 61 20 0a 70   ┆in the visibility region of a  p┆
0x1efc0…1efe0        72 6f 67 72 61 6d 20 65 6e 74 69 74 79 20 77 68 6f 73 65 20 6e 61 6d 65 20 69 73 20 74 68 65 20   ┆rogram entity whose name is the ┆
0x1efe0…1f000        6e 61 6d 65 20 75 6e 64 65 72 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 2c 20 0a 74 68 65 6e 20   ┆name under consideration,  then ┆
0x1f000…1f020 (248,) 74 68 65 20 6e 61 6d 65 20 64 65 6e 6f 74 65 73 20 74 68 61 74 20 70 72 6f 67 72 61 6d 20 65 6e   ┆the name denotes that program en┆
0x1f020…1f040        74 69 74 79 2e 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 68 61 73 20 0a 6e 6f 20 6d 65 61 6e 69   ┆tity. Otherwise it has  no meani┆
0x1f040…1f060        6e 67 2c 20 69 2e 65 2e 20 69 74 20 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 6e 61 6d 69 6e   ┆ng, i.e. it is not part of namin┆
0x1f060…1f080        67 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 0d 0a 0d 0a 54 68 65 72 65 20 61 72 65 20 74 77 6f 20   ┆g environment.    There are two ┆
0x1f080…1f0a0        6b 69 6e 64 73 20 6f 66 20 6e 61 6d 65 73 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f 20 69 6e 64   ┆kinds of names which have no ind┆
0x1f0a0…1f0c0        65 70 65 6e 64 65 6e 74 20 0a 6d 65 61 6e 69 6e 67 2c 20 62 75 74 20 77 68 6f 73 65 20 6d 65 61   ┆ependent  meaning, but whose mea┆
0x1f0c0…1f0e0        6e 69 6e 67 20 69 73 20 64 65 70 65 6e 64 65 6e 74 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 63 74   ┆ning is dependent on the syntact┆
0x1f0e0…1f100        69 63 20 0a 63 6f 6e 74 65 78 74 2c 20 76 69 7a 2e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 72   ┆ic  context, viz. the names of r┆
0x1f100…1f120        65 63 6f 72 64 20 66 69 65 6c 64 73 20 61 6e 64 20 66 6f 72 6d 61 6c 20 74 79 70 65 20 0a 70 61   ┆ecord fields and formal type  pa┆
0x1f120…1f140        72 61 6d 65 74 65 72 73 2e 20 48 6f 77 65 76 65 72 2c 20 62 65 63 61 75 73 65 20 6f 66 20 74 68   ┆rameters. However, because of th┆
0x1f140…1f160        65 20 73 68 6f 72 74 68 61 6e 64 20 66 6f 72 6d 20 6f 66 20 72 65 63 6f 72 64 20 0a 66 69 65 6c   ┆e shorthand form of record  fiel┆
0x1f160…1f180        64 20 61 63 63 65 73 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 77 69 74 68 20 73 74 61 74 65 6d 65   ┆d access allowed in with stateme┆
0x1f180…1f1a0        6e 74 73 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 38 29 20 0a 74 68 65 20 6e 61 6d 65 73   ┆nts (cf. section 3.8)  the names┆
0x1f1a0…1f1c0        20 6f 66 20 66 69 65 6c 64 73 20 6f 66 20 61 20 77 69 74 68 2d 6f 62 6a 65 63 74 20 6f 66 20 61   ┆ of fields of a with-object of a┆
0x1f1c0…1f1e0        20 72 65 63 6f 72 64 20 74 79 70 65 20 61 72 65 20 0a 74 72 65 61 74 65 64 20 61 73 20 69 66 20   ┆ record type are  treated as if ┆
0x1f1e0…1f200        69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 74 68 65 20 27 77 69 74 68 20 64 65 66 69 6e 69 74 69   ┆introduced in the 'with definiti┆
0x1f200…1f220 (249,) 6f 6e 27 2e 20 41 70 61 72 74 20 0a 66 72 6f 6d 20 74 68 69 73 20 73 70 65 63 69 61 6c 20 63 61   ┆on'. Apart  from this special ca┆
0x1f220…1f240        73 65 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 72 65 63 6f 72 64 20 66 69 65 6c 64 73 20 61 6e   ┆se the names of record fields an┆
0x1f240…1f260        64 20 74 79 70 65 20 0a 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 6f 74 20 6d 65 6d 62 65   ┆d type  parameters are not membe┆
0x1f260…1f280        72 73 20 6f 66 20 6e 61 6d 69 6e 67 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 73 2e 0d 0a 0d 0a 54 68   ┆rs of naming environments.    Th┆
0x1f280…1f2a0        72 65 65 20 6b 69 6e 64 73 20 6f 66 20 72 75 6c 65 73 20 77 68 69 63 68 20 74 6f 67 65 74 68 65   ┆ree kinds of rules which togethe┆
0x1f2a0…1f2c0        72 20 6d 61 6b 65 20 75 70 20 74 68 65 20 76 69 73 69 62 69 6c 69 74 79 20 0a 72 75 6c 65 73 20   ┆r make up the visibility  rules ┆
0x1f2c0…1f2e0        61 72 65 20 67 69 76 65 6e 20 62 65 6c 6f 77 3a 0d 0a 0d 0a 2d 20 75 6e 69 71 75 65 6e 65 73 73   ┆are given below:    - uniqueness┆
0x1f2e0…1f300        20 72 75 6c 65 73 3a 20 84 72 75 6c 65 73 20 77 68 69 63 68 20 73 65 72 76 65 20 6f 6e 6c 79 20   ┆ rules:  rules which serve only ┆
0x1f300…1f320        74 6f 20 70 72 65 76 65 6e 74 20 0a 19 94 80 80 61 6d 62 69 67 75 6f 75 73 20 6d 65 61 6e 69 6e   ┆to prevent      ambiguous meanin┆
0x1f320…1f340        67 73 20 6f 66 20 6e 61 6d 65 73 2c 0d 0a 2d 20 73 63 6f 70 65 20 72 75 6c 65 73 3a 20 20 20 20   ┆gs of names,  - scope rules:    ┆
0x1f340…1f360        20 20 84 72 75 6c 65 73 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 63 6f   ┆   rules which determine the sco┆
0x1f360…1f380        70 65 20 6f 66 20 61 6e 20 0a 19 94 80 80 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 61 20   ┆pe of an      introduction of a ┆
0x1f380…1f3a0        6e 61 6d 65 2c 0d 0a 2d 20 65 78 63 6c 75 73 69 6f 6e 20 72 75 6c 65 73 3a 20 20 84 72 75 6c 65   ┆name,  - exclusion rules:   rule┆
0x1f3a0…1f3c0        73 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 76 69 73 69 62 69 6c 69 74 79   ┆s which determine the visibility┆
0x1f3c0…1f3e0        20 0a 19 94 80 80 72 65 67 69 6f 6e 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 65 6e 74 69 74 79   ┆      region of a program entity┆
0x1f3e0…1f400        20 62 79 20 65 78 70 6c 69 63 69 74 20 0a 19 94 80 80 65 78 63 6c 75 73 69 6f 6e 20 6f 66 20 73   ┆ by explicit      exclusion of s┆
0x1f400…1f420 (250,) 75 62 2d 72 65 67 69 6f 6e 73 20 66 72 6f 6d 20 74 68 65 20 73 63 6f 70 65 20 0a 19 94 80 80 6f   ┆ub-regions from the scope      o┆
0x1f420…1f440        66 20 74 68 65 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 6f   ┆f the introduction of the name o┆
0x1f440…1f456        66 20 74 68 65 20 0a 19 94 80 80 65 6e 74 69 74 79 2e 0d 0a 0d 0a                                 ┆f the      entity.    ┆
0x1f456…1f459        FormFeed {
0x1f456…1f459          0c 83 bc                                                                                          ┆   ┆
0x1f456…1f459        }
0x1f459…1f460        0a a1 55 6e 69 71 75                                                                              ┆  Uniqu┆
0x1f460…1f480        65 6e 65 73 73 20 72 75 6c 65 73 0d 0a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 61 6d   ┆eness rules    The following nam┆
0x1f480…1f4a0        65 73 20 61 72 65 20 73 61 69 64 20 74 6f 20 62 65 20 69 6e 74 72 6f 64 75 63 65 64 20 a1 69 6e   ┆es are said to be introduced  in┆
0x1f4a0…1f4c0        69 74 69 61 6c 6c 79 e1 20 69 6e 20 61 20 0a 62 6c 6f 63 6b 3a 0d 0a 0d 0a 2d 20 84 74 68 65 20   ┆itially  in a  block:    -  the ┆
0x1f4c0…1f4e0        6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 73   ┆names of the formal parameters s┆
0x1f4e0…1f500        70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 0a 19 82 80 80 68 65 61 64 69 6e 67 20 6f 66 20   ┆pecified in the      heading of ┆
0x1f500…1f520        74 68 65 20 62 6c 6f 63 6b 2c 0d 0a 2d 20 84 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 70 72 6f 67   ┆the block,  -  the names of prog┆
0x1f520…1f540        72 61 6d 20 65 6e 74 69 74 69 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 74 68 65 20 0a   ┆ram entities introduced in the  ┆
0x1f540…1f560        19 82 80 80 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 61 72 74 20 6f 66 20 74 68 65 20 62 6c 6f 63   ┆    declaration part of the bloc┆
0x1f560…1f580        6b 20 65 78 63 6c 75 73 69 6e 67 20 74 68 65 20 66 6f 72 6d 61 6c 20 0a 19 82 80 80 70 61 72 61   ┆k exclusing the formal      para┆
0x1f580…1f5a0        6d 65 74 65 72 20 6c 69 73 74 73 20 61 6e 64 20 62 6c 6f 63 6b 73 20 6f 66 20 65 6e 63 6c 6f 73   ┆meter lists and blocks of enclos┆
0x1f5a0…1f5c0        65 64 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 72 6f 75 74 69 6e 65 20 0a 19 82 80 80 64 65 63 6c   ┆ed program and routine      decl┆
0x1f5c0…1f5e0        61 72 61 74 69 6f 6e 73 2c 20 61 6e 64 0d 0a 2d 20 84 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 6c   ┆arations, and  -  the names of l┆
0x1f5e0…1f600        61 62 65 6c 73 20 61 70 70 65 61 72 69 6e 67 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20   ┆abels appearing in the compound ┆
0x1f600…1f620 (251,) 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 0a 19 82 80 80 74 68 65 20 62 6c 6f 63 6b 2e 0d 0a 0d 0a   ┆statement of      the block.    ┆
0x1f620…1f640        31 29 20 84 41 6c 6c 20 6e 61 6d 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 69 74 69 61 6c   ┆1)  All names introduced initial┆
0x1f640…1f660        6c 79 20 69 6e 20 61 20 62 6c 6f 63 6b 20 6d 75 73 74 20 62 65 20 0a 19 83 80 80 64 69 73 74 69   ┆ly in a block must be      disti┆
0x1f660…1f680        6e 63 74 2e 0d 0a 32 29 20 84 41 6c 6c 20 6e 61 6d 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69   ┆nct.  2)  All names introduced i┆
0x1f680…1f6a0        6e 20 74 68 65 20 27 77 69 74 68 20 64 65 66 69 6e 69 74 69 6f 6e 27 20 6f 66 20 61 20 77 69 74   ┆n the 'with definition' of a wit┆
0x1f6a0…1f6c0        68 20 0a 19 83 80 80 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 64 69 73 74 69 6e 63   ┆h      statement must be distinc┆
0x1f6c0…1f6e0        74 2e 0d 0a 0d 0a a1 53 63 6f 70 65 20 72 75 6c 65 73 0d 0a 0d 0a 31 29 20 84 54 68 65 20 73 63   ┆t.     Scope rules    1)  The sc┆
0x1f6e0…1f700        6f 70 65 20 6f 66 20 61 20 6c 61 62 65 6c 20 6f 72 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20   ┆ope of a label or variable name ┆
0x1f700…1f720        69 73 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 0a 19 83 80 80 73 74 61 74 65 6d 65 6e 74 20 6f   ┆is the compound      statement o┆
0x1f720…1f740        66 20 74 68 65 20 62 6c 6f 63 6b 20 69 6e 20 77 68 69 63 68 20 69 74 20 69 73 20 69 6e 74 72 6f   ┆f the block in which it is intro┆
0x1f740…1f760        64 75 63 65 64 2e 0d 0a 32 29 20 84 54 68 65 20 73 63 6f 70 65 20 6f 66 20 61 6e 79 20 6f 74 68   ┆duced.  2)  The scope of any oth┆
0x1f760…1f780        65 72 20 6e 61 6d 65 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 69 74 69 61 6c 6c 79 20 69 6e 20   ┆er name introduced initially in ┆
0x1f780…1f7a0        61 20 0a 19 83 80 80 62 6c 6f 63 6b 20 65 78 74 65 6e 64 73 20 66 72 6f 6d 20 74 68 65 20 70 6f   ┆a      block extends from the po┆
0x1f7a0…1f7c0        69 6e 74 20 6f 66 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 65 6e 64 20 0a   ┆int of introduction to the end  ┆
0x1f7c0…1f7e0        19 83 80 80 6f 66 20 74 68 65 20 62 6c 6f 63 6b 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 72 75   ┆    of the block. This is the ru┆
0x1f7e0…1f800        6c 65 20 77 68 69 63 68 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 69 6e 20 0a 19 83 80 80 67 65   ┆le which implies that in      ge┆
0x1f800…1f820 (252,) 6e 65 72 61 6c 20 61 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 20 69 6e 74 72 6f 64 75 63 65 64 20   ┆neral a name must be introduced ┆
0x1f820…1f840        62 65 66 6f 72 65 20 75 73 65 2e 0d 0a 33 29 20 84 54 68 65 20 73 63 6f 70 65 20 6f 66 20 74 68   ┆before use.  3)  The scope of th┆
0x1f840…1f860        65 20 27 66 6f 72 5f 6e 61 6d 65 27 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 66 6f 72   ┆e 'for_name' introduced in a for┆
0x1f860…1f880        20 0a 19 83 80 80 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 6f 66 20 61 20 6e 61 6d 65 20 69 6e   ┆      statement, or of a name in┆
0x1f880…1f8a0        74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   ┆troduced in a lock statement is ┆
0x1f8a0…1f8c0        0a 19 83 80 80 74 68 65 20 27 73 74 61 74 65 6d 65 6e 74 27 20 66 6f 6c 6c 6f 77 69 6e 67 20 44   ┆     the 'statement' following D┆
0x1f8c0…1f8e0        4f 20 69 6e 20 74 68 65 20 66 6f 72 2c 20 77 69 74 68 2c 20 6f 72 20 6c 6f 63 6b 20 0a 19 83 80   ┆O in the for, with, or lock     ┆
0x1f8e0…1f900        80 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 34 29 20 84 54 68 65 20 73 63 6f 70 65 20 6f 66 20 61 20   ┆ statement.  4)  The scope of a ┆
0x1f900…1f920        72 65 63 6f 72 64 20 66 69 65 6c 64 20 6e 61 6d 65 20 69 6e 74 72 6f 64 75 63 65 64 20 61 73 20   ┆record field name introduced as ┆
0x1f920…1f940        66 69 65 6c 64 20 0a 19 83 80 80 61 63 63 65 73 73 20 73 68 6f 72 74 68 61 6e 64 20 69 6e 20 61   ┆field      access shorthand in a┆
0x1f940…1f960        20 77 69 74 68 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74   ┆ with statement is the statement┆
0x1f960…1f980        20 0a 19 83 80 80 66 6f 6c 6c 6f 77 69 6e 67 20 44 4f 2e 0d 0a 0d 0a a1 45 78 63 6c 75 73 69 6f   ┆      following DO.     Exclusio┆
0x1f980…1f9a0        6e 20 72 75 6c 65 73 0d 0a 0d 0a 41 6e 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f 66 20 61 20   ┆n rules    An introduction of a ┆
0x1f9a0…1f9c0        6e 61 6d 65 20 77 68 69 63 68 20 6f 63 63 75 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 6f   ┆name which occurs within the sto┆
0x1f9c0…1f9e0        70 65 20 6f 66 20 61 20 0a 70 72 65 76 69 6f 75 73 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 6f   ┆pe of a  previous introduction o┆
0x1f9e0…1fa00        66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20 0a a1 72 65   ┆f the same name is called a   re┆
0x1fa00…1fa20 (253,) 69 6e 74 72 6f 64 75 63 74 69 6f 6e e1 2e 0d 0a 0d 0a 8c 83 ec 0a 54 68 65 20 76 69 73 69 62 69   ┆introduction .        The visibi┆
0x1fa20…1fa40        6c 69 74 79 20 72 65 67 69 6f 6e 20 6f 66 20 61 20 6e 61 6d 65 64 20 70 72 6f 67 72 61 6d 20 65   ┆lity region of a named program e┆
0x1fa40…1fa60        6e 74 69 74 79 20 69 73 20 74 68 65 20 73 63 6f 70 65 20 0a 6f 66 20 74 68 65 20 69 6e 74 72 6f   ┆ntity is the scope  of the intro┆
0x1fa60…1fa80        64 75 63 74 69 6f 6e 20 6f 66 20 69 74 73 20 6e 61 6d 65 20 77 69 74 68 20 74 68 65 20 66 6f 6c   ┆duction of its name with the fol┆
0x1fa80…1faa0        6c 6f 77 69 6e 67 20 70 6f 73 73 69 62 6c 65 20 0a 65 78 63 65 70 74 69 6f 6e 73 3a 0d 0a 0d 0a   ┆lowing possible  exceptions:    ┆
0x1faa0…1fac0        31 29 20 41 6e 79 20 69 6e 6e 65 72 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 73 2e 0d 0a 32 29   ┆1) Any inner program blocks.  2)┆
0x1fac0…1fae0        20 84 54 68 65 20 73 63 6f 70 65 28 73 29 20 6f 66 20 61 6e 79 20 72 65 69 6e 74 72 6f 64 75 63   ┆  The scope(s) of any reintroduc┆
0x1fae0…1fb00        74 69 6f 6e 28 73 29 20 6f 66 20 74 68 65 20 6e 61 6d 65 2c 20 69 2e 65 2e 20 0a 19 83 80 80 72   ┆tion(s) of the name, i.e.      r┆
0x1fb00…1fb20        65 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 68 69 64 65 73 20 74 68 65 20 65 6e 74 69 74 79 20 64   ┆eintroduction hides the entity d┆
0x1fb20…1fb40        65 6e 6f 74 65 64 20 62 79 20 74 68 65 20 6f 75 74 65 72 20 0a 19 83 80 80 6f 63 63 75 72 72 65   ┆enoted by the outer      occurre┆
0x1fb40…1fb60        6e 63 65 20 6f 66 20 74 68 65 20 6e 61 6d 65 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 0d   ┆nce of the name.     Example:   ┆
0x1fb60…1fb80        0a 48 69 64 69 6e 67 20 6f 66 20 61 6e 20 65 6e 74 69 74 79 20 62 79 20 72 65 69 6e 74 72 6f 64   ┆ Hiding of an entity by reintrod┆
0x1fb80…1fba0        75 63 74 69 6f 6e 6f 66 20 69 74 73 20 6e 61 6d 65 20 69 73 20 0a 69 6c 6c 75 73 74 72 61 74 65   ┆uctionof its name is  illustrate┆
0x1fba0…1fbc0        64 20 62 65 6c 6f 77 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 70 3b 0d 0a 43 4f 4e 53 54 0d   ┆d below:    PROCEDURE p;  CONST ┆
0x1fbc0…1fbe0        0a 20 20 20 6e 3d 32 3b 0d 0a 20 20 20 2e 2e 2e 0d 0a 20 20 20 50 52 4f 43 45 44 55 52 45 20 71   ┆    n=2;     ...     PROCEDURE q┆
0x1fbe0…1fc00        3b 0d 0a 20 20 20 43 4f 4e 53 54 0d 0a 20 20 20 20 20 20 6d 3d 6e 3b 20 28 2a 20 32 20 2a 29 0d   ┆;     CONST        m=n; (* 2 *) ┆
0x1fc00…1fc20 (254,) 0a 20 20 20 20 20 20 6e 3d 35 3b 0d 0a 20 20 20 42 45 47 49 4e 0d 0a 20 20 20 20 20 20 2e 2e 2e   ┆       n=5;     BEGIN        ...┆
0x1fc20…1fc40        20 6e 20 2e 2e 2e 20 28 2a 20 68 61 73 20 76 61 6c 75 65 20 35 20 2a 29 0d 0a 20 20 20 2e 2e 2e   ┆ n ... (* has value 5 *)     ...┆
0x1fc40…1fc60        0d 0a 45 4e 44 0d 0a 0d 0a 0d 0a b0 a1 38 2e 32 20 43 6f 6e 74 65 78 74 73 20 61 6e 64 20 50 72   ┆  END        8.2 Contexts and Pr┆
0x1fc60…1fc80        65 64 65 66 69 6e 65 64 20 4e 61 6d 65 73 0d 0a 0d 0a 54 68 65 20 69 6e 69 74 69 61 6c 20 6e 61   ┆edefined Names    The initial na┆
0x1fc80…1fca0        6d 69 6e 67 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 6f 66 20 61 20 63 6f 6d 70 69 6c 61 74 69 6f   ┆ming environment of a compilatio┆
0x1fca0…1fcc0        6e 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 0a 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 6e 61   ┆n consists of  the predefined na┆
0x1fcc0…1fce0        6d 65 73 20 61 6e 64 20 65 6e 74 69 74 69 65 73 20 61 6e 64 20 74 68 6f 73 65 20 69 6e 74 72 6f   ┆mes and entities and those intro┆
0x1fce0…1fd00        64 75 63 65 64 20 69 6e 20 0a 63 6f 6e 74 65 78 74 73 2e 0d 0a 0d 0a 54 68 65 20 75 6e 69 74 20   ┆duced in  contexts.    The unit ┆
0x1fd00…1fd20        6f 66 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 69 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20   ┆of compilation is a sequence of ┆
0x1fd20…1fd40        70 72 6f 67 72 61 6d 20 61 6e 64 2f 6f 72 20 0a 72 6f 75 74 69 6e 65 20 64 65 63 6c 61 72 61 74   ┆program and/or  routine declarat┆
0x1fd40…1fd60        69 6f 6e 73 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20 6f 6e 65 20   ┆ions optionally preceded by one ┆
0x1fd60…1fd80        6f 72 20 6d 6f 72 65 20 0a 63 6f 6e 74 65 78 74 73 2e 20 41 20 63 6f 6d 70 69 6c 65 72 20 6d 75   ┆or more  contexts. A compiler mu┆
0x1fd80…1fda0        73 74 20 61 6c 6c 6f 77 20 63 6f 6e 74 65 78 74 73 20 74 6f 20 62 65 20 73 75 70 70 6c 69 65 64   ┆st allow contexts to be supplied┆
0x1fda0…1fdc0        20 61 73 20 0a 66 69 6c 65 73 20 73 65 70 61 72 61 74 65 20 66 72 6f 6d 20 74 68 65 20 73 6f 75   ┆ as  files separate from the sou┆
0x1fdc0…1fde0        72 63 65 20 74 65 78 74 20 70 72 6f 70 65 72 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆rce text proper.                ┆
0x1fde0…1fe00        0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 84 f0 0a 41 6c 6c 20 6e 61 6d 65 73 20 69 6e 74 72   ┆                  All names intr┆
0x1fe00…1fe20 (255,) 6f 64 75 63 65 64 20 69 6e 20 6f 6e 65 20 63 6f 6e 74 65 78 74 20 6d 75 73 74 20 62 65 20 64 69   ┆oduced in one context must be di┆
0x1fe20…1fe40        73 74 69 6e 63 74 2e 20 54 68 65 20 0a 6e 61 6d 65 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e   ┆stinct. The  names introduced in┆
0x1fe40…1fe60        20 63 6f 6e 74 65 78 74 73 20 61 6e 64 20 74 68 65 70 72 6f 67 72 61 6d 20 65 6e 74 69 74 69 65   ┆ contexts and theprogram entitie┆
0x1fe60…1fe80        73 20 64 65 66 69 6e 65 64 20 0a 61 74 20 74 68 65 69 72 20 70 6f 69 6e 74 73 20 6f 66 20 69 6e   ┆s defined  at their points of in┆
0x1fe80…1fea0        74 72 6f 64 75 63 74 69 6f 6e 20 61 72 65 20 74 72 65 74 65 64 20 61 73 20 69 66 20 74 68 65 79   ┆troduction are treted as if they┆
0x1fea0…1fec0        20 77 65 72 65 20 0a 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 62 6c 6f 63 6b 20 73 75 72   ┆ were  introduced in a block sur┆
0x1fec0…1fee0        72 6f 75 6e 64 69 6e 67 20 74 68 65 20 6f 75 74 65 72 20 62 6c 6f 63 6b 28 73 29 20 6f 66 20 74   ┆rounding the outer block(s) of t┆
0x1fee0…1ff00        68 65 20 0a 73 6f 75 72 63 65 20 74 65 78 74 20 70 72 6f 70 65 72 20 77 69 74 68 20 6f 6e 65 20   ┆he  source text proper with one ┆
0x1ff00…1ff20        65 78 63 65 70 74 69 6f 6e 3a 20 74 68 65 20 65 78 63 6c 75 73 69 6f 6e 20 72 75 6c 65 20 0a 66   ┆exception: the exclusion rule  f┆
0x1ff20…1ff40        6f 72 20 69 6e 6e 65 72 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 73 20 64 6f 65 73 20 6e 6f 74   ┆or inner program blocks does not┆
0x1ff40…1ff60        20 61 70 70 6c 79 2e 20 54 68 65 20 73 63 6f 70 65 20 6f 66 20 61 20 6e 61 6d 65 20 0a 69 6e 74   ┆ apply. The scope of a name  int┆
0x1ff60…1ff80        72 6f 64 75 63 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 65 78 74 65 6e 64 73 20 66 72 6f   ┆roduced in a context extends fro┆
0x1ff80…1ffa0        6d 20 74 68 65 20 70 6f 69 6e 74 20 6f 66 20 0a 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 74 6f 20   ┆m the point of  introduction to ┆
0x1ffa0…1ffc0        74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 6e 69 74 2e   ┆the end of the compilation unit.┆
0x1ffc0…1ffe0        20 52 6f 75 74 69 6e 65 73 20 0a 64 65 63 6c 61 72 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74   ┆ Routines  declared in a context┆
0x1ffe0…20000        20 6d 75 73 74 20 62 65 20 65 78 74 65 72 6e 61 6c 2c 20 69 2e 65 2e 20 74 68 65 20 61 63 74 75   ┆ must be external, i.e. the actu┆
0x20000…20020 (256,) 61 6c 20 0a 62 6c 6f 63 6b 20 6f 66 20 61 20 72 6f 75 74 69 6e 65 20 63 61 6e 6e 6f 74 20 62 65   ┆al  block of a routine cannot be┆
0x20020…20040        20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 2e 0d 0a 0d 0a 54 68 65 20   ┆ specified in a context.    The ┆
0x20040…20060        73 63 6f 70 65 20 6f 66 20 6e 61 6d 65 73 20 70 72 65 64 65 66 69 6e 65 64 20 61 73 20 70 61 72   ┆scope of names predefined as par┆
0x20060…20080        74 20 6f 66 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2c 20 63 66 2e 20 0a 41 70 70 65 6e 64 69 78   ┆t of the language, cf.  Appendix┆
0x20080…200a0        20 43 2c 20 69 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   ┆ C, is the complete compilation ┆
0x200a0…200c0        75 6e 69 74 2e 20 41 73 20 77 69 74 68 20 0a 63 6f 6e 74 65 78 74 73 20 74 68 65 20 65 78 63 6c   ┆unit. As with  contexts the excl┆
0x200c0…200e0        75 73 69 6f 6e 20 72 75 6c 65 20 66 6f 72 20 69 6e 6e 65 72 20 70 72 6f 67 72 61 6d 20 62 6c 6f   ┆usion rule for inner program blo┆
0x200e0…20100        63 6b 73 20 64 6f 65 73 20 0a 6e 6f 74 20 61 70 70 6c 79 20 74 6f 20 70 72 65 64 65 66 69 6e 65   ┆cks does  not apply to predefine┆
0x20100…20120        64 20 65 6e 74 69 74 69 65 73 2e 20 48 6f 77 65 76 65 72 2c 20 61 20 70 72 65 64 65 66 69 6e 65   ┆d entities. However, a predefine┆
0x20120…20140        64 20 6e 61 6d 65 20 0a 6d 61 79 20 62 65 20 68 69 64 64 65 6e 20 62 79 20 72 65 69 6e 74 72 6f   ┆d name  may be hidden by reintro┆
0x20140…20160        64 75 63 74 69 6f 6e 2e 0d 0a 0d 0a a1 4e 6f 74 65 3a 0d 0a 74 68 65 20 65 78 63 6c 75 73 69 6f   ┆duction.     Note:  the exclusio┆
0x20160…20180        6e 20 72 75 6c 65 20 66 6f 72 20 69 6e 6e 65 72 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 73 20   ┆n rule for inner program blocks ┆
0x20180…201a0        69 6d 70 6c 69 65 73 20 74 68 61 74 20 0a 74 79 70 65 73 2c 20 63 6f 6e 73 74 61 6e 74 73 2c 20   ┆implies that  types, constants, ┆
0x201a0…201c0        61 6e 64 20 72 6f 75 74 69 6e 65 73 20 77 68 69 63 68 20 61 72 65 20 74 6f 20 62 65 20 63 6f 6d   ┆and routines which are to be com┆
0x201c0…201e0        6d 6f 6e 20 66 6f 72 20 0a 73 65 76 65 72 61 6c 20 70 72 6f 67 72 61 6d 73 20 63 6f 6d 70 69 6c   ┆mon for  several programs compil┆
0x201e0…20200        65 64 20 61 73 20 6f 6e 65 20 75 6e 69 74 20 6d 75 73 74 20 62 65 20 73 70 65 63 69 66 69 65 64   ┆ed as one unit must be specified┆
0x20200…20213 (257,) 20 69 6e 20 61 20 0a 63 6f 6e 74 65 78 74 2e 0d 0a 0d 0a                                          ┆ in a  context.    ┆
0x20213…20216        FormFeed {
0x20213…20216          0c 82 94                                                                                          ┆   ┆
0x20213…20216        }
0x20216…20220        0a 14 b3 b0 06 0b 0d 0a b0 a1                                                                     ┆          ┆
0x20220…20240        39 2e 20 50 52 4f 43 45 53 53 20 43 4f 4e 54 52 4f 4c 20 41 4e 44 20 49 4e 54 45 52 2d 43 4f 4d   ┆9. PROCESS CONTROL AND INTER-COM┆
0x20240…20260        4d 55 4e 49 43 41 54 49 4f 4e 0d 0a 0d 0a 54 68 69 73 20 63 68 61 70 74 65 72 20 64 65 73 63 72   ┆MUNICATION    This chapter descr┆
0x20260…20280        69 62 65 73 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 6c 61 6e 67 75 61 67 65 20 63 6f 6e   ┆ibes the predefined language con┆
0x20280…202a0        73 74 72 75 63 74 73 20 0a 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 20 6f   ┆structs  available for control o┆
0x202a0…202c0        66 20 6f 66 66 73 70 72 69 6e 67 20 70 72 6f 63 65 73 73 65 73 20 61 6e 64 20 66 6f 72 20 0a 65   ┆f offspring processes and for  e┆
0x202c0…202e0        78 63 68 61 6e 67 65 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 70   ┆xchange of information between p┆
0x202e0…20300        72 6f 63 65 73 73 65 73 2e 0d 0a 0d 0a 41 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 61   ┆rocesses.    An incarnation of a┆
0x20300…20320        20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 63 61 6c 6c 65 64 20 61 20 63 68 69 6c 64 20 6f   ┆ sub-program is called a child o┆
0x20320…20340        66 20 61 20 0a 28 70 61 72 65 6e 74 29 20 70 72 6f 63 65 73 73 20 77 68 69 63 68 20 69 73 20 61   ┆f a  (parent) process which is a┆
0x20340…20360        6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 0a 63 6f   ┆n incarnation of the program  co┆
0x20360…20380        6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61   ┆ntaining the sub-program declara┆
0x20380…203a0        74 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 20 6e 61 76 65 6c 20 73 74 72 69 6e 67 20 62 65 74 77 65 65   ┆tion.    The navel string betwee┆
0x203a0…203c0        6e 20 74 68 65 20 70 61 72 65 6e 74 20 61 6e 64 20 74 68 65 20 63 68 69 6c 64 20 69 73 20 61 20   ┆n the parent and the child is a ┆
0x203c0…203e0        0a 76 61 72 69 61 62 6c 65 20 6f 66 20 74 79 70 65 20 70 72 6f 63 65 73 73 20 62 65 6c 6f 6e 67   ┆ variable of type process belong┆
0x203e0…20400        69 6e 67 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 2e 20 41 6e 20 0a 61 72 62 69 74 72 61 72 79   ┆ing to the parent. An  arbitrary┆
0x20400…20420 (258,) 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 63 61 72 6e 61 74 69 6f 6e 73 20 6f 66 20 61 20 73 75 62   ┆ number of incarnations of a sub┆
0x20420…20440        2d 70 72 6f 67 72 61 6d 20 6d 61 79 20 62 65 20 0a 62 6f 72 6e 3b 20 74 68 65 79 20 61 72 65 20   ┆-program may be  born; they are ┆
0x20440…20460        61 6c 6c 20 63 6f 6e 74 72 6f 6c 6c 65 64 20 62 79 20 74 68 65 20 70 61 72 65 6e 74 2e 0d 0a 0d   ┆all controlled by the parent.   ┆
0x20460…20480        0a 57 68 65 6e 20 61 20 63 68 69 6c 64 20 69 73 20 62 6f 72 6e 20 69 74 20 69 73 20 73 75 70 70   ┆ When a child is born it is supp┆
0x20480…204a0        6c 69 65 64 20 77 69 74 68 20 61 63 74 75 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 0a 61 63 63   ┆lied with actual parameters  acc┆
0x204a0…204c0        6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 73   ┆ording to the formal parameter s┆
0x204c0…204e0        70 65 63 69 66 69 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 64 65 63 6c 61 72 61 74 69 6f 6e 2c   ┆pecifiction of the  declaration,┆
0x204e0…20500        20 63 66 2e 20 73 65 63 74 69 6f 6e 20 36 2e 31 2e 20 50 72 6f 63 65 73 73 65 73 20 63 6f 6d 6d   ┆ cf. section 6.1. Processes comm┆
0x20500…20520        75 6e 69 63 61 74 65 20 76 69 61 20 0a 6d 61 69 6c 62 6f 78 65 73 20 6f 72 20 73 68 61 72 65 64   ┆unicate via  mailboxes or shared┆
0x20520…20540        20 76 61 72 69 61 62 6c 65 73 2e 20 41 20 6d 61 69 6c 62 6f 78 20 6f 72 20 61 20 73 68 61 72 65   ┆ variables. A mailbox or a share┆
0x20540…20560        64 20 0a 76 61 72 69 61 62 6c 65 20 6b 6e 6f 77 6e 20 62 79 20 61 20 70 61 72 65 6e 74 20 6d 61   ┆d  variable known by a parent ma┆
0x20560…20580        79 20 62 65 20 6d 61 64 65 20 6b 6e 6f 77 6e 20 61 73 20 61 20 70 61 72 61 6d 74 65 72 20 0a 74   ┆y be made known as a paramter  t┆
0x20580…205a0        6f 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20 28 73 75 63 68 20 61 20 76 61 72 69 61 62 6c 65 20   ┆o its children (such a variable ┆
0x205a0…205c0        6d 61 79 20 65 69 74 68 65 72 20 62 65 20 6f 77 6e 65 64 20 62 79 20 74 68 65 20 0a 70 61 72 65   ┆may either be owned by the  pare┆
0x205c0…205e0        6e 74 6f 72 20 6f 6e 65 20 6f 66 20 69 74 73 20 61 6e 63 65 73 74 6f 72 73 29 2e 20 49 6e 20 74   ┆ntor one of its ancestors). In t┆
0x205e0…20600        68 69 73 20 77 61 79 20 61 20 70 61 72 65 6e 74 20 0a 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65   ┆his way a parent  determines the┆
0x20600…20620 (259,) 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 70 61 74 68 73 20 6f 66 20 69 74 73 20 63 68 69 6c   ┆ communication paths of its chil┆
0x20620…20640        64 72 65 6e 20 77 69 74 68 6f 75 74 2c 20 0a 68 6f 77 65 76 65 72 2c 20 6e 65 63 65 73 73 61 72   ┆dren without,  however, necessar┆
0x20640…20660        69 6c 79 20 70 61 72 74 69 63 69 70 61 74 69 6e 67 20 69 6e 20 74 68 65 20 63 6f 6d 6d 75 6e 69   ┆ily participating in the communi┆
0x20660…20680        63 61 74 69 6f 6e 20 0a 69 74 73 65 6c 66 2e 20 52 65 66 65 72 20 74 6f 20 73 65 63 74 69 6f 6e   ┆cation  itself. Refer to section┆
0x20680…206a0        20 35 2e 31 30 20 66 6f 72 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 62 79 20 6d 65 61 6e 73   ┆ 5.10 for communication by means┆
0x206a0…206c0        20 6f 66 20 0a 73 68 61 72 65 64 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 73 65 63 74 69 6f   ┆ of  shared variables and sectio┆
0x206c0…206e0        6e 20 39 2e 32 20 66 6f 72 20 6d 61 69 6c 62 6f 78 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 2e   ┆n 9.2 for mailbox communication.┆
0x206e0…20700        0d 0a 0d 0a 0d 0a b0 a1 39 2e 31 20 50 72 6f 63 65 73 73 20 43 6f 6e 74 72 6f 6c 0d 0a 0d 0a 41   ┆        9.1 Process Control    A┆
0x20700…20720        20 73 75 62 2d 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 6e 20 61 20 70 72   ┆ sub-program declaration in a pr┆
0x20720…20740        6f 67 72 61 6d 20 69 6d 70 6c 69 65 73 20 74 68 65 20 0a 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66   ┆ogram implies the  allocation of┆
0x20740…20760        20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 69 6e 20 74 68 65 20 73 74 61   ┆ a sub-program object in the sta┆
0x20760…20780        63 6b 20 6f 66 20 61 6e 20 0a 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 70 72 6f 67   ┆ck of an  incarnation of theprog┆
0x20780…207a0        72 61 6d 2e 20 54 68 65 20 73 74 61 74 65 73 20 6f 66 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d   ┆ram. The states of a sub-program┆
0x207a0…207c0        20 0a 6f 62 6a 65 63 74 20 61 72 65 20 a1 6c 69 6e 6b 65 64 e1 20 61 6e 64 20 a1 75 6e 6c 69 6e   ┆  object are  linked  and  unlin┆
0x207c0…207e0        6b 65 64 e1 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 36 2e 32 2e 31 20 66 6f 72 20 74 68 65 20   ┆ked , cf. section 6.2.1 for the ┆
0x207e0…20800        0a 69 6e 69 74 69 61 6c 20 73 74 61 74 65 20 6f 66 20 61 20 73 75 62 70 72 6f 67 72 61 6d 20 6f   ┆ initial state of a subprogram o┆
0x20800…20820 (260,) 62 6a 65 63 74 2e 0d 0a 0d 0a 54 68 65 20 6c 69 6e 6b 69 6e 67 20 28 69 2e 65 2e 20 63 68 61 6e   ┆bject.    The linking (i.e. chan┆
0x20820…20840        67 65 20 6f 66 20 73 74 61 74 65 20 66 72 6f 6d 20 75 6e 6c 69 6e 6b 65 64 20 74 6f 20 6c 69 6e   ┆ge of state from unlinked to lin┆
0x20840…20860        6b 65 64 29 20 0a 69 73 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 61 20 6c 69 6e 6b 20 63 61 6c   ┆ked)  is performed by a link cal┆
0x20860…20880        6c 20 77 68 69 63 68 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e   ┆l which is similar to a function┆
0x20880…208a0        20 0a 63 61 6c 6c 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 8c 84 84 0a 54 68 65 20 74 79 70 65 20 6f 66   ┆  call.              The type of┆
0x208a0…208c0        20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6c 69 6e 6b 20 63 61 6c 6c 20 69 73 20 61 6e 20   ┆ the result of alink call is an ┆
0x208c0…208e0        69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 0a 64 65 70 65 6e 64 65 6e 64 20 70 72 65 64 65 66   ┆implementation  dependend predef┆
0x208e0…20900        69 6e 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 20 6c 69 6e 6b 5f 72 65 73   ┆ined enumeration type   link_res┆
0x20900…20920        75 6c 74 3d 20 28 6c 69 6e 6b 5f 6f 6b 2c 20 61 6c 72 65 61 64 79 5f 6c 69 6e 6b 65 64 2c 20 65   ┆ult= (link_ok, already_linked, e┆
0x20920…20940        78 74 65 72 6e 61 6c 5f 6e 6f 74 5f 66 6f 75 6e 64 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20   ┆xternal_not_found,              ┆
0x20940…20960        20 20 20 2e 2e 2e 29 2e 0d 0a 0d 0a 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 61 20 6c 69 6e   ┆   ...).    The purpose of a lin┆
0x20960…20980        6b 20 63 61 6c 6c 20 69 73 20 74 6f 20 66 69 6e 64 20 61 20 73 75 69 74 61 62 6c 65 20 70 72 6f   ┆k call is to find a suitable pro┆
0x20980…209a0        67 72 61 6d 20 0a 62 6c 6f 63 6b 20 6d 61 74 63 68 69 6e 67 20 74 68 65 20 73 75 62 2d 70 72 6f   ┆gram  block matching the sub-pro┆
0x209a0…209c0        67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74   ┆gram declaration. The value of t┆
0x209c0…209e0        68 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 6f 66   ┆he  expression, which must be of┆
0x209e0…20a00        20 61 20 73 74 72 69 6e 67 20 74 79 70 65 2c 20 69 73 20 75 73 65 64 20 74 6f 20 0a 73 65 61 72   ┆ a string type, is used to  sear┆
0x20a00…20a20 (261,) 63 68 20 66 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 20 69 6e 20 61 20 66 61   ┆ch for the program block in a fa┆
0x20a20…20a40        73 68 69 6f 6e 20 77 68 69 63 68 20 69 73 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64   ┆shion which is  implementation d┆
0x20a40…20a60        65 70 65 6e 64 65 6e 74 2e 20 74 68 65 20 27 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73   ┆ependent. the 'formal parameters┆
0x20a60…20a80        27 20 6f 66 20 74 68 65 20 0a 73 75 62 2d 70 72 6f 67 72 61 6d 20 64 65 63 6c 61 72 61 74 69 6f   ┆' of the  sub-program declaratio┆
0x20a80…20aa0        6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6d 61 74 63 68 2e   ┆n may also be used in the match.┆
0x20aa0…20ac0        20 49 66 20 61 20 0a 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 20 69 73 20 66 6f 75 6e 64 20 69 74   ┆ If a  program block is found it┆
0x20ac0…20ae0        20 69 73 20 6c 69 6e 6b 65 64 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 6f   ┆ is linked to the sub-program  o┆
0x20ae0…20b00        62 6a 65 63 74 20 64 65 6e 6f 74 65 64 20 62 79 20 74 68 65 20 27 70 72 6f 67 72 61 6d 5f 6e 61   ┆bject denoted by the 'program_na┆
0x20b00…20b20        6d 65 27 2e 0d 0a 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 6c 69 6e 6b 20 63 61 6c   ┆me'.    The result of a link cal┆
0x20b20…20b40        6c 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 6c 69 6e 6b 69 6e 67 20 77 61 73   ┆l indicates that the linking was┆
0x20b40…20b60        20 0a 73 75 63 63 65 73 73 66 75 6c 20 6f 72 20 77 68 79 20 69 74 20 77 65 6e 74 20 77 72 6f 6e   ┆  successful or why it went wron┆
0x20b60…20b80        67 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 20   ┆g.    If the implementation and ┆
0x20b80…20ba0        69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 64 79 6e 61 6d 69 63 20 0a 70 72 6f   ┆installation allows dynamic  pro┆
0x20ba0…20bc0        67 72 61 6d 20 6c 6f 61 64 2c 20 74 68 65 20 65 78 65 63 75 74 69 6f 6e 6f 66 20 61 20 6c 69 6e   ┆gram load, the executionof a lin┆
0x20bc0…20be0        6b 20 63 61 6c 6c 20 6d 61 79 20 69 6e 76 6f 6c 76 65 20 74 68 65 20 0a 6c 6f 61 64 69 6e 67 20   ┆k call may involve the  loading ┆
0x20be0…20c00        6f 66 20 61 20 73 75 69 74 61 62 6c 65 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 6c 6c 20 61 73   ┆of a suitable program as well as┆
0x20c00…20c20 (262,) 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a 6c 69 6e 6b 61 67 65 20 65 64 69 74 69 6e 67 2e   ┆ the necessary  linkage editing.┆
0x20c20…20c40        0d 0a 0d 0a 49 66 20 61 20 6e 65 77 20 70 72 6f 67 72 61 6d 20 62 6c 6f 63 6b 20 69 73 20 74 6f   ┆    If a new program block is to┆
0x20c40…20c60        20 62 65 20 6c 69 6e 6b 65 64 20 74 6f 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 6f 62 6a   ┆ be linked to a sub-program  obj┆
0x20c60…20c80        65 63 74 2c 20 74 68 65 20 66 6f 72 6d 65 72 20 6c 69 6e 6b 20 6d 75 73 74 20 62 65 20 62 72 6f   ┆ect, the former link must be bro┆
0x20c80…20ca0        6b 65 6e 2c 20 69 2e 65 2e 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 0a 74 68 65 20 73 75 62 2d   ┆ken, i.e. the state of  the sub-┆
0x20ca0…20cc0        70 72 6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 68 61 73 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64   ┆program object has to be changed┆
0x20cc0…20ce0        20 66 72 6f 6d 20 6c 69 6e 6b 65 64 20 74 6f 20 0a 75 6e 6c 69 6e 6b 65 64 2e 20 54 68 69 73 20   ┆ from linked to  unlinked. This ┆
0x20ce0…20d00        69 73 20 64 6f 6e 65 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 6e 20 75 6e 6c 69 6e 6b 20 63 61   ┆is done by means of an unlink ca┆
0x20d00…20d20        6c 6c 2c 20 77 68 69 63 68 20 69 73 20 0a 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 66 75 6e 63 74   ┆ll, which is  similar to a funct┆
0x20d20…20d40        69 6f 6e 20 63 61 6c 6c 3a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66   ┆ion call:          The result of┆
0x20d40…20d60        20 61 6e 20 75 6e 6c 69 6e 6b 20 63 61 6c 6c 20 69 73 20 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d   ┆ an unlink call is of the implem┆
0x20d60…20d80        65 6e 74 61 74 69 6f 6e 20 0a 64 65 70 65 6e 64 65 6e 74 20 70 72 65 64 65 66 69 6e 65 64 20 65   ┆entation  dependent predefined e┆
0x20d80…20da0        6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 20 20 75 6e 6c 69 6e 6b 5f 72 65 73 75 6c 74   ┆numeration type    unlink_result┆
0x20da0…20dc0        3d 20 28 75 6e 6c 69 6e 6b 5f 6f 6b 2c 20 6e 6f 5f 70 72 6f 67 72 61 6d 5f 6c 69 6e 6b 65 64 2c   ┆= (unlink_ok, no_program_linked,┆
0x20dc0…20de0        0d 0a 09 09 20 20 20 20 65 78 69 73 74 69 6e 67 5f 69 6e 63 61 72 6e 61 74 69 6f 6e 73 2c 20 2e   ┆        existing_incarnations, .┆
0x20de0…20e00        2e 2e 29 0d 0a 0d 0a 41 66 74 65 72 20 74 68 65 20 63 61 6c 6c 2c 20 69 66 20 73 75 63 63 65 73   ┆..)    After the call, if succes┆
0x20e00…20e20 (263,) 73 66 75 6c 2c 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 6d 61 79   ┆sful, the sub-program object may┆
0x20e20…20e40        20 62 65 20 0a 6c 69 6e 6b 65 64 20 61 6e 65 77 20 28 6c 69 6e 6b 20 63 61 6c 6c 29 2e 0d 0a 0d   ┆ be  linked anew (link call).   ┆
0x20e40…20e60        0a 8c 83 d4 0a 50 72 6f 63 65 73 73 65 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 20 61 73   ┆     Processes may be created as┆
0x20e60…20e80        20 69 6e 63 61 72 6e 61 74 69 6f 6e 73 20 6f 66 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 69 6e   ┆ incarnations of sub-programs in┆
0x20e80…20ea0        20 0a 74 68 65 20 6c 69 6e 6b 65 64 20 73 74 61 74 65 2e 20 57 68 65 6e 20 61 20 70 72 6f 63 65   ┆  the linked state. When a proce┆
0x20ea0…20ec0        73 73 20 68 61 73 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 69 74 20 77 69 6c 6c 20 0a 62 65 67   ┆ss has been created it will  beg┆
0x20ec0…20ee0        69 6e 20 74 6f 20 65 78 65 63 75 74 65 20 69 74 73 20 61 63 74 69 6f 6e 73 2e 20 41 20 70 72 6f   ┆in to execute its actions. A pro┆
0x20ee0…20f00        63 65 73 73 20 6d 61 79 20 62 65 63 6f 6d 65 20 0a 74 65 6d 70 6f 72 61 72 69 6c 79 20 75 6e 61   ┆cess may become  temporarily una┆
0x20f00…20f20        62 6c 65 20 74 6f 20 65 78 65 63 75 74 65 20 61 63 74 69 6f 6e 73 20 66 6f 72 20 74 77 6f 20 72   ┆ble to execute actions for two r┆
0x20f20…20f40        65 61 73 6f 6e 73 2c 20 77 68 69 63 68 20 0a 61 72 65 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f   ┆easons, which  are independent o┆
0x20f40…20f60        66 20 65 61 63 68 20 6f 74 68 65 72 2e 20 49 74 20 6d 61 79 20 62 65 20 a1 77 61 69 74 69 6e 67   ┆f each other. It may be  waiting┆
0x20f60…20f80        e1 20 66 6f 72 20 61 6e 20 0a 65 76 65 6e 74 2c 20 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20   ┆  for an  event, cf. subsection ┆
0x20f80…20fa0        39 2e 32 2e 32 2c 20 6f 72 20 a1 73 74 6f 70 70 65 64 e1 2c 20 63 66 2e 20 74 68 65 20 70 72 65   ┆9.2.2, or  stopped , cf. the pre┆
0x20fa0…20fc0        64 65 66 69 6e 65 64 20 0a 70 72 6f 63 65 64 75 72 65 73 20 73 74 6f 70 20 61 6e 64 20 72 65 73   ┆defined  procedures stop and res┆
0x20fc0…20fe0        75 6d 65 20 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 20 41 20 70 72 6f 63 65 73 73 20 69   ┆ume described below. A process i┆
0x20fe0…21000        73 20 0a 6f 6e 6c 79 20 61 62 6c 65 20 74 6f 20 65 78 65 63 75 74 65 20 61 63 74 69 6f 6e 73 20   ┆s  only able to execute actions ┆
0x21000…21020 (264,) 69 66 20 69 74 20 69 73 20 6e 65 69 74 68 65 72 20 77 61 69 74 69 6e 67 20 6e 6f 72 20 0a 73 74   ┆if it is neither waiting nor  st┆
0x21020…21040        6f 70 70 65 64 2e 20 54 68 65 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66   ┆opped. The dynamic allocation of┆
0x21040…21060        20 70 72 6f 63 65 73 73 6f 72 20 74 69 6d 65 20 74 6f 20 0a 70 72 6f 63 65 73 73 65 73 20 77 69   ┆ processor time to  processes wi┆
0x21060…21080        74 68 20 74 68 65 20 6c 61 74 74 65 72 20 70 72 6f 70 65 72 74 79 20 69 73 20 74 68 65 20 73 63   ┆th the latter property is the sc┆
0x21080…210a0        68 65 64 75 6c 69 6e 67 20 0a 66 75 6e 63 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20   ┆heduling  function performed by ┆
0x210a0…210c0        74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 6f 72 20 6c 61 6e 67 75 61 67 65   ┆the operating system or language┆
0x210c0…210e0        2d 0a 73 75 70 70 6f 72 74 69 6e 67 20 6e 75 63 6c 65 75 73 2e 0d 0a 0d 0a 41 20 70 72 6f 63 65   ┆- supporting nucleus.    A proce┆
0x210e0…21100        73 73 20 69 73 20 63 72 65 61 74 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 20 63 72 65 61   ┆ss is created by means of a crea┆
0x21100…21120        74 65 20 63 61 6c 6c 2e 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a   ┆te call.                        ┆
0x21120…21140        54 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 61 20 63 72 65 61 74 65 20 63 61 6c 6c 20   ┆The evaluation of a create call ┆
0x21140…21160        63 61 75 73 65 73 20 61 6e 20 69 6e 63 61 72 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 0a 70 72   ┆causes an incarnation of the  pr┆
0x21160…21180        6f 67 72 61 6d 20 62 6c 6f 63 6b 20 6c 69 6e 6b 65 64 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72   ┆ogram block linked to the sub-pr┆
0x21180…211a0        6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 64 65 6e 6f 74 65 64 20 62 79 20 0a 27 70 72 6f 67 72 61   ┆ogram object denoted by  'progra┆
0x211a0…211c0        6d 5f 6e 61 6d 65 27 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 73 20 64 65 73 63 72 69 62   ┆m_name' to be created as describ┆
0x211c0…211e0        65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 36 2e 32 2e 20 49 66 20 0a 74 68 65 20 73 74 61 74 65   ┆ed in section 6.2. If  the state┆
0x211e0…21200        20 6f 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 6f 62 6a 65 63 74 20 69 73 20 75 6e   ┆ of the sub-program object is un┆
0x21200…21220 (265,) 6c 69 6e 6b 65 64 20 61 20 66 61 75 6c 74 20 77 69 6c 6c 20 0a 6f 63 63 75 72 2e 20 57 68 65 6e   ┆linked a fault will  occur. When┆
0x21220…21240        20 61 20 70 72 6f 63 65 73 73 20 68 61 73 20 6a 75 73 74 20 62 65 65 6e 20 63 72 65 61 74 65 64   ┆ a process has just been created┆
0x21240…21260        20 69 74 20 69 73 20 6e 65 69 74 68 65 72 20 0a 73 74 6f 70 70 65 64 20 6e 6f 72 20 77 61 69 74   ┆ it is neither  stopped nor wait┆
0x21260…21280        69 6e 67 2e 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 27 6e 61 6d 65 5f 65   ┆ing.    The value of the 'name_e┆
0x21280…212a0        78 70 72 65 73 73 69 6f 6e 27 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 6f 66 20 61 20 0a   ┆xpression', which must be of a  ┆
0x212a0…212c0        73 74 72 69 6e 67 20 74 79 70 65 2c 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20   ┆string type, is attached to the ┆
0x212c0…212e0        63 72 65 61 74 65 64 20 70 72 6f 63 65 73 73 20 66 6f 72 20 0a 64 69 61 67 6e 6f 73 74 69 63 20   ┆created process for  diagnostic ┆
0x212e0…21300        70 75 72 70 6f 73 65 73 2e 0d 0a 0d 0a 54 68 65 20 27 70 72 6f 63 65 73 73 5f 6f 62 6a 65 63 74   ┆purposes.    The 'process_object┆
0x21300…21320        20 64 65 6e 6f 74 61 74 69 6f 6e 27 20 64 65 6e 6f 74 65 73 20 74 68 65 20 76 61 72 69 61 62 6c   ┆ denotation' denotes the variabl┆
0x21320…21340        65 20 74 68 72 6f 75 67 68 20 0a 77 68 69 63 68 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 70 72 6f   ┆e through  which the calling pro┆
0x21340…21360        63 65 73 73 20 77 69 6c 6c 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 63 68 69 6c 64 3b 20 69 74 20   ┆cess will control the child; it ┆
0x21360…21380        6d 75 73 74 20 62 65 20 0a 8c 83 c8 0a 6f 66 20 74 79 70 65 20 70 72 6f 63 65 73 73 2e 20 54 68   ┆must be      of type process. Th┆
0x21380…213a0        65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74 20 62 65   ┆e value of this variable must be┆
0x213a0…213c0        20 4e 49 4c 20 0a 62 65 66 6f 72 65 20 74 68 65 20 63 61 6c 6c 2c 20 6f 74 68 65 72 77 69 73 65   ┆ NIL  before the call, otherwise┆
0x213c0…213e0        20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 41 66 74 65 72 20 74 68 65 20 63 61 6c 6c 20   ┆ a fault occurs. After the call ┆
0x213e0…21400        69 74 20 0a 77 69 6c 6c 20 62 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 63   ┆it  will be a reference to the c┆
0x21400…21420 (266,) 68 69 6c 64 20 70 72 6f 63 65 73 73 2e 20 0a 0d 0a 54 68 65 20 27 61 63 74 75 61 6c 20 70 61 72   ┆hild process.    The 'actual par┆
0x21420…21440        61 6d 65 74 65 72 73 27 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 61 6c 6c 20 61 72 65   ┆ameters' of the program call are┆
0x21440…21460        20 62 6f 75 6e 64 20 74 6f 20 74 68 65 20 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 66 6f 72   ┆ bound to the  corresponding for┆
0x21460…21480        6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 65 76   ┆mal parameters as part of the ev┆
0x21480…214a0        61 6c 75 61 74 69 6f 6e 20 6f 66 20 0a 74 68 65 20 63 72 65 61 74 65 20 63 61 6c 6c 2e 0d 0a 0d   ┆aluation of  the create call.   ┆
0x214a0…214c0        0a 54 68 65 20 69 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 77   ┆ The initial size of the stack w┆
0x214c0…214e0        68 69 63 68 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 0a 63 72 65 61 74   ┆hich is allocated for the  creat┆
0x214e0…21500        65 64 20 70 72 6f 63 65 64 73 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65   ┆ed procedss is determined by the┆
0x21500…21520        20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 0a 27 73 69 7a 65 5f 65 78 70 72 65 73 73 69 6f 6e 27   ┆ value of the  'size_expression'┆
0x21520…21540        20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 30 2e 2e 6d 61 78 69 6e 74   ┆ which must be of type 0..maxint┆
0x21540…21560        2e 20 53 69 7a 65 20 30 20 0a 6d 65 61 6e 73 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 61 6e   ┆. Size 0  means allocation of an┆
0x21560…21580        20 61 72 65 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 61 20 76 61 6c 75 65 20 64 65 66 69 6e   ┆ area according to a value defin┆
0x21580…215a0        65 64 20 66 6f 72 20 0a 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 61 74 20 63 6f 6d 70 69   ┆ed for  the sub-program at compi┆
0x215a0…215c0        6c 65 2d 74 69 6d 65 2c 20 63 66 2e 20 63 68 61 70 74 65 72 20 31 32 2e 20 54 68 65 20 75 6e 69   ┆le-time, cf. chapter 12. The uni┆
0x215c0…215e0        74 20 6f 66 20 0a 6d 65 61 73 75 72 65 6d 65 6e 74 20 66 6f 72 20 73 74 61 63 6b 20 73 69 7a 65   ┆t of  measurement for stack size┆
0x215e0…21600        20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 2e 0d 0a 0d   ┆ is implementation dependent.   ┆
0x21600…21620 (267,) 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 27 70 72 69 6f 72 69 74 79 5f 65 78 70 72   ┆ The value of the 'priority_expr┆
0x21620…21640        65 73 73 69 6f 6e 27 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 0a 65 78 65 63 75 74 69 6f   ┆ession' determines the  executio┆
0x21640…21660        6e 20 70 72 69 6f 72 69 74 79 20 6f 66 20 74 68 65 20 63 72 65 61 74 65 64 20 70 72 6f 63 65 73   ┆n priority of the created proces┆
0x21660…21680        73 2e 20 54 68 69 73 20 71 75 61 6e 74 69 74 79 20 0a 61 66 66 65 63 74 73 20 74 68 65 20 77 61   ┆s. This quantity  affects the wa┆
0x21680…216a0        79 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 70 72 6f 63 65 73 73 20 69 73 20 73 63 68 65 64 75   ┆y in which the process is schedu┆
0x216a0…216c0        6c 65 64 20 66 6f 72 20 0a 65 78 65 63 75 74 69 6f 6e 69 6e 20 61 20 66 61 73 68 69 6f 6e 20 77   ┆led for  executionin a fashion w┆
0x216c0…216e0        68 69 63 68 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   ┆hich depends on the implementati┆
0x216e0…21700        6f 6e 2e 20 0a 54 68 65 20 74 79 70 65 20 72 65 71 75 69 72 65 64 20 6f 66 20 74 68 65 20 65 78   ┆on.  The type required of the ex┆
0x21700…21720        70 72 65 73 73 69 6f 6e 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 0a 69 6d   ┆pression also depends on the  im┆
0x21720…21740        70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   ┆plementation.    The result of a┆
0x21740…21760        20 63 72 65 61 74 65 20 63 61 6c 6c 20 68 61 73 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   ┆ create call has an implementati┆
0x21760…21780        6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 0a 70 72 65 64 65 66 69 6e 65 64 20 65 6e 75 6d 65 72 61   ┆on dependent  predefined enumera┆
0x21780…217a0        74 69 6f 6e 20 74 79 70 65 0d 0a 20 20 20 20 63 72 65 61 74 65 5f 72 65 73 75 6c 74 3d 20 28 63   ┆tion type      create_result= (c┆
0x217a0…217c0        72 65 61 74 65 5f 6f 6b 2c 20 6e 6f 5f 6d 65 6d 6f 72 79 2c 20 2e 2e 2e 29 2e 0d 0a 0d 0a 49 66   ┆reate_ok, no_memory, ...).    If┆
0x217c0…217e0        20 74 68 65 20 63 72 65 61 74 65 20 63 61 6c 6c 20 77 61 73 20 75 6e 73 75 63 63 65 73 73 66 75   ┆ the create call was unsuccessfu┆
0x217e0…21800        6c 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 0a 74 68 65 20   ┆l the result will indicate  the ┆
0x21800…21820 (268,) 72 65 61 73 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 70 72 6f 63 65 73 73 20   ┆reason. In this case no process ┆
0x21820…21840        77 69 6c 6c 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 0a 61 6e 64 20 74 68 65 20   ┆will have been created  and the ┆
0x21840…21860        76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 76 61 72 69 61 62 6c 65 20 77 69   ┆value of the process variable wi┆
0x21860…21880        6c 6c 20 73 74 69 6c 6c 20 62 65 20 4e 49 4c 2e 0d 0a 0d 0a 54 68 65 20 70 72 65 64 65 66 69 6e   ┆ll still be NIL.    The predefin┆
0x21880…218a0        65 64 20 70 72 6f 63 65 64 75 72 65 73 20 73 74 6f 70 2c 20 72 65 73 75 6d 65 2c 20 61 6e 64 20   ┆ed procedures stop, resume, and ┆
0x218a0…218c0        72 65 6d 6f 76 65 20 6d 61 79 20 62 65 20 0a 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 61   ┆remove may be  used to control a┆
0x218c0…218e0        20 63 68 69 6c 64 2c 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 61 20 70 72 6f 63 65 73 73 20   ┆ child, designated by a process ┆
0x218e0…21900        76 61 72 69 61 62 6c 65 20 0a 70 61 73 73 65 64 20 61 73 20 61 20 70 61 72 61 6d 65 74 65 72 2e   ┆variable  passed as a parameter.┆
0x21900…21920        20 49 66 20 6f 6e 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 73 20 69 73 20 63 61 6c   ┆ If one of the procedures is cal┆
0x21920…21940        6c 65 64 20 0a 77 69 74 68 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 65 71 75 61 6c 20 74 6f   ┆led  with this variable equal to┆
0x21940…21960        20 4e 49 4c 20 61 20 66 61 75 6c 74 20 77 69 6c 6c 20 6f 63 63 75 72 2e 0d 0a 0d 0a 50 52 4f 43   ┆ NIL a fault will occur.    PROC┆
0x21960…21980        45 44 55 52 45 20 73 74 6f 70 28 56 41 52 20 70 72 3a 20 70 72 6f 63 65 73 73 29 0d 0a 0d 0a 8c   ┆EDURE stop(VAR pr: process)     ┆
0x21980…219a0        83 bc 0a 54 68 65 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 20 62 65 63 6f 6d 72 65 73 20 73 74   ┆   The child process becomres st┆
0x219a0…219c0        6f 70 70 65 64 2e 20 49 66 20 69 74 20 69 73 20 61 6c 72 65 61 64 79 20 73 74 6f 70 70 65 64 20   ┆opped. If it is already stopped ┆
0x219c0…219e0        0a 62 65 66 6f 72 65 20 74 68 65 20 63 61 6c 6c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 66 66   ┆ before the call there is no eff┆
0x219e0…21a00        65 63 74 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 72 65 73 75 6d 65 28 56 41 52 20 70 72 3a   ┆ect.    PROCEDURE resume(VAR pr:┆
0x21a00…21a20 (269,) 20 70 72 6f 63 65 73 73 29 0d 0a 0d 0a 49 66 20 74 68 65 20 63 68 69 6c 64 20 70 72 6f 63 65 73   ┆ process)    If the child proces┆
0x21a20…21a40        73 20 69 73 20 73 74 6f 70 70 65 64 20 61 20 63 61 6c 6c 20 6f 66 20 72 65 73 75 6d 65 20 6d 61   ┆s is stopped a call of resume ma┆
0x21a40…21a60        6b 65 73 20 69 74 20 0a 6e 6f 74 20 73 74 6f 70 70 65 64 3b 20 6f 74 68 65 72 77 69 73 65 20 74   ┆kes it  not stopped; otherwise t┆
0x21a60…21a80        68 65 20 63 61 6c 6c 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 2e 0d 0a 0d 0a 50 52 4f 43 45 44   ┆he call has no effect.    PROCED┆
0x21a80…21aa0        55 52 45 20 72 65 6d 6f 76 65 28 56 41 52 20 70 72 3a 20 70 72 6f 63 65 73 73 29 0d 0a 0d 0a 41   ┆URE remove(VAR pr: process)    A┆
0x21aa0…21ac0        20 63 61 6c 6c 20 6f 66 20 72 65 6d 6f 76 65 20 63 61 75 73 65 73 20 74 68 65 20 63 68 69 6c 64   ┆ call of remove causes the child┆
0x21ac0…21ae0        20 70 72 6f 63 65 73 73 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2c 20 0a 69 2e 65 2e 20 65 78   ┆ process to be removed,  i.e. ex┆
0x21ae0…21b00        65 63 75 74 69 6f 6e 20 6f 66 20 69 74 73 20 61 63 74 69 6f 6e 20 70 61 72 74 20 69 73 20 74 65   ┆ecution of its action part is te┆
0x21b00…21b20        72 6d 69 6e 61 74 65 64 20 61 6e 64 20 61 6c 6c 20 0a 72 65 73 6f 75 72 63 65 73 20 6f 77 6e 65   ┆rminated and all  resources owne┆
0x21b20…21b40        64 20 62 79 20 74 68 65 20 63 68 69 6c 64 20 61 72 65 20 72 65 6c 65 61 73 65 64 20 61 6e 64 20   ┆d by the child are released and ┆
0x21b40…21b60        62 65 63 6f 6d 65 20 66 72 65 65 20 0a 6d 65 6d 6f 72 79 2e 20 54 68 65 20 72 65 73 6f 75 72 63   ┆become free  memory. The resourc┆
0x21b60…21b80        65 73 20 69 6e 63 6c 75 64 65 20 73 74 61 63 6b 2c 20 68 65 61 70 2c 20 61 6e 64 20 70 6f 6f 6c   ┆es include stack, heap, and pool┆
0x21b80…21ba0        73 2e 20 41 6e 79 20 0a 70 6f 72 74 73 20 6f 77 6e 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65   ┆s. Any  ports owned by the proce┆
0x21ba0…21bc0        73 73 20 61 72 65 20 63 6c 6f 73 65 64 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 31 31 2e 31 29   ┆ss are closed (cf. section 11.1)┆
0x21bc0…21be0        2e 20 0a 50 6f 6f 6c 73 20 61 6e 64 20 62 75 66 66 65 72 73 20 61 72 65 20 68 61 6e 64 6c 65 64   ┆.  Pools and buffers are handled┆
0x21be0…21c00        20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0d 0a 0d 0a 31 2e 20 84 41 6c 6c 20 62 75 66 66 65 72 73 20   ┆ as follows:    1.  All buffers ┆
0x21c00…21c20 (270,) 77 68 69 63 68 20 68 61 76 65 20 61 20 70 6f 6f 6c 20 6f 77 6e 65 64 20 62 79 20 74 68 65 20 63   ┆which have a pool owned by the c┆
0x21c20…21c40        68 69 6c 64 20 70 72 6f 63 65 73 73 20 0a 19 83 80 80 61 73 20 74 68 65 69 72 20 68 6f 6d 65 20   ┆hild process      as their home ┆
0x21c40…21c60        70 6f 6f 6c 20 61 72 65 20 6d 61 72 6b 65 64 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6f 6e   ┆pool are marked for deallocation┆
0x21c60…21c80        2e 20 41 20 73 70 65 63 69 61 6c 20 0a 19 83 80 80 74 72 65 61 74 6d 65 6e 74 20 69 73 20 67 69   ┆. A special      treatment is gi┆
0x21c80…21ca0        76 65 6e 20 74 6f 20 61 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 77 68 6f 73 65 20 74 6f 70 20   ┆ven to a buffer stack whose top ┆
0x21ca0…21cc0        62 75 66 66 65 72 20 69 73 20 0a 19 83 80 80 6d 61 72 6b 65 64 20 66 6f 72 20 64 65 61 6c 6c 6f   ┆buffer is      marked for deallo┆
0x21cc0…21ce0        63 61 74 69 6f 6e 2c 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 74 75 61 74 69   ┆cation, in the following situati┆
0x21ce0…21d00        6f 6e 73 3a 0d 0a 0d 0a 20 20 20 2d 20 84 41 20 70 72 6f 63 65 73 73 20 63 61 6c 6c 73 20 70 75   ┆ons:       -  A process calls pu┆
0x21d00…21d20        74 62 75 66 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 38 29 20 61 74 74 65 6d 70 74 69 6e   ┆tbuf (cf. section 3.8) attemptin┆
0x21d20…21d40        67 20 74 6f 20 0a 19 85 80 80 70 75 74 20 74 68 65 20 62 75 66 66 65 72 20 69 6e 20 69 74 73 20   ┆g to      put the buffer in its ┆
0x21d40…21d60        68 6f 6d 65 20 70 6f 6f 6c 20 28 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 0a 19 85 80   ┆home pool (in this case the     ┆
0x21d60…21d80        80 62 75 66 66 65 72 20 6d 75 73 74 20 62 65 20 61 6c 6f 6e 65 20 69 6e 20 74 68 65 20 73 74 61   ┆ buffer must be alone in the sta┆
0x21d80…21da0        63 6b 29 2c 20 0a 0d 0a 20 20 20 2d 20 84 41 20 70 72 6f 63 65 73 73 20 63 61 6c 6c 73 20 72 65   ┆ck),       -  A process calls re┆
0x21da0…21dc0        74 75 72 6e 20 28 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 39 2e 32 2e 32 29 20 0a 19 85 80   ┆turn (cf. subsection 9.2.2)     ┆
0x21dc0…21de0        80 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 70 6c 61 63 65 20 74 68 65 20 73 74 61 63 6b 20 69   ┆ attempting to place the stack i┆
0x21de0…21e00        6e 20 74 68 65 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 0a 19 85 80 80 6d 61 69 6c 62 6f   ┆n the return address      mailbo┆
0x21e00…21e20 (271,) 78 20 6f 66 20 74 68 65 20 74 6f 70 20 62 75 66 66 65 72 2c 0d 0a 0d 0a 20 20 20 2d 20 84 41 6e   ┆x of the top buffer,       -  An┆
0x21e20…21e40        20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6c 61 63 65 20 74 68 65 20 73 74   ┆ attempt is made to place the st┆
0x21e40…21e60        61 63 6b 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e 20 0a 19 85 80 80 61 64 64 72 65 73 73 20 6d   ┆ack in the return      address m┆
0x21e60…21e80        61 69 6c 62 6f 78 20 6f 66 20 74 68 65 20 74 6f 70 20 62 75 66 66 65 72 20 61 73 20 61 6e 20 49   ┆ailbox of the top buffer as an I┆
0x21e80…21ea0        4d 43 20 65 76 65 6e 74 20 28 63 66 2e 20 0a 19 85 80 80 63 68 61 70 74 65 72 20 31 31 29 20 6f   ┆MC event (cf.      chapter 11) o┆
0x21ea0…21ec0        72 20 61 73 20 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 0d 0a 0d 0a 20 20 20 84 49 6e 20   ┆r as described below.        In ┆
0x21ec0…21ee0        61 6c 6c 20 74 68 72 65 65 20 63 61 73 65 73 20 74 68 65 20 73 70 65 63 69 61 6c 20 74 72 65 61   ┆all three cases the special trea┆
0x21ee0…21f00        74 6d 65 6e 74 20 69 73 20 74 68 65 20 0a 19 83 80 80 66 6f 6c 6c 6f 77 69 6e 67 2e 20 46 69 72   ┆tment is the      following. Fir┆
0x21f00…21f20        73 74 20 74 68 65 20 74 6f 70 20 62 75 66 66 65 72 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f   ┆st the top buffer is removed fro┆
0x21f20…21f40        6d 20 74 68 65 20 73 74 63 6b 20 0a 19 83 80 80 61 6e 64 20 72 65 6c 65 61 73 65 64 20 74 6f 20   ┆m the stck      and released to ┆
0x21f40…21f60        62 65 63 6f 6d 65 20 66 72 65 65 20 6d 65 6d 6f 72 79 2e 20 54 68 65 6e 20 74 68 65 20 72 65 6d   ┆become free memory. Then the rem┆
0x21f60…21f80        61 69 6e 64 65 72 20 6f 66 20 0a 19 83 80 80 74 68 65 20 73 74 61 63 6b 2c 20 69 66 20 6e 6f 6e   ┆ainder of      the stack, if non┆
0x21f80…21fa0        2d 65 6d 70 74 79 2c 20 69 73 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e 20   ┆-empty, is placed in the return ┆
0x21fa0…21fc0        61 64 64 72 65 73 73 20 0a 8c 83 c8 0a 19 83 80 80 6d 61 69 6c 62 6f 78 20 6f 66 20 74 68 65 20   ┆address          mailbox of the ┆
0x21fc0…21fe0        6e 65 77 20 74 6f 70 20 62 75 66 66 65 72 2c 20 65 78 63 65 70 74 20 69 66 20 74 68 69 73 20 62   ┆new top buffer, except if this b┆
0x21fe0…22000        75 66 66 65 72 20 69 73 20 0a 19 83 80 80 61 6c 73 6f 20 6d 61 72 6b 65 64 20 66 6f 72 20 64 65   ┆uffer is      also marked for de┆
0x22000…22020 (272,) 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72 75 6c   ┆allocation in which case the rul┆
0x22020…22040        65 20 0a 19 83 80 80 61 70 70 6c 69 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2e 20 54 68 65 20   ┆e      applies recursively. The ┆
0x22040…22060        65 76 65 6e 74 20 6b 69 6e 64 20 61 74 74 72 69 62 75 74 65 20 6f 66 20 61 20 62 75 66 66 65 72   ┆event kind attribute of a buffer┆
0x22060…22080        20 0a 19 83 80 80 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 69 73 20 66 61 73 68 69 6f 6e 20 62   ┆      returned in this fashion b┆
0x22080…220a0        65 63 6f 6d 65 73 20 70 72 6f 63 65 73 73 5f 72 65 6d 6f 76 65 64 2e 0d 0a 0d 0a 32 2e 20 84 41   ┆ecomes process_removed.    2.  A┆
0x220a0…220c0        6c 6c 20 62 75 66 66 65 72 20 73 74 61 63 6b 73 20 61 63 63 65 73 73 65 64 20 74 68 72 6f 75 67   ┆ll buffer stacks accessed throug┆
0x220c0…220e0        68 20 72 65 66 65 72 65 6e 63 65 20 6f 72 20 63 68 61 69 6e 20 0a 19 83 80 80 76 61 72 69 61 62   ┆h reference or chain      variab┆
0x220e0…22100        6c 65 73 20 6f 72 20 70 72 65 73 65 6e 74 6c 79 20 70 6c 61 63 65 64 20 69 6e 20 6d 61 69 6c 62   ┆les or presently placed in mailb┆
0x22100…22120        6f 78 65 73 20 6f 77 6e 65 64 20 62 79 20 74 68 65 20 0a 19 83 80 80 63 68 69 6c 64 20 70 72 6f   ┆oxes owned by the      child pro┆
0x22120…22140        63 65 73 73 20 61 72 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e 20 61 64   ┆cess are placed in the return ad┆
0x22140…22160        64 72 65 73 73 20 6d 61 69 6c 62 6f 78 20 6f 66 20 0a 19 83 80 80 74 68 65 20 74 6f 70 20 62 75   ┆dress mailbox of      the top bu┆
0x22160…22180        66 66 65 72 20 77 69 74 68 20 74 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 61 74 74 72 69 62 75   ┆ffer with the event kind attribu┆
0x22180…221a0        74 65 20 65 71 75 61 6c 20 74 6f 20 0a 19 83 80 80 70 72 6f 63 65 73 73 5f 72 65 6d 6f 76 65 64   ┆te equal to      process_removed┆
0x221a0…221c0        2e 20 49 66 20 74 68 65 20 74 6f 70 20 62 75 66 66 65 72 20 69 73 20 6d 61 72 6b 65 64 20 66 6f   ┆. If the top buffer is marked fo┆
0x221c0…221e0        72 20 0a 19 83 80 80 64 65 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 68 65 20 61 62 6f 76 65 20 72 75   ┆r      deallocation the above ru┆
0x221e0…22200        6c 65 20 61 70 70 6c 69 65 73 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f   ┆le applies.    If the process to┆
0x22200…22220 (273,) 20 62 65 20 72 65 6d 6f 76 65 64 20 68 61 73 20 61 6e 79 20 63 68 69 6c 64 72 65 6e 2c 20 74 68   ┆ be removed has any children, th┆
0x22220…22240        65 73 65 20 61 72 65 20 0a 72 65 6d 6f 76 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 70 72 6f 63   ┆ese are  removed before the proc┆
0x22240…22260        65 73 73 20 69 74 73 65 6c 66 2e 20 54 68 69 73 20 72 75 6c 65 20 61 70 70 6c 69 65 73 20 0a 72   ┆ess itself. This rule applies  r┆
0x22260…22280        65 63 75 72 73 69 76 65 6c 79 2e 20 54 68 75 73 2c 20 69 6e 20 65 66 66 65 63 74 2c 20 72 65 6d   ┆ecursively. Thus, in effect, rem┆
0x22280…222a0        6f 76 61 6c 20 6f 66 20 61 20 70 72 6f 63 65 73 73 20 6d 65 61 6e 73 20 0a 72 65 6d 6f 76 61 6c   ┆oval of a process means  removal┆
0x222a0…222c0        20 6f 66 20 74 68 61 74 20 73 75 62 74 72 65 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ┆ of that subtree of the complete┆
0x222c0…222e0        20 70 72 6f 63 65 73 73 20 74 68 72 65 65 20 6f 66 20 0a 77 68 69 63 68 20 74 68 65 20 70 72 6f   ┆ process three of  which the pro┆
0x222e0…22300        63 65 73 73 20 69 73 20 74 68 65 20 72 6f 6f 74 2e 0d 0a 0d 0a 41 66 74 65 72 20 61 20 63 61 6c   ┆cess is the root.    After a cal┆
0x22300…22320        6c 20 6f 66 20 72 65 6d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 72   ┆l of remove the value of the par┆
0x22320…22340        61 6d 65 74 65 72 20 69 73 20 4e 49 4c 2e 0d 0a 0d 0a 49 66 20 61 20 70 72 6f 63 65 73 73 20 73   ┆ameter is NIL.    If a process s┆
0x22340…22360        68 61 72 65 73 20 61 20 70 6f 6f 6c 20 77 69 74 68 20 61 20 63 68 69 6c 64 2c 20 69 2e 65 2e 20   ┆hares a pool with a child, i.e. ┆
0x22360…22380        69 66 20 74 68 65 20 70 6f 6f 6c 20 0a 77 61 73 20 70 61 73 73 65 64 20 61 73 20 61 20 70 72 6f   ┆if the pool  was passed as a pro┆
0x22380…223a0        63 65 73 73 20 70 61 72 61 6d 65 74 65 72 20 77 68 65 6e 20 74 68 65 20 63 68 69 6c 64 20 70 72   ┆cess parameter when the child pr┆
0x223a0…223c0        6f 63 65 73 73 20 77 61 73 20 0a 63 72 65 61 74 65 64 2c 20 74 68 65 20 70 72 6f 63 65 73 73 20   ┆ocess was  created, the process ┆
0x223c0…223e0        6d 75 73 74 20 6e 6f 74 20 72 65 6d 6f 76 65 20 74 68 61 74 20 63 68 69 6c 64 2e 20 49 66 20 61   ┆must not remove that child. If a┆
0x223e0…22400        6e 20 0a 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72   ┆n  attempt is made a fault occur┆
0x22400…22420 (274,) 73 2e 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 0a 69 74 73 65   ┆s. However, if the process  itse┆
0x22420…22440        6c 66 20 69 73 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 63 68 69 6c 64 20 77 69 6c 6c 20 61 6c   ┆lf is removed, the child will al┆
0x22440…22460        73 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 62 79 20 74 68 65 20 0a 72 65 63 75 72 73 69 6f 6e 20   ┆so be removed by the  recursion ┆
0x22460…22480        64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 2e 0d 0a 0d 0a 49 74 20 69 73 20 69 6c 6c 65 67 61   ┆described above.    It is illega┆
0x22480…224a0        6c 20 74 6f 20 72 65 6d 6f 76 65 20 61 20 63 68 69 6c 64 20 70 72 6f 63 65 73 73 20 77 68 69 6c   ┆l to remove a child process whil┆
0x224a0…224c0        65 20 69 74 20 69 73 20 0a 65 78 65 63 75 74 69 6e 67 20 61 20 72 65 67 69 6f 6e 20 73 74 61 74   ┆e it is  executing a region stat┆
0x224c0…224e0        65 6d 65 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 64 6f 20 73 6f 20 63 61 75 73 65   ┆ement. An attempt to do so cause┆
0x224e0…224ef        73 20 61 20 0a 66 61 75 6c 74 2e 0d 0a 0d 0a                                                      ┆s a  fault.    ┆
0x224ef…224f2        FormFeed {
0x224ef…224f2          0c 82 f4                                                                                          ┆   ┆
0x224ef…224f2        }
0x224f2…22500        0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 0d 0a                                                         ┆  Example:    ┆
0x22500…22520        6c 69 6e 6b 5f 72 65 73 3a 3d 6c 69 6e 6b 28 22 63 68 69 6c 64 31 22 2c 20 6d 79 5f 63 68 69 6c   ┆link_res:=link("child1", my_chil┆
0x22520…22540        64 29 3b 0d 0a 49 46 20 6c 69 6e 6b 5f 72 65 73 20 3c 3e 20 6c 69 6e 6b 5f 6f 6b 20 54 48 45 4e   ┆d);  IF link_res <> link_ok THEN┆
0x22540…22560        20 6c 69 6e 6b 5f 65 72 72 6f 72 28 6c 69 6e 6b 5f 72 65 73 29 3b 0d 0a 63 72 65 61 74 65 5f 72   ┆ link_error(link_res);  create_r┆
0x22560…22580        65 73 3a 3d 63 72 65 61 74 65 28 22 63 68 69 6c 64 5f 31 5f 31 22 2c 20 6d 79 5f 63 68 69 6c 64   ┆es:=create("child_1_1", my_child┆
0x22580…225a0        28 6d 62 78 31 29 2c 20 70 72 6f 63 65 73 73 31 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20   ┆(mbx1), process1, 0,            ┆
0x225a0…225c0        20 73 74 64 5f 70 72 69 6f 29 3b 0d 0a 49 46 20 63 72 65 61 74 65 5f 72 65 73 20 3c 3e 20 63 72   ┆ std_prio);  IF create_res <> cr┆
0x225c0…225e0        65 61 74 65 5f 6f 6b 20 54 48 45 4e 20 63 72 65 61 74 65 5f 65 72 72 6f 72 28 63 72 65 61 74 65   ┆eate_ok THEN create_error(create┆
0x225e0…22600        5f 72 65 73 29 3b 0d 0a 63 72 65 61 74 65 5f 72 65 73 3a 3d 63 72 65 61 74 65 28 57 63 68 69 6c   ┆_res);  create_res:=create(Wchil┆
0x22600…22620 (275,) 64 5f 31 5f 32 22 2c 20 6d 79 5f 63 68 69 6c 64 28 6d 62 78 32 29 2c 20 70 72 6f 63 65 73 73 32   ┆d_1_2", my_child(mbx2), process2┆
0x22620…22640        2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 73 74 64 5f 70 72 69 6f 29 3b 0d 0a 49 46 20   ┆, 0,             std_prio);  IF ┆
0x22640…22660        63 72 65 61 74 65 5f 72 65 73 20 3c 3e 20 63 72 65 61 74 65 5f 6f 6b 20 54 48 45 4e 20 63 72 65   ┆create_res <> create_ok THEN cre┆
0x22660…22680        61 74 65 5f 65 72 72 6f 72 28 63 72 65 61 74 65 5f 72 65 73 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 73   ┆ate_error(create_res);    ...  s┆
0x22680…226a0        74 6f 70 28 70 72 6f 63 65 73 73 36 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 72 65 73 75 6d 65 28 70 72   ┆top(process6);    ...  resume(pr┆
0x226a0…226c0        6f 63 65 73 73 36 29 3b 0d 0a 20 20 2e 2e 2e 0d 0a 72 65 6d 6f 76 65 28 70 72 6f 63 65 73 73 34   ┆ocess6);    ...  remove(process4┆
0x226c0…226e0        29 3b 0d 0a 63 72 65 61 74 65 5f 72 65 73 3a 3d 63 72 65 61 74 65 28 22 63 68 69 6c 64 5f 32 5f   ┆);  create_res:=create("child_2_┆
0x226e0…22700        34 22 2c 20 6d 79 5f 63 68 69 6c 64 28 61 6c 74 65 72 6e 61 74 69 76 65 5f 6d 62 78 29 2c 0d 0a   ┆4", my_child(alternative_mbx),  ┆
0x22700…22720        20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 34 2c 20 32 30 30   ┆                   process4, 200┆
0x22720…22740        2c 20 68 69 67 68 5f 70 72 69 6f 29 3b 0d 0a 49 46 20 2e 2e 2e 0d 0a 20 20 2e 2e 2e 0d 0a 0d 0a   ┆, high_prio);  IF ...    ...    ┆
0x22740…22760        0d 0a b0 a1 39 2e 32 20 4d 61 69 6c 62 6f 78 20 43 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 0d 0a 0d   ┆    9.2 Mailbox Communication   ┆
0x22760…22780        0a 4d 65 73 73 61 67 65 73 20 6d 61 79 20 62 65 20 70 61 73 73 65 64 20 61 6d 6f 6e 67 20 70 72   ┆ Messages may be passed among pr┆
0x22780…227a0        6f 63 65 73 73 65 73 20 76 69 61 20 6d 61 69 6c 62 6f 78 65 73 2e 20 41 20 0a 6d 65 73 73 61 67   ┆ocesses via mailboxes. A  messag┆
0x227a0…227c0        65 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 20 73 74 61 63 6b 20 6f 66 20   ┆e is the contents of a stack of ┆
0x227c0…227e0        62 75 66 66 65 72 73 2c 20 77 68 69 63 68 20 69 73 20 0a 61 63 63 65 73 73 65 64 20 74 68 72 6f   ┆buffers, which is  accessed thro┆
0x227e0…22800        75 67 68 20 61 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 79 70 65 20 72 65 66 65 72 65 6e 63 65   ┆ugh a variable of type reference┆
0x22800…22820 (276,) 20 6f 72 20 63 68 61 69 6e 2e 20 41 74 20 0a 6d 6f 73 74 20 6f 6e 65 20 72 65 66 65 72 65 6e 63   ┆ or chain. At  most one referenc┆
0x22820…22840        65 20 6f 72 20 63 68 61 69 6e 20 76 61 72 69 61 62 6c 65 20 68 6f 6c 64 73 20 61 20 72 65 66 65   ┆e or chain variable holds a refe┆
0x22840…22860        72 65 6e 63 65 20 74 6f 20 61 20 0a 62 75 66 66 65 72 20 61 74 20 61 6e 79 20 74 69 6d 65 3b 20   ┆rence to a  buffer at any time; ┆
0x22860…22880        74 68 75 73 20 6d 75 74 75 61 6c 6c 79 20 65 78 63 6c 75 73 69 76 65 20 61 63 63 65 73 73 20 74   ┆thus mutually exclusive access t┆
0x22880…228a0        6f 20 0a 62 75 66 66 65 72 73 20 69 73 20 65 6e 73 75 72 65 64 2e 0d 0a 0d 0a 41 63 63 65 73 73   ┆o  buffers is ensured.    Access┆
0x228a0…228c0        20 74 6f 20 74 68 65 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 20 62 75 66 66   ┆ to the data contained in a buff┆
0x228c0…228e0        65 72 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 0a 61 20 6c 6f 63 6b 20 73   ┆er is only possible in  a lock s┆
0x228e0…22900        74 61 74 65 6d 65 6e 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 35 2e 39 29 2e 0d 0a 0d 0a 54   ┆tatement (cf. section 5.9).    T┆
0x22900…22920        68 65 20 61 63 63 65 73 73 20 72 69 67 68 74 20 69 73 20 65 78 63 68 61 6e 67 65 64 20 62 65 74   ┆he access right is exchanged bet┆
0x22920…22940        77 65 65 6e 20 70 72 6f 63 65 73 73 65 73 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 0a 74 68 65 20   ┆ween processes by means of  the ┆
0x22940…22960        70 72 65 64 65 66 69 6e 65 64 20 70 72 6f 63 65 64 75 72 65 73 20 73 69 67 6e 61 6c 2c 20 77 61   ┆predefined procedures signal, wa┆
0x22960…22980        69 74 2c 20 77 61 69 74 64 65 6c 61 79 2c 20 61 6e 64 20 0a 72 65 74 75 72 6e 20 61 73 20 64 65   ┆it, waitdelay, and  return as de┆
0x22980…229a0        73 63 72 69 62 65 64 20 69 6e 20 73 75 62 73 65 63 74 69 6f 6e 20 39 2e 32 2e 32 2e 0d 0a 0d 0a   ┆scribed in subsection 9.2.2.    ┆
0x229a0…229c0        0d 0a 8c 83 d4 0a b0 a1 39 2e 32 2e 31 20 4d 61 69 6c 62 6f 78 20 53 74 61 74 65 73 0d 0a 0d 0a   ┆        9.2.1 Mailbox States    ┆
0x229c0…229e0        41 20 6d 61 69 6c 62 6f 78 20 6d 61 79 20 62 65 20 72 65 67 61 72 64 65 64 20 61 73 20 61 20 77   ┆A mailbox may be regarded as a w┆
0x229e0…22a00        61 69 74 69 6e 67 20 72 6f 6f 6d 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 0a 73 74 61 74 65   ┆aiting room in one of the  state┆
0x22a00…22a20 (277,) 73 20 70 61 73 73 69 76 65 2c 20 6f 70 65 6e 20 6f 72 20 6c 6f 63 6b 65 64 3a 0d 0a 0d 0a 70 61   ┆s passive, open or locked:    pa┆
0x22a20…22a40        73 73 69 76 65 3a 0d 0a a1 20 20 20 6d 62 78 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 65 69   ┆ssive:      mbx              Nei┆
0x22a40…22a60        74 68 65 72 20 62 75 66 66 65 72 73 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 6e 6f 72 20   ┆ther buffers to be accessed nor ┆
0x22a60…22a80        70 72 6f 63 65 73 73 65 73 20 0a a1 20 20 20 20 20 20 20 20 e1 20 20 61 73 6b 69 6e 67 20 66 6f   ┆processes              asking fo┆
0x22a80…22aa0        72 20 61 63 63 65 73 73 20 61 74 20 74 68 65 20 6d 61 69 6c 62 6f 78 2e 0d 0a 0d 0a 20 6f 70 65   ┆r access at the mailbox.     ope┆
0x22aa0…22ac0        6e 3a 0d 0a a1 20 20 20 6d 62 78 20 20 e1 20 20 41 20 6c 69 73 74 20 6f 66 20 62 75 66 66 65 72   ┆n:      mbx     A list of buffer┆
0x22ac0…22ae0        73 20 28 61 63 74 75 61 6c 6c 79 20 62 75 66 66 65 72 20 73 74 61 63 6b 73 29 20 61 72 65 20 0d   ┆s (actually buffer stacks) are  ┆
0x22ae0…22b00        0a 20 20 62 75 66 31 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 61 63 63 65 73 73 2c 20 74 68 65   ┆   buf1    ready for access, the┆
0x22b00…22b20        20 66 69 72 73 74 20 6f 6e 65 20 77 69 6c 6c 20 62 65 20 72 65 6d 6f 76 65 64 0d 0a 20 20 62 75   ┆ first one will be removed    bu┆
0x22b20…22b40        66 32 20 20 20 20 66 72 6f 6d 20 74 68 65 20 6c 69 73 74 20 77 68 65 6e 20 61 20 70 72 6f 63 65   ┆f2    from the list when a proce┆
0x22b40…22b60        73 73 20 61 73 6b 73 20 66 6f 72 20 61 20 62 75 66 66 65 72 2c 0d 0a 20 20 62 75 66 33 20 20 20   ┆ss asks for a buffer,    buf3   ┆
0x22b60…22b80        20 61 6e 64 20 74 68 65 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 74   ┆ and the process will be given t┆
0x22b80…22ba0        68 65 20 61 63 63 65 73 73 20 72 69 67 68 74 2e 0d 0a a1 20 20 62 75 66 34 20 20 0d 0a 0d 0a 6c   ┆he access right.     buf4      l┆
0x22ba0…22bc0        6f 63 6b 65 64 3a 0d 0a a1 20 20 20 6d 62 78 20 20 e1 20 20 41 20 6c 69 73 74 20 6f 66 20 70 72   ┆ocked:      mbx     A list of pr┆
0x22bc0…22be0        6f 63 65 73 73 65 73 20 61 72 65 20 77 61 69 74 69 6e 67 20 66 6f 72 20 61 63 63 65 73 73 20 74   ┆ocesses are waiting for access t┆
0x22be0…22c00        6f 20 61 20 0d 0a 20 20 70 72 6f 63 31 20 20 20 62 75 66 66 65 72 3b 20 74 68 65 20 66 69 72 73   ┆o a     proc1   buffer; the firs┆
0x22c00…22c20 (278,) 74 20 6f 6e 65 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 61 63 63 65 73 73 20 72 69 67 68 74 20   ┆t one will get the access right ┆
0x22c20…22c40        74 6f 0d 0a 20 20 70 72 6f 63 32 20 20 20 74 68 65 20 6e 65 78 74 20 62 75 66 66 65 72 20 61 72   ┆to    proc2   the next buffer ar┆
0x22c40…22c60        72 69 76 69 6e 67 20 61 74 20 74 68 65 20 6d 61 69 6c 62 6f 78 20 61 6e 64 20 77 69 6c 6c 0d 0a   ┆riving at the mailbox and will  ┆
0x22c60…22c80        20 20 70 72 6f 63 33 20 20 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 62 65 20 72 65 6d 6f 76 65   ┆  proc3   subsequently be remove┆
0x22c80…22ca0        64 20 66 72 6f 6d 20 74 68 65 20 6c 69 73 74 2e 0d 0a a1 20 20 70 72 6f 63 34 20 0d 0a 0d 0a 54   ┆d from the list.     proc4     T┆
0x22ca0…22cc0        68 65 72 65 20 61 72 65 20 74 68 72 65 65 20 70 72 65 64 65 66 69 6e 65 64 20 62 6f 6f 6c 65 61   ┆here are three predefined boolea┆
0x22cc0…22ce0        6e 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 69 6e 73 70 65 63 74 20 74 68 65 20 0a 73 74 61 74   ┆n functions to inspect the  stat┆
0x22ce0…22d00        65 20 6f 66 20 61 20 6d 61 69 6c 62 6f 78 2e 20 48 6f 77 65 76 65 72 2c 20 69 74 20 69 73 20 6e   ┆e of a mailbox. However, it is n┆
0x22d00…22d20        6f 74 20 6d 61 6e 64 61 74 6f 72 79 20 74 68 61 74 20 74 68 65 73 65 20 0a 66 75 6e 63 74 69 6f   ┆ot mandatory that these  functio┆
0x22d20…22d40        6e 73 20 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 6f   ┆ns be implemented.    FUNCTION o┆
0x22d40…22d60        70 65 6e 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a   ┆pen(VAR mbx: mailbox): boolean  ┆
0x22d60…22d80        46 55 4e 43 54 49 4f 4e 20 6c 6f 63 6b 65 64 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78   ┆FUNCTION locked(VAR mbx: mailbox┆
0x22d80…22da0        29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 46 55 4e 43 54 49 4f 4e 20 70 61 73 73 69 76 65 28 56 41 52   ┆): boolean  FUNCTION passive(VAR┆
0x22da0…22dc0        20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 0d 0a 0d 0a b0 a1 39   ┆ mbx: mailbox): boolean        9┆
0x22dc0…22de0        2e 32 2e 32 20 43 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 61 6e 64 20 53 79 6e 63 68 72 6f 6e 69   ┆.2.2 Communication and Synchroni┆
0x22de0…22e00        7a 61 74 69 6f 6e 20 50 72 69 6d 69 74 69 76 65 73 0d 0a 0d 0a 54 68 65 72 65 20 61 72 65 20 66   ┆zation Primitives    There are f┆
0x22e00…22e20 (279,) 6f 75 72 20 70 72 65 64 65 66 69 6e 65 64 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 2f 73 79 6e   ┆our predefined communication/syn┆
0x22e20…22e40        63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 0a 70 72 69 6d 69 74 69 76 65 73 3a 20 73 69 67 6e 61 6c   ┆chronization  primitives: signal┆
0x22e40…22e60        2c 20 72 65 74 75 72 6e 2c 20 77 61 69 74 2c 20 61 6e 64 20 77 61 69 74 64 65 6c 61 79 2e 20 49   ┆, return, wait, and waitdelay. I┆
0x22e60…22e80        6e 20 61 64 64 69 74 69 6f 6e 20 0a 74 68 65 20 64 65 6c 61 79 20 70 72 69 6d 69 74 69 76 65 20   ┆n addition  the delay primitive ┆
0x22e80…22ea0        6d 61 79 20 62 65 20 75 73 65 64 20 66 6f 72 20 70 75 72 70 6f 73 65 73 20 6f 66 20 0a 73 79 6e   ┆may be used for purposes of  syn┆
0x22ea0…22ec0        63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 70 72 6f 63 65 73   ┆chronization or temporary proces┆
0x22ec0…22ee0        73 20 73 75 73 70 65 6e 73 69 6f 6e 2e 0d 0a 0d 0a 8c 83 e0 0a 53 69 67 6e 61 6c 20 69 73 20 70   ┆s suspension.        Signal is p┆
0x22ee0…22f00        65 72 66 6f 72 6d 65 64 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 70 72 65 64 65 66   ┆erformed by a call of the predef┆
0x22f00…22f20        69 6e 65 64 20 70 72 6f 63 65 64 75 72 65 20 0a 73 69 67 6e 61 6c 3a 0d 0a 0d 0a 50 52 4f 43 45   ┆ined procedure  signal:    PROCE┆
0x22f20…22f40        44 55 52 45 20 73 69 67 6e 61 6c 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 3b 20 56 41   ┆DURE signal(VAR mbx: mailbox; VA┆
0x22f40…22f60        52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20   ┆R ref: reference)  The value of ┆
0x22f60…22f80        72 65 66 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e 49 4c 20 6f 72 20 74 68 65 20 72 65 66 65 72   ┆ref must not be NIL or the refer┆
0x22f80…22fa0        65 6e 63 65 20 6c 6f 63 6b 65 64 20 0a 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 35 2e 39 29 2c 20   ┆ence locked  (cf. section 5.9), ┆
0x22fa0…22fc0        6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 41 66 74 65 72 20   ┆otherwise a fault occurs. After ┆
0x22fc0…22fe0        74 68 65 20 63 61 6c 6c 2c 20 0a 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64   ┆the call,  the buffer designated┆
0x22fe0…23000        20 62 79 20 72 65 66 20 69 73 20 65 6e 74 65 72 65 64 20 61 73 20 74 68 65 20 6c 61 73 74 20 65   ┆ by ref is entered as the last e┆
0x23000…23020 (280,) 6c 65 6d 65 6e 74 20 0a 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 62   ┆lement  of the list of buffers b┆
0x23020…23040        65 6c 6f 6e 67 69 6e 67 20 74 6f 20 6d 62 78 2e 20 49 66 20 74 68 65 20 6d 61 69 6c 62 6f 78 20   ┆elonging to mbx. If the mailbox ┆
0x23040…23060        69 73 20 0a 6c 6f 63 6b 65 64 2c 20 74 68 65 20 66 69 72 73 74 20 70 72 6f 63 65 73 73 20 69 73   ┆is  locked, the first process is┆
0x23060…23080        20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 6c 69 73 74 20 6f 66 20 0a 77 61 69 74 69   ┆ removed from the list of  waiti┆
0x23080…230a0        6e 67 20 70 72 6f 63 65 73 73 65 73 2e 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 69 73 20 6e 6f   ┆ng processes. This process is no┆
0x230a0…230c0        77 20 61 6c 6c 6f 77 65 64 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 0a 74 68 65 20 63 61 6c 6c 20   ┆w allowed to complete  the call ┆
0x230c0…230e0        6f 66 20 77 61 69 74 2f 77 61 69 74 64 65 6c 61 79 20 77 68 69 63 68 20 63 61 75 73 65 64 20 69   ┆of wait/waitdelay which caused i┆
0x230e0…23100        74 73 20 69 6e 73 65 72 74 69 6f 6e 20 69 6e 20 74 68 65 20 0a 6c 69 73 74 20 6f 66 20 74 68 65   ┆ts insertion in the  list of the┆
0x23100…23120        20 6d 61 69 6c 62 6f 78 2e 20 54 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 61 74 74 72 69 62 75   ┆ mailbox. The event kind attribu┆
0x23120…23140        74 65 20 6f 66 20 74 68 65 20 0a 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 62 65 63   ┆te of the  designated buffer bec┆
0x23140…23160        6f 6d 65 73 20 6d 65 73 73 61 67 65 5f 65 76 65 6e 74 2e 0d 0a 0d 0a 54 68 65 20 6c 61 6e 67 75   ┆omes message_event.    The langu┆
0x23160…23180        61 67 65 20 70 72 6f 76 69 64 65 73 20 74 77 6f 20 6b 69 6e 64 73 20 6f 66 20 65 76 65 6e 74 73   ┆age provides two kinds of events┆
0x23180…231a0        20 77 68 69 63 68 20 63 61 6e 20 62 65 20 0a 77 61 69 74 65 64 20 66 6f 72 3a 0d 0a 2d 20 74 68   ┆ which can be  waited for:  - th┆
0x231a0…231c0        65 20 61 72 72 69 76 61 6c 20 6f 66 20 61 20 62 75 66 66 65 72 20 61 74 20 61 20 73 70 65 63 69   ┆e arrival of a buffer at a speci┆
0x231c0…231e0        66 69 65 64 20 6d 61 69 6c 62 6f 78 2e 0d 0a 2d 20 84 74 68 65 20 65 78 70 69 72 79 20 6f 66 20   ┆fied mailbox.  -  the expiry of ┆
0x231e0…23200        61 20 64 65 6c 61 79 2c 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 6e 75 6d 62 65 72 20 6f   ┆a delay, specified as a number o┆
0x23200…23220 (281,) 66 20 0a 19 82 80 80 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 20 41 6e 20 69 6d 70 6c 65 6d 65 6e   ┆f      milliseconds. An implemen┆
0x23220…23240        74 61 74 69 6f 6e 20 6e 65 65 64 20 6e 6f 74 2c 20 68 6f 77 65 76 65 72 2c 20 73 75 70 70 6f 72   ┆tation need not, however, suppor┆
0x23240…23260        74 20 0a 19 82 80 80 73 75 63 68 20 66 69 6e 65 20 67 72 61 6e 75 6c 61 72 69 74 79 2e 20 49 66   ┆t      such fine granularity. If┆
0x23260…23280        20 74 68 65 20 64 65 6c 61 79 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 7a 65 72 6f 2c   ┆ the delay is specified as zero,┆
0x23280…232a0        20 0a 19 82 80 80 74 68 65 20 63 61 6c 6c 20 28 64 65 6c 61 79 2c 20 77 61 69 74 64 65 6c 61 79   ┆      the call (delay, waitdelay┆
0x232a0…232c0        2c 20 6f 72 20 67 65 74 62 75 66 64 65 6c 61 79 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 0a 19   ┆, or getbufdelay) will return   ┆
0x232c0…232e0        82 80 80 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 0d 0a 41 20 70 72 6f 63 65 73 73 20 6d 61 79   ┆   immediately.    A process may┆
0x232e0…23300        20 77 61 69 74 20 66 6f 72 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20 65 76 65 6e 74 20 6f 72 20   ┆ wait for one specific event or ┆
0x23300…23320        66 6f 72 20 74 68 65 20 66 69 72 73 74 20 0a 6f 6e 65 20 6f 66 20 74 77 6f 2c 20 6f 6e 65 20 6f   ┆for the first  one of two, one o┆
0x23320…23340        66 20 65 61 63 68 20 6b 69 6e 64 2e 20 49 74 20 64 6f 65 73 20 73 6f 20 62 79 20 63 61 6c 6c 69   ┆f each kind. It does so by calli┆
0x23340…23360        6e 67 20 6f 6e 65 20 6f 66 20 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65   ┆ng one of  the following routine┆
0x23360…23380        73 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 77 61 69 74 28 56 41 52 20 6d 62 78 3a 20 6d 61   ┆s.    PROCEDURE wait(VAR mbx: ma┆
0x23380…233a0        69 6c 62 6f 78 3b 20 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 54 68 65 20   ┆ilbox; VAR ref: reference)  The ┆
0x233a0…233c0        76 61 6c 75 65 20 6f 66 20 72 65 66 20 6d 75 73 74 20 62 65 20 4e 49 4c 20 70 72 69 6f 72 20 74   ┆value of ref must be NIL prior t┆
0x233c0…233e0        6f 20 61 20 63 61 6c 6c 2c 20 6f 74 68 65 72 77 69 73 65 20 61 20 0a 66 61 75 6c 74 20 6f 63 63   ┆o a call, otherwise a  fault occ┆
0x233e0…23400        75 72 73 2e 20 49 66 20 74 68 65 20 6d 61 69 6c 62 6f 78 20 6d 62 78 20 69 73 20 6f 70 65 6e 2c   ┆urs. If the mailbox mbx is open,┆
0x23400…23420 (282,) 20 74 68 65 20 66 69 72 73 74 20 62 75 66 66 65 72 20 0a 73 74 61 63 6b 20 69 6e 20 74 68 65 20   ┆ the first buffer  stack in the ┆
0x23420…23440        6c 69 73 74 20 69 73 20 72 65 6d 6f 76 65 64 20 61 6e 64 20 72 65 66 20 77 69 6c 6c 20 64 65 73   ┆list is removed and ref will des┆
0x23440…23460        69 67 6e 61 74 65 20 74 68 69 73 20 0a 73 74 61 63 6b 2e 20 49 66 20 74 68 65 20 6d 61 69 6c 62   ┆ignate this  stack. If the mailb┆
0x23460…23480        6f 78 20 73 74 61 74 65 20 69 73 20 6c 6f 63 6b 65 64 20 6f 72 20 70 61 73 73 69 76 65 20 74 68   ┆ox state is locked or passive th┆
0x23480…234a0        65 20 70 72 6f 63 65 73 73 20 0a 69 73 20 73 75 73 70 65 6e 64 65 64 20 75 6e 74 69 6c 20 6f 6e   ┆e process  is suspended until on┆
0x234a0…234c0        65 20 6f 66 20 74 68 65 20 65 76 65 6e 74 73 20 65 76 65 6e 74 75 61 6c 6c 79 20 6f 63 63 75 72   ┆e of the events eventually occur┆
0x234c0…234e0        73 2e 20 54 68 65 20 0a 72 65 73 75 6c 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 72 65 61   ┆s. The  result indicates the rea┆
0x234e0…23500        73 6f 6e 20 77 68 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 69 73 20 61 63 74 69 76 61 74 65 64   ┆son why the process is activated┆
0x23500…23520        3b 20 0a 69 74 73 20 74 79 70 65 20 69 73 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 65 6e   ┆;  its type is the predefined en┆
0x23520…23540        75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 20 20 20 77 61 69 74 5f 72 65 73 75 6c 74 3d 20   ┆umeration type     wait_result= ┆
0x23540…23560        28 61 5f 62 75 66 66 65 72 2c 20 61 5f 64 65 6c 61 79 29 2e 0d 0a 0d 0a 8c 83 bc 0a 47 65 74 74   ┆(a_buffer, a_delay).        Gett┆
0x23560…23580        69 6e 67 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61 20 70 6f 6f 6c 2c 20 63 66 2e 20 73 65   ┆ing a buffer from a pool, cf. se┆
0x23580…235a0        63 74 69 6f 6e 20 33 2e 38 2c 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 0a 72 65 63 65 69 76   ┆ction 3.8, is similar to  receiv┆
0x235a0…235c0        69 6e 67 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61 20 6d 61 69 6c 62 6f 78 2e 20 41 20 73   ┆ing a buffer from a mailbox. A s┆
0x235c0…235e0        70 65 63 69 61 6c 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 67 65 74 62 75 66 20 69 73 20 74 68 65   ┆pecial version of  getbuf is the┆
0x235e0…23600        72 65 66 6f 72 65 20 61 76 61 69 6c 61 62 6c 65 20 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 74 68   ┆refore available which allows th┆
0x23600…23620 (283,) 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 0a 6f 66 20 61 20 6d 61 78 69 6d 75 6d 20 64 65   ┆e specification  of a maximum de┆
0x23620…23640        6c 61 79 20 77 68 69 63 68 20 61 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 74 6f 6c 65 72 61 74   ┆lay which a process will tolerat┆
0x23640…23660        65 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 67 65 74 62 75 66 64 65 6c 61 79 28 56 41 52 20 70   ┆e.    FUNCTION getbufdelay(VAR p┆
0x23660…23680        3a 20 70 6f 6f 6c 3b 20 56 41 52 20 72 61 3a 20 6d 61 69 6c 62 6f 78 3b 0d 0a 20 20 20 20 20 20   ┆: pool; VAR ra: mailbox;        ┆
0x23680…236a0        20 20 20 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 6e 6f 5f 6f 66 5f 6d 73 65 63 73   ┆   VAR r: reference; no_of_msecs┆
0x236a0…236c0        3a 20 30 2e 2e 6d 61 78 69 6e 74 29 3a 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77   ┆: 0..maxint):                  w┆
0x236c0…236e0        61 69 74 5f 72 65 73 75 6c 74 0d 0a 0d 0a 54 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66   ┆ait_result    The description of┆
0x236e0…23700        20 67 65 74 62 75 66 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 38 2c 20 61 70 70 6c 69 65   ┆ getbuf, cf. section 3.8, applie┆
0x23700…23720        73 20 61 6c 73 6f 20 74 6f 20 0a 67 65 74 62 75 66 64 65 6c 61 79 20 77 69 74 68 20 74 68 65 20   ┆s also to  getbufdelay with the ┆
0x23720…23740        6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20 69 6e 20 63 61 73 65 20 74 68 65 20 64 65   ┆modification that in case the de┆
0x23740…23760        6c 61 79 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 6e 6f 5f 6f 66 5f 6d 73 65 63 73 20 65 78   ┆lay  specified by no_of_msecs ex┆
0x23760…23780        70 69 72 65 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 70 72 6f 63 65 73 73   ┆pires before the calling process┆
0x23780…237a0        20 0a 6f 62 74 61 69 6e 73 20 61 20 62 75 66 66 65 72 20 74 68 65 20 63 61 6c 6c 20 77 69 6c 6c   ┆  obtains a buffer the call will┆
0x237a0…237c0        20 72 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 20 61 5f 64 65 6c 61 79 20 61 6e 64 20 0a   ┆ return the result a_delay and  ┆
0x237c0…237e0        6f 74 68 65 72 77 69 73 65 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74 2e 20 49 66 20 61 20 62   ┆otherwise have no effect. If a b┆
0x237e0…23800        75 66 66 65 72 20 69 73 20 6f 62 74 61 69 6e 65 64 20 74 68 65 20 72 65 73 75 6c 74 20 0a 77 69   ┆uffer is obtained the result  wi┆
0x23800…23820 (284,) 6c 6c 20 62 65 20 61 5f 62 75 66 66 65 72 2e 0d 0a 0d 0a 52 65 74 75 72 6e 20 69 73 20 70 65 72   ┆ll be a_buffer.    Return is per┆
0x23820…23840        66 6f 72 6d 65 64 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 70 72 65 64 65 66 69 6e   ┆formed by a call of the predefin┆
0x23840…23860        65 64 20 70 72 6f 63 65 64 75 72 65 20 0a 72 65 74 75 72 6e 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55   ┆ed procedure  return:    PROCEDU┆
0x23860…23880        52 45 20 72 65 74 75 72 6e 28 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 54   ┆RE return(VAR ref: reference)  T┆
0x23880…238a0        68 65 20 63 61 6c 6c 3a 09 09 72 65 74 75 72 6e 28 72 65 66 29 0d 0a 69 73 20 65 71 75 69 76 61   ┆he call:  return(ref)  is equiva┆
0x238a0…238c0        6c 65 6e 74 20 74 6f 3a 09 73 69 67 6e 61 6c 28 72 65 74 5f 61 64 64 72 65 73 73 2c 20 72 65 66   ┆lent to: signal(ret_address, ref┆
0x238c0…238e0        29 0d 0a 77 68 65 72 65 20 72 65 74 5f 61 64 64 72 65 73 73 20 64 65 6e 6f 74 65 73 20 74 68 65   ┆)  where ret_address denotes the┆
0x238e0…23900        20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 0a 64   ┆ return address of the buffer  d┆
0x23900…23920        65 73 69 67 6e 61 74 65 64 20 62 79 20 72 65 66 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e   ┆esignated by ref, cf. section 3.┆
0x23920…23940        38 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 74 68 65 20   ┆8, except for the value of  the ┆
0x23940…23960        65 76 65 6e 74 20 6b 69 6e 64 20 61 74 74 72 69 62 75 74 65 20 77 68 69 63 68 20 62 65 63 6f 6d   ┆event kind attribute which becom┆
0x23960…23980        65 73 20 61 6e 73 77 65 72 5f 65 76 65 6e 74 2e 0d 0a 0d 0a a1 4e 6f 74 65 73 3a 0d 0a 41 20 6d   ┆es answer_event.     Notes:  A m┆
0x23980…239a0        61 69 6c 62 6f 78 20 6d 61 79 20 62 65 20 69 6e 73 70 65 63 74 65 64 20 77 69 74 68 6f 75 74 20   ┆ailbox may be inspected without ┆
0x239a0…239c0        68 76 69 6e 67 20 74 6f 20 77 61 69 74 20 69 66 20 69 74 20 69 73 20 0a 65 6d 70 74 79 20 62 79   ┆hving to wait if it is  empty by┆
0x239c0…239e0        20 63 61 6c 6c 69 6e 67 20 77 61 69 74 64 65 6c 61 79 20 77 69 74 68 20 7a 65 72 6f 20 64 65 6c   ┆ calling waitdelay with zero del┆
0x239e0…23a00        61 79 2e 0d 0a 0d 0a 41 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 65   ┆ay.    An implementation must se┆
0x23a00…23a20 (285,) 63 75 72 65 20 69 6e 64 69 76 69 73 69 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 0a 63 6f 6d 6d   ┆cure indivisibility of the  comm┆
0x23a20…23a40        75 6e 69 63 61 74 69 6f 6e 20 70 72 69 6d 69 74 69 76 65 73 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c   ┆unication primitives.     Exampl┆
0x23a40…23a60        65 3a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20   ┆e:  The following communication ┆
0x23a60…23a80        66 6c 6f 77 20 69 73 20 70 6f 73 73 69 62 6c 65 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 0a 73 69   ┆flow is possible by means of  si┆
0x23a80…23aa0        67 6e 61 6c 20 61 6e 64 20 72 65 74 75 72 6e 2e 20 45 61 63 68 20 70 72 6f 63 65 73 73 20 70 82   ┆gnal and return. Each process p ┆
0x23aa0…23ac0        69 81 20 6d 75 73 74 20 6b 6e 6f 77 20 74 68 65 20 28 6d 61 69 6c 62 6f 78 29 20 0a 61 64 64 72   ┆i  must know the (mailbox)  addr┆
0x23ac0…23ae0        65 73 73 20 6f 66 20 70 72 6f 63 65 73 73 20 70 69 2b 31 81 2e 20 48 6f 77 65 76 65 72 2c 20 70   ┆ess of process pi+1 . However, p┆
0x23ae0…23b00        72 6f 63 65 73 73 20 70 82 6e 81 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 0a 70 72 6f 63 65   ┆rocess p n  does not know  proce┆
0x23b00…23b20        73 73 20 70 82 31 81 2e 0d 0a 0d 0a 8c 83 d4 0a 20 20 73 69 67 6e 61 6c 09 73 69 67 6e 61 6c 09   ┆ss p 1 .          signal signal ┆
0x23b20…23b40        09 73 69 67 6e 61 6c 0d 0a 0d 0a 0d 0a 20 20 70 82 31 81 20 20 20 20 20 20 20 70 82 32 81 20 20   ┆ signal        p 1        p 2   ┆
0x23b40…23b60        20 20 20 20 20 20 20 20 20 20 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 70 82 6e 81 0d 0a   ┆          ...             p n   ┆
0x23b60…23b74        0d 0a 20 09 09 20 20 20 72 65 74 75 72 6e 0d 0a 0d 0a 0d 0a                                       ┆        return      ┆
0x23b74…23b77        FormFeed {
0x23b74…23b77          0c 80 e0                                                                                          ┆   ┆
0x23b74…23b77        }
0x23b77…23b80        0a b0 a1 31 30 2e 20 42 55                                                                        ┆   10. BU┆
0x23b80…23ba0        46 46 45 52 20 4d 41 4e 49 50 55 4c 41 54 49 4f 4e 0d 0a 0d 0a 54 77 6f 20 73 74 72 75 63 74 75   ┆FFER MANIPULATION    Two structu┆
0x23ba0…23bc0        72 65 73 20 66 6f 72 20 6f 72 67 61 6e 69 7a 61 69 6e 67 20 62 75 66 66 65 72 73 20 61 72 65 20   ┆res for organizaing buffers are ┆
0x23bc0…23be0        73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 0a 6c 61 6e 67 75 61 67 65 3a 20 73 74 61 63   ┆supported by the  language: stac┆
0x23be0…23c00        6b 73 20 61 6e 64 20 63 68 61 69 6e 73 2e 20 41 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 69 73   ┆ks and chains. A buffer stack is┆
0x23c00…23c20 (286,) 20 74 68 65 20 67 65 6e 65 72 61 6c 20 0a 66 6f 72 6d 20 6f 66 20 61 20 6d 65 73 73 61 67 65 2c   ┆ the general  form of a message,┆
0x23c20…23c40        20 77 68 65 72 65 20 61 20 73 74 61 63 6b 20 77 69 74 68 20 6f 6e 6c 79 20 6f 6e 65 20 62 75 66   ┆ where a stack with only one buf┆
0x23c40…23c60        66 65 72 20 69 73 20 61 20 0a 73 70 65 63 69 61 6c 20 63 61 73 65 2e 20 41 63 63 65 73 73 20 74   ┆fer is a  special case. Access t┆
0x23c60…23c80        6f 20 61 20 73 74 61 63 6b 20 6d 61 79 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 20 62 65 74   ┆o a stack may be transferred bet┆
0x23c80…23ca0        77 65 65 6e 20 0a 70 72 6f 63 65 73 73 65 73 20 76 69 61 20 61 20 6d 61 69 6c 62 6f 78 20 28 63   ┆ween  processes via a mailbox (c┆
0x23ca0…23cc0        66 2e 20 73 65 63 74 69 6f 6e 20 39 2e 32 29 2e 20 54 68 65 20 63 68 61 69 6e 20 0a 73 74 72 75   ┆f. section 9.2). The chain  stru┆
0x23cc0…23ce0        63 74 75 72 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 6c 6f 63 61 6c 20 6f 72 67 61   ┆cture is intended for local orga┆
0x23ce0…23d00        6e 69 7a 61 74 69 6f 6e 20 6f 66 20 62 75 66 66 65 72 73 20 69 6e 20 0a 61 70 72 6f 63 65 73 73   ┆nization of buffers in  aprocess┆
0x23d00…23d20        2e 20 54 68 65 20 65 6c 65 6d 65 6e 74 73 6f 66 20 61 20 63 68 61 69 6e 20 61 72 65 20 62 75 66   ┆. The elementsof a chain are buf┆
0x23d20…23d40        66 65 72 20 73 74 61 63 6b 73 2e 20 54 68 65 79 20 61 72 65 20 0a 61 63 63 65 73 73 65 64 20 62   ┆fer stacks. They are  accessed b┆
0x23d40…23d60        79 20 61 20 68 61 6e 64 6c 65 3a 20 61 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 79 70 65 20 63   ┆y a handle: a variable of type c┆
0x23d60…23d80        68 61 69 6e 2e 20 54 68 65 20 65 6c 65 6d 65 6e 74 73 20 0a 6f 66 20 61 20 62 75 66 66 65 72 20   ┆hain. The elements  of a buffer ┆
0x23d80…23da0        73 74 61 63 6b 20 61 72 65 20 62 75 66 66 65 72 73 2e 20 54 68 65 79 20 61 72 65 20 61 63 63 65   ┆stack are buffers. They are acce┆
0x23da0…23dc0        73 73 65 64 20 62 79 20 61 20 0a 68 61 6e 64 6c 65 3a 20 61 20 72 65 66 65 72 65 6e 63 65 20 76   ┆ssed by a  handle: a reference v┆
0x23dc0…23de0        61 72 69 61 62 6c 65 20 28 6f 72 20 64 69 72 65 63 74 6c 79 20 62 79 20 61 20 63 68 61 69 6e 20   ┆ariable (or directly by a chain ┆
0x23de0…23e00        69 6e 20 74 68 65 20 0a 63 61 73 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66   ┆in the  case of the current buff┆
0x23e00…23e20 (287,) 65 72 29 2e 20 54 68 65 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 20 6f 66 20 62 75 66 66 65 72 20   ┆er). The manipulation of buffer ┆
0x23e20…23e40        0a 73 74 61 63 6b 73 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20   ┆ stacks is described in section ┆
0x23e40…23e60        31 30 2e 31 20 61 6e 64 20 6f 66 20 63 68 61 69 6e 73 20 69 6e 20 73 65 63 74 69 6f 6e 20 0a 31   ┆10.1 and of chains in section  1┆
0x23e60…23e80        30 2e 32 2e 0d 0a 0d 0a 0d 0a b0 a1 31 30 2e 31 20 42 75 66 66 65 72 20 53 74 61 63 6b 73 0d 0a   ┆0.2.        10.1 Buffer Stacks  ┆
0x23e80…23ea0        0d 0a 41 20 73 74 61 63 6b 20 69 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 62 75 66 66 65 72 73   ┆  A stack is one or more buffers┆
0x23ea0…23ec0        2c 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 6c 69 66 6f 20 6c 69 73 74 20 73 6f 20 0a 74   ┆, organized as a lifo list so  t┆
0x23ec0…23ee0        68 61 74 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 20 61 66 66 65 63 74 73 20 74 68 65 20 79 6f 75   ┆hat manipulation affects the you┆
0x23ee0…23f00        6e 67 65 73 74 20 6d 65 6d 62 65 72 20 6f 6e 6c 79 2e 20 41 63 63 65 73 73 20 0a 74 6f 20 74 68   ┆ngest member only. Access  to th┆
0x23f00…23f20        65 20 64 61 74 61 20 69 6e 20 61 20 73 74 61 63 6b 20 6f 66 20 62 75 66 66 65 72 73 20 69 73 20   ┆e data in a stack of buffers is ┆
0x23f20…23f40        61 63 68 69 65 76 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 20 0a 6c 6f 63 6b 20 73 74 61   ┆achieved by means of a  lock sta┆
0x23f40…23f60        74 65 6d 65 6e 74 2c 20 70 6f 73 73 69 62 6c 79 20 67 69 76 69 6e 67 20 61 63 63 65 73 73 20 74   ┆tement, possibly giving access t┆
0x23f60…23f80        6f 20 73 65 76 65 72 61 6c 20 6d 65 6d 62 65 72 73 20 6f 66 20 0a 74 68 65 20 73 74 61 63 6b 20   ┆o several members of  the stack ┆
0x23f80…23fa0        28 63 66 2e 20 73 65 63 69 6f 6e 20 35 2e 39 29 2e 0d 0a 0d 0a 41 63 63 65 73 73 20 74 6f 20 74   ┆(cf. secion 5.9).    Access to t┆
0x23fa0…23fc0        68 65 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 62 75 66 66 65 72 73 20 69 6e 20 61 20 73 74   ┆he attributes of buffers in a st┆
0x23fc0…23fe0        61 63 6b 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 0a 6d 61 64 65 20 74 6f 20 74 68 6f 73 65 20 6f   ┆ack can only be  made to those o┆
0x23fe0…24000        66 20 74 68 65 20 74 6f 70 20 28 79 6f 75 6e 67 65 73 74 29 20 6d 65 6d 62 65 72 2e 20 41 20 73   ┆f the top (youngest) member. A s┆
0x24000…24020 (288,) 70 65 63 69 61 6c 20 0a 74 72 65 61 74 6d 65 6e 74 20 69 73 20 67 69 76 65 6e 20 74 6f 20 74 68   ┆pecial  treatment is given to th┆
0x24020…24040        65 20 73 69 7a 65 20 61 6e 64 20 64 61 74 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 0a 61 74 74   ┆e size and data description  att┆
0x24040…24060        72 69 62 75 74 65 73 20 77 68 65 6e 20 65 6d 70 74 79 20 62 75 66 66 65 72 73 20 61 72 65 20 70   ┆ributes when empty buffers are p┆
0x24060…24080        75 73 68 65 64 20 6f 6e 74 6f 20 6f 72 20 70 6f 70 70 65 64 20 66 72 6f 6d 20 0a 61 20 73 74 61   ┆ushed onto or popped from  a sta┆
0x24080…240a0        63 6b 2c 20 65 6e 73 75 72 69 6e 67 20 74 68 61 74 20 74 68 65 73 65 20 61 74 74 72 69 62 75 74   ┆ck, ensuring that these attribut┆
0x240a0…240c0        65 73 20 77 69 6c 6c 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20 0a 74 6f 70 6d 6f 73 74 20 6e 6f   ┆es will apply to the  topmost no┆
0x240c0…240e0        6e 2d 65 6d 70 74 79 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 73 69 6e   ┆n-empty buffer in the stack, sin┆
0x240e0…24100        63 65 20 6f 6e 6c 79 20 6e 6f 6e 2d 65 6d 70 74 79 20 0a 62 75 66 66 65 72 73 20 63 61 6e 20 62   ┆ce only non-empty  buffers can b┆
0x24100…24120        65 20 61 63 63 65 73 73 65 64 20 69 6e 20 61 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74 2e 0d   ┆e accessed in a lock statement. ┆
0x24120…24140        0a 0d 0a 41 20 73 74 61 63 6b 20 6d 61 79 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79   ┆   A stack may be manipulated by┆
0x24140…24160        20 63 61 6c 6c 69 6e 67 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 0a 70 72 6f 63 65 64 75   ┆ calling the predefined  procedu┆
0x24160…24180        72 65 73 20 70 75 73 68 20 61 6e 64 20 70 6f 70 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 73   ┆res push and pop. The parameters┆
0x24180…241a0        20 74 6f 20 74 68 65 73 65 20 70 72 6f 63 65 64 75 72 65 73 20 0a 6d 75 73 74 20 6e 6f 74 20 62   ┆ to these procedures  must not b┆
0x241a0…241c0        65 20 6c 6f 63 6b 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 77 69 6c 6c   ┆e locked. Otherwise a fault will┆
0x241c0…241e0        20 6f 63 63 75 72 20 61 74 20 74 68 65 20 74 69 6d 65 20 0a 6f 66 20 63 61 6c 6c 2e 0d 0a 0d 0a   ┆ occur at the time  of call.    ┆
0x241e0…24200        8c 83 c8 0a 50 52 4f 43 45 44 55 52 45 20 70 75 73 68 28 56 41 52 20 73 74 61 63 6b 5f 68 61 6e   ┆    PROCEDURE push(VAR stack_han┆
0x24200…24220 (289,) 64 6c 65 2c 20 6e 65 77 5f 74 6f 70 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 54 68 65 20   ┆dle, new_top: reference)    The ┆
0x24220…24240        70 61 72 61 6d 65 74 65 72 20 6e 65 77 5f 74 6f 70 20 6d 75 73 74 20 64 65 73 69 67 6e 61 74 65   ┆parameter new_top must designate┆
0x24240…24260        20 61 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 77 69 74 68 20 0a 6f 6e 6c 79 20 6f 6e 65 20 65   ┆ a buffer stack with  only one e┆
0x24260…24280        6c 65 6d 65 6e 74 2c 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73   ┆lement, otherwise a fault occurs┆
0x24280…242a0        2e 20 54 68 65 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 0a 64 65 73 69 67 6e 61 74 65 64 20 62   ┆. The buffer stack  designated b┆
0x242a0…242c0        79 20 73 74 61 63 6b 5f 68 61 6e 64 6c 65 2c 20 70 6f 73 73 69 62 6c 79 20 61 6e 20 65 6d 70 74   ┆y stack_handle, possibly an empt┆
0x242c0…242e0        79 20 73 74 61 63 6b 20 28 69 2e 65 2e 20 0a 74 68 65 20 68 61 6e 64 6c 65 20 69 73 20 4e 49 4c   ┆y stack (i.e.  the handle is NIL┆
0x242e0…24300        29 2c 20 69 73 20 65 78 74 65 6e 64 65 64 20 77 69 74 68 20 74 68 65 20 62 75 66 66 65 72 20 64   ┆), is extended with the buffer d┆
0x24300…24320        65 73 69 67 6e 61 74 65 64 20 0a 62 79 20 6e 65 77 5f 74 6f 70 20 61 73 20 74 68 65 20 6e 65 77   ┆esignated  by new_top as the new┆
0x24320…24340        20 74 6f 70 20 65 6c 65 6d 65 6e 74 2e 20 41 66 74 65 72 20 74 68 65 20 63 61 6c 6c 20 0a 73 74   ┆ top element. After the call  st┆
0x24340…24360        61 63 6b 5f 68 61 6e 64 6c 65 20 77 69 6c 6c 20 64 65 73 69 67 6e 61 74 65 20 74 68 65 20 6e 65   ┆ack_handle will designate the ne┆
0x24360…24380        77 20 73 74 61 63 6b 2c 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 0a 6e 65 77 5f 74   ┆w stack, and the value of  new_t┆
0x24380…243a0        6f 70 20 77 69 6c 6c 20 62 65 20 4e 49 4c 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 6e 65 77 20 74 6f   ┆op will be NIL.    If the new to┆
0x243a0…243c0        70 20 62 75 66 66 65 72 20 69 73 20 65 6d 70 74 79 2c 20 61 6e 64 20 74 68 65 20 73 74 61 63 6b   ┆p buffer is empty, and the stack┆
0x243c0…243e0        20 77 61 73 20 6e 6f 74 20 65 6d 70 74 79 20 0a 62 65 66 6f 72 65 20 70 75 73 68 69 6e 67 2c 20   ┆ was not empty  before pushing, ┆
0x243e0…24400        74 68 65 20 73 69 7a 65 20 61 6e 64 20 64 61 74 61 20 61 72 65 61 20 64 65 73 63 72 69 70 74 69   ┆the size and data area descripti┆
0x24400…24420 (290,) 6f 6e 20 28 6f 66 66 73 65 74 2c 20 0a 74 6f 70 2c 20 61 6e 64 20 62 79 74 65 20 63 6f 75 6e 74   ┆on (offset,  top, and byte count┆
0x24420…24440        29 20 61 72 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65   ┆) are copied from the old to the┆
0x24440…24460        20 6e 65 77 20 74 6f 70 20 0a 62 75 66 66 65 72 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 70   ┆ new top  buffer.    PROCEDURE p┆
0x24460…24480        6f 70 28 56 41 52 20 73 74 61 63 6b 5f 68 61 6e 64 6c 65 2c 20 70 6f 70 70 65 64 5f 62 75 66 3a   ┆op(VAR stack_handle, popped_buf:┆
0x24480…244a0        20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 70 6f 70 70   ┆ reference)    The value of popp┆
0x244a0…244c0        65 64 5f 62 75 66 20 6d 75 73 74 20 62 65 20 4e 49 4c 2c 20 61 6e 64 20 74 68 65 20 76 61 6c 75   ┆ed_buf must be NIL, and the valu┆
0x244c0…244e0        65 20 6f 66 20 0a 73 74 61 63 6b 5f 68 61 6e 64 6c 65 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e   ┆e of  stack_handle must not be N┆
0x244e0…24500        49 4c 3b 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 54 68   ┆IL; otherwise a fault occurs. Th┆
0x24500…24520        65 20 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 70 6f 70 20 69 73 3a 20 74   ┆e  result of a call of pop is: t┆
0x24520…24540        68 65 20 74 6f 70 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 73 74 61 63 6b 20 69 73 20 0a 72   ┆he top buffer in the stack is  r┆
0x24540…24560        65 6d 6f 76 65 64 2c 20 70 6f 70 70 65 64 5f 62 75 66 20 77 69 6c 6c 20 64 65 73 69 67 6e 61 74   ┆emoved, popped_buf will designat┆
0x24560…24580        65 20 61 20 73 74 61 63 6b 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 0a 72 65 6d   ┆e a stack consisting of the  rem┆
0x24580…245a0        6f 76 65 64 20 62 75 66 66 65 72 20 6f 6e 6c 79 2c 20 61 6e 64 20 73 74 61 63 6b 5f 68 61 6e 64   ┆oved buffer only, and stack_hand┆
0x245a0…245c0        6c 65 20 77 69 6c 6c 20 64 65 73 69 67 6e 61 74 65 20 74 68 65 20 0a 72 65 6d 61 69 6e 69 6e 67   ┆le will designate the  remaining┆
0x245c0…245e0        20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 20 49 66 20 74 68 65 20 73 74 61 63 6b   ┆ part of the stack. If the stack┆
0x245e0…24600        20 68 61 64 20 6f 6e 6c 79 20 6f 6e 65 20 0a 65 6c 65 6d 65 6e 74 20 69 74 73 20 76 61 6c 75 65   ┆ had only one  element its value┆
0x24600…24620 (291,) 20 77 69 6c 6c 20 62 65 20 4e 49 4c 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 70 6f 70 70 65 64 20 62   ┆ will be NIL.    If the popped b┆
0x24620…24640        75 66 66 65 72 20 69 73 20 65 6d 70 74 79 2c 20 69 74 73 20 73 69 7a 65 20 61 6e 64 20 64 61 74   ┆uffer is empty, its size and dat┆
0x24640…24660        61 20 61 72 65 61 20 0a 64 65 73 63 72 69 70 74 69 6f 6e 20 61 74 74 72 69 62 75 74 65 73 20 28   ┆a area  description attributes (┆
0x24660…24680        6f 66 66 73 65 74 2c 20 74 6f 70 2c 20 61 6e 64 20 62 79 74 65 20 63 6f 75 6e 74 29 20 61 72 65   ┆offset, top, and byte count) are┆
0x24680…246a0        20 61 6c 6c 20 0a 73 65 74 20 74 6f 20 7a 65 72 6f 2e 0d 0a 0d 0a 54 68 65 20 64 65 70 74 68 20   ┆ all  set to zero.    The depth ┆
0x246a0…246c0        6f 66 20 61 20 62 75 66 66 65 72 20 73 74 61 63 6b 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65   ┆of a buffer stack as well as the┆
0x246c0…246e0        20 6e 75 6d 62 65 72 20 6f 66 20 61 63 74 75 61 6c 20 0a 64 61 74 61 20 62 75 66 66 65 72 73 20   ┆ number of actual  data buffers ┆
0x246e0…24700        63 61 6e 20 62 65 20 6f 62 74 61 69 6e 65 64 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 70 72 65   ┆can be obtained by using the pre┆
0x24700…24720        64 65 66 69 6e 65 64 20 0a 66 75 6e 63 74 69 6f 6e 73 20 73 74 63 6b 64 65 70 74 68 20 61 6e 64   ┆defined  functions stckdepth and┆
0x24720…24740        20 62 75 66 63 6f 75 6e 74 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 73 74 61 63 6b 64 65 70 74   ┆ bufcount.    FUNCTION stackdept┆
0x24740…24760        68 28 56 41 52 20 73 74 61 63 6b 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69   ┆h(VAR stack: reference): 0..maxi┆
0x24760…24780        6e 74 0d 0a 46 55 4e 43 54 49 4f 4e 20 62 75 66 63 6f 75 6e 74 28 56 41 52 20 73 74 61 63 6b 3a   ┆nt  FUNCTION bufcount(VAR stack:┆
0x24780…247a0        20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 0d 0a 54 68 65 20 76 61   ┆ reference): 0..maxint    The va┆
0x247a0…247c0        6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 74 61 63 6b 64 65 70 74 68 20 69 73 20 74 68   ┆lue returned by stackdepth is th┆
0x247c0…247e0        65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 0a 62 75 66 66 65 72 73 20 69 6e 20 74 68   ┆e total number of  buffers in th┆
0x247e0…24800        65 20 64 65 73 69 67 6e 61 74 65 64 20 73 74 61 63 6b 2c 20 69 6e 63 6c 75 64 69 6e 67 20 65 6d   ┆e designated stack, including em┆
0x24800…24820 (292,) 70 74 79 20 6f 6e 65 73 2c 20 0a 8c 83 c8 0a 77 68 65 72 65 61 73 20 62 75 66 63 6f 75 6e 74 20   ┆pty ones,      whereas bufcount ┆
0x24820…24840        79 69 65 6c 64 73 20 6f 6e 6c 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 65 6d   ┆yields only the number of non-em┆
0x24840…24860        70 74 79 20 62 75 66 66 65 72 73 20 0a 28 63 66 2e 20 6c 6f 63 6b 20 73 74 61 74 65 6d 65 6e 74   ┆pty buffers  (cf. lock statement┆
0x24860…24880        2c 20 73 65 63 74 69 6f 6e 20 35 2e 39 29 2e 20 42 6f 74 68 20 66 75 6e 63 74 69 6f 6e 73 20 72   ┆, section 5.9). Both functions r┆
0x24880…248a0        65 74 75 72 6e 20 74 68 65 20 0a 76 61 6c 75 65 20 30 20 69 66 20 74 68 65 20 70 61 72 61 6d 65   ┆eturn the  value 0 if the parame┆
0x248a0…248c0        74 65 72 20 68 61 73 20 76 61 6c 75 65 20 4e 49 4c 2e 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d   ┆ter has value NIL.     Example: ┆
0x248c0…248e0        0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c 6f 77 20 6f 66 20 62 75 66 66 65 72 73 20 6d   ┆ The following flow of buffers m┆
0x248e0…24900        61 79 20 62 65 20 61 63 68 69 65 76 65 64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 0a 74 68 65 20   ┆ay be achieved by means of  the ┆
0x24900…24920        70 61 69 72 65 64 20 6f 70 65 72 61 74 69 6f 6e 73 3a 20 28 70 75 73 68 2c 20 73 69 67 6e 61 6c   ┆paired operations: (push, signal┆
0x24920…24940        29 20 61 6e 64 20 28 70 6f 70 2c 20 72 65 74 75 72 6e 29 2e 0d 0a 0d 0a 20 20 09 28 73 69 67 6e   ┆) and (pop, return).       (sign┆
0x24940…24960        61 6c 29 09 09 28 70 75 73 68 2c 20 73 69 67 6e 61 6c 29 09 28 70 75 73 68 2c 20 73 69 67 6e 61   ┆al)  (push, signal) (push, signa┆
0x24960…24980        6c 29 0d 0a 0d 0a 0d 0a 70 09 09 70 20 20 20 20 20 20 20 2e 2e 2e 09 20 70 09 09 20 20 70 0d 0a   ┆l)      p  p       ...  p    p  ┆
0x24980…249a0        20 81 31 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20   ┆  1             2               ┆
0x249a0…249c0        20 20 20 20 20 6e 2d 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 0d 0a 0d 0a 09   ┆     n-1                  n     ┆
0x249c0…249e0        28 70 6f 70 2c 20 72 65 74 75 72 6e 29 09 28 70 6f 70 2c 20 72 65 74 75 72 6e 29 09 28 72 65 74   ┆(pop, return) (pop, return) (ret┆
0x249e0…24a00        75 72 6e 29 0d 0a 0d 0a 0d 0a b0 a1 31 30 2e 32 20 42 75 66 66 65 72 20 43 68 61 69 6e 73 0d 0a   ┆urn)        10.2 Buffer Chains  ┆
0x24a00…24a20 (293,) 0d 0a 54 68 65 20 69 6e 69 74 69 61 6c 20 73 74 61 74 65 20 6f 66 20 61 20 63 68 61 69 6e 20 6f   ┆  The initial state of a chain o┆
0x24a20…24a40        62 6a 65 63 74 20 69 73 20 65 6d 70 74 79 2c 20 69 2e 65 2e 20 74 68 65 20 0a 6c 65 6e 67 74 68   ┆bject is empty, i.e. the  length┆
0x24a40…24a60        20 6f 66 20 74 68 65 20 63 68 61 69 6e 20 69 73 20 30 2e 20 43 79 63 6c 69 63 20 6c 69 73 74 73   ┆ of the chain is 0. Cyclic lists┆
0x24a60…24a80        20 61 72 65 20 62 75 69 6c 74 20 61 6e 64 20 0a 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79 20 6d   ┆ are built and  manipulated by m┆
0x24a80…24aa0        65 61 6e 73 20 6f 66 20 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20 6f 6e 6c 79   ┆eans of predefined routines only┆
0x24aa0…24ac0        2e 20 54 68 65 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 62 65 20   ┆. The  following actions may be ┆
0x24ac0…24ae0        70 65 72 66 6f 72 6d 65 64 20 6f 6e 20 63 68 61 69 6e 73 3a 20 69 6e 73 65 72 74 20 61 6e 20 0a   ┆performed on chains: insert an  ┆
0x24ae0…24b00        65 6c 65 6d 65 6e 74 2c 20 65 78 74 72 61 63 74 20 61 6e 20 65 6c 65 6d 65 6e 74 2c 20 63 68 61   ┆element, extract an element, cha┆
0x24b00…24b20        6e 67 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2c 20 75 70 64 61 74 65 20 0a 73 74 61 72   ┆nge current buffer, update  star┆
0x24b20…24b40        74 20 70 6f 69 6e 74 2c 20 61 6e 64 20 72 65 61 64 20 74 68 65 20 6c 65 6e 67 74 68 2e 0d 0a 0d   ┆t point, and read the length.   ┆
0x24b40…24b60        0a 54 77 6f 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 68 61 69 6e 20 68 61 76 65 20 61 20   ┆ Two elements of a chain have a ┆
0x24b60…24b80        73 70 65 63 69 61 6c 20 73 74 61 74 75 73 3a 0d 0a 0d 0a 2d 20 84 74 68 65 20 a1 73 74 61 72 74   ┆special status:    -  the  start┆
0x24b80…24ba0        20 70 6f 69 6e 74 e1 20 6f 66 20 74 68 65 20 63 68 61 69 6e 20 69 73 20 74 68 65 20 66 69 72 73   ┆ point  of the chain is the firs┆
0x24ba0…24bc0        74 20 65 6c 65 6d 65 6e 74 20 70 75 74 20 69 6e 74 6f 20 0a 19 82 80 80 74 68 65 20 63 68 61 69   ┆t element put into      the chai┆
0x24bc0…24be0        6e 20 6f 72 20 61 6e 20 65 6c 65 6d 65 6e 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 6c 65 63   ┆n or an element explicitly selec┆
0x24be0…24c00        74 65 64 20 61 73 20 74 68 65 20 73 74 61 72 74 20 0a 19 82 80 80 70 6f 69 6e 74 2e 0d 0a 0d 0a   ┆ted as the start      point.    ┆
0x24c00…24c20 (294,) 2d 20 84 74 68 65 20 a1 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 28 73 74 61 63 6b 29 e1 20   ┆-  the  current buffer (stack)  ┆
0x24c20…24c40        69 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 77 68 69 63 68 20 6d 61 79 20 62 65 20 0a 19 82 80   ┆is the element which may be     ┆
0x24c40…24c60        80 65 78 74 72 61 63 74 65 64 20 6f 72 20 61 63 63 65 73 73 65 64 20 69 6e 20 61 20 6c 6f 63 6b   ┆ extracted or accessed in a lock┆
0x24c60…24c80        20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6f 6e 6c 79 20 0a 19 82 80 80 65 6c 65   ┆ statement and the only      ele┆
0x24c80…24ca0        6d 65 6e 74 20 77 68 6f 73 65 20 62 75 66 66 65 72 20 61 74 74 72 69 62 75 74 65 73 20 6d 61 79   ┆ment whose buffer attributes may┆
0x24ca0…24cc0        20 62 65 20 72 65 61 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 0d 0a 0d 0a 54 68 65 20 70 72 65 64   ┆ be read or changed.    The pred┆
0x24cc0…24ce0        65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20 65 76 65 6e 74 6b 69 6e 64 2c 20 72 65 73 65 74   ┆efined routines eventkind, reset┆
0x24ce0…24d00        65 76 65 6e 74 2c 20 75 31 2c 20 75 32 2c 20 75 33 2c 20 0a 75 34 2c 20 73 65 74 75 31 2c 20 73   ┆event, u1, u2, u3,  u4, setu1, s┆
0x24d00…24d20        65 74 75 32 2c 20 73 65 74 75 33 2c 20 73 65 74 75 34 2c 20 62 75 66 73 69 7a 65 2c 20 6f 66 66   ┆etu2, setu3, setu4, bufsize, off┆
0x24d20…24d40        73 65 74 2c 20 74 6f 70 2c 20 0a 8c 83 c8 0a 62 79 74 65 63 6f 75 6e 74 2c 20 73 65 74 6f 66 66   ┆set, top,      bytecount, setoff┆
0x24d40…24d60        73 65 74 2c 20 73 65 74 74 6f 70 2c 20 61 6e 64 20 73 65 74 62 79 74 65 63 6f 75 6e 74 20 77 68   ┆set, settop, and setbytecount wh┆
0x24d60…24d80        69 63 68 20 61 72 65 20 0a 64 65 73 63 72 69 62 65 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 33 2e   ┆ich are  described in section 3.┆
0x24d80…24da0        38 20 6d 61 79 20 61 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 63 68 61 69 6e   ┆8 may all be called with a chain┆
0x24da0…24dc0        20 0a 6f 62 6a 65 63 74 20 61 73 20 70 61 72 61 6d 65 74 65 72 2c 20 69 6e 20 77 68 69 63 68 20   ┆  object as parameter, in which ┆
0x24dc0…24de0        63 61 73 65 20 74 68 65 79 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 0a   ┆case they apply to the current  ┆
0x24de0…24e00        73 74 61 63 6b 20 28 74 6f 70 20 62 75 66 66 65 72 29 20 6f 66 20 74 68 65 20 63 68 61 69 6e 2e   ┆stack (top buffer) of the chain.┆
0x24e00…24e20 (295,) 0d 0a 0d 0a 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 63 68 61 69 6e 20 69 73 20 72 65 61   ┆    The length of a chain is rea┆
0x24e20…24e40        64 20 62 79 20 6d 65 61 6e 73 20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 0a 66 75 6e   ┆d by means of a call of the  fun┆
0x24e40…24e60        63 74 69 6f 6e 20 63 68 61 69 6e 6c 65 6e 67 74 68 3a 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 63   ┆ction chainlength:    FUNCTION c┆
0x24e60…24e80        68 61 69 6e 6c 65 6e 67 74 68 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 6d 61   ┆hainlength(VAR ch: chain): 0..ma┆
0x24e80…24ea0        78 69 6e 74 0d 0a 0d 0a 46 6f 72 20 61 6c 6c 20 74 68 65 20 72 6f 75 74 69 6e 65 73 20 64 65 73   ┆xint    For all the routines des┆
0x24ea0…24ec0        63 72 69 62 65 64 20 69 6e 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73 20   ┆cribed in the remainder of this ┆
0x24ec0…24ee0        0a 73 65 63 74 69 6f 6e 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 28 63 68 61 69 6e 73 20 61   ┆ section the parameter (chains a┆
0x24ee0…24f00        6e 64 20 72 65 66 65 72 65 6e 63 65 73 29 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 0a 6c 6f 63 6b   ┆nd references) must not be  lock┆
0x24f00…24f20        65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 20 61 74 20   ┆ed. Otherwise a fault occurs at ┆
0x24f20…24f40        74 68 65 20 74 69 6d 65 20 6f 66 20 63 61 6c 6c 2e 0d 0a 0d 0a 41 20 62 75 66 66 65 72 20 73 74   ┆the time of call.    A buffer st┆
0x24f40…24f60        61 63 6b 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 63 68 61 69 6e 20 62 79 20   ┆ack is inserted into a chain by ┆
0x24f60…24f80        6d 65 61 6e 73 20 6f 66 20 61 20 63 61 6c 6c 20 0a 6f 66 20 63 68 61 69 6e 69 6e 73 65 72 74 3a   ┆means of a call  of chaininsert:┆
0x24f80…24fa0        0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 69 6e 73 65 72 74 28 56 41 52 20 63 68   ┆    PROCEDURE chaininsert(VAR ch┆
0x24fa0…24fc0        3a 20 63 68 61 69 6e 3b 20 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a   ┆: chain; VAR ref: reference)    ┆
0x24fc0…24fe0        54 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 66 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 4e 49 4c   ┆The value of ref must not be NIL┆
0x24fe0…25000        2c 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 0a 54 68 65   ┆, otherwise a fault occurs.  The┆
0x25000…25020 (296,) 20 73 74 61 63 6b 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 72 65 66 20 62 65 63 6f 6d 65 73   ┆ stack designated by ref becomes┆
0x25020…25040        20 74 68 65 20 6e 65 77 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 66 20 0a 74 68 65 20 6c   ┆ the new current buffer f  the l┆
0x25040…25060        69 73 74 2c 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 69 73 20 69 6e 73 65 72 74 65 64 20 61 73 20   ┆ist, the element is inserted as ┆
0x25060…25080        74 68 65 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 74 68 65 20 0a 65 6c 65 6d 65 6e 74 20 77 68   ┆the successor of the  element wh┆
0x25080…250a0        69 63 68 20 77 61 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 70 72 69 6f 72   ┆ich was the current buffer prior┆
0x250a0…250c0        20 74 6f 20 74 68 65 20 63 61 6c 6c 2c 20 61 6e 64 20 0a 74 68 65 20 76 61 6c 75 65 20 6f 66 20   ┆ to the call, and  the value of ┆
0x250c0…250e0        72 65 66 20 62 65 63 6f 6d 65 73 20 4e 49 4c 2e 0d 0a 0d 0a 54 68 65 20 63 75 72 72 65 6e 74 20   ┆ref becomes NIL.    The current ┆
0x250e0…25100        62 75 66 66 65 72 20 6d 61 79 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 61 20 6c 69 73   ┆buffer may be removed from a lis┆
0x25100…25120        74 20 62 79 20 6d 65 61 6e 73 6f 66 20 61 20 0a 63 61 6c 6c 20 6f 66 20 63 68 61 69 6e 65 78 74   ┆t by meansof a  call of chainext┆
0x25120…25140        72 61 63 74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 65 78 74 72 61 63 74 28   ┆ract:    PROCEDURE chainextract(┆
0x25140…25160        56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63   ┆VAR ch: chain; VAR ref: referenc┆
0x25160…25180        65 29 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 66 20 6d 75 73 74 20 62 65 20 4e   ┆e)    The value of ref must be N┆
0x25180…251a0        49 4c 2c 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 49 66   ┆IL, otherwise a fault occurs. If┆
0x251a0…251c0        20 0a 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 63 68 61 69 6e 20 63 68 20 69 73 20   ┆  the length of the chain ch is ┆
0x251c0…251e0        30 20 61 20 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 54 68 65 20 63 75 72 72 65 6e 74 20 0a 62   ┆0 a fault occurs. The current  b┆
0x251e0…25200        75 66 66 65 72 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 63 68 61 69 6e 20   ┆uffer is removed from the chain ┆
0x25200…25220 (297,) 61 6e 64 20 77 69 6c 6c 20 62 65 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 0a 72 65 66 2e 20   ┆and will be designated by  ref. ┆
0x25220…25240        74 68 65 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 74 68 65 20 72 65 6d 6f 76 65 64 20 65 6c 65   ┆the successor of the removed ele┆
0x25240…25260        6d 65 6e 74 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65 77 20 0a 63 75 72 72 65 6e 74 20 62 75   ┆ment becomes the new  current bu┆
0x25260…25280        66 66 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 72 74 20 70 6f 69 6e 74 20 69 73 20 72 65 6d 6f   ┆ffer. If the start point is remo┆
0x25280…252a0        76 65 64 20 66 72 6f 6d 20 61 20 6c 69 73 74 20 0a 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   ┆ved from a list  with more than ┆
0x252a0…252c0        6f 6e 65 20 65 6c 65 6d 65 6e 74 20 74 68 65 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 74 68 65   ┆one element the successor of the┆
0x252c0…252e0        20 72 65 6d 6f 76 65 64 20 0a 65 6c 65 6d 65 6e 74 20 62 65 63 6f 6d 72 65 73 20 74 68 65 20 6e   ┆ removed  element becomres the n┆
0x252e0…25300        65 77 20 73 74 61 72 74 20 70 6f 69 6e 74 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6e 65   ┆ew start point as well as the ne┆
0x25300…25320        77 20 0a 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2e 0d 0a 0d 0a 8c 83 d4 0a 54 68 65 20 63 75   ┆w  current buffer.        The cu┆
0x25320…25340        72 72 65 6e 74 20 62 75 66 66 65 72 20 6d 61 79 20 62 65 20 6d 6f 76 65 64 20 6f 6e 65 20 73 74   ┆rrent buffer may be moved one st┆
0x25340…25360        65 70 20 75 70 20 6f 72 20 64 6f 77 6e 20 74 68 65 20 0a 6c 69 73 74 2c 20 6f 72 20 6d 6f 76 65   ┆ep up or down the  list, or move┆
0x25360…25380        64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 70 6f 69 6e 74 20 62 79 20 63 61 6c 6c 69 6e 67 20   ┆d to the start point by calling ┆
0x25380…253a0        74 68 65 20 70 72 6f 63 65 64 75 72 65 73 20 0a 63 68 61 69 6e 75 70 2c 20 63 68 61 69 6e 64 6f   ┆the procedures  chainup, chaindo┆
0x253a0…253c0        77 6e 20 61 6e 64 20 63 68 61 69 6e 73 74 61 72 74 20 72 65 73 70 65 63 74 69 76 65 6c 79 3a 0d   ┆wn and chainstart respectively: ┆
0x253c0…253e0        0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 75 70 28 56 41 52 20 63 68 3a 20 63 68 61   ┆   PROCEDURE chainup(VAR ch: cha┆
0x253e0…25400        69 6e 29 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 64 6f 77 6e 28 56 41 52 20 63 68 3a   ┆in)  PROCEDURE chaindown(VAR ch:┆
0x25400…25420 (298,) 20 63 68 61 69 6e 29 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 73 74 61 72 74 28 56 41   ┆ chain)  PROCEDURE chainstart(VA┆
0x25420…25440        52 20 63 68 3a 20 63 68 61 69 6e 29 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 63 61   ┆R ch: chain)  The result of a ca┆
0x25440…25460        6c 6c 20 6f 66 20 63 68 61 69 6e 75 70 2f 63 68 61 69 6e 64 6f 77 6e 2f 63 68 61 69 6e 73 74 61   ┆ll of chainup/chaindown/chainsta┆
0x25460…25480        72 74 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 73 75 63 63 65 73 73 6f 72 2f 70 72 65 64 65 63   ┆rt is that  the successor/predec┆
0x25480…254a0        65 73 73 6f 72 2f 73 74 61 72 74 20 70 6f 69 6e 74 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65   ┆essor/start point becomes the ne┆
0x254a0…254c0        77 20 0a 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 6f 66 20 74 68 65 20 6c 69 73 74 2e 0d 0a   ┆w  current buffer of the list.  ┆
0x254c0…254e0        0d 0a 54 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 6f 66 20 61 20 6c 69 73 74 20 6d   ┆  The current buffer of a list m┆
0x254e0…25500        61 79 20 62 65 20 6d 61 64 65 20 74 68 65 20 6e 65 77 20 73 74 61 72 74 20 70 6f 69 6e 74 20 0a   ┆ay be made the new start point  ┆
0x25500…25520        6f 66 20 61 20 6c 69 73 74 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 63 68 61 69 6e 72 65 73 65   ┆of a list by a call of chainrese┆
0x25520…25540        74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 72 65 73 65 74 28 56 41 52 20 63   ┆t:    PROCEDURE chainreset(VAR c┆
0x25540…25560        68 3a 20 63 68 61 69 6e 29 0d 0a 0d 0a a1 45 78 61 6d 70 6c 65 3a 0d 0a 4c 65 74 20 63 68 20 62   ┆h: chain)     Example:  Let ch b┆
0x25560…25580        65 20 74 68 65 20 68 61 6e 64 6c 65 20 6f 66 20 61 20 73 6f 72 74 65 64 20 63 68 61 69 6e 20 6f   ┆e the handle of a sorted chain o┆
0x25580…255a0        66 20 62 75 66 66 65 72 73 3a 0d 0a 0d 0a 63 68 61 69 6e 73 74 61 72 74 28 63 68 29 3b 0d 0a 46   ┆f buffers:    chainstart(ch);  F┆
0x255a0…255c0        4f 52 20 63 6f 75 6e 74 3a 3d 31 20 54 4f 20 63 68 61 69 6e 6c 65 6e 67 74 68 28 63 68 29 20 44   ┆OR count:=1 TO chainlength(ch) D┆
0x255c0…255e0        4f 0d 0a 42 45 47 49 4e 0d 0a 20 20 63 68 61 69 6e 65 78 74 72 61 63 74 28 63 68 2c 20 77 6f 72   ┆O  BEGIN    chainextract(ch, wor┆
0x255e0…25600        6b 5f 72 65 66 29 3b 0d 0a 20 20 70 75 73 68 28 72 65 73 75 6c 74 5f 73 74 61 63 6b 2c 20 77 6f   ┆k_ref);    push(result_stack, wo┆
0x25600…25620 (299,) 72 6b 5f 72 65 66 29 0d 0a 45 4e 44 28 2a 46 4f 52 2a 29 3b 0d 0a 73 69 67 6e 61 6c 28 6d 61 69   ┆rk_ref)  END(*FOR*);  signal(mai┆
0x25620…2563b        6c 5f 63 65 6e 74 65 72 2c 20 72 65 73 75 6c 74 5f 73 74 61 63 6b 29 0d 0a 0d 0a                  ┆l_center, result_stack)    ┆
0x2563b…2563e        FormFeed {
0x2563b…2563e          0c 82 c4                                                                                          ┆   ┆
0x2563b…2563e        }
0x2563e…25640        0a b0                                                                                             ┆  ┆
0x25640…25660        a1 31 31 2e 20 49 4d 43 20 46 55 4e 43 54 49 4f 4e 53 0d 0a 0d 0a 54 68 65 20 63 6f 6e 63 65 70   ┆ 11. IMC FUNCTIONS    The concep┆
0x25660…25680        74 20 6f 66 20 61 20 72 65 73 69 64 65 6e 74 20 6d 6f 64 75 6c 65 20 69 73 20 69 6e 74 72 6f 64   ┆t of a resident module is introd┆
0x25680…256a0        75 63 65 64 20 69 6e 20 28 34 29 20 61 73 20 61 20 0a 77 65 6c 6c 20 64 65 66 69 6e 65 64 20 65   ┆uced in (4) as a  well defined e┆
0x256a0…256c0        6e 74 69 74 79 2c 20 77 68 69 63 68 20 69 73 20 73 65 6c 66 2d 63 6f 6e 74 61 69 6e 65 64 20 69   ┆ntity, which is self-contained i┆
0x256c0…256e0        6e 20 74 65 72 6d 73 20 6f 66 20 0a 72 65 73 6f 75 72 63 65 73 2e 20 49 6e 20 52 65 61 6c 2d 54   ┆n terms of  resources. In Real-T┆
0x256e0…25700        69 6d 65 20 50 61 73 63 61 6c 20 61 20 72 65 73 69 64 65 6e 74 20 69 73 20 74 68 75 73 20 61 20   ┆ime Pascal a resident is thus a ┆
0x25700…25720        74 72 65 65 20 6f 66 20 0a 70 72 6f 63 65 73 73 65 73 20 77 68 6f 73 65 20 72 6f 6f 74 20 64 6f   ┆tree of  processes whose root do┆
0x25720…25740        65 73 20 6e 6f 74 20 65 6e 68 65 72 69 74 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 2e 20 54 68   ┆es not enherit any resources. Th┆
0x25740…25760        61 74 20 0a 69 73 2c 20 6e 6f 20 70 6f 6f 6c 20 6f 72 20 70 6f 72 74 20 69 73 20 6d 61 64 65 20   ┆at  is, no pool or port is made ┆
0x25760…25780        6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 74 68 65 20 0a 72 65 73 69 64 65   ┆known to the root of the  reside┆
0x25780…257a0        6e 74 20 61 73 20 61 20 70 72 6f 63 65 73 73 20 70 61 72 61 6d 65 74 65 72 2e 20 48 6f 77 65 76   ┆nt as a process parameter. Howev┆
0x257a0…257c0        65 72 2c 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 0a 72 65 73 69 64 65 6e 74 20 69 73 20   ┆er, the concept of  resident is ┆
0x257c0…257e0        6e 6f 74 20 72 65 66 6c 65 63 74 65 64 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 52   ┆not reflected in the syntax of R┆
0x257e0…25800        65 61 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 0a 6f 72 20 69 6e 20 72 75 6c 65 73 20 65 6e 66   ┆eal-Time Pascal  or in rules enf┆
0x25800…25820 (300,) 6f 72 63 65 64 20 62 79 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2e 0d 0a 0d 0a 52 65 73 69 64 65   ┆orced by the language.    Reside┆
0x25820…25840        6e 74 73 20 65 78 69 73 74 20 69 6e 20 61 20 64 65 73 74 72 69 62 75 74 72 65 64 20 65 6e 76 69   ┆nts exist in a destributred envi┆
0x25840…25860        72 6f 6e 6d 65 6e 74 20 61 6e 64 20 0a 63 6f 6d 6d 75 6e 69 63 61 74 65 20 77 69 74 68 20 65 61   ┆ronment and  communicate with ea┆
0x25860…25880        63 68 6f 74 68 65 72 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 6e   ┆chother by using the standard in┆
0x25880…258a0        74 65 72 20 0a 6d 6f 64 75 6c 65 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 28 49 4d 43 29 20   ┆ter  module communication (IMC) ┆
0x258a0…258c0        73 65 72 76 69 63 65 73 20 28 35 29 2e 20 54 68 65 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 0a   ┆services (5). The embedding of  ┆
0x258c0…258e0        74 68 65 73 65 20 73 65 72 76 69 63 65 73 20 69 6e 74 6f 20 52 65 61 6c 2d 54 69 6d 65 20 50 61   ┆these services into Real-Time Pa┆
0x258e0…25900        73 63 61 6c 20 69 73 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20 74 68 65 20 0a 70 72 65 73 65 6e   ┆scal is the scope of the  presen┆
0x25900…25920        74 20 63 68 61 70 74 65 72 2e 20 49 6e 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74   ┆t chapter. In the remainder of t┆
0x25920…25940        68 65 20 63 68 61 70 74 65 72 20 74 68 65 20 0a 73 6f 66 74 77 61 72 65 20 63 6f 6d 70 6f 6e 65   ┆he chapter the  software compone┆
0x25940…25960        6e 74 73 20 61 74 20 74 68 65 20 49 4d 43 20 6e 6f 64 65 73 20 70 6c 75 73 20 74 68 65 20 70 68   ┆nts at the IMC nodes plus the ph┆
0x25960…25980        79 73 69 63 61 6c 20 0a 69 6e 74 65 72 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 65 64 69 61 20 77 68   ┆ysical  interconnection media wh┆
0x25980…259a0        69 63 68 20 74 6f 67 65 74 68 65 72 20 70 72 6f 76 69 64 65 20 74 68 65 20 49 4d 43 20 0a 73 65   ┆ich together provide the IMC  se┆
0x259a0…259c0        72 76 69 63 65 73 20 61 72 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 74 68 65 20 49 4d   ┆rvices are referred to as the IM┆
0x259c0…259e0        43 20 6e 65 74 77 6f 72 6b 20 6f 72 20 6a 75 73 74 20 74 68 65 20 49 4d 43 2e 0d 0a 0d 0a 41 20   ┆C network or just the IMC.    A ┆
0x259e0…25a00        72 65 73 69 64 65 6e 74 20 67 61 69 6e 73 20 61 63 63 65 73 73 20 74 6f 20 49 4d 43 20 73 65 72   ┆resident gains access to IMC ser┆
0x25a00…25a20 (301,) 76 69 63 65 73 20 76 69 61 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20 0a 74 79 70 65 20 70   ┆vices via objects of the  type p┆
0x25a20…25a40        6f 72 74 2e 20 50 6f 72 74 20 6e 61 6d 65 73 2c 20 69 6e 20 74 75 72 6e 2c 20 65 73 74 61 62 6c   ┆ort. Port names, in turn, establ┆
0x25a40…25a60        69 73 68 20 74 68 65 20 69 64 65 6e 74 69 66 69 63 61 74 69 6f 6e 20 0a 6f 66 20 72 65 73 69 64   ┆ish the identification  of resid┆
0x25a60…25a80        65 6e 74 73 20 74 6f 77 61 72 64 73 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 61 6e 64   ┆ents towards the IMC network and┆
0x25a80…25aa0        20 74 6f 77 61 72 64 73 20 6f 6e 65 20 0a 61 6e 6f 74 68 65 72 2e 20 50 6f 72 74 20 6e 61 6d 65   ┆ towards one  another. Port name┆
0x25aa0…25ac0        73 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 6d 61 78 69 6d 75 6d 20 6f 66 20 31 32 20 67 72 61   ┆s consist of a maximum of 12 gra┆
0x25ac0…25ae0        70 68 69 63 20 0a 63 68 61 72 61 63 74 65 72 73 2e 20 43 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20   ┆phic  characters. Communication ┆
0x25ae0…25b00        62 65 74 77 65 65 6e 20 74 77 6f 20 72 65 73 69 64 65 6e 74 73 20 74 61 6b 65 73 20 70 6c 61 63   ┆between two residents takes plac┆
0x25b00…25b20        65 20 0a 61 73 20 74 72 61 6e 73 66 65 72 73 20 6f 66 20 73 74 72 69 6e 67 73 20 6f 66 20 62 79   ┆e  as transfers of strings of by┆
0x25b20…25b40        74 65 73 20 66 72 6f 6d 20 62 75 66 66 65 72 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 61 20   ┆tes from buffers belonging to a ┆
0x25b40…25b60        0a 73 65 6e 64 65 72 20 74 6f 20 62 75 66 66 65 72 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20   ┆ sender to buffers belonging to ┆
0x25b60…25b80        61 20 72 65 63 65 69 76 65 72 2e 20 61 6e 20 61 63 74 75 61 6c 20 0a 74 72 61 6e 73 66 65 72 20   ┆a receiver. an actual  transfer ┆
0x25b80…25ba0        77 69 74 68 69 6e 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 74 61 6b 65 73 20 70 6c 61   ┆within the IMC network takes pla┆
0x25ba0…25bc0        63 65 20 77 68 65 6e 20 62 6f 74 68 20 0a 72 65 73 69 64 65 6e 74 73 20 68 61 76 65 20 64 65 6c   ┆ce when both  residents have del┆
0x25bc0…25be0        69 76 65 72 65 64 20 61 20 62 75 66 66 65 72 20 74 6f 20 74 68 65 20 49 4d 43 2e 0d 0a 0d 0a 54   ┆ivered a buffer to the IMC.    T┆
0x25be0…25c00        68 65 20 70 72 69 6e 63 69 70 61 6c 20 6d 65 61 6e 73 20 6f 66 20 63 6f 6d 6d 75 6e 69 63 61 74   ┆he principal means of communicat┆
0x25c00…25c20 (302,) 69 6f 6e 20 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 0a 74 77 6f 20   ┆ion is connections between  two ┆
0x25c20…25c40        70 6f 72 74 73 2e 20 4f 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 65 20 49 4d 43 20 70   ┆ports. On a connection the IMC p┆
0x25c40…25c60        65 72 66 6f 72 6d 20 66 6c 6f 77 20 63 6f 6e 74 72 6f 6c 2c 20 0a 63 6f 72 72 65 63 74 20 73 65   ┆erform flow control,  correct se┆
0x25c60…25c80        71 75 65 6e 63 69 6e 67 2c 20 61 6e 64 20 75 6e 64 61 6d 61 67 65 64 20 64 61 74 61 20 74 72 61   ┆quencing, and undamaged data tra┆
0x25c80…25ca0        6e 73 66 65 72 2e 0d 0a 0d 0a 54 68 65 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20 62 65 74 77 65   ┆nsfer.    The relationship betwe┆
0x25ca0…25cc0        65 6e 20 69 6e 76 6f 6b 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 6f 66 20   ┆en invokation and completion of ┆
0x25cc0…25ce0        49 4d 43 20 0a 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 2e 20   ┆IMC  functions is asynchronous. ┆
0x25ce0…25d00        49 4d 43 20 73 65 72 76 69 63 65 73 20 61 72 65 20 69 6e 76 6f 6b 65 64 20 62 79 20 63 61 6c 6c   ┆IMC services are invoked by call┆
0x25d00…25d20        73 20 0a 6f 66 20 70 72 65 64 65 66 69 6e 65 64 20 73 65 72 76 69 63 65 20 72 65 71 75 65 73 74   ┆s  of predefined service request┆
0x25d20…25d40        20 72 6f 75 74 69 6e 65 73 2e 20 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 20 61 20 63 61 6c 6c 20   ┆ routines. In most cases a call ┆
0x25d40…25d60        0a 6f 66 20 61 20 72 71 75 65 73 74 20 72 6f 75 74 69 6e 65 20 63 61 75 73 65 73 20 74 68 65 20   ┆ of a rquest routine causes the ┆
0x25d60…25d80        74 72 61 6e 73 66 65 72 20 6f 66 20 61 20 62 75 66 66 65 72 20 28 6f 72 20 74 77 6f 29 20 0a 8c   ┆transfer of a buffer (or two)   ┆
0x25d80…25da0        83 c8 0a 66 72 6f 6d 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 72 65 73 69 64 65 6e 74 20 74 6f 20   ┆   from the calling resident to ┆
0x25da0…25dc0        74 68 65 20 49 4d 43 2e 20 57 68 65 6e 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 0a 66 75 6e   ┆the IMC. When the requested  fun┆
0x25dc0…25de0        63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 63 61 72 72 69 65 64 20 6f 75 74 20 74 68 69 73 20   ┆ction has been carried out this ┆
0x25de0…25e00        62 75 66 66 65 72 2c 20 63 61 6c 6c 65 64 20 61 6e 20 a1 65 76 65 6e 74 20 0a 19 80 80 84 62 75   ┆buffer, called an  event      bu┆
0x25e00…25e20 (303,) 66 66 65 72 e1 2c 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20 69 2e 65 2e 20 74 6f   ┆ffer , will be returned, i.e. to┆
0x25e20…25e40        20 69 74 73 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 0a 6d 61 69 6c 62 6f 78 2c 20 77 69   ┆ its return address  mailbox, wi┆
0x25e40…25e60        74 68 20 72 65 6c 65 76 61 6e 74 20 72 65 73 75 6c 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61   ┆th relevant result information a┆
0x25e60…25e80        6e 64 70 6f 73 73 69 62 6c 79 20 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 72 65 63 65 69 76 65 64 20   ┆ndpossibly  containing received ┆
0x25e80…25ea0        64 61 74 61 2e 20 54 68 65 20 72 65 74 75 72 6e 20 6f 66 20 61 6e 20 65 76 65 6e 74 20 62 75 66   ┆data. The return of an event buf┆
0x25ea0…25ec0        66 65 72 20 74 6f 20 61 20 0a 72 65 73 69 64 65 6e 74 20 69 73 20 63 61 6c 6c 65 64 20 61 6e 20   ┆fer to a  resident is called an ┆
0x25ec0…25ee0        a1 49 4d 43 20 65 76 65 6e 74 e1 2c 20 6f 72 20 6a 75 73 74 20 61 6e 20 65 76 65 6e 74 2e 20 54   ┆ IMC event , or just an event. T┆
0x25ee0…25f00        68 65 20 0a 69 6e 74 65 72 66 61 63 65 20 62 65 74 77 65 65 6e 20 72 65 73 69 64 65 6e 74 73 20   ┆he  interface between residents ┆
0x25f00…25f20        61 6e 64 20 74 68 65 20 49 4d 43 20 68 61 73 20 62 65 65 6e 20 64 65 73 69 67 6e 65 64 20 73 6f   ┆and the IMC has been designed so┆
0x25f20…25f40        20 0a 74 68 61 74 20 6e 6f 20 63 68 61 6e 67 65 2c 20 77 68 69 63 68 20 69 73 20 6f 66 20 73 69   ┆  that no change, which is of si┆
0x25f40…25f60        67 6e 69 66 69 63 61 6e 63 65 20 74 6f 20 61 20 72 65 73 69 64 65 6e 74 2c 20 69 6e 20 0a 74 68   ┆gnificance to a resident, in  th┆
0x25f60…25f80        65 20 73 74 61 74 65 20 6f 66 20 61 20 70 6f 72 74 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   ┆e state of a port or connection ┆
0x25f80…25fa0        65 6e 64 2d 70 6f 69 6e 74 20 63 61 6e 20 74 61 6b 65 20 70 6c 61 63 65 20 0a 77 69 74 68 6f 75   ┆end-point can take place  withou┆
0x25fa0…25fc0        74 20 74 68 65 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 61 6e 20 65 76 65 6e 74 2c 20 75 6e   ┆t the occurrence of an event, un┆
0x25fc0…25fe0        6c 65 73 73 20 69 74 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 20 0a 61 20 63 61 6c 6c 20 6f 66   ┆less it occurs during  a call of┆
0x25fe0…26000        20 61 20 72 65 71 75 65 73 74 20 72 6f 75 74 69 6e 65 20 61 6e 64 20 61 73 20 61 20 64 69 72 65   ┆ a request routine and as a dire┆
0x26000…26020 (304,) 63 74 20 63 6f 6e 73 65 71 75 65 6e 63 65 20 6f 66 20 0a 74 68 69 73 20 63 61 6c 6c 2e 20 49 6e   ┆ct consequence of  this call. In┆
0x26020…26040        20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 64 65 73 70 69 74 65 20 74 68 65 20 61 73 79 6e 63 68   ┆ other words, despite the asynch┆
0x26040…26060        72 6f 6e 6f 75 73 20 6e 61 74 75 72 65 20 0a 6f 66 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 2c   ┆ronous nature  of the interface,┆
0x26060…26080        20 72 65 73 69 64 65 6e 74 73 20 61 6c 77 61 79 73 20 68 61 76 65 20 63 6f 6d 70 6c 65 74 65 20   ┆ residents always have complete ┆
0x26080…260a0        75 70 2d 74 6f 2d 64 61 74 65 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68   ┆up-to-date  information about th┆
0x260a0…260c0        65 69 72 20 70 6f 72 74 73 20 61 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 0d 0a 44 75   ┆eir ports and connections.    Du┆
0x260c0…260e0        72 69 6e 67 20 74 68 65 20 74 69 6d 65 2d 73 70 61 6e 20 66 72 6f 6d 20 61 6e 20 65 76 65 6e 74   ┆ring the time-span from an event┆
0x260e0…26100        20 62 75 66 66 65 72 20 68 61 73 20 62 65 65 6e 20 0a 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f   ┆ buffer has been  transferred to┆
0x26100…26120        20 74 68 65 20 49 4d 43 20 75 6e 74 69 6c 20 69 74 20 69 73 20 65 76 65 6e 74 75 61 6c 6c 79 20   ┆ the IMC until it is eventually ┆
0x26120…26140        72 65 74 75 72 6e 65 64 20 69 74 20 69 73 20 0a 73 61 69 64 20 74 6f 20 62 65 20 6f 75 74 73 74   ┆returned it is  said to be outst┆
0x26140…26160        61 6e 64 69 6e 67 2e 20 41 6e 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 65 76 65 6e 74 20 62 75 66   ┆anding. An outstanding event buf┆
0x26160…26180        66 65 72 20 6d 61 79 20 62 65 20 0a 66 75 72 74 68 65 72 20 63 68 61 72 61 63 74 65 72 69 7a 65   ┆fer may be  further characterize┆
0x26180…261a0        64 20 62 79 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 76 65 6e 74 20 69 74 20 69 73 20 69 6e 74   ┆d by the kind of event it is int┆
0x261a0…261c0        65 6e 64 65 64 20 74 6f 20 0a 72 65 74 72 69 65 76 65 2e 20 41 6c 6c 20 49 4d 43 20 65 76 65 6e   ┆ended to  retrieve. All IMC even┆
0x261c0…261e0        74 73 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 0a   ┆ts correspond to values of the  ┆
0x261e0…26200        70 72 65 64 65 66 69 6e 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 20 65 76 65 6e   ┆predefined enumeration type even┆
0x26200…26220 (305,) 74 5f 74 79 70 65 20 77 68 69 63 68 20 69 73 20 67 69 76 65 6e 20 69 6e 20 0a 73 65 63 74 69 6f   ┆t_type which is given in  sectio┆
0x26220…26240        6e 20 33 2e 38 2e 20 41 6c 6c 20 49 4d 43 20 65 76 65 6e 74 73 20 61 72 65 20 64 65 73 63 72 69   ┆n 3.8. All IMC events are descri┆
0x26240…26260        62 65 64 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 73 65 63 74 69 6f 6e 73 2e 0d   ┆bed in the following  sections. ┆
0x26260…26280        0a 0d 0a 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 74 68 65 20 49 4d 43 20 77 69 6c 6c 20 72 65   ┆   In some cases the IMC will re┆
0x26280…262a0        74 75 72 6e 20 61 6e 20 65 76 65 6e 74 20 62 75 66 66 65 72 20 65 76 65 6e 20 0a 74 68 6f 75 67   ┆turn an event buffer even  thoug┆
0x262a0…262c0        68 20 74 68 65 20 69 6e 74 65 6e 64 65 64 20 65 76 65 6e 74 20 68 61 73 20 6e 6f 74 20 6f 63 63   ┆h the intended event has not occ┆
0x262c0…262e0        75 72 72 65 64 2c 20 6d 6f 73 74 20 6f 66 74 65 6e 20 0a 62 65 63 61 75 73 65 20 63 69 72 63 75   ┆urred, most often  because circu┆
0x262e0…26300        6d 73 74 61 6e 63 65 73 20 63 68 61 6e 67 65 20 73 6f 20 74 68 61 74 20 69 74 20 6e 65 76 65 72   ┆mstances change so that it never┆
0x26300…26320        20 77 69 6c 6c 2e 20 54 68 69 73 20 69 73 20 0a 63 61 6c 6c 65 64 20 61 20 64 75 6d 6d 79 20 65   ┆ will. This is  called a dummy e┆
0x26320…26340        76 65 6e 74 2e 20 41 73 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20 6f 75 74 73 74 61 6e 64   ┆vent. As an example, an outstand┆
0x26340…26360        69 6e 67 20 64 61 74 61 20 0a 62 75 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20   ┆ing data  buffer is returned as ┆
0x26360…26380        61 20 64 75 6d 6d 79 20 65 76 65 6e 74 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f   ┆a dummy event when the connectio┆
0x26380…263a0        6e 20 74 6f 20 0a 77 68 69 63 68 20 69 74 20 70 65 72 74 61 69 6e 73 20 69 73 20 75 6e 65 78 70   ┆n to  which it pertains is unexp┆
0x263a0…263c0        65 63 74 65 64 6c 79 20 72 65 6d 6f 76 65 64 2e 20 41 20 6e 75 6d 62 65 72 20 6f 66 20 0a 65 76   ┆ectedly removed. A number of  ev┆
0x263c0…263e0        65 6e 74 5f 74 79 70 65 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 65 78 63 6c 75 73 69   ┆ent_type values are used exclusi┆
0x263e0…26400        76 65 6c 79 20 66 6f 72 20 64 75 6d 6d 79 20 65 76 65 6e 74 73 2e 20 0a 45 61 63 68 20 6f 66 20   ┆vely for dummy events.  Each of ┆
0x26400…26420 (306,) 74 68 65 73 65 20 76 61 6c 75 65 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 65 76 65 6e 74   ┆these values indicates the event┆
0x26420…26440        20 77 68 69 63 68 20 74 68 65 20 64 75 6d 6d 79 20 0a 65 76 65 6e 74 20 62 75 66 66 65 72 20 68   ┆ which the dummy  event buffer h┆
0x26440…26460        61 64 20 62 65 65 6e 20 73 65 74 20 75 70 20 74 6f 20 72 65 74 72 69 76 65 2e 20 54 68 65 20 63   ┆ad been set up to retrive. The c┆
0x26460…26480        6f 72 72 65 73 70 6f 6e 64 65 6e 63 65 20 0a 62 65 74 77 65 65 6e 20 64 75 6d 6d 79 20 65 76 65   ┆orrespondence  between dummy eve┆
0x26480…264a0        6e 74 20 6b 69 6e 64 73 20 61 6e 64 20 69 6e 74 65 6e 64 65 64 20 65 76 65 6e 74 20 6b 69 6e 64   ┆nt kinds and intended event kind┆
0x264a0…264b6        73 20 69 73 20 73 68 6f 77 6e 20 0a 62 65 6c 6f 77 3a 0d 0a 0d 0a                                 ┆s is shown  below:    ┆
0x264b6…264b9        FormFeed {
0x264b6…264b9          0c 83 b0                                                                                          ┆   ┆
0x264b6…264b9        }
0x264b9…264c0        0a a1 64 75 6d 6d 79                                                                              ┆  dummy┆
0x264c0…264e0        20 65 76 65 6e 74 09 09 69 6e 74 65 6e 64 65 64 20 65 76 65 6e 74 05 0d 0a 64 75 6d 6d 79 5f 6c   ┆ event  intended event   dummy_l┆
0x264e0…26500        65 74 74 65 72 09 09 6c 65 74 74 65 72 5f 61 72 72 69 76 65 64 0d 0a 64 75 6d 6d 79 5f 6c 63 6e   ┆etter  letter_arrived  dummy_lcn┆
0x26500…26520        63 74 09 09 6c 6f 63 61 6c 5f 63 6f 6e 6e 65 63 74 0d 0a 64 75 6d 6d 79 5f 72 63 6e 63 74 09 09   ┆ct  local_connect  dummy_rcnct  ┆
0x26520…26540        72 65 6d 6f 74 65 5f 63 6f 6e 6e 65 63 74 0d 0a 64 75 6d 6d 79 5f 72 69 6e 64 69 63 09 09 72 65   ┆remote_connect  dummy_rindic  re┆
0x26540…26560        73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 0d 0a 64 75 6d 6d 79 5f 72 63 6d 70 6c 09 09 72 65 73   ┆set_indication  dummy_rcmpl  res┆
0x26560…26580        65 74 5f 63 6f 6d 70 6c 65 74 69 6f 6e 0d 0a 64 75 6d 6d 79 5f 63 72 65 64 69 74 09 09 63 72 65   ┆et_completion  dummy_credit  cre┆
0x26580…265a0        64 69 74 0d 0a 64 75 6d 6d 79 5f 73 65 6e 74 09 09 64 61 74 61 5f 73 65 6e 74 0d 0a 64 75 6d 6d   ┆dit  dummy_sent  data_sent  dumm┆
0x265a0…265c0        79 5f 61 72 72 69 76 65 64 09 09 64 61 74 61 5f 61 72 72 69 76 65 64 0d 0a 0d 0a 49 6e 20 61 64   ┆y_arrived  data_arrived    In ad┆
0x265c0…265e0        64 69 74 69 6f 6e 20 74 6f 20 72 65 71 75 65 73 74 20 72 6f 75 74 69 6e 65 73 20 52 65 61 6c 2d   ┆dition to request routines Real-┆
0x265e0…26600        54 69 6d 65 20 50 61 73 63 61 6c 20 70 72 6f 76 69 64 65 73 20 0a 72 6f 75 74 69 6e 65 73 20 77   ┆Time Pascal provides  routines w┆
0x26600…26620 (307,) 68 69 63 68 20 63 61 6e 20 64 65 63 6f 64 65 20 65 76 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f   ┆hich can decode event informatio┆
0x26620…26640        6e 20 62 79 20 69 6e 73 70 65 63 74 69 6e 67 20 0a 74 68 65 20 49 4d 43 20 62 75 66 66 65 72 20   ┆n by inspecting  the IMC buffer ┆
0x26640…26660        61 74 74 72 69 62 75 74 65 73 20 75 73 65 64 20 74 6f 20 63 61 72 72 79 20 74 68 69 73 20 69 6e   ┆attributes used to carry this in┆
0x26660…26680        66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d 0a 54 68 65 20 49 4d 43 20 73 65 72 76 69 63 65 20 72 65   ┆formation.    The IMC service re┆
0x26680…266a0        71 75 65 73 74 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20   ┆quest routines are described in ┆
0x266a0…266c0        74 68 65 20 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 73 65 63 74 69 6f 6e 73 2e 20 57   ┆the  following three sections. W┆
0x266c0…266e0        69 74 68 20 61 20 73 69 6e 67 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 28 63 6f 6e 6e 65 63 74 2c   ┆ith a single exception (connect,┆
0x266e0…26700        20 0a 73 65 65 20 73 75 62 73 65 63 74 69 6f 6e 20 31 31 2e 33 2e 32 29 20 74 68 65 20 72 65 66   ┆  see subsection 11.3.2) the ref┆
0x26700…26720        65 72 65 6e 63 65 20 74 79 70 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 0a 74 68 65 73 65   ┆erence type parameters to  these┆
0x26720…26740        20 72 6f 75 74 69 6e 65 73 20 6d 75 73 74 20 6e 6f 74 20 68 61 76 65 20 76 61 6c 75 65 20 4e 49   ┆ routines must not have value NI┆
0x26740…26760        4c 20 6f 72 20 62 65 20 6c 6f 63 6b 65 64 20 77 68 65 6e 20 61 20 0a 63 61 6c 6c 20 69 73 20 6d   ┆L or be locked when a  call is m┆
0x26760…26780        61 64 65 3b 20 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20 77 69 6c 6c 20 6f 63 63 75   ┆ade; otherwise a fault will occu┆
0x26780…267a0        72 2e 20 54 68 65 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 0a 61 72 65 20 75 73 65 64 20 74 6f   ┆r. These parameters  are used to┆
0x267a0…267c0        20 74 72 61 6e 73 66 65 72 20 65 76 65 6e 74 20 62 75 66 66 65 72 20 74 6f 20 74 68 65 20 49 4d   ┆ transfer event buffer to the IM┆
0x267c0…267e0        43 2c 20 61 6e 64 20 74 68 65 79 20 0a 61 6c 77 61 79 73 20 68 61 76 65 20 76 61 6c 75 65 20 4e   ┆C, and they  always have value N┆
0x267e0…26800        49 4c 20 61 66 74 65 72 20 61 20 63 61 6c 6c 2e 0d 0a 0d 0a 54 68 65 20 49 4d 43 20 6e 65 76 65   ┆IL after a call.    The IMC neve┆
0x26800…26820 (308,) 72 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 69 7a 65 2c 20 6f 66 66 73 65 74 2c 20 74 6f 70 2c   ┆r changes the size, offset, top,┆
0x26820…26840        20 6f 72 20 75 2d 61 74 74 72 69 62 75 74 65 73 20 0a 6f 66 20 61 6e 20 65 76 65 6e 74 20 62 75   ┆ or u-attributes  of an event bu┆
0x26840…26860        66 66 65 72 2e 20 57 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 61 63 74 75   ┆ffer. With the exception of actu┆
0x26860…26880        61 6c 20 64 61 74 61 20 0a 62 75 66 66 65 72 73 20 28 73 65 6e 64 6c 65 74 74 65 72 2c 20 72 65   ┆al data  buffers (sendletter, re┆
0x26880…268a0        63 65 69 76 65 6c 65 74 74 65 72 2c 20 73 65 6e 64 2c 20 72 65 63 65 69 76 65 2c 20 0a 72 65 63   ┆ceiveletter, send, receive,  rec┆
0x268a0…268c0        65 69 76 65 61 6c 6c 29 20 69 73 20 61 6c 77 61 79 73 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65   ┆eiveall) is always placed in the┆
0x268c0…268e0        20 64 61 74 61 20 61 72 65 61 20 6f 66 20 74 68 65 20 72 65 63 65 69 76 65 20 0a 62 75 66 66 65   ┆ data area of the receive  buffe┆
0x268e0…26900        72 2c 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 74 20 63 6f   ┆r, and the number of bytes it co┆
0x26900…26920        6d 70 72 69 73 65 73 20 69 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20 0a 74 68 65 20 62 79 74 65   ┆mprises is assigned to  the byte┆
0x26920…26940        20 63 6f 75 6e 74 20 61 74 74 72 69 62 75 74 65 2e 0d 0a 0d 0a 54 68 65 20 64 61 74 61 20 61 72   ┆ count attribute.    The data ar┆
0x26940…26960        65 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 70 61 73   ┆ea description of the buffer pas┆
0x26960…26980        73 65 64 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 0a 61 20 64 61 74 61 20 74 72 61 6e 73 66 65   ┆sed by a call of  a data transfe┆
0x26980…269a0        72 20 72 6f 75 74 69 6e 65 20 6d 75 73 74 20 62 65 20 63 6f 6e 73 69 73 74 65 6e 74 2c 20 63 66   ┆r routine must be consistent, cf┆
0x269a0…269c0        2e 20 73 65 63 74 69 6f 6e 20 33 2e 38 2e 20 0a 4f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c   ┆. section 3.8.  Otherwise a faul┆
0x269c0…269e0        74 20 6f 63 63 75 72 73 2e 0d 0a 0d 0a 0d 0a b0 a1 31 31 2e 31 20 50 6f 72 74 73 0d 0a 0d 0a 41   ┆t occurs.        11.1 Ports    A┆
0x269e0…26a00        6e 20 49 4d 43 20 70 6f 72 74 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 52 65 61   ┆n IMC port is represented in Rea┆
0x26a00…26a20 (309,) 6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 0a 6f 66 20   ┆l-Time Pascal as a variable  of ┆
0x26a20…26a40        74 79 70 65 20 70 6f 72 74 2e 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 61 20 70 6f 72 74 20 69   ┆type port. The state of a port i┆
0x26a40…26a59        73 20 65 69 74 68 65 72 20 6f 70 65 6e 2c 20 69 6e 20 77 68 69 63 68 20 0a                        ┆s either open, in which  ┆
0x26a59…26a5c        FormFeed {
0x26a59…26a5c          0c 83 c8                                                                                          ┆   ┆
0x26a59…26a5c        }
0x26a5c…26a60        0a 63 61 73                                                                                       ┆ cas┆
0x26a60…26a80        65 20 74 68 65 20 70 6f 72 74 20 69 73 20 6b 6e 6f 77 6e 20 69 6e 20 74 68 65 20 49 4d 43 20 6e   ┆e the port is known in the IMC n┆
0x26a80…26aa0        65 74 77 6f 72 6b 20 62 79 20 61 20 6e 61 6d 65 20 77 68 69 63 68 20 69 73 20 0a 70 75 73 6c 69   ┆etwork by a name which is  pusli┆
0x26aa0…26ac0        73 68 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 69 74 73 20 73 63 6f 70 65 2c 20 6f 72 20   ┆shed according to its scope, or ┆
0x26ac0…26ae0        63 6c 6f 73 65 64 20 28 6f 72 20 63 6c 6f 73 69 6e 67 2c 20 73 65 65 20 0a 75 6e 64 65 72 20 63   ┆closed (or closing, see  under c┆
0x26ae0…26b00        6c 6f 73 65 70 6f 72 74 20 62 65 6c 6f 77 29 2e 0d 0a 0d 0a 41 6e 20 6f 70 65 6e 20 70 6f 72 74   ┆loseport below).    An open port┆
0x26b00…26b20        20 63 6f 6e 74 61 69 6e 73 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e   ┆ contains a number of connection┆
0x26b20…26b40        20 65 6e 64 2d 70 6f 69 6e 74 73 20 28 63 66 2e 20 0a 73 65 63 74 69 6f 6e 20 31 31 2e 33 29 2e   ┆ end-points (cf.  section 11.3).┆
0x26b40…26b60        20 54 68 65 20 6e 75 6d 62 65 72 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 67 72 65 61 74 65 72 20   ┆ The number must not be greater ┆
0x26b60…26b80        74 68 61 6e 20 61 6e 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e   ┆than an  implementation dependen┆
0x26b80…26ba0        74 20 6d 61 78 69 6d 75 6d 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 31 31 2e 35 29 2e 0d 0a 0d   ┆t maximum, cf. section 11.5).   ┆
0x26ba0…26bc0        0a 54 68 65 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 20 70 6f 72 74 2c 20 69 2e 65 2e 20   ┆ The attributes of a port, i.e. ┆
0x26bc0…26be0        6e 61 6d 65 2c 20 73 63 6f 70 65 2c 20 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66 20 0a 65 6e 64 70   ┆name, scope, and number of  endp┆
0x26be0…26c00        6f 69 6e 74 73 2c 20 61 72 65 20 64 65 66 69 6e 65 64 20 77 68 65 6e 20 69 74 20 69 73 20 6f 70   ┆oints, are defined when it is op┆
0x26c00…26c20 (310,) 65 6e 65 64 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 0a 6f 70 65 6e 70 6f 72 74 3a 0d 0a 0d 0a   ┆ened by a call of  openport:    ┆
0x26c20…26c40        50 52 4f 43 45 44 55 52 45 20 6f 70 65 6e 70 6f 72 74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20   ┆PROCEDURE openport(VAR p: port; ┆
0x26c40…26c60        56 41 52 20 63 6c 6f 73 65 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 3b 0d 0a 09 09 20 20 20 20   ┆VAR closebuf: reference;        ┆
0x26c60…26c80        20 49 4e 53 50 45 43 20 6e 61 6d 65 3a 20 73 74 72 69 6e 67 3b 20 73 63 6f 70 65 3a 20 73 63 6f   ┆ INSPEC name: string; scope: sco┆
0x26c80…26ca0        70 65 5f 74 79 70 65 3b 0d 0a 09 09 20 20 20 20 20 6e 6f 5f 6f 66 5f 63 6f 6e 73 3a 20 30 2e 2e   ┆pe_type;         no_of_cons: 0..┆
0x26ca0…26cc0        6d 61 78 69 6e 74 3b 20 72 63 76 5f 61 6c 6c 3a 20 62 6f 6f 6c 65 61 6e 29 0d 0a 77 68 65 72 65   ┆maxint; rcv_all: boolean)  where┆
0x26cc0…26ce0        20 70 20 69 73 20 74 68 65 20 70 6f 72 74 20 74 6f 20 62 65 20 6f 70 65 6e 65 64 2e 20 54 68 65   ┆ p is the port to be opened. The┆
0x26ce0…26d00        20 70 61 72 61 6d 65 74 65 72 20 63 6c 6f 73 65 62 75 66 20 0a 64 65 73 69 67 6e 61 74 65 73 20   ┆ parameter closebuf  designates ┆
0x26d00…26d20        74 68 65 20 70 6f 72 74 5f 63 6c 6f 73 65 64 20 65 76 65 6e 74 20 62 75 66 66 65 72 20 77 68 69   ┆the port_closed event buffer whi┆
0x26d20…26d40        63 68 20 77 69 6c 6c 20 62 65 20 0a 6f 75 74 73 74 61 6e 64 69 6e 67 20 77 68 69 6c 65 20 74 68   ┆ch will be  outstanding while th┆
0x26d40…26d60        65 20 70 6f 72 74 20 69 73 20 6f 70 65 6e 2e 20 54 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68   ┆e port is open. The values of th┆
0x26d60…26d80        65 20 6e 61 6d 65 20 0a 61 6e 64 20 73 63 6f 70 65 20 70 61 72 61 6d 65 74 65 72 73 20 73 70 65   ┆e name  and scope parameters spe┆
0x26d80…26da0        63 69 66 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6f 72 74 20 61 6e 64 20 74 68   ┆cify the name of the port and th┆
0x26da0…26dc0        65 20 0a 72 61 6e 67 65 20 77 69 74 68 69 6e 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20   ┆e  range within the IMC network ┆
0x26dc0…26de0        69 6e 20 77 68 69 63 68 20 74 6f 20 70 75 62 6c 69 73 68 20 74 68 65 20 6e 61 6d 65 2e 20 0a 54   ┆in which to publish the name.  T┆
0x26de0…26e00        68 65 20 76 61 6c 75 65 20 6f 66 20 6e 6f 5f 6f 66 5f 63 6f 6e 73 20 69 73 20 74 68 65 20 6e 75   ┆he value of no_of_cons is the nu┆
0x26e00…26e20 (311,) 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 0a 70 6f 69 6e 74 73 20 72   ┆mber of connection end- points r┆
0x26e20…26e40        65 71 75 65 73 74 65 64 20 66 6f 72 20 74 68 65 20 70 6f 72 74 2e 20 49 66 20 74 68 69 73 20 6e   ┆equested for the port. If this n┆
0x26e40…26e60        75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20 0a 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d   ┆umber is greater  than the maxim┆
0x26e60…26e80        75 6d 20 61 6c 6c 6f 77 65 64 20 6f 72 20 69 66 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   ┆um allowed or if the length of t┆
0x26e80…26ea0        68 65 20 6e 61 6d 65 20 69 73 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 31 32 20 61 20 66 61   ┆he name is  greater than 12 a fa┆
0x26ea0…26ec0        75 6c 74 20 77 69 6c 6c 20 6f 63 63 75 72 2e 0d 0a 0d 0a 54 68 65 20 74 79 70 65 20 6f 66 20 74   ┆ult will occur.    The type of t┆
0x26ec0…26ee0        68 65 20 73 63 6f 70 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20 70 72 65 64 65 66   ┆he scope parameter is the predef┆
0x26ee0…26f00        69 6e 65 64 20 0a 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 09 73 63 6f 70 65 5f 74   ┆ined  enumeration type   scope_t┆
0x26f00…26f20        79 70 65 3d 20 28 61 6e 6f 6e 79 6d 6f 75 73 2c 20 6c 6f 63 61 6c 2c 20 72 65 67 69 6f 6e 61 6c   ┆ype= (anonymous, local, regional┆
0x26f20…26f40        2c 20 67 6c 6f 62 61 6c 29 2e 0d 0a 46 6f 72 20 61 20 66 75 72 74 68 65 72 20 64 69 73 63 75 73   ┆, global).  For a further discus┆
0x26f40…26f60        73 69 6f 6e 20 6f 66 20 73 63 6f 70 65 73 2c 20 73 65 65 20 28 35 29 2e 0d 0a 0d 0a 54 68 65 20   ┆sion of scopes, see (5).    The ┆
0x26f60…26f80        63 61 6c 6c 20 63 61 75 73 65 73 20 74 68 65 20 70 6f 72 74 20 74 6f 20 62 65 20 6f 70 65 6e 65   ┆call causes the port to be opene┆
0x26f80…26fa0        64 20 61 73 20 72 65 71 75 65 73 74 65 64 2e 20 54 68 65 20 0a 73 74 61 74 65 20 6f 66 20 74 68   ┆d as requested. The  state of th┆
0x26fa0…26fc0        65 20 70 6f 72 74 20 6d 75 73 74 20 62 65 20 63 6c 6f 73 65 64 20 77 68 65 6e 20 74 68 65 20 63   ┆e port must be closed when the c┆
0x26fc0…26fe0        61 6c 6c 20 69 73 20 6d 61 64 65 2c 20 0a 6f 74 68 65 72 77 69 73 65 20 61 20 66 61 75 6c 74 20   ┆all is made,  otherwise a fault ┆
0x26fe0…27000        6f 63 63 75 72 73 2e 20 41 66 74 65 72 20 74 68 65 20 63 61 6c 6c 20 74 68 65 20 73 74 61 74 65   ┆occurs. After the call the state┆
0x27000…27020 (312,) 20 6f 66 20 74 68 65 20 0a 70 6f 72 74 20 69 73 20 6f 70 65 6e 2e 20 54 68 65 20 70 6f 72 74 5f   ┆ of the  port is open. The port_┆
0x27020…27040        63 6c 6f 73 65 64 20 65 76 65 6e 74 20 77 69 6c 6c 20 6f 63 63 75 72 20 77 68 65 6e 20 69 74 20   ┆closed event will occur when it ┆
0x27040…27060        69 73 20 0a 65 76 65 6e 74 75 61 6c 6c 79 20 63 6c 6f 73 65 64 20 77 69 74 68 20 6f 6e 65 20 6f   ┆is  eventually closed with one o┆
0x27060…27080        66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 20 28 63 66 2e 20 0a 73 65   ┆f the following reasons (cf.  se┆
0x27080…270a0        63 74 69 6f 6e 20 31 31 2e 34 29 3a 0d 0a 0d 0a 09 72 65 61 73 6f 6e 5f 6f 6b 3a 09 74 68 65 20   ┆ction 11.4):     reason_ok: the ┆
0x270a0…270c0        72 65 73 69 64 65 6e 74 20 63 61 6c 6c 65 64 20 63 6c 6f 73 65 70 6f 72 74 0d 0a 09 72 65 61 73   ┆resident called closeport   reas┆
0x270c0…270e0        6f 6e 5f 6e 61 6d 65 3a 09 61 20 6e 61 6d 65 2d 63 6f 6e 66 6c 69 63 74 20 61 72 6f 73 65 0d 0a   ┆on_name: a name-conflict arose  ┆
0x270e0…27100        09 72 65 61 73 6f 6e 5f 72 65 73 6f 75 72 63 65 3a 09 84 72 65 73 6f 75 72 63 65 20 70 72 6f 62   ┆ reason_resource:  resource prob┆
0x27100…27120        6c 65 6d 20 73 6f 6d 65 77 68 65 72 65 20 69 6e 20 74 68 65 20 0a 19 98 80 80 49 4d 43 20 6e 65   ┆lem somewhere in the      IMC ne┆
0x27120…27140        74 77 6f 72 6b 2e 0d 0a 0d 0a 8c 83 f8 0a 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   ┆twork.        If the value of th┆
0x27140…27160        65 20 70 61 72 61 6d 65 74 65 72 20 72 63 76 5f 61 6c 6c 20 69 73 20 74 72 75 65 2c 20 74 68 65   ┆e parameter rcv_all is true, the┆
0x27160…27180        20 67 65 6e 65 72 61 6c 20 0a 72 65 63 65 69 76 65 20 66 65 61 74 75 72 65 20 28 63 66 2e 20 72   ┆ general  receive feature (cf. r┆
0x27180…271a0        65 63 65 69 76 65 61 6c 6c 2c 20 73 75 62 73 65 63 74 69 6f 6e 20 31 31 2e 33 2e 32 29 20 69 73   ┆eceiveall, subsection 11.3.2) is┆
0x271a0…271c0        20 0a 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 70 6f 72 74 3b 20 6f 74 68 65 72 77 69 73   ┆  enabled for the port; otherwis┆
0x271c0…271e0        65 20 69 74 20 69 73 20 6e 6f 74 2e 0d 0a 0d 0a 41 20 70 6f 72 74 20 69 73 20 77 69 74 68 64 72   ┆e it is not.    A port is withdr┆
0x271e0…27200        61 77 6e 20 66 72 6f 6d 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 62 79 20 61 20 63 61   ┆awn from the IMC network by a ca┆
0x27200…27220 (313,) 6c 6c 20 6f 66 20 20 0a 63 6c 6f 73 65 70 6f 72 74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20   ┆ll of   closeport:    PROCEDURE ┆
0x27220…27240        63 6c 6f 73 65 70 6f 72 74 28 56 41 52 20 70 3a 20 70 6f 72 74 29 0d 0a 0d 0a 77 68 65 72 65 20   ┆closeport(VAR p: port)    where ┆
0x27240…27260        70 20 69 73 20 74 68 65 20 70 6f 72 74 20 74 6f 20 62 65 20 63 6c 6f 73 65 64 2e 20 49 66 20 74   ┆p is the port to be closed. If t┆
0x27260…27280        68 65 20 70 6f 72 74 20 69 73 20 61 6c 72 65 61 64 79 20 0a 63 6c 6f 73 65 64 20 74 68 65 20 63   ┆he port is already  closed the c┆
0x27280…272a0        61 6c 6c 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 2e 20 4f 74 68 65 72 77 69 73 65 20 69 74 20   ┆all has no effect. Otherwise it ┆
0x272a0…272c0        70 72 6f 63 65 65 64 73 20 61 73 20 0a 66 6f 6c 6c 6f 77 73 2e 20 41 6c 6c 20 63 6f 6e 6e 65 63   ┆proceeds as  follows. All connec┆
0x272c0…272e0        74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 70 6f 72 74 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69   ┆tions on the port are removed wi┆
0x272e0…27300        74 68 20 0a 67 72 61 63 65 66 75 6c 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 6f 66 20 61 6e 79 20 66   ┆th  graceful completion of any f┆
0x27300…27320        65 61 73 69 62 6c 65 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 73 20 61 73 20 0a 64 65 73 63 72   ┆easible data transfers as  descr┆
0x27320…27340        69 62 65 64 20 66 6f 72 20 64 69 73 63 6f 6e 6e 65 63 74 2c 20 63 66 2e 20 73 75 62 73 65 63 74   ┆ibed for disconnect, cf. subsect┆
0x27340…27360        69 6f 6e 20 31 31 2e 33 2e 32 2e 20 54 68 65 20 0a 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76   ┆ion 11.3.2. The  disconnected ev┆
0x27360…27380        65 6e 74 73 20 6f 63 63 75 72 20 77 69 74 68 20 72 65 61 73 6f 6e 5f 63 6c 6f 73 65 64 2e 20 48   ┆ents occur with reason_closed. H┆
0x27380…273a0        6f 77 65 76 65 72 2c 20 61 74 20 0a 74 68 65 20 72 65 6d 6f 74 65 20 65 6e 64 20 6f 66 20 61 20   ┆owever, at  the remote end of a ┆
0x273a0…273c0        63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 65 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76 65 6e   ┆connection the disconnected even┆
0x273c0…273e0        74 20 6f 63 63 75 72 73 20 0a 77 69 74 68 20 72 65 61 73 6f 6e 5f 6f 6b 2e 20 54 68 65 6e 20 61   ┆t occurs  with reason_ok. Then a┆
0x273e0…27400        6c 6c 20 67 65 6e 65 72 61 6c 20 72 65 63 65 69 76 65 20 61 6e 64 20 6c 65 74 74 65 72 20 72 65   ┆ll general receive and letter re┆
0x27400…27420 (314,) 63 65 69 76 65 20 0a 62 75 66 66 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 61 73 20 64 75   ┆ceive  buffer are returned as du┆
0x27420…27440        6d 6d 79 20 65 76 65 6e 74 73 2c 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 0a 70 6f 72   ┆mmy events, and finally the  por┆
0x27440…27460        74 5f 63 6c 6f 73 65 64 20 65 76 65 6e 74 20 6f 63 63 75 72 73 20 77 69 74 68 20 72 65 61 73 6f   ┆t_closed event occurs with reaso┆
0x27460…27480        6e 5f 6f 6b 2e 20 54 68 65 20 70 6f 72 74 20 69 73 20 6d 61 64 65 20 0a 75 6e 6b 6e 6f 77 6e 20   ┆n_ok. The port is made  unknown ┆
0x27480…274a0        74 6f 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 2c 20 69 74 73 20 73 74 61 74 65 20 63 68   ┆to the IMC network, its state ch┆
0x274a0…274c0        61 6e 67 65 73 20 74 6f 20 63 6c 6f 73 65 64 2c 20 61 6e 64 20 0a 69 74 20 6d 61 79 20 73 75 62   ┆anges to closed, and  it may sub┆
0x274c0…274e0        73 65 71 75 65 6e 74 6c 79 20 62 65 20 72 65 2d 6f 70 65 6e 65 64 2c 20 70 6f 73 73 69 62 6c 79   ┆sequently be re-opened, possibly┆
0x274e0…27500        20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 0a 73 65 74 20 6f 66 20 61 74 74 72 69 62   ┆ with a different  set of attrib┆
0x27500…27520        75 74 65 73 2e 20 57 68 69 6c 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20 62 65 69 6e   ┆utes. While connections are bein┆
0x27520…27540        67 20 72 65 6d 6f 76 65 64 20 61 6e 64 20 0a 62 75 66 66 65 72 73 20 72 65 74 75 72 6e 65 64 20   ┆g removed and  buffers returned ┆
0x27540…27560        74 68 65 20 70 6f 72 74 20 69 73 20 73 61 69 64 20 74 6f 20 62 65 20 63 6c 6f 73 69 6e 67 2e 0d   ┆the port is said to be closing. ┆
0x27560…27580        0a 0d 0a 0d 0a b0 a1 31 31 2e 32 20 4c 65 74 74 65 72 73 0d 0a 0d 0a 54 68 65 20 6d 6f 73 74 20   ┆       11.2 Letters    The most ┆
0x27580…275a0        70 72 69 6d 69 74 69 76 65 20 66 6f 72 6d 20 6f 66 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 20   ┆primitive form of data transfer ┆
0x275a0…275c0        73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 0a 49 4d 43 20 69 73 20 61 20 6c 65 74 74 65   ┆supported by the  IMC is a lette┆
0x275c0…275e0        72 20 77 68 69 63 68 20 6d 61 79 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 20 64 69 72 65 63   ┆r which may be transferred direc┆
0x275e0…27600        74 6c 79 20 74 6f 20 61 20 0a 64 65 73 74 69 6e 61 74 69 6f 6e 20 70 6f 72 74 20 77 69 74 68 6f   ┆tly to a  destination port witho┆
0x27600…27620 (315,) 75 74 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 65 73 74 61 62 6c 69 73 68 69 6e 67 20   ┆ut the overhead of establishing ┆
0x27620…27640        61 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 77 69 74 68 6f 75 74 20 66 6c 6f 77 20 63 6f 6e 74   ┆a  connection, without flow cont┆
0x27640…27660        72 6f 6c 20 6f 72 20 65 6e 64 2d 74 6f 2d 65 6e 64 20 63 6f 6e 74 72 6f 6c 2c 20 61 6e 64 20 0a   ┆rol or end-to-end control, and  ┆
0x27660…27680        77 69 74 68 6f 75 74 20 74 68 65 20 67 75 61 72 61 6e 74 65 65 20 6f 66 20 64 65 6c 69 76 65 72   ┆without the guarantee of deliver┆
0x27680…276a0        79 2e 0d 0a 0d 0a 49 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 63 65 69 76 65 20 61 20 6c 65 74 74   ┆y.    In order to receive a lett┆
0x276a0…276c0        65 72 20 61 20 72 65 73 69 64 65 6e 74 20 6d 75 73 74 20 63 61 6c 6c 20 0a 72 65 63 65 69 76 65   ┆er a resident must call  receive┆
0x276c0…276e0        6c 65 74 74 65 72 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 72 65 63 65 69 76 65 6c 65 74 74   ┆letter:    PROCEDURE receivelett┆
0x276e0…27700        65 72 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66   ┆er(VAR p: port; VAR databuf: ref┆
0x27700…27720        65 72 65 6e 63 65 29 0d 0a 0d 0a 8c 83 c8 0a 77 68 65 72 65 20 70 20 69 73 20 74 68 65 20 72 65   ┆erence)        where p is the re┆
0x27720…27740        63 65 69 76 69 6e 67 20 70 6f 72 74 20 61 6e 64 20 64 61 74 61 62 75 66 20 64 65 73 69 67 6e 61   ┆ceiving port and databuf designa┆
0x27740…27760        74 65 73 20 74 68 65 20 0a 72 65 63 65 69 76 65 20 62 75 66 66 65 72 2e 20 49 66 20 74 68 65 70   ┆tes the  receive buffer. If thep┆
0x27760…27780        6f 72 74 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 72 65 63   ┆ort is closed or closing the rec┆
0x27780…277a0        65 69 76 65 20 0a 62 75 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 64 75   ┆eive  buffer is returned as a du┆
0x277a0…277c0        6d 6d 79 20 65 76 65 6e 74 20 61 6e 64 20 74 68 65 20 63 61 6c 6c 20 68 61 73 20 6e 6f 20 0a 66   ┆mmy event and the call has no  f┆
0x277c0…277e0        75 72 74 68 65 72 20 65 66 66 65 63 74 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 72 65 63   ┆urther effect. Otherwise the rec┆
0x277e0…27800        65 69 76 65 20 62 75 66 66 65 72 20 77 69 6c 6c 20 62 65 20 0a 6f 75 74 73 74 61 6e 64 69 6e 67   ┆eive buffer will be  outstanding┆
0x27800…27820 (316,) 20 75 6e 74 69 6c 20 61 20 6c 65 74 74 65 72 20 61 72 72 69 76 65 73 20 61 6e 64 20 74 68 65 6e   ┆ until a letter arrives and then┆
0x27820…27840        20 62 65 20 72 65 74 75 72 6e 65 64 20 61 73 20 0a 6c 65 74 74 65 72 5f 61 72 72 69 76 65 64 2e   ┆ be returned as  letter_arrived.┆
0x27840…27860        20 4c 65 74 74 65 72 73 20 61 72 65 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 66 69 74 20 69 6e   ┆ Letters are truncated to fit in┆
0x27860…27880        74 6f 20 61 20 72 65 63 65 69 76 65 20 0a 62 75 66 66 65 72 2c 20 69 66 20 6e 65 63 65 73 73 61   ┆to a receive  buffer, if necessa┆
0x27880…278a0        72 79 2e 0d 0a 0d 0a 41 20 6c 65 74 74 65 72 20 69 73 20 73 65 6e 74 20 62 79 20 6d 65 61 6e 73   ┆ry.    A letter is sent by means┆
0x278a0…278c0        20 6f 66 20 61 20 63 61 6c 6c 20 6f 66 20 73 65 6e 64 6c 65 74 74 65 72 3a 0d 0a 0d 0a 50 52 4f   ┆ of a call of sendletter:    PRO┆
0x278c0…278e0        43 45 44 55 52 45 20 73 65 6e 64 6c 65 74 74 65 72 28 49 4e 53 50 45 43 54 20 64 65 73 74 69 6e   ┆CEDURE sendletter(INSPECT destin┆
0x278e0…27900        61 74 69 6f 6e 3a 20 73 74 72 69 6e 67 3b 0d 0a 09 09 20 20 20 20 20 20 20 56 41 52 20 64 61 74   ┆ation: string;           VAR dat┆
0x27900…27920        61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 77 68 65 72 65 20 64 61 74 61 62 75   ┆abuf: reference)    where databu┆
0x27920…27940        66 20 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73 65 6e 64 20 62 75 66 66 65 72 20 63 6f 6e   ┆f designates the send buffer con┆
0x27940…27960        74 61 69 6e 69 6e 67 20 74 68 65 20 0a 6c 65 74 74 65 72 20 74 6f 20 62 65 20 73 65 6e 74 2c 20   ┆taining the  letter to be sent, ┆
0x27960…27980        61 6e 64 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73   ┆and the destination parameter is┆
0x27980…279a0        20 74 68 65 20 6e 61 6d 65 20 0a 6f 66 20 74 68 65 20 72 65 63 65 69 76 69 6e 67 20 70 6f 72 74   ┆ the name  of the receiving port┆
0x279a0…279c0        2e 0d 0a 0d 0a 57 68 65 6e 20 61 20 6c 65 74 74 65 72 20 69 73 20 73 65 6e 74 20 74 6f 77 61 72   ┆.    When a letter is sent towar┆
0x279c0…279e0        64 73 20 61 20 72 65 63 65 69 76 69 6e 67 20 72 65 73 69 64 65 6e 74 2c 20 74 68 65 20 73 65 6e   ┆ds a receiving resident, the sen┆
0x279e0…27a00        64 20 0a 62 75 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 6c 65 74 74 65 72 5f   ┆d  buffer is returned as letter_┆
0x27a00…27a20 (317,) 73 65 6e 74 2e 20 54 68 69 73 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 79 20 74 68 61 74 20 0a   ┆sent. This does not imply that  ┆
0x27a20…27a40        74 68 65 20 6c 65 74 74 65 72 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 62 65 20 64 65 6c 69   ┆the letter will actually be deli┆
0x27a40…27a60        76 65 72 65 64 2c 20 6f 6e 6c 79 20 74 68 61 74 20 61 6e 20 61 74 74 65 6d 70 74 20 0a 77 69 6c   ┆vered, only that an attempt  wil┆
0x27a60…27a80        6c 20 62 65 20 6d 61 64 65 2e 20 54 68 65 20 6c 65 74 74 65 72 20 6d 61 79 20 62 65 20 6c 6f 73   ┆l be made. The letter may be los┆
0x27a80…27aa0        74 20 64 75 65 20 74 6f 20 62 75 66 66 65 72 20 73 68 6f 72 74 61 67 65 20 0a 69 6e 20 74 68 65   ┆t due to buffer shortage  in the┆
0x27aa0…27ac0        20 49 4d 43 20 6e 65 74 77 6f 72 6b 2c 20 62 65 63 61 75 73 65 20 74 68 65 20 72 65 63 65 69 76   ┆ IMC network, because the receiv┆
0x27ac0…27ae0        65 72 20 68 61 73 20 6e 6f 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 0a 62 75 66 66 65 72 20 66 6f   ┆er has no outstanding  buffer fo┆
0x27ae0…27b00        72 20 61 72 72 69 76 69 6e 67 20 6c 65 74 74 65 72 73 2c 20 6f 72 20 62 65 63 61 75 73 65 20 74   ┆r arriving letters, or because t┆
0x27b00…27b20        68 65 20 70 6f 72 74 20 6e 61 6d 65 20 69 73 20 0a 75 6e 6b 6e 6f 77 6e 2e 0d 0a 0d 0a 49 66 20   ┆he port name is  unknown.    If ┆
0x27b20…27b40        74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 6c 65 74 74 65 72 20 69 73 20 67 72 65 61 74 65 72 20   ┆the size of a letter is greater ┆
0x27b40…27b60        74 68 61 6e 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 0a 64 65 70 65 6e 64 65 6e   ┆than an implementation  dependen┆
0x27b60…27b80        74 20 6d 61 78 69 6d 75 6d 2c 20 63 66 2e 20 6d 61 78 6c 65 74 74 65 72 73 69 7a 65 20 28 73 65   ┆t maximum, cf. maxlettersize (se┆
0x27b80…27ba0        63 74 69 6f 6e 20 31 31 2e 35 29 2c 20 69 74 20 6d 61 79 20 0a 62 65 20 74 72 75 6e 63 61 74 65   ┆ction 11.5), it may  be truncate┆
0x27ba0…27bc0        64 20 64 75 72 69 6e 67 20 74 72 61 6e 73 66 65 72 20 74 68 72 6f 75 67 68 20 74 68 65 20 49 4d   ┆d during transfer through the IM┆
0x27bc0…27be0        43 20 6e 65 74 77 6f 72 6b 2e 20 0a 4e 65 69 74 68 65 72 20 73 65 6e 64 65 72 20 6e 6f 72 20 72   ┆C network.  Neither sender nor r┆
0x27be0…27c00        65 63 65 69 76 65 72 20 77 69 6c 6c 20 62 65 20 6e 6f 74 69 66 69 65 64 20 69 6e 20 74 68 69 73   ┆eceiver will be notified in this┆
0x27c00…27c20 (318,) 20 63 61 73 65 2e 0d 0a 0d 0a 0d 0a b0 a1 31 31 2e 33 20 43 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a   ┆ case.        11.3 Connections  ┆
0x27c20…27c40        0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20 74 68 65 20 70 72 69 6e 63 69 70 61 6c 20   ┆  Connections are the principal ┆
0x27c40…27c60        6d 65 61 6e 73 20 6f 66 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 20 62 65 74 77 65 65 6e 20 0a   ┆means of data transfer between  ┆
0x27c60…27c80        72 65 73 69 64 65 6e 74 73 2e 20 41 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6a 6f 69 6e 73 20 74 77   ┆residents. A connection joins tw┆
0x27c80…27ca0        6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 73 2c 20 0a 65 61 63 68 20 63   ┆o connection end-points,  each c┆
0x27ca0…27cc0        6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 6e 20 6f 70 65 6e 20 70 6f 72 74 2e 20 42 65 66 6f 72 65   ┆ontained in an open port. Before┆
0x27cc0…27ce0        20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 0a 65 73 74 61 62 6c 69 73 68 65   ┆ a connection can be  establishe┆
0x27ce0…27d00        64 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 72 65 73 69 64 65 6e 74 73 20 6d 75 73 74 20   ┆d one of the two residents must ┆
0x27d00…27d20        6d 61 6b 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 0a 65 6e 64 2d 70 6f 69 6e 74 20 61 76 61   ┆make a connection  end-point ava┆
0x27d20…27d40        69 6c 61 62 6c 65 20 62 79 20 63 61 6c 6c 69 6e 67 20 67 65 74 63 6f 6e 6e 65 63 74 69 6f 6e 20   ┆ilable by calling getconnection ┆
0x27d40…27d60        28 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 0a 8c 83 c8 0a 31 31 2e 33 2e 32 29 2e 20 54 68   ┆(cf. subsection      11.3.2). Th┆
0x27d60…27d80        65 20 72 65 73 69 64 65 6e 74 20 77 68 69 63 68 20 63 61 6c 6c 73 20 67 65 74 63 6f 6e 6e 65 63   ┆e resident which calls getconnec┆
0x27d80…27da0        74 69 6f 6e 20 69 73 20 74 68 65 20 0a 70 61 73 73 69 76 65 20 70 61 72 74 20 69 6e 20 74 68 65   ┆tion is the  passive part in the┆
0x27da0…27dc0        20 65 73 74 61 62 6c 69 73 68 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e   ┆ establishment of the connection┆
0x27dc0…27de0        20 61 6e 64 20 6e 65 65 64 20 0a 6e 6f 74 20 6b 6e 6f 77 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ┆ and need  not know the name of ┆
0x27de0…27e00        74 68 65 20 72 65 6d 6f 74 65 20 70 6f 72 74 2e 20 54 68 65 20 6f 74 68 65 72 20 72 65 73 69 64   ┆the remote port. The other resid┆
0x27e00…27e20 (319,) 65 6e 74 20 69 73 20 0a 74 68 65 20 61 63 74 69 76 65 20 70 61 72 74 20 77 68 69 63 68 20 6d 75   ┆ent is  the active part which mu┆
0x27e20…27e40        73 74 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 72 65 71 75 65 73 74 20 74 68 61 74 20 61 20 0a   ┆st specifically request that a  ┆
0x27e40…27e60        63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 20 65 73 74 61 62 6c 69 73 68 65 64 20 62 79 20 63 61 6c   ┆connection be established by cal┆
0x27e60…27e80        6c 69 6e 67 20 63 6f 6e 6e 65 63 74 20 28 63 66 2e 20 73 75 62 73 65 63 74 69 6f 6e 20 0a 31 31   ┆ling connect (cf. subsection  11┆
0x27e80…27ea0        2e 33 2e 32 29 2e 0d 0a 0d 0a 41 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 77 69 74 68 69 6e 20 61 20   ┆.3.2).    An end-point within a ┆
0x27ea0…27ec0        70 6f 72 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 69 6e 20 61 20 72 65 71 75 65 73 74 20   ┆port is identified in a request ┆
0x27ec0…27ee0        63 61 6c 6c 20 0a 62 79 20 61 20 70 61 69 72 20 28 70 2c 20 69 6e 64 65 78 29 20 77 68 65 72 65   ┆call  by a pair (p, index) where┆
0x27ee0…27f00        20 70 20 69 73 20 61 20 70 6f 72 74 20 61 6e 64 20 69 6e 64 65 78 20 69 73 20 61 20 6e 75 6d 62   ┆ p is a port and index is a numb┆
0x27f00…27f20        65 72 20 0a 69 6e 20 74 68 65 20 72 61 6e 67 65 20 31 2e 2e 6e 2c 20 77 68 65 72 65 20 6e 20 65   ┆er  in the range 1..n, where n e┆
0x27f20…27f40        71 75 61 6c 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6e 6f 5f 6f 66 5f 63 6f 6e 73 20 0a 67   ┆quals the value of no_of_cons  g┆
0x27f40…27f60        69 76 65 6e 20 77 68 65 6e 20 74 68 65 20 70 6f 72 74 20 77 61 73 20 6f 70 65 6e 64 2e 20 54 68   ┆iven when the port was opend. Th┆
0x27f60…27f80        69 73 20 66 61 63 74 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20 74 68 65 20 0a 66 69 72 73 74 20   ┆is fact accounts for the  first ┆
0x27f80…27fa0        74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 61 6c 6c 20 74 68 65 20 72 71 75 65 73 74   ┆two parameters of all the rquest┆
0x27fa0…27fc0        20 72 6f 75 74 69 6e 65 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 0a 74 68 69 73 20 73 65 63   ┆ routines described in  this sec┆
0x27fc0…27fe0        74 69 6f 6e 20 28 65 78 63 65 70 74 20 72 65 63 65 69 76 65 61 6c 6c 29 2e 20 49 66 20 61 20 72   ┆tion (except receiveall). If a r┆
0x27fe0…28000        65 71 75 65 73 74 20 63 61 6c 6c 20 69 73 20 6d 61 64 65 20 0a 69 77 74 68 20 61 6e 20 69 6e 64   ┆equest call is made  iwth an ind┆
0x28000…28020 (320,) 65 78 20 70 61 72 61 6d 65 74 65 72 20 77 68 69 63 68 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   ┆ex parameter which is out of ran┆
0x28020…28040        67 65 20 61 20 66 61 75 6c 74 20 0a 6f 63 63 75 72 73 2e 0d 0a 0d 0a 4e 6f 74 69 63 65 20 74 68   ┆ge a fault  occurs.    Notice th┆
0x28040…28060        61 74 20 65 6e 64 2d 70 6f 69 6e 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 6c 6f 63 61 6c 20 74   ┆at end-point indices are local t┆
0x28060…28080        6f 20 61 20 70 6f 72 74 20 61 6e 64 20 6e 6f 74 20 0a 72 65 6c 61 74 65 64 20 74 6f 20 69 6e 64   ┆o a port and not  related to ind┆
0x28080…280a0        69 63 65 73 20 6f 72 20 65 76 65 6e 20 6b 6e 6f 77 6e 20 61 74 20 74 68 65 20 72 65 6d 6f 74 65   ┆ices or even known at the remote┆
0x280a0…280c0        20 65 6e 64 2d 70 6f 69 6e 74 73 20 6f 66 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 0d 0a   ┆ end-points of  connections.    ┆
0x280c0…280e0        45 61 63 68 20 6b 69 6e 64 20 6f 66 20 72 65 71 75 65 73 74 20 63 61 6c 6c 20 77 68 69 63 68 20   ┆Each kind of request call which ┆
0x280e0…28100        6d 61 79 20 62 65 20 6d 61 64 65 20 63 6f 6e 63 65 72 6e 69 6e 67 20 61 20 0a 63 6f 6e 6e 65 63   ┆may be made concerning a  connec┆
0x28100…28120        74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 69 73 20 6f 6e 6c 79 20 70 65 72 6d 69 74 74 65 64   ┆tion end-point is only permitted┆
0x28120…28140        20 70 72 6f 76 69 64 65 64 20 74 68 65 20 65 6e 64 2d 0a 70 6f 69 6e 74 20 69 73 20 69 6e 20 61   ┆ provided the end- point is in a┆
0x28140…28160        6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 73 74 61 74 65 2e 20 54 68 65 20 61 70 70 6c 69 63 61   ┆n appropriate state. The applica┆
0x28160…28180        62 6c 65 20 73 74 61 74 65 73 20 61 72 65 3a 0d 0a 0d 0a 66 72 65 65 3a 09 20 84 74 68 65 20 65   ┆ble states are:    free:   the e┆
0x28180…281a0        6e 64 2d 70 6f 69 6e 74 20 69 73 20 66 72 65 65 20 66 6f 72 20 75 73 65 20 62 79 20 63 61 6c 6c   ┆nd-point is free for use by call┆
0x281a0…281c0        69 6e 67 20 0a 19 8f 80 80 63 6f 6e 6e 65 63 74 20 6f 72 20 67 65 74 63 6f 6e 6e 65 63 74 69 6f   ┆ing      connect or getconnectio┆
0x281c0…281e0        6e 2e 20 46 72 65 65 20 69 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 0a 19 8f 80 80 73 74 61 74   ┆n. Free is the initial      stat┆
0x281e0…28200        65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 73 20 63 6f 6e 74 61   ┆e of connection end-points conta┆
0x28200…28220 (321,) 69 6e 65 64 20 69 6e 20 61 20 0a 19 8f 80 80 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 70 6f 72 74   ┆ined in a      newly opened port┆
0x28220…28240        2c 0d 0a 61 63 63 65 70 74 5f 72 65 6d 6f 74 65 3a 20 84 67 65 74 63 6f 6e 6e 65 63 74 69 6f 6e   ┆,  accept_remote:  getconnection┆
0x28240…28260        20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 65 6e 64 2d 70 6f 69 6e 74 20   ┆ has been called. The end-point ┆
0x28260…28280        0a 19 8f 80 80 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 69 73 20 73 74 61 74 65 20 77 68 65 6e 20   ┆     will leave this state when ┆
0x28280…282a0        61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 0a 19 8f 80 80 65 73 74 61 62 6c 69 73 68 65 64   ┆a connection is      established┆
0x282a0…282c0        20 66 72 6f 6d 20 61 20 72 65 6d 6f 74 65 20 70 6f 72 74 2c 20 6f 72 20 77 68 65 6e 20 0a 19 8f   ┆ from a remote port, or when    ┆
0x282c0…282e0        80 80 64 69 73 63 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c 6c 65 64 2c 0d 0a 63 6f 6e 6e 65 63 74   ┆  disconnect is called,  connect┆
0x282e0…28300        65 64 3a 09 20 84 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 72 20 69   ┆ed:   a connection has been or i┆
0x28300…28320        73 20 62 65 69 6e 67 20 0a 19 8f 80 80 65 73 74 61 62 6c 69 73 68 65 64 2c 20 61 6e 64 20 64 61   ┆s being      established, and da┆
0x28320…28340        74 61 20 74 72 61 6e 73 66 65 72 20 6d 61 79 20 74 61 6b 65 20 0a 19 8f 80 80 70 6c 61 63 65 2c   ┆ta transfer may take      place,┆
0x28340…28360        0d 0a 72 65 73 65 74 74 69 6e 67 3a 09 20 84 72 65 73 65 74 20 68 61 73 20 62 65 65 6e 20 63 61   ┆  resetting:   reset has been ca┆
0x28360…28380        6c 6c 65 64 20 77 68 69 6c 65 20 74 68 65 20 73 74 61 74 65 20 77 61 73 20 0a 19 8f 80 80 63 6f   ┆lled while the state was      co┆
0x28380…283a0        6e 6e 65 63 74 65 64 2e 20 54 68 65 20 73 74 61 74 65 20 77 69 6c 6c 20 72 65 76 65 72 74 20 74   ┆nnected. The state will revert t┆
0x283a0…283c0        6f 20 63 6f 6e 6e 65 63 74 65 64 20 0a 19 8f 80 80 77 68 65 6e 20 74 68 65 20 72 65 73 65 74 74   ┆o connected      when the resett┆
0x283c0…283e0        69 6e 67 20 70 72 6f 63 65 64 75 72 65 73 20 68 61 76 65 20 62 65 65 6e 20 0a 19 8f 80 80 63 6f   ┆ing procedures have been      co┆
0x283e0…28400        6d 70 6c 65 74 65 64 2c 0d 0a 8c 83 d4 0a 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 3a 20 84 64 69   ┆mpleted,      disconnecting:  di┆
0x28400…28420 (322,) 73 63 6f 6e 6e 65 63 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2c 20 61 6e 64 20 74 68   ┆sconnect has been called, and th┆
0x28420…28440        65 20 70 72 6f 63 65 73 73 20 0a 19 8f 80 80 6f 66 20 72 65 6d 6f 76 69 6e 67 20 61 20 70 72 65   ┆e process      of removing a pre┆
0x28440…28460        76 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 75 6e 64 65 72 20 0a 19 8f 80 80 77   ┆vious connection is under      w┆
0x28460…28480        61 79 2e 20 54 68 65 20 73 74 61 74 65 20 77 69 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20   ┆ay. The state will subsequently ┆
0x28480…284a0        62 65 63 6f 6d 65 20 66 72 65 65 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 65 6e 64 2d 70 6f 69 6e 74   ┆become free.    If the end-point┆
0x284a0…284c0        20 69 64 65 6e 74 69 66 69 63 61 74 69 6f 6e 20 28 70 2c 20 69 6e 64 65 78 29 20 67 69 76 65 6e   ┆ identification (p, index) given┆
0x284c0…284e0        20 69 6e 20 61 20 0a 72 65 71 75 65 73 74 20 63 61 6c 6c 20 69 73 20 73 75 63 68 20 74 68 61 74   ┆ in a  request call is such that┆
0x284e0…28500        20 74 68 65 20 70 6f 72 74 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 63 6c 6f 73 69 6e 67 2c 20   ┆ the port is closed or closing, ┆
0x28500…28520        6f 72 20 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 65 6e 64 2d 70 6f 69 6e 74 20 69   ┆or  the state of the end-point i┆
0x28520…28540        73 20 66 72 65 65 2c 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 68 69 63 68 20   ┆s free, the connection to which ┆
0x28540…28560        0a 74 68 65 20 63 61 6c 6c 20 70 65 72 74 61 69 6e 73 20 69 73 20 73 61 69 64 20 74 6f 20 62 65   ┆ the call pertains is said to be┆
0x28560…28580        20 a1 61 62 73 65 6e 74 e1 2e 20 54 68 69 73 20 70 68 65 6e 6f 6d 65 6e 6f 6e 20 6d 61 79 20 0a   ┆  absent . This phenomenon may  ┆
0x28580…285a0        6f 63 63 75 72 20 69 66 20 74 68 65 20 65 76 65 6e 74 20 77 68 69 63 68 20 69 6e 66 6f 72 6d 73   ┆occur if the event which informs┆
0x285a0…285c0        20 74 68 65 20 72 65 73 69 64 65 6e 74 20 61 62 6f 75 74 20 74 68 65 20 0a 72 65 6d 6f 76 61 6c   ┆ the resident about the  removal┆
0x285c0…285e0        20 6f 66 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 72 20 74 68 65 20 63 6c 6f 73 69 6e 67 20   ┆ of a connection or the closing ┆
0x285e0…28600        6f 66 20 61 20 70 6f 72 74 20 68 61 73 20 6e 6f 74 20 0a 62 65 65 6e 20 70 72 6f 63 65 73 73 65   ┆of a port has not  been processe┆
0x28600…28620 (323,) 64 20 61 74 20 74 68 65 20 74 69 6d 65 20 6f 66 20 63 61 6c 6c 2e 0d 0a 0d 0a 49 74 20 69 73 20   ┆d at the time of call.    It is ┆
0x28620…28640        61 20 67 65 6e 65 72 61 6c 20 72 75 6c 65 20 74 68 61 74 20 69 66 20 61 20 72 65 71 75 65 73 74   ┆a general rule that if a request┆
0x28640…28660        20 63 61 6c 6c 20 69 73 20 6d 61 64 65 20 0a 63 6f 6e 63 65 72 6e 69 6e 67 20 61 20 63 6f 6e 6e   ┆ call is made  concerning a conn┆
0x28660…28680        65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 77 68 69 63 68 20 69 73 20 69 6e 20 61 20 77   ┆ection end-point which is in a w┆
0x28680…286a0        72 6f 6e 67 20 73 74 61 74 65 20 0a 66 6f 72 20 74 68 65 20 63 61 6c 6c 20 61 20 66 61 75 6c 74   ┆rong state  for the call a fault┆
0x286a0…286c0        20 6f 63 63 75 72 73 2c 20 65 78 63 65 70 74 20 69 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f   ┆ occurs, except if the connectio┆
0x286c0…286e0        6e 20 69 73 20 0a 61 62 73 65 6e 74 2e 0d 0a 0d 0a 0d 0a b0 a1 31 31 2e 33 2e 31 20 43 6f 6e 6e   ┆n is  absent.        11.3.1 Conn┆
0x286e0…28700        65 63 74 69 6f 6e 20 41 64 6d 69 6e 69 73 74 72 61 74 69 6f 6e 0d 0a 0d 0a 41 20 63 6f 6e 6e 65   ┆ection Administration    A conne┆
0x28700…28720        63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 69 73 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c   ┆ction end-point is made availabl┆
0x28720…28740        65 20 66 6f 72 20 72 65 6d 6f 74 65 6c 79 20 0a 69 6e 69 74 69 61 74 65 64 20 63 6f 6e 6e 65 63   ┆e for remotely  initiated connec┆
0x28740…28760        74 69 6f 6e 20 65 73 74 61 62 6c 69 73 68 6d 65 6e 74 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20   ┆tion establishment by a call of ┆
0x28760…28780        0a 67 65 74 63 6f 6e 6e 65 63 74 69 6f 6e 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 67 65 74   ┆ getconnection:    PROCEDURE get┆
0x28780…287a0        63 6f 6e 6e 65 63 74 69 6f 6e 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31   ┆connection(VAR p: port; index: 1┆
0x287a0…287c0        2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 20 20 20 20 09 56 41 52 20 63 6f 6d 70 6c 2c 20 64 69 73   ┆..maxint;         VAR compl, dis┆
0x287c0…287e0        63 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 49 66 20 74 68 65 20 70 6f 72 74 20 69 73 20 63 6c   ┆c: reference)  If the port is cl┆
0x287e0…28800        6f 73 65 64 20 6f 72 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67   ┆osed or closing the buffer desig┆
0x28800…28820 (324,) 6e 61 74 65 64 20 62 79 20 0a 63 6f 6d 70 6c 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 61   ┆nated by  compl is returned as a┆
0x28820…28840        20 64 75 6d 6d 79 20 65 76 65 6e 74 20 61 6e 64 20 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69   ┆ dummy event and the buffer desi┆
0x28840…28860        67 6e 61 74 65 64 20 0a 62 79 20 64 69 73 63 20 61 73 20 61 20 64 69 73 63 6f 6e 6e 65 63 74 65   ┆gnated  by disc as a disconnecte┆
0x28860…28880        64 20 65 76 65 6e 74 20 77 69 74 68 20 72 65 61 73 6f 6e 5f 63 6c 6f 73 65 64 2c 20 61 6e 64 20   ┆d event with reason_closed, and ┆
0x28880…288a0        74 68 65 20 0a 63 61 6c 6c 20 68 61 73 20 6e 6f 20 66 75 72 74 68 65 72 20 65 66 66 65 63 74 2e   ┆the  call has no further effect.┆
0x288a0…288c0        20 4f 74 68 65 72 77 69 73 65 20 61 20 63 61 6c 6c 20 6f 66 20 0a 67 65 74 63 6f 6e 6e 65 63 74   ┆ Otherwise a call of  getconnect┆
0x288c0…288e0        69 6f 6e 20 69 73 20 6f 6e 6c 79 20 70 65 72 6d 69 74 74 65 64 20 69 66 20 74 68 65 20 73 74 61   ┆ion is only permitted if the sta┆
0x288e0…28900        74 65 20 6f 66 20 74 68 65 20 65 6e 64 2d 0a 70 6f 69 6e 74 20 69 73 20 66 72 65 65 3b 20 61 66   ┆te of the end- point is free; af┆
0x28900…28920        74 65 72 20 74 68 65 20 63 61 6c 6c 20 69 74 20 69 73 20 72 65 6d 6f 74 65 5f 61 63 63 70 65 74   ┆ter the call it is remote_accpet┆
0x28920…28940        2e 20 54 68 65 20 0a 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 63 6f 6d 70   ┆. The  buffer designated by comp┆
0x28940…28960        6c 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 0a 72 65 6d 6f 74 65 5f   ┆l will be returned as a  remote_┆
0x28960…28980        63 6f 6e 6e 65 63 74 20 65 76 65 6e 74 20 77 68 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   ┆connect event when a connection ┆
0x28980…289a0        68 61 73 20 62 65 65 6e 20 65 73 74 61 62 6c 69 73 68 65 64 2e 20 0a 54 68 65 20 62 75 66 66 65   ┆has been established.  The buffe┆
0x289a0…289c0        72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 64 69 73 63 20 77 69 6c 6c 20 62 65 20 74 68 65   ┆r designated by disc will be the┆
0x289c0…289e0        20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 62 75 66 66 65 72 20 6f 66 20 74 68 65 20 63 6f 6e   ┆ disconnected  buffer of the con┆
0x289e0…28a00        6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 2e 20 49 74 20 77 69 6c 6c 20 62 65 20 6f 75   ┆nection end-point. It will be ou┆
0x28a00…28a20 (325,) 74 73 74 61 6e 64 69 6e 67 20 0a 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 2d 70 6f 69 6e 74 20 62   ┆tstanding  until the end-point b┆
0x28a20…28a40        65 63 6f 6d 65 73 20 66 72 65 65 20 61 67 61 69 6e 2e 0d 0a 0d 0a 8c 83 c8 0a 49 6e 20 6f 72 64   ┆ecomes free again.        In ord┆
0x28a40…28a60        65 72 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 74   ┆er to establish a connection bet┆
0x28a60…28a80        77 65 65 6e 20 61 20 6c 6f 63 61 6c 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69   ┆ween a local  connection end-poi┆
0x28a80…28aa0        6e 74 20 61 6e 64 20 61 20 72 65 6d 6f 74 65 20 65 6e 64 2d 70 6f 69 6e 74 2c 20 77 68 69 63 68   ┆nt and a remote end-point, which┆
0x28aa0…28ac0        20 68 61 73 20 62 65 65 6e 20 0a 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 64 65 73   ┆ has been  made available as des┆
0x28ac0…28ae0        63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 61 20 72 65 73 69 64 65 6e 74 20 6d 75 73 74 20 63 61   ┆cribed above, a resident must ca┆
0x28ae0…28b00        6c 6c 20 0a 63 6f 6e 6e 65 63 74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 63 6f 6e 6e 65 63   ┆ll  connect:    PROCEDURE connec┆
0x28b00…28b20        74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b   ┆t(VAR p: port; index: 1..maxint;┆
0x28b20…28b40        0d 0a 09 09 20 20 20 20 56 41 52 20 63 6f 6d 70 6c 2c 20 64 69 73 63 3a 20 72 65 66 65 72 65 6e   ┆        VAR compl, disc: referen┆
0x28b40…28b60        63 65 3b 0d 0a 09 09 20 20 20 20 49 4e 53 50 45 43 54 20 72 65 6d 6f 74 65 5f 6e 61 6d 65 3a 20   ┆ce;        INSPECT remote_name: ┆
0x28b60…28b80        73 74 72 69 6e 67 3a 0d 0a 09 09 20 20 20 20 73 65 72 76 69 63 65 3a 20 63 6f 6e 6e 5f 73 65 72   ┆string:        service: conn_ser┆
0x28b80…28ba0        76 69 63 65 29 0d 0a 49 66 20 74 68 65 20 70 6f 72 74 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20   ┆vice)  If the port is closed or ┆
0x28ba0…28bc0        63 6c 6f 73 69 6e 67 20 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79   ┆closing the buffer designated by┆
0x28bc0…28be0        20 0a 63 6f 6d 70 6c 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 64 75 6d 6d 79 20 65   ┆  compl is returned as a dummy e┆
0x28be0…28c00        76 65 6e 74 20 61 6e 64 20 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 0a   ┆vent and the buffer designated  ┆
0x28c00…28c20 (326,) 62 79 20 64 69 73 63 20 61 73 20 61 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76 65 6e 74 20   ┆by disc as a disconnected event ┆
0x28c20…28c40        77 69 74 68 20 72 65 61 73 6f 6e 5f 63 6c 6f 73 65 64 2c 20 61 6e 64 20 74 68 65 20 0a 63 61 6c   ┆with reason_closed, and the  cal┆
0x28c40…28c60        6c 20 68 61 73 20 6e 6f 20 66 75 72 74 68 65 72 20 65 66 66 65 63 74 2e 20 4f 74 68 65 72 77 69   ┆l has no further effect. Otherwi┆
0x28c60…28c80        73 65 20 74 68 65 20 63 61 6c 6c 20 69 73 20 6f 6e 6c 79 20 0a 61 63 63 65 70 74 65 64 20 69 66   ┆se the call is only  accepted if┆
0x28c80…28ca0        20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 65 6e 64 2d   ┆ the state of the indicated end-┆
0x28ca0…28cc0        70 6f 69 6e 74 20 69 73 20 66 72 65 65 2e 0d 0a 0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 72   ┆point is free.    The value of r┆
0x28cc0…28ce0        65 6d 6f 74 65 5f 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 72 65   ┆emote_name is the name of the re┆
0x28ce0…28d00        6d 6f 74 65 20 70 6f 72 74 20 74 6f 20 0a 77 68 69 63 68 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e   ┆mote port to  which a connection┆
0x28d00…28d20        20 69 73 20 72 65 71 75 65 73 74 65 64 2e 20 49 66 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20   ┆ is requested. If the length of ┆
0x28d20…28d40        74 68 65 20 6e 61 6d 65 20 0a 69 73 20 67 72 65 61 74 68 65 72 20 74 68 61 6e 20 31 32 20 61 20   ┆the name  is greather than 12 a ┆
0x28d40…28d60        66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 28   ┆fault occurs. The state of the (┆
0x28d60…28d80        6c 6f 63 61 6c 29 20 0a 65 6e 64 2d 70 6f 69 6e 74 20 62 65 63 6f 6d 65 73 20 63 6f 6e 6e 65 63   ┆local)  end-point becomes connec┆
0x28d80…28da0        74 65 64 2c 20 69 2e 65 2e 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 20 63 61 6c 6c 73 20 6d 61   ┆ted, i.e. data transfer calls ma┆
0x28da0…28dc0        79 20 62 65 20 0a 6d 61 64 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67   ┆y be  made immediately following┆
0x28dc0…28de0        20 74 68 65 20 63 61 6c 6c 20 6f 66 20 63 6f 6e 6e 65 63 74 2e 20 54 68 69 73 20 64 6f 65 73 20   ┆ the call of connect. This does ┆
0x28de0…28e00        0a 6e 6f 74 20 69 6d 70 6c 79 20 74 68 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 70 61 74 68 20   ┆ not imply that the actual path ┆
0x28e00…28e20 (327,) 74 68 72 6f 75 67 68 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 68 61 73 20 0a 62 65 65   ┆through the IMC network has  bee┆
0x28e20…28e40        6e 20 65 73 74 61 62 6c 69 73 68 65 64 20 61 74 20 74 68 69 73 20 74 69 6d 65 2c 20 6e 6f 72 20   ┆n established at this time, nor ┆
0x28e40…28e60        69 6e 20 66 61 63 74 20 74 68 61 74 20 69 74 20 65 76 65 72 20 77 69 6c 6c 20 0a 62 65 2e 0d 0a   ┆in fact that it ever will  be.  ┆
0x28e60…28e80        0d 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 6f 6d   ┆  The value of the parameter com┆
0x28e80…28ea0        70 6c 20 6d 61 79 20 62 65 20 4e 49 4c 2c 20 69 2e 65 2e 20 74 68 65 20 0a 64 65 73 69 67 6e 61   ┆pl may be NIL, i.e. the  designa┆
0x28ea0…28ec0        74 65 64 20 62 75 66 66 65 72 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 49 66 20 69 74 20 69 73   ┆ted buffer is optional. If it is┆
0x28ec0…28ee0        20 70 72 65 73 65 6e 74 20 69 74 20 77 69 6c 6c 20 62 65 20 0a 75 73 65 64 20 74 6f 20 67 65 6e   ┆ present it will be  used to gen┆
0x28ee0…28f00        65 72 61 74 65 20 61 20 6c 6f 63 61 6c 5f 63 6f 6e 6e 65 63 74 20 65 76 65 6e 74 20 77 68 65 6e   ┆erate a local_connect event when┆
0x28f00…28f20        20 74 68 65 20 61 63 74 75 61 6c 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   ┆ the actual  connection has been┆
0x28f20…28f40        20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 65 73 74 61 62 6c 69 73 68 65 64 2e 20 54 68 69 73 20   ┆ successfully established. This ┆
0x28f40…28f60        65 76 65 6e 74 20 69 73 20 0a 70 75 72 65 6c 79 20 69 6e 66 6f 72 6d 61 74 69 76 65 20 61 6e 64   ┆event is  purely informative and┆
0x28f60…28f80        20 6e 6f 74 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 79 20 63 68 61 6e 67 65 20   ┆ not associated with any change ┆
0x28f80…28fa0        6f 66 20 0a 73 74 61 74 65 2e 20 49 66 20 74 68 65 20 6c 6f 63 61 6c 5f 63 6f 6e 6e 65 63 74 20   ┆of  state. If the local_connect ┆
0x28fa0…28fc0        62 75 66 66 65 72 20 69 73 20 70 72 65 73 65 6e 74 2c 20 62 75 74 20 0a 65 73 74 61 62 6c 69 73   ┆buffer is present, but  establis┆
0x28fc0…28fe0        68 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 61 69 6c 73 2c 20 74   ┆hment of the connection fails, t┆
0x28fe0…29000        68 65 20 62 75 66 66 65 72 20 77 69 6c 6c 20 62 65 20 0a 72 65 74 75 72 6e 65 64 20 61 73 20 61   ┆he buffer will be  returned as a┆
0x29000…29020 (328,) 20 64 75 6d 6d 79 20 65 76 65 6e 74 2e 0d 0a 0d 0a 54 68 65 20 62 75 66 66 65 72 20 64 65 73 69   ┆ dummy event.    The buffer desi┆
0x29020…29040        67 6e 61 74 65 64 20 62 79 20 64 69 73 63 20 69 73 20 74 68 65 20 64 69 73 63 6f 6e 6e 65 63 74   ┆gnated by disc is the disconnect┆
0x29040…29060        65 64 20 65 76 65 6e 74 20 0a 62 75 66 66 65 72 2e 20 49 74 20 77 69 6c 6c 20 62 65 20 6f 75 74   ┆ed event  buffer. It will be out┆
0x29060…29080        73 74 61 6e 64 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20   ┆standing until the state of the ┆
0x29080…290a0        0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 65 76 65 6e 74 75 61 6c 6c 79   ┆ connection end-point eventually┆
0x290a0…290c0        20 72 65 76 65 72 74 73 20 74 6f 20 66 72 65 65 20 6f 72 20 74 68 65 20 70 6f 72 74 20 0a 69 73   ┆ reverts to free or the port  is┆
0x290c0…290e0        20 63 6c 6f 73 65 64 2e 20 49 66 20 74 68 69 73 20 68 61 70 70 65 6e 73 20 62 65 63 61 75 73 65   ┆ closed. If this happens because┆
0x290e0…29100        20 69 74 20 74 75 72 6e 73 20 6f 75 74 20 74 6f 20 62 65 20 0a 69 6d 70 6f 73 73 69 62 6c 65 20   ┆ it turns out to be  impossible ┆
0x29100…29120        74 6f 20 65 73 74 61 62 6c 69 73 68 20 74 68 65 20 61 63 74 75 61 6c 20 63 6f 6e 6e 65 63 74 69   ┆to establish the actual connecti┆
0x29120…29140        6f 6e 20 74 68 65 20 72 65 61 73 6f 6e 20 0a 8c 83 c8 0a 77 69 6c 6c 20 62 65 20 65 69 74 68 65   ┆on the reason      will be eithe┆
0x29140…29160        72 20 72 65 61 73 6f 6e 5f 6e 61 6d 65 2c 20 69 66 20 61 20 70 6f 72 74 20 77 69 74 68 20 74 68   ┆r reason_name, if a port with th┆
0x29160…29180        65 20 73 70 65 63 69 66 69 65 64 20 0a 6e 61 6d 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 66   ┆e specified  name could not be f┆
0x29180…291a0        6f 75 6e 64 2c 20 6f 72 20 72 65 61 73 6f 6e 5f 72 65 73 6f 75 72 63 65 2c 20 69 66 20 74 68 65   ┆ound, or reason_resource, if the┆
0x291a0…291c0        20 0a 6e 65 63 65 73 73 61 72 79 20 72 65 73 6f 75 72 63 65 73 20 77 65 72 65 20 6e 6f 74 20 61   ┆  necessary resources were not a┆
0x291c0…291e0        76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 6f 72 20 0a   ┆vailable in the IMC network or  ┆
0x291e0…29200        61 74 20 74 68 65 20 72 65 6d 6f 74 65 20 70 6f 72 74 20 28 6e 6f 20 65 6e 64 2d 70 6f 69 6e 74   ┆at the remote port (no end-point┆
0x29200…29220 (329,) 20 77 69 74 68 20 73 74 61 74 65 20 61 63 63 65 70 74 5f 72 65 6d 6f 74 65 29 2e 0d 0a 0d 0a 54   ┆ with state accept_remote).    T┆
0x29220…29240        68 65 20 73 65 72 76 69 63 65 20 70 61 72 61 6d 65 74 65 72 20 73 65 6c 65 63 74 73 20 74 68 65   ┆he service parameter selects the┆
0x29240…29260        20 73 65 72 76 69 63 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f   ┆ service class of the  connectio┆
0x29260…29280        6e 2e 20 54 77 6f 20 73 65 72 76 69 63 65 20 63 6c 61 73 73 65 73 20 61 72 65 20 64 65 66 69 6e   ┆n. Two service classes are defin┆
0x29280…292a0        65 64 3a 20 6e 6f 72 6d 61 6c 20 61 6e 64 20 0a 68 69 67 68 2e 20 54 68 65 20 74 72 65 61 74 6d   ┆ed: normal and  high. The treatm┆
0x292a0…292c0        65 6e 74 20 6f 66 20 73 65 72 76 69 63 65 20 63 6c 61 73 73 65 73 20 64 65 70 65 6e 64 73 20 6f   ┆ent of service classes depends o┆
0x292c0…292e0        6e 20 74 68 65 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 49 4d 43   ┆n the  implementation of the IMC┆
0x292e0…29300        20 6e 65 74 77 6f 72 6b 2e 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 73 65 72 76 69 63   ┆ network. The type of the servic┆
0x29300…29320        65 20 0a 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 65   ┆e  parameter is the predefined e┆
0x29320…29340        6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 09 63 6f 6e 6e 5f 73 65 72 76 69 63 65 3d 20   ┆numeration type   conn_service= ┆
0x29340…29360        28 63 73 5f 6e 6f 72 6d 61 6c 2c 20 63 73 5f 68 69 67 68 29 2e 0d 0a 0d 0a 41 20 63 6f 6e 6e 65   ┆(cs_normal, cs_high).    A conne┆
0x29360…29380        63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 6d 61 79 20 61 6c 77 61 79 73 20 62 65 20 66 72   ┆ction end-point may always be fr┆
0x29380…293a0        65 65 64 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 0a 64 69 73 63 6f 6e 6e 65 63 74 3a 0d 0a 0d   ┆eed by a call of  disconnect:   ┆
0x293a0…293c0        0a 50 52 4f 43 45 44 55 52 45 20 64 69 73 63 6f 6e 6e 65 63 74 28 56 41 52 20 70 3a 20 70 6f 72   ┆ PROCEDURE disconnect(VAR p: por┆
0x293c0…293e0        74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 0d 0a 0d 0a 49 66 20 74 68 65 20 69   ┆t; index: 1..maxint)    If the i┆
0x293e0…29400        6e 64 69 63 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 62 73 65 6e 74 20 6f 72   ┆ndicated connection is absent or┆
0x29400…29420 (330,) 20 69 66 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e   ┆ if the state of the  connection┆
0x29420…29440        20 65 6e 64 2d 70 6f 69 6e 74 20 69 73 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 74 68 65 20   ┆ end-point is disconnecting the ┆
0x29440…29460        63 61 6c 6c 20 68 61 73 20 6e 6f 20 0a 65 66 66 65 63 74 2e 20 4f 74 68 65 72 77 69 73 65 20 69   ┆call has no  effect. Otherwise i┆
0x29460…29480        66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 69 73 20 65 6e   ┆f the connection end-point is en┆
0x29480…294a0        67 61 67 65 64 20 69 6e 20 0a 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 2e 65 2e 20 69 66 20   ┆gaged in  a connection, i.e. if ┆
0x294a0…294c0        69 74 73 20 73 74 61 74 65 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 6f 72 20 72 65 73 65 74 74   ┆its state is connected or resett┆
0x294c0…294e0        69 6e 67 2c 20 0a 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 72 65 6d   ┆ing,  the connection will be rem┆
0x294e0…29500        6f 76 65 64 2e 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 64 6f 6e 65 20 0a 67 72 61 63 65 66 75   ┆oved. This will be done  gracefu┆
0x29500…29520        6c 6c 79 2c 20 69 2e 65 2e 20 61 6c 6c 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 73 20 66 6f 72   ┆lly, i.e. all data transfers for┆
0x29520…29540        20 77 68 69 63 68 20 63 72 65 64 69 74 20 69 73 20 0a 61 76 61 69 6c 61 62 6c 65 20 61 72 65 20   ┆ which credit is  available are ┆
0x29540…29560        63 6f 6d 70 6c 65 74 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 6f   ┆completed before the remaining o┆
0x29560…29580        75 73 74 61 6e 64 69 6e 67 20 0a 62 75 66 66 65 72 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e   ┆ustanding  buffers are returned.┆
0x29580…295a0        20 41 74 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   ┆ At both ends of the connection ┆
0x295a0…295c0        61 6c 6c 20 0a 6f 75 74 73 74 61 6e 64 69 6e 67 20 62 75 66 66 65 72 73 20 65 63 65 70 74 20 74   ┆all  outstanding buffers ecept t┆
0x295c0…295e0        68 65 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76 65 6e 74 20 62 75 66 66 65 72 73 20 61 72   ┆he disconnected event buffers ar┆
0x295e0…29600        65 20 0a 74 68 65 6e 20 72 65 74 75 72 6e 65 64 20 61 73 20 64 75 6d 6d 79 20 65 76 65 6e 74 73   ┆e  then returned as dummy events┆
0x29600…29620 (331,) 2e 20 57 68 69 6c 65 20 74 68 69 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 74 68 65 20 0a 73 74   ┆. While this takes place the  st┆
0x29620…29640        61 74 65 20 6f 66 20 74 68 65 20 28 6c 6f 63 61 6c 29 20 65 6e 64 2d 70 6f 69 6e 74 20 69 73 20   ┆ate of the (local) end-point is ┆
0x29640…29660        64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 2e 20 46 69 6e 61 6c 6c 79 20 74 68 65 20 0a 64 69 73 63   ┆disconnecting. Finally the  disc┆
0x29660…29680        6f 6e 6e 65 63 74 65 64 20 65 76 65 6e 74 73 20 6f 63 63 75 72 20 28 61 74 20 62 6f 74 68 20 65   ┆onnected events occur (at both e┆
0x29680…296a0        6e 64 73 29 20 77 69 74 68 20 72 65 61 73 6f 6e 5f 6f 6b 2c 20 61 6e 64 20 0a 74 68 65 20 73 74   ┆nds) with reason_ok, and  the st┆
0x296a0…296c0        61 74 65 20 62 65 63 6f 6d 65 73 20 66 72 65 65 2e 0d 0a 0d 0a 49 66 20 74 68 65 20 73 74 61 74   ┆ate becomes free.    If the stat┆
0x296c0…296e0        65 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 69 73   ┆e of the connection end-point is┆
0x296e0…29700        20 61 63 63 65 70 74 5f 72 65 6d 6f 74 65 20 0a 77 68 65 6e 20 64 69 73 63 6f 6e 6e 65 63 74 20   ┆ accept_remote  when disconnect ┆
0x29700…29720        69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 72 65 6d 6f 74 65 5f 63 6f 6e 6e 65 63 74 20 62 75 66   ┆is called the remote_connect buf┆
0x29720…29740        66 65 72 20 77 69 6c 6c 20 62 65 20 0a 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 64 75 6d 6d 79   ┆fer will be  returned as a dummy┆
0x29740…29760        20 65 76 65 6e 74 2c 20 74 68 65 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76 65 6e 74 20 77   ┆ event, the disconnected event w┆
0x29760…29780        69 6c 6c 20 6f 63 63 75 72 20 0a 77 69 74 68 20 72 65 61 73 6f 6e 5f 6f 6b 2c 20 61 6e 64 20 74   ┆ill occur  with reason_ok, and t┆
0x29780…297a0        68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 65 6e 64 2d 70 6f 69 6e 74 20 62 65 63 6f 6d 65   ┆he state of the end-point become┆
0x297a0…297c0        73 20 66 72 65 65 2e 0d 0a 0d 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 20 66 6f 72 20 72   ┆s free.    The only reason for r┆
0x297c0…297e0        65 6d 6f 76 61 6c 20 6f 66 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73   ┆emoval of a connection which has┆
0x297e0…29800        20 6e 6f 74 20 0a 62 65 65 6e 20 64 69 73 63 75 73 73 65 64 20 61 62 6f 76 65 20 28 74 68 69 73   ┆ not  been discussed above (this┆
0x29800…29820 (332,) 20 69 6e 63 6c 75 64 65 73 20 72 65 6d 6f 76 61 6c 20 77 68 65 6e 20 61 20 70 6f 72 74 20 69 73   ┆ includes removal when a port is┆
0x29820…29840        20 0a 8c 83 c8 0a 63 6c 6f 73 65 64 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 31 31 2e 31 29 20   ┆      closed, cf. section 11.1) ┆
0x29840…29860        69 73 20 66 61 69 6c 75 72 65 20 69 6e 20 73 6f 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 6f 66 20   ┆is failure in some component of ┆
0x29860…29880        0a 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 2e 20 49 66 20 61 20 63 6f 6e 6e 65 63 74 69 6f   ┆ the IMC network. If a connectio┆
0x29880…298a0        6e 20 69 73 20 62 72 6f 6b 65 6e 20 66 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e 20 0a 74 68 65   ┆n is broken for this reason  the┆
0x298a0…298c0        20 64 69 73 63 6f 6e 6e 65 63 74 65 64 20 65 76 65 6e 74 20 77 69 6c 6c 20 6f 63 63 75 72 20 77   ┆ disconnected event will occur w┆
0x298c0…298e0        69 74 68 20 72 65 61 73 6f 6e 5f 6e 65 74 77 6f 72 6b 20 61 66 74 65 72 20 0a 61 6c 6c 20 6f 74   ┆ith reason_network after  all ot┆
0x298e0…29900        68 65 72 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 62 75 66 66 65 72 73 20 68 61 76 65 20 62 65 65   ┆her outstanding buffers have bee┆
0x29900…29920        6e 20 72 65 74 75 72 6e 65 64 20 61 73 20 64 75 6d 6d 79 20 0a 65 76 65 6e 74 73 2e 0d 0a 0d 0a   ┆n returned as dummy  events.    ┆
0x29920…29940        0d 0a b0 a1 31 31 2e 33 2e 32 20 43 6f 6e 6e 65 63 74 69 6f 6e 2d 62 61 73 65 64 20 44 61 74 61   ┆    11.3.2 Connection-based Data┆
0x29940…29960        20 54 72 61 6e 73 66 65 72 0d 0a 0d 0a 54 68 65 20 72 6f 75 74 69 6e 65 73 20 66 6f 72 20 64 61   ┆ Transfer    The routines for da┆
0x29960…29980        74 61 20 74 72 61 6e 73 66 65 72 20 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 6e 64 20 66   ┆ta transfer on connections and f┆
0x29980…299a0        6f 72 20 0a 63 6f 6e 74 72 6f 6c 20 6f 66 20 64 61 74 61 20 62 75 66 66 65 72 73 3a 20 73 65 6e   ┆or  control of data buffers: sen┆
0x299a0…299c0        64 2c 20 72 65 63 65 69 76 65 2c 20 72 65 63 65 69 76 65 61 6c 6c 2c 20 0a 67 65 74 63 72 65 64   ┆d, receive, receiveall,  getcred┆
0x299c0…299e0        69 74 2c 20 72 65 73 65 74 2c 20 61 6e 64 20 67 65 74 72 65 73 65 74 2c 20 61 72 65 20 64 65 73   ┆it, reset, and getreset, are des┆
0x299e0…29a00        63 72 69 62 65 64 20 69 6e 20 74 68 69 73 20 0a 73 75 62 73 65 63 74 69 6f 6e 2e 0d 0a 0d 0a 54   ┆cribed in this  subsection.    T┆
0x29a00…29a20 (333,) 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 20 68 6f 6c 64 73 20 66 6f 72 20 63 61 6c 6c   ┆he following rule holds for call┆
0x29a20…29a40        73 20 6f 66 20 61 6c 6c 20 74 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 0a 65 78 63 65 70 74 20   ┆s of all these routines  except ┆
0x29a40…29a60        72 65 63 65 69 76 65 61 6c 6c 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e   ┆receiveall: If the connection in┆
0x29a60…29a80        64 69 63 61 74 65 64 20 62 79 20 74 68 65 20 66 69 72 73 74 20 0a 74 77 6f 20 70 61 72 61 6d 65   ┆dicated by the first  two parame┆
0x29a80…29aa0        74 65 72 73 20 69 73 20 61 62 73 65 6e 74 20 74 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e   ┆ters is absent the buffer design┆
0x29aa0…29ac0        61 74 65 64 20 62 79 20 74 68 65 20 74 68 69 72 64 20 0a 70 61 72 61 6d 65 74 65 72 20 69 73 20   ┆ated by the third  parameter is ┆
0x29ac0…29ae0        72 65 74 75 72 6e 65 64 20 61 73 20 61 20 64 75 6d 6d 79 20 65 76 65 6e 74 20 61 6e 64 20 74 68   ┆returned as a dummy event and th┆
0x29ae0…29b00        65 20 63 61 6c 6c 20 68 61 73 20 6e 6f 20 0a 66 75 72 74 68 65 72 20 65 66 66 65 63 74 2e 20 4f   ┆e call has no  further effect. O┆
0x29b00…29b20        74 68 65 72 77 69 73 65 20 74 68 65 20 63 61 6c 6c 20 69 73 20 6f 6e 6c 79 20 70 65 72 6d 69 74   ┆therwise the call is only permit┆
0x29b20…29b40        74 65 64 20 69 66 20 74 68 65 20 0a 73 74 61 74 65 20 6f 66 20 74 68 65 20 65 6e 64 2d 70 6f 69   ┆ted if the  state of the end-poi┆
0x29b40…29b60        6e 74 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 28 6f 72 20 72 65 73 65 74 74 69 6e 67 20 69 6e   ┆nt is connected (or resetting in┆
0x29b60…29b80        20 74 68 65 20 0a 63 61 73 65 20 6f 66 20 67 65 74 72 65 73 65 74 29 2e 0d 0a 0d 0a 41 20 72 65   ┆ the  case of getreset).    A re┆
0x29b80…29ba0        63 65 69 76 65 20 62 75 66 66 65 72 20 69 73 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 66   ┆ceive buffer is made available f┆
0x29ba0…29bc0        6f 72 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 0a 62 79 20 61 20 63   ┆or a specific connection  by a c┆
0x29bc0…29be0        61 6c 6c 20 6f 66 20 72 65 63 65 69 76 65 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 72 65 63   ┆all of receive:    PROCEDURE rec┆
0x29be0…29c00        65 69 76 65 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69   ┆eive(VAR p: port; index: 1..maxi┆
0x29c00…29c20 (334,) 6e 74 3b 0d 0a 09 09 20 20 20 20 56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63   ┆nt;        VAR databuf: referenc┆
0x29c20…29c40        65 29 0d 0a 0d 0a 54 68 65 20 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 62 65 63 6f   ┆e)    The designated buffer beco┆
0x29c40…29c60        6d 65 73 20 61 6e 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 72 65 63 65 69 76 65 20 62 75 66 66 65   ┆mes an outstanding receive buffe┆
0x29c60…29c80        72 20 0a 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 41 74 20 74 68 65 20 72 65   ┆r  for the connection. At the re┆
0x29c80…29ca0        6d 6f 74 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 65 20 0a   ┆mote end of the connection the  ┆
0x29ca0…29cc0        63 61 6c 6c 20 6d 61 79 20 63 61 75 73 65 20 65 69 74 68 65 72 20 61 20 63 72 65 64 69 74 20 6f   ┆call may cause either a credit o┆
0x29cc0…29ce0        72 20 61 20 64 61 74 61 5f 73 65 6e 74 20 65 76 65 6e 74 20 74 6f 20 0a 6f 63 63 75 72 2e 20 49   ┆r a data_sent event to  occur. I┆
0x29ce0…29d00        66 20 62 6f 74 68 20 6b 69 6e 64 73 20 6f 66 20 65 76 65 6e 74 20 62 75 66 66 65 72 20 61 72 65   ┆f both kinds of event buffer are┆
0x29d00…29d20        20 6f 75 74 73 74 61 6e 64 69 6e 67 20 6f 6e 6c 79 20 0a 74 68 65 20 64 61 74 61 5f 73 65 6e 74   ┆ outstanding only  the data_sent┆
0x29d20…29d40        20 65 76 65 6e 74 20 77 69 6c 6c 20 6f 63 63 75 72 2e 20 57 68 65 6e 20 61 20 75 6e 69 74 20 6f   ┆ event will occur. When a unit o┆
0x29d40…29d60        66 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 0a 74 72 61 6e 73 66 65 72 72 65 64 20 66 72 6f   ┆f data has been  transferred fro┆
0x29d60…29d80        6d 20 61 20 72 65 6d 6f 74 65 20 73 65 6e 64 20 62 75 66 66 65 72 20 74 6f 20 74 68 65 20 72 65   ┆m a remote send buffer to the re┆
0x29d80…29da0        63 65 69 76 65 20 62 75 66 66 65 72 20 0a 74 68 65 20 6c 61 74 74 65 72 20 69 73 20 72 65 74 75   ┆ceive buffer  the latter is retu┆
0x29da0…29dc0        72 6e 65 64 20 61 73 20 61 20 64 61 74 61 5f 61 72 72 69 76 65 64 20 65 76 65 6e 74 2e 20 49 66   ┆rned as a data_arrived event. If┆
0x29dc0…29de0        20 0a 6e 65 63 65 73 73 61 72 79 2c 20 74 68 65 20 72 65 63 65 69 76 65 64 20 64 61 74 61 20 75   ┆  necessary, the received data u┆
0x29de0…29e00        6e 69 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 66 69 74 20 69 6e 74 6f 20 0a 74 68   ┆nit is truncated to fit into  th┆
0x29e00…29e20 (335,) 65 20 64 61 74 61 20 61 72 65 61 20 6f 66 20 74 68 65 20 72 65 63 65 69 76 65 20 62 75 66 66 65   ┆e data area of the receive buffe┆
0x29e20…29e40        72 2c 20 61 6e 64 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 0a 65 76 65 6e 74 20 77   ┆r, and in this case the  event w┆
0x29e40…29e60        69 6c 6c 20 62 65 20 64 61 74 61 5f 6f 76 65 72 72 75 6e 2e 0d 0a 0d 0a 8c 83 d4 0a 49 66 20 74   ┆ill be data_overrun.        If t┆
0x29e60…29e80        68 65 20 67 65 6e 65 72 61 6c 20 72 65 63 65 69 76 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e   ┆he general receive feature is en┆
0x29e80…29ea0        61 62 6c 65 64 20 66 6f 72 20 61 20 70 6f 72 74 20 28 63 66 2e 20 0a 74 68 65 20 72 63 76 5f 61   ┆abled for a port (cf.  the rcv_a┆
0x29ea0…29ec0        6c 6c 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 6f 70 65 6e 70 6f 72 74 2c 20 73 65 63 74 69 6f   ┆ll parameter of openport, sectio┆
0x29ec0…29ee0        6e 20 31 31 2e 31 29 20 61 20 67 65 6e 65 72 61 6c 20 0a 72 65 63 65 69 76 65 20 62 75 66 66 65   ┆n 11.1) a general  receive buffe┆
0x29ee0…29f00        72 20 66 6f 72 20 74 68 65 20 77 68 6f 6c 65 20 70 6f 72 74 2c 20 6e 6f 74 20 64 65 64 69 63 61   ┆r for the whole port, not dedica┆
0x29f00…29f20        74 65 64 20 74 6f 20 61 20 0a 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c   ┆ted to a  particular connection,┆
0x29f20…29f40        20 6d 61 79 20 62 65 20 64 65 6c 69 76 65 72 65 64 20 74 6f 20 74 68 65 20 49 4d 43 20 62 79 20   ┆ may be delivered to the IMC by ┆
0x29f40…29f60        61 20 63 61 6c 6c 20 0a 6f 66 20 72 65 63 65 69 76 65 61 6c 6c 3a 0d 0a 0d 0a 50 52 4f 43 45 44   ┆a call  of receiveall:    PROCED┆
0x29f60…29f80        55 52 45 20 72 65 63 65 69 76 65 61 6c 6c 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 56 41 52 20   ┆URE receiveall(VAR p: port; VAR ┆
0x29f80…29fa0        64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 49 66 20 74 68 65 20 70 6f   ┆databuf: reference)    If the po┆
0x29fa0…29fc0        72 74 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 64 65 73 69   ┆rt is closed or closing the desi┆
0x29fc0…29fe0        67 6e 61 74 65 64 20 62 75 66 66 65 72 20 69 73 20 0a 72 65 74 75 72 6e 65 64 20 61 73 20 61 20   ┆gnated buffer is  returned as a ┆
0x29fe0…2a000        64 75 6d 6d 79 20 65 76 65 6e 74 20 61 6e 64 20 74 68 65 20 63 61 6c 6c 20 68 61 73 20 6e 6f 74   ┆dummy event and the call has not┆
0x2a000…2a020 (336,) 20 66 75 72 74 68 65 72 20 0a 65 66 66 65 63 74 2e 20 49 66 20 74 68 65 20 67 65 6e 65 72 61 6c   ┆ further  effect. If the general┆
0x2a020…2a040        20 72 65 63 65 69 76 65 20 66 65 61 74 75 72 65 20 69 73 20 6e 6f 74 20 65 6e 61 62 6c 65 64 20   ┆ receive feature is not enabled ┆
0x2a040…2a060        61 20 0a 66 61 75 6c 74 20 6f 63 63 75 72 73 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 62   ┆a  fault occurs. Otherwise the b┆
0x2a060…2a080        75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 0a 67 65   ┆uffer becomes an outstanding  ge┆
0x2a080…2a0a0        6e 65 72 61 6c 20 72 65 63 65 69 76 65 20 62 75 66 66 65 72 2e 20 49 74 20 6d 61 79 20 62 65 20   ┆neral receive buffer. It may be ┆
0x2a0a0…2a0c0        75 73 65 64 20 66 6f 72 20 61 6e 79 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 0a 77 69 74 68 69 6e 20   ┆used for any connection  within ┆
0x2a0c0…2a0e0        74 68 65 20 70 6f 72 74 2e 20 49 74 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 62 65 20   ┆the port. It will eventually be ┆
0x2a0e0…2a100        72 65 74 75 72 6e 65 64 20 61 73 20 0a 64 61 74 61 5f 61 72 72 69 76 65 64 20 6f 72 20 64 61 74   ┆returned as  data_arrived or dat┆
0x2a100…2a120        61 5f 6f 76 65 72 72 75 6e 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20   ┆a_overrun, depending on whether ┆
0x2a120…2a140        74 68 65 20 0a 72 65 63 65 69 76 65 64 20 64 61 74 61 20 75 6e 69 74 20 68 61 64 20 74 6f 20 62   ┆the  received data unit had to b┆
0x2a140…2a160        65 20 74 72 61 6e 63 61 74 65 64 20 74 6f 20 66 69 74 20 69 6e 74 6f 20 74 68 65 20 0a 72 65 63   ┆e trancated to fit into the  rec┆
0x2a160…2a180        65 69 76 65 20 64 61 74 61 20 61 72 65 61 2e 20 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ┆eive data area. The index of the┆
0x2a180…2a1a0        20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 74 6f 20 0a 77 68 69 63 68 20   ┆ connection end-point to  which ┆
0x2a1a0…2a1c0        74 68 65 20 64 61 74 61 20 62 65 6c 6f 6e 67 20 77 69 6c 6c 20 62 65 20 61 6e 20 61 74 74 72 69   ┆the data belong will be an attri┆
0x2a1c0…2a1e0        62 75 74 65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 0a 28 63 66 2e 20 73 65 63 74 69 6f 6e   ┆bute of the buffer  (cf. section┆
0x2a1e0…2a200        20 31 31 2e 34 29 2e 20 49 6e 20 63 61 73 65 20 6f 66 20 6e 65 74 77 6f 72 6b 20 66 61 69 6c 75   ┆ 11.4). In case of network failu┆
0x2a200…2a220 (337,) 72 65 20 77 68 69 63 68 20 63 61 75 73 65 73 20 0a 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e   ┆re which causes  a connection on┆
0x2a220…2a240        20 74 68 65 20 70 6f 72 74 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 74 68 65 20 62 75 66 66   ┆ the port to be removed the buff┆
0x2a240…2a260        65 72 20 6d 61 79 20 62 65 20 0a 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 64 75 6d 6d 79 20 65   ┆er may be  returned as a dummy e┆
0x2a260…2a280        76 65 6e 74 2e 0d 0a 0d 0a 41 20 73 65 6e 64 20 62 75 66 66 65 72 20 63 6f 6e 74 61 69 6e 69 6e   ┆vent.    A send buffer containin┆
0x2a280…2a2a0        67 20 61 20 75 6e 69 74 20 6f 66 20 64 61 74 61 20 74 6f 20 62 65 20 73 65 6e 74 20 6f 6e 20 61   ┆g a unit of data to be sent on a┆
0x2a2a0…2a2c0        20 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 64 65 6c 69 76 65   ┆  specified connection is delive┆
0x2a2c0…2a2e0        72 65 64 20 74 6f 20 74 68 65 20 49 4d 43 20 6e 65 74 77 6f 72 6b 20 62 79 20 61 20 0a 63 61 6c   ┆red to the IMC network by a  cal┆
0x2a2e0…2a300        6c 20 6f 66 20 73 65 6e 64 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 73 65 6e 64 28 56 41 52   ┆l of send:    PROCEDURE send(VAR┆
0x2a300…2a320        20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 20   ┆ p: port; index: 1..maxint;     ┆
0x2a320…2a340        56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 54 68 65 20 64   ┆VAR databuf: reference)    The d┆
0x2a340…2a360        65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 75 74 73   ┆esignated buffer becomes an outs┆
0x2a360…2a380        74 61 6e 64 69 6e 67 20 73 65 6e 64 20 62 75 66 66 65 72 2e 20 49 66 20 0a 61 20 72 65 63 65 69   ┆tanding send buffer. If  a recei┆
0x2a380…2a3a0        76 65 20 62 75 66 66 65 72 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 61 74 20 74 68 65 20 72 65   ┆ve buffer is available at the re┆
0x2a3a0…2a3c0        6d 6f 74 65 20 65 6e 64 20 6f 72 20 77 68 65 6e 20 6f 6e 65 20 0a 62 65 63 6f 6d 65 73 20 61 76   ┆mote end or when one  becomes av┆
0x2a3c0…2a3e0        61 69 6c 61 62 6c 65 20 28 63 61 6c 6c 20 6f 66 20 72 65 63 65 69 76 65 20 6f 72 20 72 65 63 65   ┆ailable (call of receive or rece┆
0x2a3e0…2a400        69 76 65 61 6c 6c 29 20 74 68 65 20 0a 69 6e 64 69 63 61 74 65 64 20 64 61 74 61 20 75 6e 69 74   ┆iveall) the  indicated data unit┆
0x2a400…2a420 (338,) 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 72 65 63 65 69 76 65 20 64   ┆ is transferred to the receive d┆
0x2a420…2a440        61 74 61 20 61 72 65 61 2e 20 0a 54 68 65 6e 20 74 68 65 20 73 65 6e 64 20 62 75 66 66 65 72 20   ┆ata area.  Then the send buffer ┆
0x2a440…2a460        69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 64 61 74 61 5f 73 65 6e 74 2c 20 61 6e 64 20 74 68   ┆is returned as data_sent, and th┆
0x2a460…2a480        65 20 0a 72 65 63 65 69 76 65 20 62 75 66 66 65 72 20 61 74 20 74 68 65 20 72 65 6d 6f 74 65 20   ┆e  receive buffer at the remote ┆
0x2a480…2a4a0        65 6e 64 20 61 73 20 64 61 74 61 5f 61 72 72 69 76 65 64 20 28 6f 72 20 0a 64 61 74 61 5f 6f 76   ┆end as data_arrived (or  data_ov┆
0x2a4a0…2a4c0        65 72 72 75 6e 29 2e 0d 0a 0d 0a 8c 83 bc 0a 46 6c 6f 77 20 63 6f 6e 74 72 6f 6c 20 69 6e 66 6f   ┆errun).        Flow control info┆
0x2a4c0…2a4e0        72 6d 61 74 69 6f 6e 20 70 65 72 74 61 69 6e 69 6e 67 20 74 6f 20 61 20 73 70 65 63 69 66 69 65   ┆rmation pertaining to a specifie┆
0x2a4e0…2a500        64 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 6f 62 74 61 69 6e 65 64 20 66 72   ┆d  connection can be obtained fr┆
0x2a500…2a520        6f 6d 20 74 68 65 20 49 4d 43 20 62 79 20 61 20 63 61 6c 6c 20 6f 66 20 0a 67 65 74 63 72 65 64   ┆om the IMC by a call of  getcred┆
0x2a520…2a540        69 74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 67 65 74 63 72 65 64 69 74 28 56 41 52 20 70   ┆it:    PROCEDURE getcredit(VAR p┆
0x2a540…2a560        3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 20 20 20   ┆: port; index: 1..maxint;       ┆
0x2a560…2a580        20 20 20 56 41 52 20 63 72 65 64 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d 0a 54 68   ┆   VAR credbuf: reference)    Th┆
0x2a580…2a5a0        65 20 64 65 73 69 67 6e 61 74 65 64 20 62 75 66 66 65 72 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f   ┆e designated buffer becomes an o┆
0x2a5a0…2a5c0        75 74 73 74 61 6e 64 69 6e 67 20 63 72 65 64 69 74 20 62 75 66 66 65 72 2e 20 0a 49 74 20 69 73   ┆utstanding credit buffer.  It is┆
0x2a5c0…2a5e0        20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 63 72 65 64 69 74 20 65 76 65 6e 74 20 77 68 65 6e   ┆ returned as a credit event when┆
0x2a5e0…2a600        20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 0a 6f 75 74 73 74 61 6e 64 69   ┆ there is one or more  outstandi┆
0x2a600…2a620 (339,) 6e 67 20 72 65 63 65 69 76 65 20 62 75 66 66 65 72 73 20 61 74 20 74 68 65 20 72 65 6d 6f 74 65   ┆ng receive buffers at the remote┆
0x2a620…2a640        20 65 6e 64 20 6f 66 20 74 68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 63 61 6c 6c 20 6f 66   ┆ end of the  connection (call of┆
0x2a640…2a660        20 72 65 63 65 69 76 65 29 20 66 6f 72 20 77 68 69 63 68 20 63 72 65 64 69 74 20 68 61 73 20 6e   ┆ receive) for which credit has n┆
0x2a660…2a680        6f 74 20 62 65 65 6e 20 0a 67 69 76 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 2e 20 54 68 65 20 6e   ┆ot been  given previously. The n┆
0x2a680…2a6a0        75 6d 62 65 72 20 6f 66 20 73 75 63 68 20 72 65 63 65 69 76 65 20 62 75 66 66 65 72 73 20 69 73   ┆umber of such receive buffers is┆
0x2a6a0…2a6c0        20 0a 70 61 73 73 65 64 20 61 73 20 74 68 65 20 62 75 66 66 65 72 20 61 74 74 72 69 62 75 74 65   ┆  passed as the buffer attribute┆
0x2a6c0…2a6e0        20 63 72 65 64 69 74 20 63 6f 75 6e 74 20 28 63 66 2e 20 73 65 63 74 69 6f 6e 20 0a 31 31 2e 34   ┆ credit count (cf. section  11.4┆
0x2a6e0…2a700        29 2e 20 48 6f 77 65 76 65 72 2c 20 61 20 63 72 65 64 69 74 20 65 76 65 6e 74 20 63 61 6e 20 6f   ┆). However, a credit event can o┆
0x2a700…2a720        6e 6c 79 20 6f 63 63 75 72 20 70 72 6f 76 69 64 65 64 20 74 68 65 72 65 20 0a 69 73 20 61 74 20   ┆nly occur provided there  is at ┆
0x2a720…2a740        6c 65 61 73 74 20 6f 6e 65 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 72 65 73 65 74 5f 69 6e 64 69   ┆least one outstanding reset_indi┆
0x2a740…2a760        63 61 74 69 6f 6e 20 62 75 66 66 65 72 20 61 74 20 74 68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e   ┆cation buffer at the  connection┆
0x2a760…2a780        20 65 6e 64 2d 70 6f 69 6e 74 2c 20 63 66 2e 20 67 65 74 72 65 73 65 74 2e 0d 0a 0d 0a 44 61 74   ┆ end-point, cf. getreset.    Dat┆
0x2a780…2a7a0        61 20 61 6e 64 20 63 72 65 64 69 74 20 62 75 66 66 65 72 73 20 77 68 69 63 68 20 61 72 65 20 6f   ┆a and credit buffers which are o┆
0x2a7a0…2a7c0        75 74 73 74 61 6e 64 69 6e 67 20 61 74 20 61 6e 20 65 6e 64 2d 0a 70 6f 69 6e 74 20 6f 66 20 61   ┆utstanding at an end- point of a┆
0x2a7c0…2a7e0        20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 62 65 20 74 61 6b 65 6e 20 62 61 63 6b 20 77 69   ┆ connection may be taken back wi┆
0x2a7e0…2a800        74 68 6f 75 74 20 62 72 65 61 6b 69 6e 67 20 74 68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 62   ┆thout breaking the  connection b┆
0x2a800…2a820 (340,) 79 20 63 61 6c 6c 69 6e 67 20 72 65 73 65 74 3a 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 72 65   ┆y calling reset:    PROCEDURE re┆
0x2a820…2a840        73 65 74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e   ┆set(VAR p: port; index: 1..maxin┆
0x2a840…2a860        74 3b 0d 0a 09 09 20 20 56 41 52 20 63 6f 6d 70 6c 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 0d   ┆t;      VAR compl: reference)   ┆
0x2a860…2a880        0a 49 6e 20 74 68 65 20 73 61 6d 65 20 67 72 61 63 65 66 75 6c 20 66 61 73 68 69 6f 6e 20 61 73   ┆ In the same graceful fashion as┆
0x2a880…2a8a0        20 77 68 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 0a 61   ┆ when a connection is removed  a┆
0x2a8a0…2a8c0        6c 6c 20 64 61 74 61 20 74 72 61 6e 73 66 65 72 73 20 66 6f 72 20 77 68 69 63 68 20 63 72 65 64   ┆ll data transfers for which cred┆
0x2a8c0…2a8e0        69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 61 72 65 20 63 61 72 72 69 65 64 20 0a 6f 75 74   ┆it is available are carried  out┆
0x2a8e0…2a900        20 66 69 72 73 74 2e 20 54 68 65 6e 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 64 61 74 61 20   ┆ first. Then the remaining data ┆
0x2a900…2a920        61 6e 64 20 63 72 65 64 69 74 20 62 75 66 66 65 72 73 20 61 72 65 20 0a 72 65 74 75 72 6e 65 64   ┆and credit buffers are  returned┆
0x2a920…2a940        20 61 73 20 64 75 6d 6d 79 20 65 76 65 6e 74 73 2c 20 62 75 74 20 6f 6e 6c 79 20 61 74 20 74 68   ┆ as dummy events, but only at th┆
0x2a940…2a960        65 20 6c 6f 63 61 6c 20 65 6e 64 2d 70 6f 69 6e 74 2e 20 0a 54 68 65 20 72 65 74 75 72 6e 20 6f   ┆e local end-point.  The return o┆
0x2a960…2a980        66 20 72 65 63 65 69 76 65 20 62 75 66 66 65 72 73 20 6d 61 79 20 61 6d 6f 75 6e 74 20 74 6f 20   ┆f receive buffers may amount to ┆
0x2a980…2a9a0        74 68 65 20 74 61 6b 69 6e 67 20 62 61 63 6b 20 0a 6f 66 20 63 72 65 64 69 74 20 77 68 69 63 68   ┆the taking back  of credit which┆
0x2a9a0…2a9c0        20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 67 69 76 65 6e 20 74 6f 20 74 68 65 20 72   ┆ has already been given to the r┆
0x2a9c0…2a9e0        65 6d 6f 74 65 20 0a 72 65 73 69 64 65 6e 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   ┆emote  resident. In this case th┆
0x2a9e0…2aa00        65 20 72 65 73 75 6c 74 69 6e 67 20 6e 65 67 61 74 69 76 65 20 63 72 65 64 69 74 20 69 73 20 0a   ┆e resulting negative credit is  ┆
0x2aa00…2aa20 (341,) 70 61 73 73 65 64 20 61 73 20 74 68 65 20 63 72 65 64 69 74 20 63 6f 75 6e 74 20 61 74 74 72 69   ┆passed as the credit count attri┆
0x2aa20…2aa40        62 75 74 65 20 6f 66 20 61 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 20 0a 65 76 65 6e   ┆bute of a reset_indication  even┆
0x2aa40…2aa60        74 2e 0d 0a 0d 0a 46 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 61 6c 6c 20 6f 66 20 72 65 73 65 74 20   ┆t.    Following a call of reset ┆
0x2aa60…2aa80        74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 28 6c 6f 63 61 6c 29 20 0a 63 6f 6e 6e 65 63   ┆the state of the (local)  connec┆
0x2aa80…2aaa0        74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e 74 20 77 69 6c 6c 20 62 65 20 72 65 73 65 74 74 69 6e 67   ┆tion end-point will be resetting┆
0x2aaa0…2aac0        2e 20 54 68 65 20 62 75 66 66 65 72 20 0a 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 63 6f 6d 70   ┆. The buffer  designated by comp┆
0x2aac0…2aae0        6c 20 69 73 20 74 68 65 20 72 65 73 65 74 5f 63 6f 6d 70 6c 65 74 69 6f 6e 20 65 76 65 6e 74 20   ┆l is the reset_completion event ┆
0x2aae0…2ab00        62 75 66 66 65 72 2e 20 0a 54 68 69 73 20 65 76 65 6e 74 20 6f 63 63 75 72 73 20 61 66 74 65 72   ┆buffer.  This event occurs after┆
0x2ab00…2ab20        20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 64 61 74 61 20 61 6e 64 20 63 72 65 64 69 74   ┆ all outstanding data and credit┆
0x2ab20…2ab40        20 0a 8c 83 c8 0a 62 75 66 66 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 74 75 72 6e 65 64   ┆      buffers have been returned┆
0x2ab40…2ab60        2e 20 57 68 65 6e 20 69 74 20 6f 63 63 75 72 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   ┆. When it occurs the state of th┆
0x2ab60…2ab80        65 20 0a 65 6e 64 2d 70 6f 69 6e 74 20 72 65 76 65 72 74 73 20 74 6f 20 63 6f 6e 6e 65 63 74 65   ┆e  end-point reverts to connecte┆
0x2ab80…2aba0        64 2e 0d 0a 0d 0a 57 68 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 70 6f 69 6e   ┆d.    When a connection end-poin┆
0x2aba0…2abc0        74 20 68 61 73 20 62 65 65 6e 20 72 65 73 65 74 20 74 68 65 20 49 4d 43 20 68 61 73 20 61 6c 73   ┆t has been reset the IMC has als┆
0x2abc0…2abe0        6f 20 0a 72 65 73 65 74 20 69 74 73 20 61 63 63 6f 75 6e 74 20 6f 66 20 63 72 65 64 69 74 20 70   ┆o  reset its account of credit p┆
0x2abe0…2ac00        72 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 0a 72 65 73 69 64 65 6e   ┆reviously passed to the  residen┆
0x2ac00…2ac20 (342,) 74 2e 20 43 72 65 64 69 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 62 74 61 69 6e 65 64 20 62   ┆t. Credit information obtained b┆
0x2ac20…2ac40        65 66 6f 72 65 20 72 65 73 65 74 74 69 6e 67 20 69 73 20 0a 74 68 65 72 65 66 6f 72 65 20 6e 6f   ┆efore resetting is  therefore no┆
0x2ac40…2ac60        20 6c 6f 6e 67 65 72 20 76 61 6c 69 64 2e 0d 0a 0d 0a 49 66 20 63 72 65 64 69 74 20 69 6e 66 6f   ┆ longer valid.    If credit info┆
0x2ac60…2ac80        72 6d 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20   ┆rmation is used it is necessary ┆
0x2ac80…2aca0        74 6f 20 6b 6e 6f 77 20 77 68 65 6e 20 0a 63 72 65 64 69 74 20 69 73 20 74 61 6b 65 6e 20 62 61   ┆to know when  credit is taken ba┆
0x2aca0…2acc0        63 6b 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 72 65 73 65 74 74 69 6e 67 20 6f 66 20 74   ┆ck as a result of resetting of t┆
0x2acc0…2ace0        68 65 20 72 65 6d 6f 74 65 20 0a 65 6e 64 2d 70 6f 69 6e 74 2e 20 41 20 72 65 73 65 74 5f 69 6e   ┆he remote  end-point. A reset_in┆
0x2ace0…2ad00        64 69 63 61 74 69 6f 6e 20 62 75 66 66 65 72 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20 74 6f   ┆dication buffer which is used to┆
0x2ad00…2ad20        20 63 61 72 72 79 20 0a 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6d 61 64 65   ┆ carry  this information is made┆
0x2ad20…2ad40        20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 74 68 65 20 49 4d 43 20 62 79 20 61 20 63 61 6c 6c 20   ┆ available to the IMC by a call ┆
0x2ad40…2ad60        6f 66 20 0a 67 65 74 72 65 73 65 74 2e 0d 0a 0d 0a 50 52 4f 43 45 44 55 52 45 20 67 65 74 72 65   ┆of  getreset.    PROCEDURE getre┆
0x2ad60…2ad80        73 65 74 20 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69   ┆set (VAR p: port; index: 1..maxi┆
0x2ad80…2ada0        6e 74 3b 0d 0a 09 09 20 20 20 20 20 20 56 41 52 20 69 6e 64 69 63 3a 20 72 65 66 65 72 65 6e 63   ┆nt;          VAR indic: referenc┆
0x2ada0…2adc0        65 29 0d 0a 0d 0a 54 68 65 20 63 61 6c 6c 20 69 73 20 70 65 72 6d 69 74 74 65 64 20 69 66 20 74   ┆e)    The call is permitted if t┆
0x2adc0…2ade0        68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 0a   ┆he state of the connection end- ┆
0x2ade0…2ae00        70 6f 69 6e 74 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 6f 72 20 72 65 73 65 74 74 69 6e 67 2c   ┆point is connected or resetting,┆
0x2ae00…2ae20 (343,) 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 0a 73 74 61 74 65 2e   ┆ but does not change the  state.┆
0x2ae20…2ae40        20 54 68 65 20 62 75 66 66 65 72 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 69 6e 64 69 63 20   ┆ The buffer designated by indic ┆
0x2ae40…2ae60        62 65 63 6f 6d 65 73 20 61 6e 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 0a 72 65 73 65 74 5f 69 6e   ┆becomes an outstanding  reset_in┆
0x2ae60…2ae80        64 69 63 61 74 69 6f 6e 20 65 76 65 6e 74 20 62 75 66 66 65 72 2e 20 54 68 61 74 20 69 73 2c 20   ┆dication event buffer. That is, ┆
0x2ae80…2aea0        77 68 65 6e 20 61 20 72 65 73 65 74 20 6f 63 63 75 72 73 20 0a 61 74 20 74 68 65 20 72 65 6d 6f   ┆when a reset occurs  at the remo┆
0x2aea0…2aec0        74 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 75 73 69 6e 67   ┆te end of the connection causing┆
0x2aec0…2aee0        20 6c 6f 73 73 20 6f 66 20 63 72 65 64 69 74 20 0a 74 68 69 73 20 62 75 66 66 65 72 20 69 73 20   ┆ loss of credit  this buffer is ┆
0x2aee0…2af00        72 65 74 75 72 6e 65 64 20 61 73 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 20 77 69 74   ┆returned as reset_indication wit┆
0x2af00…2af20        68 20 61 20 63 72 65 64 69 74 20 0a 63 6f 75 6e 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e   ┆h a credit  count equal to the n┆
0x2af20…2af40        75 6d 62 65 72 20 6f 66 20 63 72 65 64 69 74 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   ┆umber of credits that have been ┆
0x2af40…2af60        74 61 6b 65 6e 20 0a 62 61 63 6b 2e 0d 0a 0d 0a 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 72 65 73   ┆taken  back.    At least one res┆
0x2af60…2af80        65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 20 62 75 66 66 65 72 20 6d 75 73 74 20 62 65 20 6f 75 74   ┆et_indication buffer must be out┆
0x2af80…2afa0        73 74 61 6e 64 69 6e 67 20 0a 62 65 66 6f 72 65 20 61 20 63 72 65 64 69 74 20 65 76 65 6e 74 20   ┆standing  before a credit event ┆
0x2afa0…2afc0        63 61 6e 20 6f 63 63 75 72 2c 20 63 66 2e 20 67 65 74 63 72 65 64 69 74 2e 20 54 68 65 72 65 66   ┆can occur, cf. getcredit. Theref┆
0x2afc0…2afe0        6f 72 65 20 61 20 0a 63 61 6c 6c 20 6f 66 20 67 65 74 72 65 73 65 74 20 6d 61 79 20 74 72 69 67   ┆ore a  call of getreset may trig┆
0x2afe0…2b000        67 65 72 20 61 20 63 72 65 64 69 74 20 65 76 65 6e 74 2e 0d 0a 0d 0a 0d 0a b0 a1 31 31 2e 34 20   ┆ger a credit event.        11.4 ┆
0x2b000…2b020 (344,) 49 4d 43 20 42 75 66 66 65 72 20 41 74 74 72 69 62 75 74 65 20 44 65 63 6f 64 69 6e 67 0d 0a 0d   ┆IMC Buffer Attribute Decoding   ┆
0x2b020…2b040        0a 57 68 65 6e 65 76 65 72 20 61 20 62 75 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61   ┆ Whenever a buffer is returned a┆
0x2b040…2b060        73 20 61 6e 20 65 76 65 6e 74 20 74 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 0a 61 74 74 72 69   ┆s an event the event kind  attri┆
0x2b060…2b080        62 75 74 65 20 69 73 20 73 65 74 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 6b 69 6e 64   ┆bute is set to indicate the kind┆
0x2b080…2b0a0        20 6f 66 20 65 76 65 6e 74 2e 20 54 68 69 73 20 0a 61 74 74 72 69 62 75 74 65 20 6d 61 79 20 62   ┆ of event. This  attribute may b┆
0x2b0a0…2b0c0        65 20 72 65 61 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63   ┆e read using the predefined func┆
0x2b0c0…2b0e0        74 69 6f 6e 20 0a 65 76 65 6e 74 6b 69 6e 64 2c 20 63 66 2e 20 73 65 63 74 69 6f 6e 20 33 2e 38   ┆tion  eventkind, cf. section 3.8┆
0x2b0e0…2b100        2e 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 65 76 65 6e 74 20 6b 69 6e 64 20 74 68   ┆. Depending on the event kind th┆
0x2b100…2b120        65 20 0a 61 74 74 72 69 62 75 74 65 73 20 69 6e 64 65 78 2c 20 63 72 65 64 69 74 20 63 6f 75 6e   ┆e  attributes index, credit coun┆
0x2b120…2b140        74 2c 20 61 6e 64 20 72 65 61 73 6f 6e 20 6d 61 79 20 62 65 20 0a 8c 83 c8 0a 6d 65 61 6e 69 6e   ┆t, and reason may be      meanin┆
0x2b140…2b160        67 66 75 6c 2e 20 54 68 65 73 65 20 61 74 74 72 69 62 75 74 65 73 20 6d 61 79 20 62 65 20 72 65   ┆gful. These attributes may be re┆
0x2b160…2b180        61 64 20 75 73 69 6e 67 20 74 68 65 20 74 68 72 65 65 20 0a 66 75 6e 63 74 69 6f 6e 73 20 64 65   ┆ad using the three  functions de┆
0x2b180…2b1a0        73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 20 41 20 66 61 75 6c 74 20 77 69 6c 6c 20 6f 63 63 75   ┆scribed below. A fault will occu┆
0x2b1a0…2b1c0        72 20 69 66 20 6f 6e 65 20 6f 66 20 0a 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20   ┆r if one of  these functions is ┆
0x2b1c0…2b1e0        63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 76 61 6c   ┆called with a parameter with val┆
0x2b1e0…2b200        75 65 20 4e 49 4c 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 69 6e 64 65 78 28 56 41 52 20 72 3a   ┆ue NIL.    FUNCTION index(VAR r:┆
0x2b200…2b220 (345,) 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 67 69 76 65 73 20 74 68   ┆ reference): 0..maxint  gives th┆
0x2b220…2b240        65 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20 70 6f 72 74 20 6f 66 20   ┆e index in the relevant port of ┆
0x2b240…2b260        74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 6e 64 2d 0a 70 6f 69 6e 74 20 74 6f 20 77 68 69   ┆the connection end- point to whi┆
0x2b260…2b280        63 68 20 74 68 65 20 65 76 65 6e 74 20 70 65 72 74 61 69 6e 73 2e 20 49 74 20 69 73 20 64 65 66   ┆ch the event pertains. It is def┆
0x2b280…2b2a0        69 6e 65 64 20 66 6f 72 20 62 75 66 66 65 72 73 20 0a 77 69 74 68 20 65 76 65 6e 74 20 6b 69 6e   ┆ined for buffers  with event kin┆
0x2b2a0…2b2c0        64 20 6c 6f 63 61 6c 5f 63 6f 6e 6e 65 63 74 2c 20 72 65 6d 6f 74 65 5f 63 6f 6e 6e 65 63 74 2c   ┆d local_connect, remote_connect,┆
0x2b2c0…2b2e0        20 64 69 73 63 6f 6e 6e 65 63 74 65 64 2c 20 0a 72 65 73 65 74 5f 63 6f 6d 70 6c 65 74 69 6f 6e   ┆ disconnected,  reset_completion┆
0x2b2e0…2b300        2c 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 2c 20 64 61 74 61 5f 73 65 6e 74 2c 20 64   ┆, reset_indication, data_sent, d┆
0x2b300…2b320        61 74 61 5f 61 72 72 69 76 65 64 2c 20 0a 64 61 74 61 5f 6f 76 65 72 72 75 6e 2c 20 63 72 65 64   ┆ata_arrived,  data_overrun, cred┆
0x2b320…2b340        69 74 2c 20 61 6e 64 20 66 6f 72 20 66 75 6d 6d 79 20 65 76 65 6e 74 73 2e 20 49 66 20 74 68 65   ┆it, and for fummy events. If the┆
0x2b340…2b360        20 65 76 65 6e 74 20 69 73 20 0a 64 75 6d 6d 79 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f   ┆ event is  dummy and there is no┆
0x2b360…2b380        20 61 70 70 6c 69 63 61 62 6c 65 20 69 6e 64 65 78 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c   ┆ applicable index the result wil┆
0x2b380…2b3a0        6c 20 62 65 20 30 2e 0d 0a 0d 0a 46 55 4e 43 54 49 4f 4e 20 72 65 61 73 6f 6e 28 56 41 52 20 72   ┆l be 0.    FUNCTION reason(VAR r┆
0x2b3a0…2b3c0        3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 72 65 61 73 6f 6e 5f 74 79 70 65 0d 0a 67 69 76 65 73   ┆: reference): reason_type  gives┆
0x2b3c0…2b3e0        20 74 68 65 20 72 65 61 73 6f 6e 20 66 6f 72 20 61 6e 20 65 76 65 6e 74 2e 20 49 74 20 69 73 20   ┆ the reason for an event. It is ┆
0x2b3e0…2b400        72 65 6c 65 76 61 6e 74 20 66 6f 72 20 62 75 66 66 65 72 73 20 0a 77 69 74 68 20 65 76 65 6e 74   ┆relevant for buffers  with event┆
0x2b400…2b420 (346,) 20 6b 69 6e 64 20 70 6f 72 74 5f 63 6c 6f 73 65 64 20 6f 72 20 64 69 73 63 6f 6e 6e 65 63 74 65   ┆ kind port_closed or disconnecte┆
0x2b420…2b440        64 2e 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 0a 6f 66 20 74 68 65 20 70 72 65 64 65 66 69   ┆d. The result is  of the predefi┆
0x2b440…2b460        6e 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 79 70 65 0d 0a 09 72 65 61 73 6f 6e 5f 74 79   ┆ned enumeration type   reason_ty┆
0x2b460…2b480        70 65 3d 20 28 72 65 61 73 6f 6e 5f 6f 6b 2c 20 72 65 61 73 6f 6e 5f 6e 61 6d 65 2c 20 72 65 61   ┆pe= (reason_ok, reason_name, rea┆
0x2b480…2b4a0        73 6f 6e 5f 72 65 73 6f 75 72 63 65 2c 0d 0a 09 09 20 20 20 20 72 65 61 73 6f 6e 5f 63 6c 6f 73   ┆son_resource,        reason_clos┆
0x2b4a0…2b4c0        65 64 2c 20 72 65 61 73 6f 6e 5f 6e 65 74 77 6f 72 6b 29 2e 0d 0a 0d 0a 41 6c 6c 20 75 73 65 73   ┆ed, reason_network).    All uses┆
0x2b4c0…2b4e0        20 6f 66 20 72 65 61 73 6f 6e 20 76 61 6c 75 65 73 20 61 72 65 20 65 78 70 6c 61 69 6e 65 64 20   ┆ of reason values are explained ┆
0x2b4e0…2b500        69 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 0a 73 65 63 74 69 6f 6e 73 2e 0d 0a 0d 0a 46   ┆in the preceding  sections.    F┆
0x2b500…2b520        55 4e 43 54 49 4f 4e 20 63 72 65 64 69 74 63 6f 75 6e 74 28 56 41 52 20 72 3a 20 72 65 66 65 72   ┆UNCTION creditcount(VAR r: refer┆
0x2b520…2b540        65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 49 66 20 74 68 65 20 65 76 65 6e 74 20 6b   ┆ence): 0..maxint  If the event k┆
0x2b540…2b560        69 6e 64 20 69 73 20 63 72 65 64 69 74 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20   ┆ind is credit the result is the ┆
0x2b560…2b580        6e 75 6d 65 72 20 6f 66 20 0a 72 65 63 65 69 76 65 20 62 75 66 66 65 72 73 20 61 76 61 69 6c 61   ┆numer of  receive buffers availa┆
0x2b580…2b5a0        62 6c 65 20 61 74 20 74 68 65 20 72 65 6d 6f 74 65 20 65 6e 64 2d 70 6f 69 6e 74 20 6f 66 20 74   ┆ble at the remote end-point of t┆
0x2b5a0…2b5c0        68 65 20 0a 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 49 66 20 74 68 65 20 65 76 65 6e 74 20 6b 69 6e   ┆he  connection. If the event kin┆
0x2b5c0…2b5e0        64 20 69 73 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 20 74 68 65 20 0a 72 65 73 75 6c   ┆d is reset_indication the  resul┆
0x2b5e0…2b600        74 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 72 65 64 69 74 73 20 77 68 69 63 68 20   ┆tis the number of credits which ┆
0x2b600…2b620 (347,) 68 61 76 65 20 62 65 65 6e 20 74 61 6b 65 6e 20 62 61 63 6b 20 62 79 20 0a 61 20 63 61 6c 6c 20   ┆have been taken back by  a call ┆
0x2b620…2b640        6f 66 20 72 65 73 65 74 20 61 74 20 74 68 65 20 72 65 6d 6f 74 65 20 65 6e 64 2d 70 6f 69 6e 74   ┆of reset at the remote end-point┆
0x2b640…2b660        2e 0d 0a 0d 0a 0d 0a b0 a1 31 31 2e 35 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 52 6f 75 74   ┆.        11.5 Miscellaneous Rout┆
0x2b660…2b680        69 6e 65 73 0d 0a 0d 0a 41 74 20 74 65 61 63 68 20 6e 6f 64 65 20 69 6e 20 61 6e 20 49 4d 43 20   ┆ines    At teach node in an IMC ┆
0x2b680…2b6a0        6e 65 74 77 6f 72 6b 2c 20 74 68 65 20 49 4d 43 20 69 6d 70 6f 73 65 73 20 63 65 72 74 61 69 6e   ┆network, the IMC imposes certain┆
0x2b6a0…2b6c0        20 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 75 73 65 72 73 20 6f 66 20 74 68 65 20 49   ┆  restrictions on users of the I┆
0x2b6c0…2b6e0        4d 43 20 73 65 72 76 69 63 65 73 2c 20 6e 61 6d 65 6c 79 20 61 20 6d 61 78 69 6d 75 6d 20 0a 73   ┆MC services, namely a maximum  s┆
0x2b6e0…2b700        69 7a 65 20 66 6f 72 20 61 20 6c 65 74 74 65 72 20 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 6e   ┆ize for a letter and a maximum n┆
0x2b700…2b71d        75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 61 6e 79 20 0a            ┆umber of connections to any  ┆
0x2b71d…2b720        FormFeed {
0x2b71d…2b720          0c 83 a4                                                                                          ┆   ┆
0x2b71d…2b720        }
0x2b720…2b740        0a 6f 6e 65 20 70 6f 72 74 2e 20 74 68 65 73 65 20 74 77 6f 20 6c 69 6d 69 74 61 74 69 6f 6e 73   ┆ one port. these two limitations┆
0x2b740…2b760        20 63 61 6e 20 62 65 20 6f 62 74 61 69 6e 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 0a 74 68 65   ┆ can be obtained by calling  the┆
0x2b760…2b780        20 70 72 65 64 65 66 69 6e 65 64 20 72 6f 75 74 69 6e 65 73 20 6d 61 78 6c 65 74 74 65 72 73 69   ┆ predefined routines maxlettersi┆
0x2b780…2b7a0        7a 65 20 61 6e 64 20 6d 61 78 63 6f 6e 6e 65 63 74 69 6f 6e 73 3a 0d 0a 0d 0a 46 55 4e 43 54 49   ┆ze and maxconnections:    FUNCTI┆
0x2b7a0…2b7c0        4f 4e 20 6d 61 78 6c 65 74 74 65 72 73 69 7a 65 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 46 55 4e   ┆ON maxlettersize: 0..maxint  FUN┆
0x2b7c0…2b7e0        43 54 49 4f 4e 20 6d 61 78 63 6f 6e 6e 65 63 74 69 6f 6e 73 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d   ┆CTION maxconnections: 0..maxint ┆
0x2b7e0…2b7e3        0a 0d 0a                                                                                          ┆   ┆
0x2b7e3…2b7e6        FormFeed {
0x2b7e3…2b7e6          0c 80 c8                                                                                          ┆   ┆
0x2b7e3…2b7e6        }
0x2b7e6…2b800        0a b0 a1 31 32 2e 20 43 4f 4d 50 49 4c 45 52 20 44 49 52 45 43 54 49 56 45 53                     ┆   12. COMPILER DIRECTIVES┆
0x2b800…2b820 (348,) 0d 0a 0d 0a 44 69 72 65 63 74 69 76 65 73 20 74 6f 20 61 20 52 65 61 6c 2d 54 69 6d 65 20 50 61   ┆    Directives to a Real-Time Pa┆
0x2b820…2b840        73 63 61 6c 20 63 6f 6d 70 69 6c 65 72 20 6d 61 79 20 62 65 20 72 65 67 61 72 64 65 64 20 61 73   ┆scal compiler may be regarded as┆
0x2b840…2b860        20 0a 6c 65 78 69 63 61 6c 20 73 65 70 61 72 61 74 6f 72 73 2e 20 54 68 65 79 20 68 61 76 65 20   ┆  lexical separators. They have ┆
0x2b860…2b880        74 68 65 20 67 65 6e 65 72 61 6c 20 66 6f 72 6d 3a 0d 0a 09 24 20 64 69 72 65 63 74 69 76 65 2d   ┆the general form:   $ directive-┆
0x2b880…2b8a0        6e 61 6d 65 20 70 61 72 61 6d 65 74 65 72 73 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 0d 0a 67 69 76   ┆name parameters end-of-line  giv┆
0x2b8a0…2b8c0        65 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 6c 69 6e 65 20 61 6e 64 20 77 69 74 68 20 70   ┆en on a separate line and with p┆
0x2b8c0…2b8e0        61 72 61 6d 65 74 65 72 73 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 0a 65 6e 63 6c 6f 73 65 64   ┆arameters, if present,  enclosed┆
0x2b8e0…2b900        20 69 6e 20 70 61 72 61 6e 74 68 65 73 65 73 2e 20 41 6c 74 65 72 6e 61 74 69 76 65 6c 79 20 64   ┆ in parantheses. Alternatively d┆
0x2b900…2b920        69 72 65 63 74 69 76 65 73 20 6d 61 79 20 62 65 20 0a 73 75 70 70 6c 69 65 64 20 61 73 20 70 61   ┆irectives may be  supplied as pa┆
0x2b920…2b940        72 61 6d 65 74 65 72 73 20 69 6e 20 74 68 65 20 63 61 6c 6c 20 6f 66 20 74 68 65 20 63 6f 6d 70   ┆rameters in the call of the comp┆
0x2b940…2b960        69 6c 65 72 2e 20 53 6f 6d 65 20 6f 66 20 0a 74 68 65 6d 20 6d 75 73 74 20 62 65 20 73 70 65 63   ┆iler. Some of  them must be spec┆
0x2b960…2b980        69 66 69 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6c 69 6e 65 20 6f 66 20 61   ┆ified before the first line of a┆
0x2b980…2b9a0        63 74 75 61 6c 20 0a 73 6f 75 72 63 65 20 74 65 78 74 20 69 73 20 6d 65 74 2c 20 76 69 7a 2e 20   ┆ctual  source text is met, viz. ┆
0x2b9a0…2b9c0        65 69 74 68 65 72 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 63 61 6c 6c 20 6f 72 20 61   ┆either in the compiler call or a┆
0x2b9c0…2b9e0        73 20 0a 24 2d 64 69 72 65 63 74 69 76 65 20 6c 69 6e 65 73 20 69 6e 20 66 72 6f 6e 74 20 6f 66   ┆s  $-directive lines in front of┆
0x2b9e0…2ba00        20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 70 72 6f 67 72 61 6d 2f 72 6f 75 74 69 6e 65 20 0a   ┆ the outermost program/routine  ┆
0x2ba00…2ba20 (349,) 68 65 61 64 69 6e 67 2e 0d 0a 0d 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20   ┆heading.    The following table ┆
0x2ba20…2ba40        6c 69 73 74 73 20 74 68 65 20 6d 61 6e 64 61 74 6f 72 79 20 64 69 72 65 63 74 69 76 65 73 2e 20   ┆lists the mandatory directives. ┆
0x2ba40…2ba60        41 6e 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 61 79 20 73 75 70 70 6f 72 74 20 61   ┆An  implementation may support a┆
0x2ba60…2ba80        64 64 69 74 69 6f 6e 61 6c 20 64 69 72 65 63 74 69 76 65 73 2e 20 54 68 65 20 66 69 72 73 74 20   ┆dditional directives. The first ┆
0x2ba80…2baa0        0a 74 68 72 65 65 20 64 69 72 65 63 74 69 76 65 73 20 77 68 69 63 68 20 61 72 65 20 61 6c 6c 20   ┆ three directives which are all ┆
0x2baa0…2bac0        75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 61 70 70 65 61 72 61 6e 63 65 20   ┆used to control the  appearance ┆
0x2bac0…2bae0        6f 66 20 61 20 63 6f 6d 70 69 6c 65 72 20 6c 69 73 74 69 6e 67 20 6d 75 73 74 20 61 70 70 65 61   ┆of a compiler listing must appea┆
0x2bae0…2bb00        72 20 62 65 66 6f 72 65 20 74 68 65 20 0a 66 69 72 73 74 20 6c 69 6e 65 20 6f 66 20 61 63 74 75   ┆r before the  first line of actu┆
0x2bb00…2bb20        61 6c 20 73 6f 75 72 63 65 20 74 65 78 74 2e 0d 0a 0d 0a a1 6e 61 6d 65 09 70 61 72 61 6d 65 74   ┆al source text.     name paramet┆
0x2bb20…2bb40        65 72 73 09 64 65 73 63 72 69 70 74 69 6f 6e 05 0d 0a 50 41 47 45 4c 45 4e 47 54 48 09 6e 75 6d   ┆ers description   PAGELENGTH num┆
0x2bb40…2bb60        62 65 72 09 09 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 20 0d 0a 28   ┆ber  maximum number of lines   (┆
0x2bb60…2bb80        64 65 66 61 75 6c 74 20 34 35 29 09 09 09 70 65 72 20 70 61 67 65 20 6f 66 20 6c 69 73 74 69 6e   ┆default 45)   per page of listin┆
0x2bb80…2bba0        67 2c 0d 0a 0d 0a 50 41 47 45 57 49 44 54 48 09 6e 75 6d 62 65 72 09 09 6d 61 78 69 6d 75 6d 20   ┆g,    PAGEWIDTH number  maximum ┆
0x2bba0…2bbc0        6e 75 6d 62 65 72 20 6f 66 20 0d 0a 28 64 65 66 61 75 6c 74 20 31 32 30 29 09 09 09 84 63 68 61   ┆number of   (default 120)    cha┆
0x2bbc0…2bbe0        72 61 63 74 65 72 73 20 70 65 72 20 6c 69 6e 65 20 6f 66 20 0a 19 a2 80 80 6c 69 73 74 69 6e 67   ┆racters per line of      listing┆
0x2bbe0…2bc00        2c 0d 0a 0d 0a 54 49 54 4c 45 09 22 63 68 61 72 2e 73 74 72 69 6e 67 22 09 84 74 68 65 20 63 68   ┆,    TITLE "char.string"  the ch┆
0x2bc00…2bc20 (350,) 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 69 73 20 0a 19 a2 80 80 70 6c 61 63 65 64 20 69 6e   ┆aracter string is      placed in┆
0x2bc20…2bc40        20 74 68 65 20 74 69 74 6c 65 20 66 69 65 6c 64 20 0a 19 a2 80 80 6f 66 20 74 68 65 20 68 65 61   ┆ the title field      of the hea┆
0x2bc40…2bc60        64 65 72 20 6c 69 6e 65 20 6f 66 20 65 61 63 68 20 0a 19 a2 80 80 70 61 67 65 20 6f 66 20 74 68   ┆der line of each      page of th┆
0x2bc60…2bc80        65 20 6c 69 73 74 69 6e 67 2c 0d 0a 0d 0a 53 55 42 54 49 54 4c 45 09 22 63 68 61 72 2e 73 74 72   ┆e listing,    SUBTITLE "char.str┆
0x2bc80…2bca0        69 6e 67 22 09 84 74 68 65 20 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 69 73 20 0a 19   ┆ing"  the character string is   ┆
0x2bca0…2bcc0        a2 80 80 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20 73 75 62 74 69 74 6c 65 20 0a 19 a2 80 80 6c   ┆   placed in the subtitle      l┆
0x2bcc0…2bce0        69 6e 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 6f 66 20 74 68 65 20 0a 19 a2 80 80 6c 69 73   ┆ine of each page of the      lis┆
0x2bce0…2bd00        74 69 6e 67 2c 0d 0a 0d 0a 8c 83 bc 0a a1 6e 61 6d 65 09 70 61 72 61 6d 65 74 65 72 73 09 64 65   ┆ting,         name parameters de┆
0x2bd00…2bd20        73 63 72 69 70 74 69 6f 6e 05 0d 0a 43 4f 44 45 09 6e 6f 6e 65 09 09 84 63 61 75 73 65 73 20 63   ┆scription   CODE none   causes c┆
0x2bd20…2bd40        6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 0a 19 a2 80 80 74 68 65 20 66 6f 6c 6c 6f   ┆ode generated for      the follo┆
0x2bd40…2bd60        77 69 6e 67 20 6c 69 6e 65 73 20 6f 66 20 0a 19 a2 80 80 73 6f 75 72 63 65 20 74 65 78 74 20 74   ┆wing lines of      source text t┆
0x2bd60…2bd80        6f 20 62 65 20 6c 69 73 74 65 64 2c 0d 0a 0d 0a 4e 4f 43 4f 44 45 09 6e 6f 6e 65 09 09 73 75 70   ┆o be listed,    NOCODE none  sup┆
0x2bd80…2bda0        70 72 65 73 73 65 73 20 6c 69 73 74 69 6e 67 20 6f 66 20 0d 0a 28 64 65 66 61 75 6c 74 29 09 09   ┆presses listing of   (default)  ┆
0x2bda0…2bdc0        09 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65 2c 0d 0a 0d 0a 43 52 45 41 54 45 53 49 5a 45 09 6e   ┆ generated code,    CREATESIZE n┆
0x2bdc0…2bde0        75 6d 62 65 72 09 09 84 64 65 74 65 72 6d 69 6e 65 73 20 73 74 61 63 6b 20 73 69 7a 65 20 6f 66   ┆umber   determines stack size of┆
0x2bde0…2be00        20 0a 19 a2 80 80 69 6e 63 61 72 6e 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 0a 19 a2 80 80 66   ┆      incarnations of the      f┆
0x2be00…2be20 (351,) 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 67 72 61 6d 28 73 29 20 69 66 20 0a 19 a2 80 80 74 68 65 20   ┆ollowing program(s) if      the ┆
0x2be20…2be40        76 61 6c 75 65 20 6f 66 20 74 68 65 20 0a 19 a2 80 80 73 69 7a 65 5f 65 78 70 72 65 73 73 69 6f   ┆value of the      size_expressio┆
0x2be40…2be60        6e 20 6f 66 20 74 68 65 20 0a 19 a2 80 80 63 61 72 65 61 74 65 20 63 61 6c 6c 20 69 73 20 30 2c   ┆n of the      careate call is 0,┆
0x2be60…2be80        20 63 66 2e 20 0a 19 a2 80 80 73 65 63 74 69 6f 6e 20 39 2e 31 2c 0d 0a 0d 0a 49 4e 44 45 58 43   ┆ cf.      section 9.1,    INDEXC┆
0x2be80…2bea0        48 45 43 4b 09 6e 6f 6e 65 09 09 63 61 75 73 65 73 20 63 68 65 63 6b 69 6e 67 20 6f 66 20 73 75   ┆HECK none  causes checking of su┆
0x2bea0…2bec0        62 2d 0d 0a 28 64 65 66 61 75 6c 74 29 09 09 09 84 72 61 6e 67 65 20 63 6f 6e 73 74 72 61 69 6e   ┆b-  (default)    range constrain┆
0x2bec0…2bee0        74 73 20 62 65 66 6f 72 65 20 0a 19 a2 80 80 69 6e 64 65 78 69 6e 67 20 74 6f 20 62 65 20 69 6e   ┆ts before      indexing to be in┆
0x2bee0…2bf00        63 6c 75 64 65 64 20 69 6e 20 0a 19 a2 80 80 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 66 6f   ┆cluded in      code generated fo┆
0x2bf00…2bf20        72 20 74 68 65 20 0a 19 a2 80 80 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 73 20 6f 66 20 73 6f   ┆r the      following lines of so┆
0x2bf20…2bf40        75 72 63 65 20 0a 19 a2 80 80 74 65 78 74 2c 0d 0a 0d 0a 4e 4f 49 4e 44 45 58 43 48 45 43 4b 09   ┆urce      text,    NOINDEXCHECK ┆
0x2bf40…2bf60        6e 6f 6e 65 09 09 84 73 77 69 74 63 68 65 73 20 6f 66 66 20 69 6e 64 65 78 20 0a 19 a2 80 80 63   ┆none   switches off index      c┆
0x2bf60…2bf80        68 65 63 6b 69 6e 67 2c 0a 0d 0a 4c 49 53 54 09 6e 6f 6e 65 09 09 84 63 61 75 73 65 73 20 74 68   ┆hecking,   LIST none   causes th┆
0x2bf80…2bfa0        65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 73 20 0a 19 a2 80 80 6f 66 20 73 6f 75 72 63 65   ┆e following lines      of source┆
0x2bfa0…2bfc0        20 74 65 78 74 20 74 6f 20 62 65 20 0a 19 a2 80 80 6c 69 73 74 65 64 2c 0d 0a 0d 0a 4e 4f 4c 49   ┆ text to be      listed,    NOLI┆
0x2bfc0…2bfe0        53 54 09 6e 6f 6e 65 09 09 73 75 70 70 72 65 73 73 65 73 20 6c 69 73 74 69 6e 67 20 6f 66 0d 0a   ┆ST none  suppresses listing of  ┆
0x2bfe0…2c000        28 64 65 66 61 75 6c 74 29 09 09 09 73 6f 75 72 63 65 20 74 65 78 74 2c 0d 0a 0d 0a 52 41 4e 47   ┆(default)   source text,    RANG┆
0x2c000…2c020 (352,) 45 43 48 45 43 4b 09 6e 6f 6e 65 09 09 63 61 75 73 65 73 20 63 68 65 63 6b 69 6e 67 20 6f 66 20   ┆ECHECK none  causes checking of ┆
0x2c020…2c040        73 75 62 2d 0d 0a 28 64 65 66 61 75 6c 74 29 09 09 09 84 72 61 6e 67 65 20 63 6f 6e 73 74 72 61   ┆sub-  (default)    range constra┆
0x2c040…2c060        69 6e 74 73 20 62 65 66 6f 72 65 20 0a 19 a2 80 80 61 73 73 69 67 6e 6d 65 6e 74 20 74 6f 20 62   ┆ints before      assignment to b┆
0x2c060…2c080        65 20 69 6e 63 6c 75 64 65 64 20 0a 19 a2 80 80 69 6e 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65   ┆e included      in code generate┆
0x2c080…2c0a0        64 20 66 6f 72 20 74 68 65 20 0a 19 a2 80 80 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 73 20 6f   ┆d for the      following lines o┆
0x2c0a0…2c0c0        66 20 73 6f 75 72 63 65 20 0a 19 a2 80 80 74 65 78 74 2c 0d 0a 0d 0a 8c 83 e0 0a a1 6e 61 6d 65   ┆f source      text,         name┆
0x2c0c0…2c0e0        09 70 61 72 61 6d 65 74 65 72 73 09 64 65 73 63 72 69 70 74 69 6f 6e 05 0d 0a 4e 4f 52 41 4e 47   ┆ parameters description   NORANG┆
0x2c0e0…2c100        45 43 48 45 43 4b 09 6e 6f 6e 65 09 09 84 73 77 69 74 63 68 65 73 20 6f 66 66 20 72 61 6e 67 65   ┆ECHECK none   switches off range┆
0x2c100…2c120        20 0a 19 a2 80 80 63 68 65 63 6b 69 6e 67 2c 09 0d 0a 0d 0a 41 43 43 45 53 53 43 48 45 43 4b 09   ┆      checking,     ACCESSCHECK ┆
0x2c120…2c140        6e 6f 6e 65 09 09 84 63 61 75 73 65 73 20 63 6f 64 65 20 74 6f 20 62 65 20 0a 19 a2 80 80 67 65   ┆none   causes code to be      ge┆
0x2c140…2c160        6e 65 72 61 74 65 64 20 66 6f 72 20 65 76 65 72 79 20 61 63 63 65 73 73 20 0a 19 a2 80 80 74 6f   ┆nerated for every access      to┆
0x2c160…2c180        20 61 20 66 6f 72 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 20 0a 19 a2 80 80 6f 62 6a 65 63 74 20   ┆ a formal parameter      object ┆
0x2c180…2c1a0        77 68 69 63 68 20 69 73 20 6e 6f 74 20 6f 66 20 0a 19 a2 80 80 6b 69 6e 64 20 76 61 6c 75 65 2c   ┆which is not of      kind value,┆
0x2c1a0…2c1c0        20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 0a 19 a2 80 80 65 78 69 73 74 65 6e 63 65 20 6f 66 20   ┆ to check the      existence of ┆
0x2c1c0…2c1e0        74 68 65 20 61 63 74 75 61 6c 20 0a 19 a2 80 80 70 61 72 61 6d 65 74 65 72 20 28 6e 6f 74 20 73   ┆the actual      parameter (not s┆
0x2c1e0…2c200        70 65 63 69 66 69 65 64 20 0a 19 a2 80 80 61 73 20 3f 29 2e 0d 0a 0d 0a 4e 4f 41 43 43 45 53 53   ┆pecified      as ?).    NOACCESS┆
0x2c200…2c220 (353,) 43 48 45 43 4b 09 6e 6f 6e 65 09 09 73 77 69 74 63 68 65 73 20 6f 66 66 20 61 63 63 65 73 73 20   ┆CHECK none  switches off access ┆
0x2c220…2c240        0d 0a 28 64 65 66 61 75 6c 74 29 09 09 09 63 68 65 63 6b 69 6e 67 2e 0d 0a 0d 0a 53 45 54 09 09   ┆  (default)   checking.    SET  ┆
0x2c240…2c260        73 77 69 74 63 68 20 61 73 73 69 67 6e 2d 09 73 65 65 20 62 65 6c 6f 77 2c 0d 0a 09 09 6d 65 6e   ┆switch assign- see below,    men┆
0x2c260…2c280        74 20 6c 69 73 74 0d 0a 0d 0a 49 46 09 09 65 78 70 72 65 73 73 69 6f 6e 09 73 65 65 20 62 65 6c   ┆t list    IF  expression see bel┆
0x2c280…2c2a0        6f 77 2c 0d 0a 0d 0a 45 4e 44 49 46 09 6e 6f 6e 65 09 09 73 65 65 20 62 65 6c 6f 77 2c 0d 0a 0d   ┆ow,    ENDIF none  see below,   ┆
0x2c2a0…2c2c0        0a 45 4c 53 45 09 6e 6f 6e 65 09 09 73 65 65 20 62 65 6c 6f 77 2c 0d 0a 0d 0a 45 4c 53 45 49 46   ┆ ELSE none  see below,    ELSEIF┆
0x2c2c0…2c2e0        09 65 78 70 72 65 73 73 69 6f 6e 09 73 65 65 20 62 65 6c 6f 77 2c 0d 0a 0d 0a 53 77 69 74 63 68   ┆ expression see below,    Switch┆
0x2c2e0…2c300        65 73 20 61 72 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 76 61 72 69 61 62 6c 65 73 20 77 68   ┆es are compile-time variables wh┆
0x2c300…2c320        69 63 68 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 0a 69 6e 20 74 68 65 20 65 78 70   ┆ich can only be used  in the exp┆
0x2c320…2c340        72 65 73 73 69 6f 6e 73 20 6f 63 63 75 72 72 69 6e 67 20 69 6e 20 49 46 20 61 6e 64 20 45 4e 44   ┆ressions occurring in IF and END┆
0x2c340…2c360        49 46 20 64 69 72 65 63 74 69 76 65 73 2e 20 41 20 0a 73 77 69 74 63 68 20 61 73 73 69 67 6e 6d   ┆IF directives. A  switch assignm┆
0x2c360…2c380        65 6e 74 20 6c 69 73 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   ┆ent list consists of one or more┆
0x2c380…2c3a0        20 73 77 69 74 63 68 20 0a 61 73 73 69 67 6e 6d 65 6e 74 73 20 73 65 70 61 72 61 74 65 64 20 62   ┆ switch  assignments separated b┆
0x2c3a0…2c3c0        79 20 63 6f 6d 6d 61 73 2e 20 41 20 73 77 69 74 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 68 61   ┆y commas. A switch assignment ha┆
0x2c3c0…2c3e0        73 20 74 68 65 20 0a 66 6f 72 6d 20 28 6e 75 6d 62 65 72 20 6d 75 73 74 20 62 65 20 69 6e 74 65   ┆s the  form (number must be inte┆
0x2c3e0…2c400        67 65 72 2c 20 6e 6f 20 72 61 64 69 78 20 61 6c 6c 6f 77 65 64 29 3a 0d 0a 09 6e 61 6d 65 20 3d   ┆ger, no radix allowed):   name =┆
0x2c400…2c420 (354,) 20 6e 75 6d 62 65 72 0d 0a 0d 0a 41 20 73 77 69 74 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 65   ┆ number    A switch assignment e┆
0x2c420…2c440        69 74 68 65 72 20 69 6e 74 72 6f 64 75 63 65 73 20 61 6e 64 20 73 65 74 73 20 74 68 65 20 76 61   ┆ither introduces and sets the va┆
0x2c440…2c460        6c 75 65 20 6f 66 20 0a 61 20 73 77 69 74 63 68 2c 20 6f 72 2c 20 69 66 20 74 68 65 20 73 77 69   ┆lue of  a switch, or, if the swi┆
0x2c460…2c480        74 63 68 20 68 61 73 20 62 65 65 6e 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 61 20 0a 70 72   ┆tch has been introduced in a  pr┆
0x2c480…2c4a0        65 76 69 6f 75 73 20 73 77 69 74 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 28 53 45 54 20 64 69   ┆evious switch assignment (SET di┆
0x2c4a0…2c4c0        72 65 63 74 69 76 65 29 2c 20 6d 65 72 65 6c 79 20 63 68 61 6e 67 65 73 20 0a 74 68 65 20 76 61   ┆rective), merely changes  the va┆
0x2c4c0…2c4e0        6c 75 65 2e 0d 0a 0d 0a 8c 83 d4 0a 54 68 65 20 64 69 72 65 63 74 69 76 65 73 20 49 46 2c 20 45   ┆lue.        The directives IF, E┆
0x2c4e0…2c500        4c 53 45 2c 20 45 4c 53 45 49 46 2c 20 61 6e 64 20 45 4e 44 49 46 20 70 72 6f 76 69 64 65 20 74   ┆LSE, ELSEIF, and ENDIF provide t┆
0x2c500…2c520        68 65 20 0a 63 61 70 61 62 69 6c 69 74 79 20 66 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 63   ┆he  capability for conditional c┆
0x2c520…2c540        6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 0a 6f 63 63   ┆ompilation. The expressions  occ┆
0x2c540…2c560        75 72 72 69 6e 67 20 69 6e 20 49 46 20 61 6e 64 20 45 4c 53 45 49 46 20 64 69 72 65 63 74 69 76   ┆urring in IF and ELSEIF directiv┆
0x2c560…2c580        65 20 6d 75 73 74 20 62 65 20 62 6f 6f 6c 65 61 6e 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6f   ┆e must be boolean  expressions o┆
0x2c580…2c5a0        62 65 79 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 72 75 6c 65 73 20 6f 66 20 74 68 65   ┆beying the standard rules of the┆
0x2c5a0…2c5c0        20 6c 61 6e 67 75 61 67 65 2e 20 54 68 65 20 0a 6f 70 65 72 61 6e 64 73 20 6d 75 73 74 20 62 65   ┆ language. The  operands must be┆
0x2c5c0…2c5e0        20 73 77 69 74 63 68 65 73 20 61 6e 64 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 73 2e 20 54   ┆ switches and integer numbers. T┆
0x2c5e0…2c600        68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 6f 70 65 72 61 74 6f 72 73 20 6d 61 79 20 62 65 20 75   ┆he following  operators may be u┆
0x2c600…2c620 (355,) 73 65 64 3a 20 3c 2c 20 3c 3d 2c 20 3e 3d 2c 20 3e 2c 20 3d 2c 20 3c 3e 2c 20 41 4e 44 2c 20 4f   ┆sed: <, <=, >=, >, =, <>, AND, O┆
0x2c620…2c640        52 2c 20 58 4f 52 2c 20 0a 4e 4f 54 2e 0d 0a 0d 0a 54 68 65 20 64 69 72 65 63 74 69 76 65 73 20   ┆R, XOR,  NOT.    The directives ┆
0x2c640…2c660        66 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 73 20 6d 61 79   ┆for conditional compilations may┆
0x2c660…2c680        20 62 65 20 75 73 65 64 20 74 6f 20 0a 73 65 6c 65 63 74 69 76 65 6c 79 20 65 78 63 6c 75 64 65   ┆ be used to  selectively exclude┆
0x2c680…2c6a0        20 62 6c 6f 63 6b 73 20 6f 66 20 6c 69 6e 65 73 20 6f 66 20 73 6f 75 72 63 65 20 74 65 78 74 20   ┆ blocks of lines of source text ┆
0x2c6a0…2c6c0        66 72 6f 6d 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 2c 20 69 2e 65 2e 20 74 6f 20 63 61 75 73 65   ┆from  compilation, i.e. to cause┆
0x2c6c0…2c6e0        20 73 75 63 68 20 6c 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 73 20 0a 63 6f   ┆ such lines to be created as  co┆
0x2c6e0…2c700        6d 6d 65 6e 74 73 2e 20 57 68 65 6e 20 6c 69 73 74 65 64 2c 20 65 61 63 68 20 65 78 63 6c 75 64   ┆mments. When listed, each exclud┆
0x2c700…2c720        65 64 20 6c 69 6e 65 20 77 69 6c 6c 20 62 65 20 6d 61 72 6b 65 64 20 0a 77 69 74 68 20 2d 2d 20   ┆ed line will be marked  with -- ┆
0x2c720…2c740        61 70 70 65 61 72 69 6e 67 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   ┆appearing at the beginning of th┆
0x2c740…2c760        65 20 6c 69 6e 65 2e 0d 0a 0d 0a 54 68 65 20 64 69 72 65 63 74 69 76 65 20 49 46 20 61 6e 64 20   ┆e line.    The directive IF and ┆
0x2c760…2c780        45 4e 44 49 46 20 6d 75 73 74 20 61 6c 77 61 79 73 20 62 65 20 75 73 65 64 20 69 6e 20 6d 61 74   ┆ENDIF must always be used in mat┆
0x2c780…2c7a0        63 68 69 6e 67 20 0a 70 61 69 72 73 2e 20 45 4c 53 45 20 61 6e 64 20 45 4c 53 45 49 46 20 6d 61   ┆ching  pairs. ELSE and ELSEIF ma┆
0x2c7a0…2c7c0        79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63 74   ┆y optionally be used in conjunct┆
0x2c7c0…2c7e0        69 6f 6e 20 0a 77 69 74 68 20 49 46 20 61 6e 64 20 45 4e 44 49 46 2e 20 41 20 75 73 65 20 6f 66   ┆ion  with IF and ENDIF. A use of┆
0x2c7e0…2c800        20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 74 61 6b 65 73 20 0a   ┆ conditional compilation takes  ┆
0x2c800…2c820 (356,) 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 3a 0d 0a 0d 0a 24 49 46 20 65 78 70 72 82   ┆the following form:    $IF expr ┆
0x2c820…2c840        31 0d 0a 73 31 82 31 0d 0a 24 45 4c 53 45 49 46 20 65 78 70 72 82 32 0d 0a 73 31 82 32 0d 0a 24   ┆1  s1 1  $ELSEIF expr 2  s1 2  $┆
0x2c840…2c860        45 4c 53 45 49 46 20 65 78 70 72 82 33 0d 0a 73 31 82 33 0d 0a 2e 2e 2e 0d 0a 24 45 4c 53 45 49   ┆ELSEIF expr 3  s1 3  ...  $ELSEI┆
0x2c860…2c880        46 20 65 78 70 72 82 6e 0d 0a 73 31 82 6e 0d 0a 24 45 4c 53 45 0d 0a 73 31 82 6e 2b 31 0d 0a 24   ┆F expr n  s1 n  $ELSE  s1 n+1  $┆
0x2c880…2c8a0        45 4e 44 49 46 0d 0a 0d 0a 54 68 65 20 6f 6e 6c 79 20 6d 61 6e 64 61 74 6f 72 79 20 70 61 72 74   ┆ENDIF    The only mandatory part┆
0x2c8a0…2c8c0        73 20 61 72 65 20 74 68 65 20 49 46 20 61 6e 64 20 45 4e 44 49 46 20 64 69 72 65 63 74 69 76 65   ┆s are the IF and ENDIF directive┆
0x2c8c0…2c8e0        20 0a 6c 69 6e 65 73 20 61 6e 64 20 74 68 65 20 73 6f 75 72 63 65 20 6c 69 6e 65 28 73 29 20 73   ┆  lines and the source line(s) s┆
0x2c8e0…2c900        31 82 31 81 2e 20 54 68 65 20 65 66 66 65 63 74 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 20   ┆1 1 . The effect is as follows: ┆
0x2c900…2c920        0a 49 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 61 6c 6c 20 74 68 65 20 65 78 70 72 65 73   ┆ If the values of all the expres┆
0x2c920…2c940        73 69 6f 6e 73 20 61 72 65 20 66 61 6c 73 65 20 74 68 65 6e 20 74 68 65 20 0a 73 6f 75 72 63 65   ┆sions are false then the  source┆
0x2c940…2c960        20 6c 69 6e 65 73 20 73 31 82 31 81 2c 20 73 31 82 32 81 2c 20 2e 2e 2e 2c 20 73 31 82 6e 81 20   ┆ lines s1 1 , s1 2 , ..., s1 n  ┆
0x2c960…2c980        61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20   ┆are excluded from  compilation. ┆
0x2c980…2c9a0        4f 74 68 65 72 77 69 73 65 20 6c 65 74 20 6b 20 62 65 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20   ┆Otherwise let k be the smallest ┆
0x2c9a0…2c9c0        6e 75 6d 62 65 72 20 73 75 63 68 20 0a 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 65   ┆number such  that the value of e┆
0x2c9c0…2c9e0        78 70 72 82 6b 81 20 69 73 20 74 72 75 65 2e 20 54 68 65 6e 20 73 31 82 31 81 2c 20 2e 2e 2e 2c   ┆xpr k  is true. Then s1 1 , ...,┆
0x2c9e0…2ca00        20 73 31 82 6b 2d 31 81 2c 20 0a 8c 83 c8 0a 73 31 82 6b 2b 31 81 2c 20 2e 2e 2e 2c 20 73 31 82   ┆ s1 k-1 ,      s1 k+1 , ..., s1 ┆
0x2ca00…2ca20 (357,) 6e 81 2c 20 61 6e 64 20 73 31 82 6e 2b 31 81 20 28 69 66 20 70 72 65 73 65 6e 74 29 20 61 72 65   ┆n , and s1 n+1  (if present) are┆
0x2ca20…2ca40        20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 0d 0a 0d 0a   ┆ excluded from  compilation.    ┆
0x2ca40…2ca60        43 6f 6e 64 69 74 69 6f 6e 61 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6d 61 79 20 62 65 20 75   ┆Conditional compilation may be u┆
0x2ca60…2ca80        73 65 64 20 61 74 20 73 65 76 65 72 61 6c 20 6e 65 73 74 65 64 20 0a 6c 65 76 65 6c 73 2e 20 49   ┆sed at several nested  levels. I┆
0x2ca80…2caa0        6e 20 74 68 65 20 61 62 6f 76 65 20 74 65 72 6d 69 6e 6f 6c 6f 67 79 20 61 6e 79 20 6f 66 20 74   ┆n the above terminology any of t┆
0x2caa0…2cac0        68 65 20 73 31 82 69 81 20 6d 61 79 20 74 68 75 73 20 0a 69 6e 63 6c 75 64 65 20 72 65 70 65 61   ┆he s1 i  may thus  include repea┆
0x2cac0…2cae0        74 65 64 20 75 73 65 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 63 6f 6d 70 69 6c 61 74 69   ┆ted use of conditional compilati┆
0x2cae0…2cb00        6f 6e 2e 0d 0a 0d 0a a1 4e 6f 74 65 73 3a 0d 0a 53 77 69 74 63 68 65 73 20 61 6e 64 20 76 61 72   ┆on.     Notes:  Switches and var┆
0x2cb00…2cb20        69 61 62 6c 65 73 20 69 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 74 65 78 74 20 62 65 6c 6f 6e   ┆iables in the program text belon┆
0x2cb20…2cb40        67 20 74 6f 20 0a 73 65 70 61 72 61 74 65 20 6e 61 6d 65 20 73 70 61 63 65 73 20 61 6e 64 20 63   ┆g to  separate name spaces and c┆
0x2cb40…2cb60        61 6e 6e 6f 74 20 62 65 20 63 6f 6e 66 75 73 65 64 2e 20 54 68 65 20 73 61 6d 65 20 6e 61 6d 65   ┆annot be confused. The same name┆
0x2cb60…2cb80        73 20 0a 6d 61 79 20 62 65 20 75 73 65 64 2e 0d 0a 0d 0a 44 69 72 65 63 74 69 76 65 73 20 6f 63   ┆s  may be used.    Directives oc┆
0x2cb80…2cba0        63 75 72 72 69 6e 67 20 69 6e 20 63 6f 6d 6d 65 6e 74 73 20 61 72 65 20 69 67 6e 6f 72 65 64 2c   ┆curring in comments are ignored,┆
0x2cba0…2cbc0        20 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 0a 74 68 6f 73 65 20 6f 63 63 75 72 72 69 6e 67 20   ┆ in particular  those occurring ┆
0x2cbc0…2cbe0        69 6e 20 73 6f 75 72 63 65 20 6c 69 6e 65 73 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 63 6f   ┆in source lines excluded from co┆
0x2cbe0…2cbee        6d 70 69 6c 61 74 69 6f 6e 2e 0d 0a 0d 0a                                                         ┆mpilation.    ┆
0x2cbee…2cbf1        FormFeed {
0x2cbee…2cbf1          0c 81 b4                                                                                          ┆   ┆
0x2cbee…2cbf1        }
0x2cbf1…2cc00        0a b0 a1 41 2e 20 52 45 46 45 52 45 4e 43 45                                                      ┆   A. REFERENCE┆
0x2cc00…2cc20 (358,) 53 0d 0a 0d 0a 28 31 29 20 20 54 68 65 20 50 72 6f 67 72 61 6d 6d 69 6e 67 20 4c 61 6e 67 75 61   ┆S    (1)  The Programming Langua┆
0x2cc20…2cc40        67 65 20 50 61 73 63 61 6c 0d 0a 09 20 41 63 74 61 20 49 6e 66 6f 72 6d 61 74 69 63 61 2c 20 31   ┆ge Pascal    Acta Informatica, 1┆
0x2cc40…2cc60        2c 20 33 35 2d 36 33 2c 20 31 39 37 31 0d 0a 09 20 4e 2e 20 57 69 72 74 68 0d 0a 0d 0a 28 32 29   ┆, 35-63, 1971    N. Wirth    (2)┆
0x2cc60…2cc80        09 20 49 53 4f 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20 53 74 61 6e 64 61 72 64 20 49 53 4f   ┆  ISO International Standard ISO┆
0x2cc80…2cca0        2f 49 53 20 37 31 38 35 3a 0d 0a 09 20 53 70 65 63 69 66 69 63 61 74 69 6f 6e 20 66 6f 72 20 43   ┆/IS 7185:    Specification for C┆
0x2cca0…2ccc0        6f 6d 70 75 74 65 72 20 50 72 6f 67 72 61 6d 6d 69 6e 67 20 4c 61 6e 67 75 61 67 65 20 50 61 73   ┆omputer Programming Language Pas┆
0x2ccc0…2cce0        63 61 6c 0d 0a 0d 0a 28 33 29 09 20 49 53 4f 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20 53 74   ┆cal    (3)  ISO International St┆
0x2cce0…2cd00        61 6e 64 61 72 64 20 49 53 4f 2f 49 53 20 36 34 36 3a 0d 0a 09 20 37 2d 62 69 74 20 43 6f 64 65   ┆andard ISO/IS 646:    7-bit Code┆
0x2cd00…2cd20        64 20 43 68 61 72 61 63 74 65 72 20 53 65 74 20 66 6f 72 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   ┆d Character Set for Information ┆
0x2cd20…2cd40        50 72 6f 63 65 73 73 69 6e 67 0d 0a 09 20 49 6e 74 65 72 63 68 61 6e 67 65 0d 0a 0d 0a 28 34 29   ┆Processing    Interchange    (4)┆
0x2cd40…2cd60        20 20 52 43 53 4c 20 4e 6f 20 34 32 2d 69 31 39 38 32 3a 0d 0a 09 20 44 69 73 74 72 69 62 75 74   ┆  RCSL No 42-i1982:    Distribut┆
0x2cd60…2cd80        65 64 20 53 79 73 74 65 6d 20 41 72 63 68 69 74 65 63 74 75 72 65 0d 0a 09 20 41 20 43 6f 6e 63   ┆ed System Architecture    A Conc┆
0x2cd80…2cda0        65 70 74 75 61 6c 20 46 72 61 6d 65 77 6f 72 6b 20 66 6f 72 20 53 79 73 74 65 6d 73 20 44 65 73   ┆eptual Framework for Systems Des┆
0x2cda0…2cdc0        69 67 6e 0d 0a 0d 0a 28 35 29 09 20 52 43 53 4c 20 4e 6f 20 34 32 2d 69 31 39 38 33 3a 0d 0a 09   ┆ign    (5)  RCSL No 42-i1983:   ┆
0x2cdc0…2cde0        20 44 53 41 20 49 6e 74 65 72 20 4d 6f 64 75 6c 65 20 43 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 0d   ┆ DSA Inter Module Communication ┆
0x2cde0…2ce00        0a 09 20 46 75 6e 63 74 69 6f 6e 61 6c 20 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 0d 0a 28 36 29   ┆   Functional Description    (6)┆
0x2ce00…2ce20 (359,) 09 20 50 6c 61 74 6f 6e 2c 20 41 20 48 69 67 68 20 4c 65 76 65 6c 20 4c 61 6e 67 75 61 67 65 20   ┆  Platon, A High Level Language ┆
0x2ce20…2ce40        66 6f 72 20 53 79 73 74 65 6d 73 20 50 72 6f 67 72 61 6d 6d 69 6e 67 0d 0a 09 20 52 45 43 41 55   ┆for Systems Programming    RECAU┆
0x2ce40…2ce60        2c 20 52 2d 37 35 2d 35 39 0d 0a 09 20 4a 7c 72 67 65 6e 20 53 74 61 75 6e 73 74 72 75 70 20 61   ┆, R-75-59    Jørgen Staunstrup a┆
0x2ce60…2ce7c        6e 64 20 53 76 65 6e 20 4d 65 69 62 6f 72 67 20 53 7c 72 65 6e 73 65 6e 0d 0a 0d 0a               ┆nd Sven Meiborg Sørensen    ┆
0x2ce7c…2ce7f        FormFeed {
0x2ce7c…2ce7f          0c 82 ac                                                                                          ┆   ┆
0x2ce7c…2ce7f        }
0x2ce7f…2ce80        0a                                                                                                ┆ ┆
0x2ce80…2cea0        b0 a1 42 2e 20 53 59 4e 54 41 58 20 44 49 41 47 52 41 4d 53 0d 0a 0d 0a 54 68 69 73 20 61 70 70   ┆  B. SYNTAX DIAGRAMS    This app┆
0x2cea0…2cec0        65 6e 64 69 78 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 74 68 65 20 73 79 6e 74 61 78 20 64 69   ┆endix contains all the syntax di┆
0x2cec0…2cee0        61 67 72 61 6d 73 20 6f 66 20 74 68 65 20 0a 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 52 65 61   ┆agrams of the  definition of Rea┆
0x2cee0…2cf00        6c 2d 54 69 6d 65 20 50 61 73 63 61 6c 20 69 6e 20 61 6e 20 61 74 74 65 6d 70 74 65 64 20 6e 61   ┆l-Time Pascal in an attempted na┆
0x2cf00…2cf20        74 75 72 61 6c 20 74 6f 70 2d 0a 64 6f 77 6e 20 72 65 61 64 69 6e 67 20 6f 72 64 65 72 2e 20 45   ┆tural top- down reading order. E┆
0x2cf20…2cf40        61 63 68 20 64 69 61 67 72 61 6d 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 66 65 72 65 6e 63 65   ┆ach diagram contains a reference┆
0x2cf40…2cf60        20 74 6f 20 74 68 65 20 0a 73 65 63 74 69 6f 6e 20 77 68 65 72 65 20 69 74 20 69 73 20 69 6e 74   ┆ to the  section where it is int┆
0x2cf60…2cf80        72 6f 64 75 63 65 64 20 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64   ┆roduced and where the associated┆
0x2cf80…2cf9c        20 0a 73 65 6d 61 6e 74 69 63 73 20 61 72 65 20 65 78 70 6c 61 69 6e 65 64 2e 0d 0a               ┆  semantics are explained.  ┆
0x2cf9c…2cf9f        FormFeed {
0x2cf9c…2cf9f          0c 80 d4                                                                                          ┆   ┆
0x2cf9c…2cf9f        }
0x2cf9f…2cfa0        0a                                                                                                ┆ ┆
0x2cfa0…2cfa2        0d 0a                                                                                             ┆  ┆
0x2cfa2…2cfa5        FormFeed {
0x2cfa2…2cfa5          0c 80 8c                                                                                          ┆   ┆
0x2cfa2…2cfa5        }
0x2cfa5…2cfa8        0a 0d 0a                                                                                          ┆   ┆
0x2cfa8…2cfab        FormFeed {
0x2cfa8…2cfab          0c 80 8c                                                                                          ┆   ┆
0x2cfa8…2cfab        }
0x2cfab…2cfae        0a 0d 0a                                                                                          ┆   ┆
0x2cfae…2cfb1        FormFeed {
0x2cfae…2cfb1          0c 80 8c                                                                                          ┆   ┆
0x2cfae…2cfb1        }
0x2cfb1…2cfb4        0a 0d 0a                                                                                          ┆   ┆
0x2cfb4…2cfb7        FormFeed {
0x2cfb4…2cfb7          0c 80 8c                                                                                          ┆   ┆
0x2cfb4…2cfb7        }
0x2cfb7…2cfba        0a 0d 0a                                                                                          ┆   ┆
0x2cfba…2cfbd        FormFeed {
0x2cfba…2cfbd          0c 80 8c                                                                                          ┆   ┆
0x2cfba…2cfbd        }
0x2cfbd…2cfc0        0a 0d 0a                                                                                          ┆   ┆
0x2cfc0…2cfc3        FormFeed {
0x2cfc0…2cfc3          0c 80 8c                                                                                          ┆   ┆
0x2cfc0…2cfc3        }
0x2cfc3…2cfc6        0a 0d 0a                                                                                          ┆   ┆
0x2cfc6…2cfc9        FormFeed {
0x2cfc6…2cfc9          0c 80 8c                                                                                          ┆   ┆
0x2cfc6…2cfc9        }
0x2cfc9…2cfcc        0a 0d 0a                                                                                          ┆   ┆
0x2cfcc…2cfcf        FormFeed {
0x2cfcc…2cfcf          0c 80 8c                                                                                          ┆   ┆
0x2cfcc…2cfcf        }
0x2cfcf…2cfd2        0a 0d 0a                                                                                          ┆   ┆
0x2cfd2…2cfd5        FormFeed {
0x2cfd2…2cfd5          0c 80 8c                                                                                          ┆   ┆
0x2cfd2…2cfd5        }
0x2cfd5…2cfd8        0a 0d 0a                                                                                          ┆   ┆
0x2cfd8…2cfdb        FormFeed {
0x2cfd8…2cfdb          0c 80 8c                                                                                          ┆   ┆
0x2cfd8…2cfdb        }
0x2cfdb…2cfe0        0a b0 a1 43 2e                                                                                    ┆   C.┆
0x2cfe0…2d000        20 50 52 45 44 45 46 49 4e 45 44 20 45 4e 54 49 54 49 45 53 0d 0a 0d 0a 49 6e 20 73 65 63 74 69   ┆ PREDEFINED ENTITIES    In secti┆
0x2d000…2d020 (360,) 6f 6e 20 43 2e 31 20 61 20 6c 69 73 74 20 6f 66 20 70 72 65 64 65 66 69 6e 65 64 20 65 6e 74 69   ┆on C.1 a list of predefined enti┆
0x2d020…2d040        74 69 65 73 20 69 73 20 67 69 76 65 6e 20 69 6e 20 0a 61 6c 70 68 61 62 65 74 69 63 61 6c 20 6f   ┆ties is given in  alphabetical o┆
0x2d040…2d060        72 64 65 72 20 61 6e 64 20 77 69 74 68 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 73   ┆rder and with reference to the s┆
0x2d060…2d080        65 63 74 69 6f 6e 73 20 77 68 65 72 65 20 0a 74 68 65 20 65 6e 74 69 74 69 65 73 20 61 72 65 20   ┆ections where  the entities are ┆
0x2d080…2d0a0        64 65 73 63 72 69 62 65 64 2e 20 54 68 65 20 74 79 70 65 73 20 61 6e 64 20 70 73 65 75 64 6f 2d   ┆described. The types and pseudo-┆
0x2d0a0…2d0c0        66 75 6e 63 74 69 6f 6e 73 20 0a 77 68 69 63 68 20 61 72 65 20 69 6e 74 72 69 6e 73 69 63 20 74   ┆functions  which are intrinsic t┆
0x2d0c0…2d0e0        6f 20 74 68 65 20 6c 61 6e 67 75 61 67 65 2c 20 64 65 6e 6f 74 65 64 20 62 79 20 6b 65 79 77 6f   ┆o the language, denoted by keywo┆
0x2d0e0…2d100        72 64 73 20 0a 72 61 74 68 65 72 20 74 68 61 6e 20 70 72 65 64 65 66 69 6e 65 64 20 6e 61 6d 65   ┆rds  rather than predefined name┆
0x2d100…2d120        73 2c 20 61 72 65 20 6c 69 73 74 65 64 20 69 6e 20 73 65 63 74 69 6f 6e 73 20 43 2e 32 20 61 6e   ┆s, are listed in sections C.2 an┆
0x2d120…2d140        64 20 0a 43 2e 32 2e 0d 0a 0d 0a 0d 0a b0 a1 43 2e 31 20 50 72 65 64 65 66 69 6e 64 20 52 6f 75   ┆d  C.2.        C.1 Predefind Rou┆
0x2d140…2d160        74 69 6e 65 73 2c 20 54 79 70 65 73 2c 20 54 79 70 65 20 46 61 6d 69 6c 69 65 73 2c 20 61 6e 64   ┆tines, Types, Type Families, and┆
0x2d160…2d16d        20 43 6f 6e 73 74 61 6e 73 0d 0a 0d 0a                                                            ┆ Constans    ┆
0x2d16d…2d1a6        Params {
0x2d16d…2d1a6          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 43 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         C1                 ┆
0x2d16d…2d1a6          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x2d16d…2d1a6        }
0x2d1a6…2d1df        Params {
0x2d1a6…2d1df          04 00 2d 4e 0a 00 06 00 00 00 00 03 01 3c 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆  -N         <1                 ┆
0x2d1a6…2d1df          00 00 00 00 00 00 00 00 05 0f 19 23 2d 37 41 4b 55 5f 69 73 7d 87 91 ff 04                        ┆           #-7AKU_iså    ┆
0x2d1a6…2d1df        }
0x2d1df…2d1e0        0a                                                                                                ┆ ┆
0x2d1e0…2d200        a1 73 65 63 74 69 6f 6e 20 6b 69 6e 64 09 09 64 65 66 69 6e 69 74 69 6f 6e 05 0d 0a 33 2e 34 2e   ┆ section kind  definition   3.4.┆
0x2d200…2d220 (361,) 33 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 61 62 73 28 6e 3a 20 69 6e 74 65 67 65 72 29 3a 20 30   ┆3   FUNCTION  abs(n: integer): 0┆
0x2d220…2d240        2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38 09 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 61 6c 6c 6f   ┆..maxint  3.8     FUNCTION  allo┆
0x2d240…2d260        63 70 6f 6f 6c 20 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 0d 0a 09 09 20 20 20 20 20 20 20 20 20   ┆cpool (VAR p: pool;             ┆
0x2d260…2d280        20 20 20 20 20 20 6e 6f 5f 6f 66 5f 62 75 66 73 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 3a 20 30 2e   ┆      no_of_bufs: 1..maxint): 0.┆
0x2d280…2d2a0        2e 6d 61 78 69 6e 74 0d 0a 35 2e 39 20 20 20 20 20 54 59 50 45 20 20 20 20 20 20 62 75 66 66 65   ┆.maxint  5.9     TYPE      buffe┆
0x2d2a0…2d2c0        72 28 62 75 66 73 69 7a 65 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 3d 0d 0a 09 09 09 20 50 41 43 4b   ┆r(bufsize: 1..maxint)=      PACK┆
0x2d2c0…2d2e0        45 44 20 41 52 52 41 59 28 30 2e 2e 62 75 66 73 69 7a 65 2d 31 29 20 4f 46 20 62 79 74 65 0d 0a   ┆ED ARRAY(0..bufsize-1) OF byte  ┆
0x2d2e0…2d300        31 30 2e 31 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 62 75 66 63 6f 75 6e 74 28 56 41 52 20 73   ┆10.1    FUNCTION  bufcount(VAR s┆
0x2d300…2d320        74 61 63 6b 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38   ┆tack: reference): 0..maxint  3.8┆
0x2d320…2d340        20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 62 75 66 73 69 7a 65 28 56 41 52 20 72 3a 20 72 65   ┆     FUNCTION  bufsize(VAR r: re┆
0x2d340…2d360        66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e   ┆ference): 0..maxint  3.8     FUN┆
0x2d360…2d380        43 54 49 4f 4e 20 20 62 75 66 73 69 7a 65 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3a 20 30 2e   ┆CTION  bufsize(VAR ch: chain: 0.┆
0x2d380…2d3a0        2e 6d 61 78 69 6e 74 0d 0a 33 2e 35 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 62 79 74 28 76   ┆.maxint  3.5     FUNCTION  byt(v┆
0x2d3a0…2d3c0        3a 69 6e 74 65 67 65 72 29 3a 20 62 79 74 65 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f   ┆:integer): byte  3.8     FUNCTIO┆
0x2d3c0…2d3e0        4e 20 20 62 79 74 65 63 6f 75 6e 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20   ┆N  bytecount(VAR r: reference): ┆
0x2d3e0…2d400        30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 62 79 74   ┆0..maxint  3.8     FUNCTION  byt┆
0x2d400…2d420 (362,) 65 63 6f 75 6e 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 6d 61 78 69 6e 74   ┆ecount(VAR ch: chain): 0..maxint┆
0x2d420…2d440        0d 0a 31 30 2e 32 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 64 6f 77 6e 28 56 41   ┆  10.2    PROCEDURE chaindown(VA┆
0x2d440…2d460        52 20 63 68 3a 20 63 68 61 69 6e 29 0d 0a 31 30 2e 32 20 20 20 20 50 52 4f 43 45 44 55 52 45 20   ┆R ch: chain)  10.2    PROCEDURE ┆
0x2d460…2d480        63 68 61 69 6e 65 78 74 72 61 63 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 56 41 52 20   ┆chainextract(VAR ch: chain; VAR ┆
0x2d480…2d4a0        72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 30 2e 32 20 20 20 20 50 52 4f 43 45 44 55   ┆ref: reference)  10.2    PROCEDU┆
0x2d4a0…2d4c0        52 45 20 63 68 61 69 6e 69 6e 73 65 72 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 56 41   ┆RE chaininsert(VAR ch: chain; VA┆
0x2d4c0…2d4e0        52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 30 2e 32 20 20 20 20 46 55 4e 43 54   ┆R ref: reference)  10.2    FUNCT┆
0x2d4e0…2d500        49 4f 4e 20 20 63 68 61 69 6e 6c 65 6e 67 74 68 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 3a   ┆ION  chainlength(VAR ch: chain):┆
0x2d500…2d520        20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 31 30 2e 32 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 63 68   ┆ 0..maxint  10.2    PROCEDURE ch┆
0x2d520…2d540        61 69 6e 72 65 73 65 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 0d 0a 31 30 2e 32 20 20 20   ┆ainreset(VAR ch: chain)  10.2   ┆
0x2d540…2d560        20 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 73 74 61 72 74 28 56 41 52 20 63 68 3a 20 63 68   ┆ PROCEDURE chainstart(VAR ch: ch┆
0x2d560…2d580        61 69 6e 29 0d 0a 31 30 2e 32 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 63 68 61 69 6e 75 70 28   ┆ain)  10.2    PROCEDURE chainup(┆
0x2d580…2d5a0        56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 0d 0a 33 2e 34 2e 32 20 20 20 46 55 4e 43 54 49 4f 4e   ┆VAR ch: chain)  3.4.2   FUNCTION┆
0x2d5a0…2d5c0        20 20 63 68 72 28 6e 3a 20 30 2e 2e 32 35 35 29 3a 20 63 68 61 72 0d 0a 31 31 2e 31 2e 32 20 20   ┆  chr(n: 0..255): char  11.1.2  ┆
0x2d5c0…2d5e0        50 52 4f 43 45 44 55 52 45 20 63 6c 6f 73 65 70 6f 72 74 28 56 41 52 20 70 3a 20 70 6f 72 74 29   ┆PROCEDURE closeport(VAR p: port)┆
0x2d5e0…2d600        0d 0a 31 31 2e 33 2e 31 20 20 50 52 4f 43 45 44 55 52 45 20 63 6f 6e 6e 65 63 74 28 56 41 52 20   ┆  11.3.1  PROCEDURE connect(VAR ┆
0x2d600…2d620 (363,) 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 20 09 09 09   ┆p: port; index: 1..maxint;      ┆
0x2d620…2d640        56 41 52 20 63 6f 6d 70 6c 2c 20 64 69 73 63 3a 20 72 65 66 65 72 65 6e 63 65 3b 0d 0a 20 20 09   ┆VAR compl, disc: reference;     ┆
0x2d640…2d660        09 20 20 09 49 4e 53 50 45 43 54 20 72 65 6d 6f 74 65 5f 6e 61 6d 65 3a 20 73 74 72 69 6e 67 3b   ┆    INSPECT remote_name: string;┆
0x2d660…2d680        0d 0a 09 09 09 73 65 72 76 69 63 65 3a 20 63 6f 6e 6e 5f 73 65 72 76 69 63 65 29 0d 0a 31 31 2e   ┆     service: conn_service)  11.┆
0x2d680…2d6a0        33 2e 31 20 20 54 59 50 45 09 20 20 20 20 63 6f 6e 6e 5f 73 65 72 76 69 63 65 3d 20 28 63 73 5f   ┆3.1  TYPE     conn_service= (cs_┆
0x2d6a0…2d6c0        6e 6f 72 6d 61 6c 2c 20 63 73 5f 68 69 67 68 29 0d 0a 8c 83 c8 0a a1 73 65 63 74 69 6f 6e 20 6b   ┆normal, cs_high)       section k┆
0x2d6c0…2d6e0        69 6e 64 09 09 64 65 66 69 6e 69 74 69 6f 6e 05 0d 0a 39 2e 31 20 20 20 20 20 54 59 50 45 20 20   ┆ind  definition   9.1     TYPE  ┆
0x2d6e0…2d700        20 20 20 20 63 72 65 61 74 65 5f 72 65 73 75 6c 74 3d 20 28 63 72 65 61 74 65 5f 6f 6b 2c 20 6e   ┆    create_result= (create_ok, n┆
0x2d700…2d720        6f 5f 6d 65 6d 6f 72 79 2c 20 2e 2e 2e 29 0d 0a 31 31 2e 34 20 20 20 20 46 55 4e 43 54 49 4f 4e   ┆o_memory, ...)  11.4    FUNCTION┆
0x2d720…2d740        20 20 63 72 65 64 69 74 63 6f 75 6e 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 29 3a 20   ┆  creditcount(VAR r: referenc): ┆
0x2d740…2d760        30 2e 2e 6d 61 78 69 6e 74 0d 0a 35 2e 39 20 20 20 20 20 54 59 50 45 20 20 20 20 20 20 64 61 74   ┆0..maxint  5.9     TYPE      dat┆
0x2d760…2d780        61 61 72 65 61 28 6f 66 66 73 65 74 2c 20 74 6f 70 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 20 3d 0d   ┆aarea(offset, top: 0..maxint) = ┆
0x2d780…2d7a0        0a 09 09 09 50 41 43 4b 45 44 20 41 52 52 41 59 28 6f 66 66 73 65 74 2e 2e 74 6f 70 2d 31 29 20   ┆    PACKED ARRAY(offset..top-1) ┆
0x2d7a0…2d7c0        4f 46 20 62 79 74 65 0d 0a 33 2e 35 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 64 65 63 28 56   ┆OF byte  3.5     PROCEDURE dec(V┆
0x2d7c0…2d7e0        41 52 20 76 3a 20 6d 74 79 70 65 29 0d 0a 39 2e 32 2e 32 20 20 20 50 52 4f 43 45 44 55 52 45 20   ┆AR v: mtype)  9.2.2   PROCEDURE ┆
0x2d7e0…2d800        64 65 6c 61 79 28 6e 6f 5f 6f 66 5f 6d 73 65 63 73 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 31   ┆delay(no_of_msecs: 0..maxint)  1┆
0x2d800…2d820 (364,) 31 2e 33 2e 31 20 20 50 52 4f 43 45 44 55 52 45 20 64 69 73 63 6f 6e 6e 65 63 74 28 56 41 52 20   ┆1.3.1  PROCEDURE disconnect(VAR ┆
0x2d820…2d840        70 3a 20 70 6f 72 74 3b 0d 0a 09 09 09 20 20 20 20 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69   ┆p: port;          index: 1..maxi┆
0x2d840…2d860        6e 74 29 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 65 76 65 6e 74 6b 69 6e 64   ┆nt)  3.8     FUNCTION  eventkind┆
0x2d860…2d880        28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 65 76 65 6e 74 5f 74 79 70 65 0d 0a   ┆(VAR r: reference): event_type  ┆
0x2d880…2d8a0        33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 65 76 65 6e 74 6b 69 6e 64 28 56 41 52 20   ┆3.8     FUNCTION  eventkind(VAR ┆
0x2d8a0…2d8c0        63 68 3a 20 63 68 61 69 6e 29 3a 20 65 76 65 6e 74 5f 74 79 70 65 0d 0a 33 2e 38 20 20 20 20 20   ┆ch: chain): event_type  3.8     ┆
0x2d8c0…2d8e0        54 59 50 45 20 20 20 20 20 20 65 76 65 6e 74 5f 74 79 70 65 3d 20 28 6e 6f 74 5f 65 76 65 6e 74   ┆TYPE      event_type= (not_event┆
0x2d8e0…2d900        2c 20 6d 65 73 73 61 67 65 5f 65 76 65 6e 74 2c 0d 0a 09 09 20 20 20 20 09 20 20 20 20 20 20 20   ┆, message_event,                ┆
0x2d900…2d920        61 6e 73 77 65 72 5f 65 76 65 6e 74 2c 20 70 72 6f 63 65 73 73 5f 72 65 6d 6f 76 65 64 2c 0d 0a   ┆answer_event, process_removed,  ┆
0x2d920…2d940        09 09 09 20 20 20 20 20 20 20 70 6f 72 74 5f 63 6c 6f 73 65 64 2c 20 64 69 73 63 6f 6e 6e 65 63   ┆          port_closed, disconnec┆
0x2d940…2d960        74 65 64 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 6c 65 74 74 65 72 5f 73 65 6e 74 2c 20 6c 65 74   ┆ted,            letter_sent, let┆
0x2d960…2d980        74 65 72 5f 61 72 72 69 76 65 64 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 6c 6f 63 61 6c 5f 63 6f   ┆ter_arrived,            local_co┆
0x2d980…2d9a0        6e 6e 65 63 74 2c 20 72 65 6d 6f 74 65 5f 63 6f 6e 6e 65 63 74 2c 0d 0a 09 09 09 20 20 20 20 20   ┆nnect, remote_connect,          ┆
0x2d9a0…2d9c0        20 20 72 65 73 65 74 5f 69 6e 64 69 63 61 74 69 6f 6e 2c 20 72 65 73 65 74 5f 63 6f 6d 70 6c 65   ┆  reset_indication, reset_comple┆
0x2d9c0…2d9e0        74 69 6f 6e 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 63 72 65 64 69 74 2c 20 64 61 74 61 5f 73 65   ┆tion,            credit, data_se┆
0x2d9e0…2da00        6e 74 2c 20 64 61 74 61 5f 61 72 72 69 76 65 64 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 64 61 74   ┆nt, data_arrived,            dat┆
0x2da00…2da20 (365,) 61 5f 6f 76 65 72 72 75 6e 2c 20 64 75 6d 6d 79 5f 6c 65 74 74 65 72 2c 0d 0a 09 09 09 20 20 20   ┆a_overrun, dummy_letter,        ┆
0x2da20…2da40        20 20 20 20 64 75 6d 6d 79 5f 6c 63 6e 63 74 2c 20 64 75 6d 6d 79 5f 72 63 6e 63 74 2c 0d 0a 09   ┆    dummy_lcnct, dummy_rcnct,   ┆
0x2da40…2da60        09 09 20 20 20 20 20 20 20 64 75 6d 6d 79 5f 72 69 6e 64 69 63 2c 20 64 75 6d 6d 79 5f 72 63 6d   ┆         dummy_rindic, dummy_rcm┆
0x2da60…2da80        70 6c 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 64 75 6d 6d 79 5f 63 72 65 64 69 74 2c 20 64 75 6d   ┆pl,            dummy_credit, dum┆
0x2da80…2daa0        6d 79 5f 73 65 6e 74 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 64 75 6d 6d 79 5f 61 72 72 69 76 65   ┆my_sent,            dummy_arrive┆
0x2daa0…2dac0        64 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 67 65 74 62 75 66 28 56 41 52   ┆d)  3.8     PROCEDURE getbuf(VAR┆
0x2dac0…2dae0        20 70 3a 20 70 6f 6f 6c 3b 0d 0a 09 09 09 20 56 41 52 20 72 61 3a 20 6d 61 69 6c 62 6f 78 2c 20   ┆ p: pool;      VAR ra: mailbox, ┆
0x2dae0…2db00        56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 39 2e 32 2e 32 20 20 20 46 55 4e 43 54   ┆VAR r: reference)  9.2.2   FUNCT┆
0x2db00…2db20        49 4f 4e 20 20 67 65 74 62 75 66 64 65 6c 61 79 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 20 56 41   ┆ION  getbufdelay(VAR p: pool; VA┆
0x2db20…2db40        52 20 72 61 3a 20 6d 61 69 6c 62 6f 78 3b 0d 0a 09 09 09 20 20 20 20 20 20 56 41 52 20 72 3a 20   ┆R ra: mailbox;           VAR r: ┆
0x2db40…2db60        72 65 66 65 72 65 6e 63 65 3b 0d 0a 09 09 09 20 20 20 20 20 20 6e 6f 5f 6f 66 5f 6d 73 65 63 73   ┆reference;           no_of_msecs┆
0x2db60…2db80        3a 20 30 2e 2e 6d 61 78 69 6e 74 29 3a 20 77 61 69 74 5f 72 65 73 75 6c 74 0d 0a 31 31 2e 33 2e   ┆: 0..maxint): wait_result  11.3.┆
0x2db80…2dba0        31 20 20 50 52 4f 43 45 44 55 52 45 20 67 65 74 63 6f 6e 6e 65 63 74 69 6f 6e 28 56 41 52 20 70   ┆1  PROCEDURE getconnection(VAR p┆
0x2dba0…2dbc0        3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 09 20 56   ┆: port; index: 1..maxint;      V┆
0x2dbc0…2dbe0        41 52 20 63 6f 6d 70 6c 2c 20 64 69 73 63 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 31 2e 33   ┆AR compl, disc: reference)  11.3┆
0x2dbe0…2dc00        2e 32 20 20 50 52 4f 43 45 44 55 52 45 20 67 65 74 63 72 65 64 69 74 28 56 41 52 20 70 3a 20 70   ┆.2  PROCEDURE getcredit(VAR p: p┆
0x2dc00…2dc20 (366,) 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 09 20 20 20 20 56   ┆ort; index: 1..maxint;         V┆
0x2dc20…2dc40        41 52 20 63 72 65 64 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 31 2e 33 2e 32 20 20   ┆AR credbuf: reference)  11.3.2  ┆
0x2dc40…2dc60        50 52 4f 43 45 44 55 52 45 20 67 65 74 72 65 73 65 74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20   ┆PROCEDURE getreset(VAR p: port; ┆
0x2dc60…2dc80        69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 09 20 20 20 56 41 52 20 69 6e 64   ┆index: 1..maxint;        VAR ind┆
0x2dc80…2dca0        69 63 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e   ┆ic: reference)  3.8     FUNCTION┆
0x2dca0…2dcc0        20 20 68 6f 6d 65 74 65 73 74 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 0d 0a 09 09 09 20 20 20 56   ┆  hometest(VAR p: pool;        V┆
0x2dcc0…2dce0        41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 33 2e 35   ┆AR ref: reference): boolean  3.5┆
0x2dce0…2dd00        20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 69 6e 63 28 56 41 52 20 76 3a 20 6d 74 79 70 65 29   ┆     PROCEDURE inc(VAR v: mtype)┆
0x2dd00…2dd20        0d 0a 31 31 2e 34 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 69 6e 64 65 78 28 56 41 52 20 72 3a   ┆  11.4    FUNCTION  index(VAR r:┆
0x2dd20…2dd38        20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a                           ┆ reference): 0..maxint  ┆
0x2dd38…2dd3b        FormFeed {
0x2dd38…2dd3b          0c 83 c8                                                                                          ┆   ┆
0x2dd38…2dd3b        }
0x2dd3b…2dd40        0a a1 73 65 63                                                                                    ┆  sec┆
0x2dd40…2dd60        74 69 6f 6e 20 6b 69 6e 64 09 09 64 65 66 69 6e 69 74 69 6f 6e 05 0d 0a 33 2e 38 20 20 20 20 20   ┆tion kind  definition   3.8     ┆
0x2dd60…2dd80        46 55 4e 43 54 49 4f 4e 20 20 69 6e 69 74 70 6f 6f 6c 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 0d   ┆FUNCTION  initpool(VAR p: pool; ┆
0x2dd80…2dda0        0a 09 09 09 20 20 20 6e 6f 5f 6f 66 5f 62 75 66 73 2c 20 62 75 66 73 69 7a 65 3a 20 30 2e 2e 6d   ┆       no_of_bufs, bufsize: 0..m┆
0x2dda0…2ddc0        61 78 69 6e 74 0d 0a 09 09 09 20 20 20 6d 65 6d 3a 20 6d 65 6d 5f 74 79 70 65 29 3a 20 30 2e 2e   ┆axint        mem: mem_type): 0..┆
0x2ddc0…2dde0        6d 61 78 69 6e 74 0d 0a 33 2e 35 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 69 6e 74 28 76 3a   ┆maxint  3.5     FUNCTION  int(v:┆
0x2dde0…2de00        6d 74 79 70 65 29 3a 20 69 6e 74 65 67 65 72 0d 0a 39 2e 31 20 20 20 20 20 54 59 50 45 20 20 20   ┆mtype): integer  9.1     TYPE   ┆
0x2de00…2de20 (367,) 20 20 20 6c 69 6e 6b 5f 72 65 73 75 6c 74 3d 20 28 6c 69 6e 6b 5f 6f 6b 2c 20 61 6c 72 65 61 64   ┆   link_result= (link_ok, alread┆
0x2de20…2de40        79 5f 6c 69 6e 6b 65 64 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 20 65 78 74 65 72 6e 61 6c 5f 6e   ┆y_linked,             external_n┆
0x2de40…2de60        6f 74 5f 66 6f 75 6e 64 2c 20 2e 2e 2e 29 0d 0a 39 2e 32 2e 31 20 20 20 46 55 4e 43 54 49 4f 4e   ┆ot_found, ...)  9.2.1   FUNCTION┆
0x2de60…2de80        20 20 6c 6f 63 6b 65 64 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 29 3a 20 62 6f 6f 6c   ┆  locked(VAR mbx: mailbox): bool┆
0x2de80…2dea0        65 61 6e 0d 0a 31 31 2e 35 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6d 61 78 63 6f 6e 6e 65 63   ┆ean  11.5    FUNCTION  maxconnec┆
0x2dea0…2dec0        74 69 6f 6e 73 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 34 2e 33 20 20 20 43 4f 4e 53 54 20   ┆tions: 0..maxint  3.4.3   CONST ┆
0x2dec0…2dee0        20 20 20 20 6d 61 78 69 6e 74 0d 0a 31 31 2e 35 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6d 61   ┆    maxint  11.5    FUNCTION  ma┆
0x2dee0…2df00        78 6c 65 74 74 65 72 73 69 7a 65 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38 20 20 20 20 20   ┆xlettersize: 0..maxint  3.8     ┆
0x2df00…2df20        54 59 50 45 20 20 20 20 20 20 6d 65 6d 5f 74 79 70 65 3d 20 28 2e 2e 2e 29 0d 0a 33 2e 34 2e 33   ┆TYPE      mem_type= (...)  3.4.3┆
0x2df20…2df40        20 20 20 43 4f 4e 53 54 20 20 20 20 20 6d 69 6e 69 6e 74 0d 0a 33 2e 37 20 20 20 20 20 50 52 4f   ┆   CONST     minint  3.7     PRO┆
0x2df40…2df60        43 45 44 55 52 45 20 6e 65 77 28 56 41 52 20 70 74 72 3a 20 70 74 72 74 79 70 65 29 0d 0a 33 2e   ┆CEDURE new(VAR ptr: ptrtype)  3.┆
0x2df60…2df80        37 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6e 69 6c 28 56 41 52 20 70 74 72 3a 20 70 74 72   ┆7     FUNCTION  nil(VAR ptr: ptr┆
0x2df80…2dfa0        74 79 70 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e   ┆type): boolean  3.8     FUNCTION┆
0x2dfa0…2dfc0        20 20 6e 69 6c 28 56 41 52 20 70 72 3a 20 70 72 6f 63 65 73 73 29 3a 20 62 6f 6f 6c 65 61 6e 0d   ┆  nil(VAR pr: process): boolean ┆
0x2dfc0…2dfe0        0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6e 69 6c 28 56 41 52 20 72 65 66 3a 20   ┆ 3.8     FUNCTION  nil(VAR ref: ┆
0x2dfe0…2e000        72 65 66 65 72 65 6e 63 65 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e   ┆reference): boolean  3.8     FUN┆
0x2e000…2e020 (368,) 43 54 49 4f 4e 20 20 6f 66 66 73 65 74 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a   ┆CTION  offset(VAR r: reference):┆
0x2e020…2e040        20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6f 66   ┆ 0..maxint  3.8     FUNCTION  of┆
0x2e040…2e060        66 73 65 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a   ┆fset(VAR ch: chain): 0..maxint  ┆
0x2e060…2e080        39 2e 32 2e 31 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 6f 70 65 6e 28 56 41 52 20 6d 62 78 3a 20   ┆9.2.1   FUNCTION  open(VAR mbx: ┆
0x2e080…2e0a0        6d 61 69 6c 62 6f 78 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 31 31 2e 31 20 20 20 20 50 52 4f 43 45   ┆mailbox): boolean  11.1    PROCE┆
0x2e0a0…2e0c0        44 55 52 45 20 6f 70 65 6e 70 6f 72 74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 56 41 52 20 63   ┆DURE openport(VAR p: port; VAR c┆
0x2e0c0…2e0e0        6c 6f 73 65 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 3b 0d 0a 09 09 09 20 49 4e 53 50 45 43 54   ┆losebuf: reference;      INSPECT┆
0x2e0e0…2e100        20 6e 61 6d 65 3a 20 73 74 72 69 6e 67 3b 20 73 63 6f 70 65 3a 20 73 63 6f 70 65 5f 74 79 70 65   ┆ name: string; scope: scope_type┆
0x2e100…2e120        3b 0d 0a 09 09 09 20 6e 6f 5f 6f 66 5f 63 6f 6e 73 3a 20 30 2e 2e 6d 61 78 69 6e 74 3b 20 72 63   ┆;      no_of_cons: 0..maxint; rc┆
0x2e120…2e140        76 5f 61 6c 6c 3a 20 62 6f 6f 6c 65 61 6e 29 0d 0a 33 2e 34 20 20 20 20 20 46 55 4e 43 54 49 4f   ┆v_all: boolean)  3.4     FUNCTIO┆
0x2e140…2e160        4e 20 20 6f 72 64 28 76 3a 20 6f 74 79 70 65 29 3a 20 69 6e 74 65 67 65 72 0d 0a 39 2e 32 2e 31   ┆N  ord(v: otype): integer  9.2.1┆
0x2e160…2e180        20 20 20 46 55 4e 43 54 49 4f 4e 20 20 70 61 73 73 69 76 65 28 56 41 52 20 6d 62 78 3a 20 6d 61   ┆   FUNCTION  passive(VAR mbx: ma┆
0x2e180…2e1a0        69 6c 62 6f 78 29 3a 20 62 6f 6f 6c 65 61 6e 0d 0a 31 30 2e 31 20 20 20 20 50 52 4f 43 45 44 55   ┆ilbox): boolean  10.1    PROCEDU┆
0x2e1a0…2e1c0        52 45 20 70 6f 70 28 56 41 52 20 73 74 61 63 6b 5f 68 61 6e 64 6c 65 2c 20 70 6f 70 70 65 64 5f   ┆RE pop(VAR stack_handle, popped_┆
0x2e1c0…2e1e0        62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 34 20 20 20 20 20 46 55 4e 43 54 49 4f   ┆buf: reference)  3.4     FUNCTIO┆
0x2e1e0…2e200        4e 20 20 70 72 65 64 28 76 3a 20 6f 74 79 70 65 29 3a 20 6f 74 79 70 65 0d 0a 31 30 2e 31 20 20   ┆N  pred(v: otype): otype  10.1  ┆
0x2e200…2e220 (369,) 20 20 50 52 4f 43 45 44 55 52 45 20 70 75 73 68 28 56 41 52 20 73 74 61 63 6b 5f 68 61 6e 64 6c   ┆  PROCEDURE push(VAR stack_handl┆
0x2e220…2e240        65 2c 20 6e 65 77 5f 74 6f 70 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 38 20 20 20 20 20   ┆e, new_top: reference)  3.8     ┆
0x2e240…2e260        50 52 4f 43 45 44 55 52 45 20 70 75 74 62 75 66 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63   ┆PROCEDURE putbuf(VAR r: referenc┆
0x2e260…2e280        65 29 0d 0a 31 31 2e 34 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 72 65 61 73 6f 6e 28 56 41 52   ┆e)  11.4    FUNCTION  reason(VAR┆
0x2e280…2e2a0        20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 72 65 61 73 6f 6e 5f 74 79 70 65 0d 0a 31 31 2e   ┆ r: reference): reason_type  11.┆
0x2e2a0…2e2c0        34 20 20 20 20 54 59 50 45 20 20 20 20 20 20 72 65 61 73 6f 6e 5f 74 79 70 65 3d 20 28 72 65 61   ┆4    TYPE      reason_type= (rea┆
0x2e2c0…2e2e0        73 6f 6e 5f 6f 6b 2c 20 72 65 61 73 6f 6e 5f 6e 61 6d 65 2c 0d 0a 09 09 09 20 20 20 20 20 20 20   ┆son_ok, reason_name,            ┆
0x2e2e0…2e300        20 72 65 61 73 6f 6e 5f 72 65 73 73 6f 75 72 63 65 2c 20 72 65 61 73 6f 6e 5f 63 6c 6f 73 65 64   ┆ reason_ressource, reason_closed┆
0x2e300…2e320        2c 0d 0a 09 09 09 20 20 20 20 20 20 20 20 72 65 61 73 6f 6e 5f 6e 65 74 77 6f 72 6b 29 0d 0a 31   ┆,             reason_network)  1┆
0x2e320…2e340        31 2e 33 2e 32 20 20 50 52 4f 43 45 44 55 52 45 20 72 65 63 65 69 76 65 28 56 41 52 20 70 3a 20   ┆1.3.2  PROCEDURE receive(VAR p: ┆
0x2e340…2e360        70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 0d 0a 09 09 09 20 20 56 41 52   ┆port; index: 1..maxint       VAR┆
0x2e360…2e380        20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 31 2e 33 2e 32 20 20 50 52   ┆ databuf: reference)  11.3.2  PR┆
0x2e380…2e3a0        4f 43 45 44 55 52 45 20 72 65 63 65 69 76 65 61 6c 6c 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20   ┆OCEDURE receiveall(VAR p: port; ┆
0x2e3a0…2e3c0        56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 31 2e 32 20 20 20   ┆VAR databuf: reference)  11.2   ┆
0x2e3c0…2e3e0        20 50 52 4f 43 45 44 55 52 45 20 72 65 63 65 69 76 65 6c 65 74 74 65 72 28 56 41 52 20 70 3a 20   ┆ PROCEDURE receiveletter(VAR p: ┆
0x2e3e0…2e400        70 6f 72 74 3b 0d 0a 09 09 09 20 20 20 20 20 20 20 20 56 41 52 20 64 61 74 61 62 75 66 3a 20 72   ┆port;             VAR databuf: r┆
0x2e400…2e420 (370,) 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 72 65 6c   ┆eference)  3.8     FUNCTION  rel┆
0x2e420…2e440        65 61 73 65 70 6f 6f 6c 28 56 41 52 20 70 3a 20 70 6f 6f 6c 3b 0d 0a 09 09 09 20 20 20 20 20 20   ┆easepool(VAR p: pool;           ┆
0x2e440…2e460        6e 6f 5f 6f 66 5f 62 75 66 73 3a 20 31 2e 2e 6d 61 78 69 6e 74 29 3a 20 30 2e 2e 6d 61 78 69 6e   ┆no_of_bufs: 1..maxint): 0..maxin┆
0x2e460…2e480        74 0d 0a 8c 83 e0 0a a1 73 65 63 74 69 6f 6e 20 6b 69 6e 64 09 09 64 65 66 69 6e 69 74 69 6f 6e   ┆t       section kind  definition┆
0x2e480…2e4a0        05 0d 0a 39 2e 31 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 72 65 6d 6f 76 65 28 56 41 52 20   ┆   9.1     PROCEDURE remove(VAR ┆
0x2e4a0…2e4c0        70 72 3a 20 70 72 6f 63 65 73 73 29 0d 0a 31 31 2e 33 2e 32 20 20 50 52 4f 43 45 44 55 52 45 20   ┆pr: process)  11.3.2  PROCEDURE ┆
0x2e4c0…2e4e0        72 65 73 65 74 28 56 41 52 20 70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78   ┆reset(VAR p: port; index: 1..max┆
0x2e4e0…2e500        69 6e 74 3b 0d 0a 09 09 09 56 41 52 20 63 6f 6d 70 6c 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a   ┆int;     VAR compl: reference)  ┆
0x2e500…2e520        33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 72 65 73 65 74 65 76 65 6e 74 28 56 41 52   ┆3.8     PROCEDURE resetevent(VAR┆
0x2e520…2e540        20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52   ┆ r: reference)  3.8     PROCEDUR┆
0x2e540…2e560        45 20 72 65 73 65 74 65 76 65 6e 74 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 0d 0a 39 2e 31   ┆E resetevent(VAR ch: chain)  9.1┆
0x2e560…2e580        20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 72 65 73 75 6d 65 28 56 41 52 20 70 72 3a 20 70 72   ┆     PROCEDURE resume(VAR pr: pr┆
0x2e580…2e5a0        6f 63 65 73 73 29 0d 0a 39 2e 32 2e 32 20 20 20 50 52 4f 43 45 44 55 52 45 20 72 65 74 75 72 6e   ┆ocess)  9.2.2   PROCEDURE return┆
0x2e5a0…2e5c0        28 56 41 52 20 72 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 31 2e 31 20 20 20 20 54 59   ┆(VAR ref: reference)  11.1    TY┆
0x2e5c0…2e5e0        50 45 20 20 20 20 20 20 73 63 6f 70 65 5f 74 79 70 65 3d 20 28 61 6e 6f 6e 79 6d 6f 75 73 2c 20   ┆PE      scope_type= (anonymous, ┆
0x2e5e0…2e600        6c 6f 63 61 6c 2c 0d 0a 09 09 09 20 20 20 20 20 20 20 72 65 67 69 6f 6e 61 6c 2c 20 67 6c 6f 62   ┆local,            regional, glob┆
0x2e600…2e620 (371,) 61 6c 29 0d 0a 31 31 2e 33 2e 32 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 6e 64 28 56 41 52 20   ┆al)  11.3.2  PROCEDURE send(VAR ┆
0x2e620…2e640        70 3a 20 70 6f 72 74 3b 20 69 6e 64 65 78 3a 20 31 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 20 20   ┆p: port; index: 1..maxint;      ┆
0x2e640…2e660        20 20 20 20 20 20 20 56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a   ┆       VAR databuf: reference)  ┆
0x2e660…2e680        31 31 2e 32 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 6e 64 6c 65 74 74 65 72 28 49 4e 53   ┆11.2    PROCEDURE sendletter(INS┆
0x2e680…2e6a0        50 45 43 54 20 64 65 73 74 69 6e 61 74 69 6f 6e 3a 20 73 74 72 69 6e 67 3b 0d 0a 09 09 09 20 20   ┆PECT destination: string;       ┆
0x2e6a0…2e6c0        20 20 20 56 41 52 20 64 61 74 61 62 75 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 33 2e 38 20   ┆   VAR databuf: reference)  3.8 ┆
0x2e6c0…2e6e0        20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 62 79 74 65 63 6f 75 6e 74 28 56 41 52 20 72   ┆    PROCEDURE setbytecount(VAR r┆
0x2e6e0…2e700        3a 20 72 65 66 65 72 65 6e 63 65 3b 20 76 61 6c 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e   ┆: reference; val: 0..maxint)  3.┆
0x2e700…2e720        38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 62 79 74 65 63 6f 75 6e 74 28 56 41 52   ┆8     PROCEDURE setbytecount(VAR┆
0x2e720…2e740        20 63 68 3a 20 63 68 61 69 6e 3b 20 76 61 6c 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e 38   ┆ ch: chain; val: 0..maxint)  3.8┆
0x2e740…2e760        20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 6f 66 66 73 65 74 28 56 41 52 20 72 3a 20   ┆     PROCEDURE setoffset(VAR r: ┆
0x2e760…2e780        72 65 66 65 72 65 6e 63 65 3b 20 76 61 6c 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e 38 20   ┆reference; val: 0..maxint)  3.8 ┆
0x2e780…2e7a0        20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 6f 66 66 73 65 74 28 56 41 52 20 63 68 3a 20   ┆    PROCEDURE setoffset(VAR ch: ┆
0x2e7a0…2e7c0        63 68 61 69 6e 3b 20 76 61 6c 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e 38 20 20 20 20 20   ┆chain; val: 0..maxint)  3.8     ┆
0x2e7c0…2e7e0        50 52 4f 43 45 44 55 52 45 20 73 65 74 74 6f 70 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63   ┆PROCEDURE settop(VAR r: referenc┆
0x2e7e0…2e800        65 3b 20 76 61 6c 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43   ┆e; val: 0..maxint)  3.8     PROC┆
0x2e800…2e820 (372,) 45 44 55 52 45 20 73 65 74 74 6f 70 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 76 61 6c 3a   ┆EDURE settop(VAR ch: chain; val:┆
0x2e820…2e840        20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73   ┆ 0..maxint)  3.8     PROCEDURE s┆
0x2e840…2e860        65 74 75 31 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 62 3a 20 30 2e 2e 32 35 35   ┆etu1(VAR r: reference; b: 0..255┆
0x2e860…2e880        29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 75 31 28 56 41 52 20 63   ┆)  3.8     PROCEDURE setu1(VAR c┆
0x2e880…2e8a0        68 3a 20 63 68 61 69 6e 3b 20 62 3a 20 30 2e 32 35 35 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f   ┆h: chain; b: 0.255)  3.8     PRO┆
0x2e8a0…2e8c0        43 45 44 55 52 45 20 73 65 74 75 32 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 62   ┆CEDURE setu2(VAR r: reference; b┆
0x2e8c0…2e8e0        3a 20 30 2e 2e 32 35 35 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74   ┆: 0..255)  3.8     PROCEDURE set┆
0x2e8e0…2e900        75 32 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 62 3a 20 30 2e 2e 32 35 35 29 0d 0a 33 2e   ┆u2(VAR ch: chain; b: 0..255)  3.┆
0x2e900…2e920        38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 75 33 28 56 41 52 20 72 3a 20 72 65 66   ┆8     PROCEDURE setu3(VAR r: ref┆
0x2e920…2e940        65 72 65 6e 63 65 3b 20 62 3a 20 30 2e 2e 32 35 35 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43   ┆erence; b: 0..255)  3.8     PROC┆
0x2e940…2e960        45 44 55 52 45 20 73 65 74 75 33 28 56 41 52 20 63 68 3a 20 63 68 61 69 6e 3b 20 62 3a 20 30 2e   ┆EDURE setu3(VAR ch: chain; b: 0.┆
0x2e960…2e980        2e 32 35 35 29 0d 0a 33 2e 38 20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 75 34 28 56   ┆.255)  3.8     PROCEDURE setu4(V┆
0x2e980…2e9a0        41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 62 3a 20 30 2e 2e 32 35 35 29 0d 0a 33 2e 38   ┆AR r: reference; b: 0..255)  3.8┆
0x2e9a0…2e9c0        20 20 20 20 20 50 52 4f 43 45 44 55 52 45 20 73 65 74 75 34 28 56 41 52 20 63 68 3a 20 63 68 61   ┆     PROCEDURE setu4(VAR ch: cha┆
0x2e9c0…2e9e0        69 6e 3b 20 62 3a 20 30 2e 2e 32 35 35 29 0d 0a 39 2e 32 2e 32 20 20 20 50 52 4f 43 45 44 55 52   ┆in; b: 0..255)  9.2.2   PROCEDUR┆
0x2e9e0…2ea00        45 20 73 69 67 6e 61 6c 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 3b 20 56 41 52 20 72   ┆E signal(VAR mbx: mailbox; VAR r┆
0x2ea00…2ea20 (373,) 65 66 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a 31 30 2e 31 20 20 20 20 46 55 4e 43 54 49 4f 4e   ┆ef: reference)  10.1    FUNCTION┆
0x2ea20…2ea40        20 20 73 74 61 63 6b 64 65 70 74 68 28 56 41 52 20 73 74 61 63 6b 3a 20 72 65 66 65 72 65 6e 63   ┆  stackdepth(VAR stack: referenc┆
0x2ea40…2ea60        65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 39 2e 31 20 20 20 20 20 50 52 4f 43 45 44 55 52 45   ┆e): 0..maxint  9.1     PROCEDURE┆
0x2ea60…2ea80        20 73 74 6f 70 28 56 41 52 20 70 72 3a 20 70 72 6f 63 65 73 73 29 0d 0a 33 2e 39 2e 34 20 20 20   ┆ stop(VAR pr: process)  3.9.4   ┆
0x2ea80…2eaa0        54 59 50 45 20 20 20 20 20 20 73 74 72 69 6e 67 28 6c 65 6e 67 74 68 3a 20 30 2e 2e 32 35 35 29   ┆TYPE      string(length: 0..255)┆
0x2eaa0…2eac0        3d 0d 0a 09 09 09 09 20 41 52 52 41 59 28 31 2e 2e 6c 65 6e 67 74 68 29 20 4f 46 20 63 68 61 72   ┆=       ARRAY(1..length) OF char┆
0x2eac0…2eae0        0d 0a 33 2e 34 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 73 75 63 63 28 76 3a 20 6f 74 79 70   ┆  3.4     FUNCTION  succ(v: otyp┆
0x2eae0…2eb00        65 29 3a 20 6f 74 79 70 65 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 74 6f 70   ┆e): otype  3.8     FUNCTION  top┆
0x2eb00…2eb20        28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 3b 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 33   ┆(VAR r: reference; 0..maxint)  3┆
0x2eb20…2eb40        2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 74 6f 70 28 56 41 52 20 63 68 3a 20 63 68 61   ┆.8     FUNCTION  top(VAR ch: cha┆
0x2eb40…2eb60        69 6e 3b 20 30 2e 2e 6d 61 78 69 6e 74 29 0d 0a 37 2e 31 20 20 20 20 20 50 52 4f 43 45 44 55 52   ┆in; 0..maxint)  7.1     PROCEDUR┆
0x2eb60…2eb80        45 20 74 72 61 63 65 28 66 61 75 6c 74 3a 20 69 6e 74 65 67 65 72 29 0d 0a 39 2e 31 20 20 20 20   ┆E trace(fault: integer)  9.1    ┆
0x2eb80…2eba0        20 54 59 50 45 20 20 20 20 20 20 75 6e 6c 69 6e 6b 5f 72 65 73 75 6c 74 3d 20 28 75 6e 6c 69 6e   ┆ TYPE      unlink_result= (unlin┆
0x2eba0…2ebc0        6b 5f 6f 6b 2c 20 6e 6f 5f 70 72 6f 67 72 61 6d 5f 6c 69 6e 6b 65 64 2c 0d 0a 09 09 09 09 65 78   ┆k_ok, no_program_linked,      ex┆
0x2ebc0…2ebe0        69 73 74 69 6e 67 5f 69 6e 63 61 72 6e 61 74 69 6f 6e 73 2c 20 2e 2e 2e 29 0d 0a 8c 83 d4 0a a1   ┆isting_incarnations, ...)       ┆
0x2ebe0…2ec00        73 65 63 74 69 6f 6e 20 6b 69 6e 64 09 09 64 65 66 69 6e 69 74 69 6f 6e 05 0d 0a 33 2e 38 20 20   ┆section kind  definition   3.8  ┆
0x2ec00…2ec20 (374,) 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 75 31 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65   ┆   FUNCTION  u1(VAR r: reference┆
0x2ec20…2ec40        29 3a 20 30 2e 2e 32 35 35 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 75 31 28   ┆): 0..255  3.8     FUNCTION  u1(┆
0x2ec40…2ec60        56 41 52 20 63 68 3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 32 35 35 0d 0a 33 2e 38 20 20 20 20 20   ┆VAR ch: chain): 0..255  3.8     ┆
0x2ec60…2ec80        46 55 4e 43 54 49 4f 4e 20 20 75 32 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20   ┆FUNCTION  u2(VAR r: reference): ┆
0x2ec80…2eca0        30 2e 2e 32 35 35 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 75 32 28 56 41 52   ┆0..255  3.8     FUNCTION  u2(VAR┆
0x2eca0…2ecc0        20 63 68 3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 32 35 35 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e   ┆ ch: chain): 0..255  3.8     FUN┆
0x2ecc0…2ece0        43 54 49 4f 4e 20 20 75 33 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e   ┆CTION  u3(VAR r: reference): 0..┆
0x2ece0…2ed00        32 35 35 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 75 33 28 56 41 52 20 63 68   ┆255  3.8     FUNCTION  u3(VAR ch┆
0x2ed00…2ed20        3a 20 63 68 61 69 6e 29 3a 20 30 2e 2e 32 35 35 0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49   ┆: chain): 0..255  3.8     FUNCTI┆
0x2ed20…2ed40        4f 4e 20 20 75 34 28 56 41 52 20 72 3a 20 72 65 66 65 72 65 6e 63 65 29 3a 20 30 2e 2e 32 35 35   ┆ON  u4(VAR r: reference): 0..255┆
0x2ed40…2ed60        0d 0a 33 2e 38 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 75 34 28 56 41 52 20 63 68 3a 20 63   ┆  3.8     FUNCTION  u4(VAR ch: c┆
0x2ed60…2ed80        68 61 69 6e 29 3a 20 30 2e 2e 32 35 35 0d 0a 39 2e 32 2e 32 20 20 20 50 52 4f 43 45 44 55 52 45   ┆hain): 0..255  9.2.2   PROCEDURE┆
0x2ed80…2eda0        20 77 61 69 74 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 3b 20 56 41 52 20 72 65 66 3a   ┆ wait(VAR mbx: mailbox; VAR ref:┆
0x2eda0…2edc0        20 72 65 66 65 72 65 6e 63 65 29 0d 0a 39 2e 32 2e 32 20 20 20 46 55 4e 43 54 49 4f 4e 20 20 77   ┆ reference)  9.2.2   FUNCTION  w┆
0x2edc0…2ede0        61 69 74 64 65 6c 61 79 28 56 41 52 20 6d 62 78 3a 20 6d 61 69 6c 62 6f 78 3b 20 56 41 52 20 72   ┆aitdelay(VAR mbx: mailbox; VAR r┆
0x2ede0…2ee00        65 66 3a 20 72 65 66 65 72 65 6e 63 65 3b 0d 0a 09 09 09 20 20 20 20 6e 6f 5f 6f 66 5f 6d 73 65   ┆ef: reference;         no_of_mse┆
0x2ee00…2ee20 (375,) 63 73 3a 20 30 2e 2e 6d 61 78 69 6e 74 29 3a 20 77 61 69 74 5f 72 65 73 75 6c 74 0d 0a 39 2e 32   ┆cs: 0..maxint): wait_result  9.2┆
0x2ee20…2ee40        2e 32 20 20 20 54 59 50 45 20 20 20 20 20 20 77 61 69 74 5f 72 65 73 75 6c 74 3d 20 28 61 5f 62   ┆.2   TYPE      wait_result= (a_b┆
0x2ee40…2ee60        75 66 66 65 72 2c 20 61 5f 64 65 6c 61 79 29 0d 0a 33 2e 35 20 20 20 20 20 46 55 4e 43 54 49 4f   ┆uffer, a_delay)  3.5     FUNCTIO┆
0x2ee60…2ee80        4e 20 20 77 72 64 28 76 3a 20 69 6e 74 65 67 65 72 29 3a 20 77 6f 72 64 0d 0a 0d 0a 0d 0a b0 a1   ┆N  wrd(v: integer): word        ┆
0x2ee80…2eea0        43 2e 32 20 4c 61 6e 67 75 61 67 65 20 49 6e 74 72 69 6e 73 69 63 20 54 79 70 65 73 0d 0a 0d 0a   ┆C.2 Language Intrinsic Types    ┆
0x2eea0…2eec0        a1 73 65 63 74 69 6f 6e 09 6e 61 6d 65 0d 0a 33 2e 34 2e 31 09 62 6f 6f 6c 65 61 6e 0d 0a 33 2e   ┆ section name  3.4.1 boolean  3.┆
0x2eec0…2eee0        35 09 09 62 79 74 65 0d 0a 33 2e 38 2c 20 31 30 2e 32 09 63 68 61 69 6e 0d 0a 33 2e 34 2e 32 09   ┆5  byte  3.8, 10.2 chain  3.4.2 ┆
0x2eee0…2ef00        63 68 61 72 0d 0a 33 2e 34 2e 33 09 69 6e 74 65 67 65 72 0d 0a 33 2e 38 09 09 6d 61 69 6c 62 6f   ┆char  3.4.3 integer  3.8  mailbo┆
0x2ef00…2ef20        78 0d 0a 33 2e 38 09 09 70 6f 6f 6c 0d 0a 33 2e 38 2c 20 31 31 09 70 6f 72 74 0d 0a 33 2e 38 2c   ┆x  3.8  pool  3.8, 11 port  3.8,┆
0x2ef20…2ef40        20 39 2e 31 09 70 72 6f 63 65 73 73 0d 0a 33 2e 38 09 09 72 65 66 65 72 65 6e 63 65 0d 0a 33 2e   ┆ 9.1 process  3.8  reference  3.┆
0x2ef40…2ef4d        35 09 09 77 6f 72 64 0d 0a 0d 0a 0d 0a                                                            ┆5  word      ┆
0x2ef4d…2ef50        FormFeed {
0x2ef4d…2ef50          0c 83 80                                                                                          ┆   ┆
0x2ef4d…2ef50        }
0x2ef50…2ef60        0a b0 a1 43 2e 33 20 4c 61 6e 67 75 61 67 65 20                                                   ┆   C.3 Language ┆
0x2ef60…2ef80        49 6e 74 72 69 6e 73 69 63 20 50 73 65 75 64 6f 2d 66 75 6e 63 74 69 6f 6e 0d 0a 0d 0a a1 73 65   ┆Intrinsic Pseudo-function     se┆
0x2ef80…2efa0        63 74 69 6f 6e 09 64 65 73 63 72 69 70 74 69 6f 6e 0d 0a 39 2e 31 09 09 63 72 65 61 74 65 28 49   ┆ction description  9.1  create(I┆
0x2efa0…2efc0        4e 53 50 45 43 54 20 69 6e 63 5f 6e 61 6d 65 3a 20 73 74 72 69 6e 67 3b 20 70 72 6f 67 72 61 6d   ┆NSPECT inc_name: string; program┆
0x2efc0…2efe0        20 63 61 6c 6c 3b 0d 0a 09 09 20 20 20 20 56 41 52 20 70 72 3a 20 70 72 6f 63 65 73 73 3b 20 73   ┆ call;        VAR pr: process; s┆
0x2efe0…2f000        69 7a 65 3a 20 30 2e 2e 6d 61 78 69 6e 74 3b 0d 0a 09 09 09 20 20 70 72 69 6f 72 69 74 79 3a 20   ┆ize: 0..maxint;       priority: ┆
0x2f000…2f020 (376,) 70 72 69 6f 5f 74 79 70 65 29 3a 20 63 72 65 61 74 65 5f 72 65 73 75 6c 74 0d 0a 39 2e 31 09 09   ┆prio_type): create_result  9.1  ┆
0x2f020…2f040        6c 69 6e 6b 28 49 4e 53 50 45 43 54 20 6e 61 6d 65 3a 20 73 74 72 69 6e 67 3b 0d 0a 09 09 20 20   ┆link(INSPECT name: string;      ┆
0x2f040…2f060        20 20 20 56 41 52 20 70 72 6f 67 3a 20 70 72 6f 67 72 61 6d 29 3a 20 6c 69 6e 6b 5f 72 65 73 75   ┆   VAR prog: program): link_resu┆
0x2f060…2f080        6c 74 0d 0a 33 2e 32 09 09 74 79 70 65 73 69 7a 65 28 74 79 70 65 5f 6e 61 6d 65 29 3a 20 30 2e   ┆lt  3.2  typesize(type_name): 0.┆
0x2f080…2f0a0        2e 6d 61 78 69 6e 74 0d 0a 33 2e 31 32 2e 32 09 76 61 72 73 69 7a 65 28 76 61 72 69 61 62 6c 65   ┆.maxint  3.12.2 varsize(variable┆
0x2f0a0…2f0c0        5f 6e 61 6d 65 29 3a 20 30 2e 2e 6d 61 78 69 6e 74 0d 0a 39 2e 31 09 09 75 6e 6c 69 6e 6b 28 56   ┆_name): 0..maxint  9.1  unlink(V┆
0x2f0c0…2f0e0        41 52 20 70 72 6f 67 3a 20 70 72 6f 67 72 61 6d 29 3a 20 75 6e 6c 69 6e 6b 5f 72 65 73 75 6c 74   ┆AR prog: program): unlink_result┆
0x2f0e0…2f100        0d 0a 0d 0a 1a 1a 09 09 09 56 41 52 20 63 6f 6d 70 6c 3a 20 72 65 66 65 72 65 6e 63 65 29 0d 0a   ┆         VAR compl: reference)  ┆

Reduced view