|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 192768 (0x2f100) Types: RcTekst Names: »99110141.WP«
└─⟦7fab0c8ae⟧ Bits:30005866/disk3.imd Dokumenter i RcTekst format (RCSL 99-1-*) └─⟦this⟧ »99110141.WP«
╱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)↲
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) ┆