top - download
⟦6f34c5eaa⟧ Wang Wps File
Length: 80361 (0x139e9)
Types: Wang Wps File
Notes: CPS/SDS/039
Names: »4794A «
Derivation
└─⟦060f447e1⟧ Bits:30006194 8" Wang WCS floppy, CR 0460A
└─ ⟦this⟧ »4794A «
WangText
0…0d…0…07…/…00…/…06….…0c….…01…. .…05…-…09…-…01…,…08…,…0d…,…0e…,…02…,…07…+…0a…+…00…+…05…*…0b…*…0c…*…02…)…08…)…0f…) (…0a…(…00…(…86…1
…02…
…02…
…02…
…02…CPS/SDS/039
…02…841101…02……02…
USER VDU
DETAILED
DESIGN
SPECIFICATION…02…ISSUE
1…02…CAMPS
4.2.3 VDU Dialogue (VDIA) ....................
4.2.3.1 Functional Specification ...........
4.2.3.1.1 Control of main flow (VDIA main
loop) ..........................
4.2.3.1.2 Interpretation of format control
"programmes" ...................
4.2.3.1.3 Input from/output to VDU (VDU
access method) .................
4.2.3.1.4 Read from/write to CIF (CIF
access method) .................
4.2.3.1.5 Read from/write to memory
(memory access method) .........
4.2.3.1.6 Read/write from sequences
(sequence access method) .......
4.2.3.1.7 Validation and conversion. .....
4.2.3.1.8 Error handling (Errl.) .........
4.2.3.1.9 Handling of dynamic memory
(memory management) ............
4.2.3.2 Software Structure .................
4.2.3.2.1 Main Components of VDIA ........
4.2.3.2.2 VDU Format and Associated
Control Data ...................
4.2.3.2.3 Format Model and VDU Field Type
4.2.3.2.4 Format Control Programme (FCP) .
4.2.3.2.5 VDIA Data Layout ...............
4.2.3.3 Data Flow, Control Structure .......
4.2.3.3.1 Subpackage Interface .............
4.2.3.3.1.1 UFCO VDIA UFCO INTERFACE .....
4.2.3.3.1.2 VDIA USPR VDIA Interface .....
4.2.3.4 Module Specification ...............
4.2.3.4.1 VDIA MAIN ......................
4.2.3.4.1.1 VDIA Main Loop Specification
4.2.3.4.1.1.1 Functional Specification
4.2.3.4.1.1.3 Module Components ......
4.2.3.4.1.1.2 Data Description .......
4.2.3.4.1.2 Stack Error Specification ..
4.2.3.4.1.2.1 Functional Specification
4.2.3.4.1.2.2 Module Interface .......
4.2.3.4.1.2.3 Module components ......
4.2.3.4.1.3 Long Exit Specification ....
4.2.3.4.1.4 Wait Vdu I O Specification .
4.2.3.4.2 Format Program Interpreter .....
4.2.3.4.2.1 Format Control Programme
Interpreter Main spec. .....
4.2.3.4.2.1.1 Functional Specification
4.2.3.4.2.1.2 Module Interface .......
4.2.3.4.2.1.3 Module Components ......
4.2.3.4.2.1.4 Data Description .......
4.2.3.4.2.1.5 Module Design ..........
4.2.3.4.2.2 Format Control Programme
Interpreter Input Spec. ....
4.2.3.4.2.2.1 Functional Specification
4.2.3.4.2.2.2 Module Interface .......
4.2.3.4.2.2.3 Module Components ......
4.2.3.4.2.2.4 Data Description .......
4.2.3.4.2.2.5 Module Design ..........
4.2.3.4.2.3 Format Control Programme
Interpreter Disp spec. .....
4.2.3.4.2.3.1 Functional Specification
(Module Design) ........
4.2.3.4.2.3.2 Module Interface .......
4.2.3.4.2.3.3 Module Components ......
4.2.3.4.2.3.4 Data Description .......
4.2.3.4.2.3.5 Module Design ..........
4.2.3.4.2.4 Format Control Programme
Contr Specification ........
4.2.3.4.2.4.1 Functional Specification
(Module Design) ........
4.2.3.4.2.4.2 Module Interface .......
4.2.3.4.2.4.3 Module Components ......
4.2.3.4.2.4.4 Data Description .......
4.2.3.4.2.4.5 Module Design ..........
4.2.3.4.2.5 Format Control Programme
Seq Specification ..........
4.2.3.4.2.5.1 Functional Specification
(Module Design) ........
4.2.3.4.2.5.2 Module Interface .......
4.2.3.4.2.5.3 Module Components ......
4.2.3.4.2.5.4 Data Description .......
4.2.3.4.2.5.5 Module Design ..........
4.2.3.4.2.6 Format Control Programme
Misc Specification .........
4.2.3.4.2.6.1 Functional Specification
4.2.3.4.2.6.2 Module Interface .......
4.2.3.4.2.6.3 Module components ......
4.2.3.4.2.6.4 Data Description .......
4.2.3.4.2.6.5 Module Design ..........
4.2.3.4.2.7 Format Control Programme Aux
Specification ..............
4.2.3.4.2.7.1 Functional Specification
4.2.3.4.2.7.2 Module Interface .......
4.2.3.4.3 VDU Access Method ..............
4.2.3.4.3.1 Vdu Access Method Main
Specification ..............
4.2.3.4.3.1.1 Functional Specification
4.2.3.4.3.1.2 Module interface .......
4.2.3.4.3.1.3 Module Components ......
4.2.3.4.3.1.4 Data Description .......
4.2.3.4.3.2 Vdu Access Method Model
Specification ..............
4.2.3.4.3.2.1 Functional Specification ...
4.2.3.4.3.2.2 Module Interface .......
4.2.3.4.3.2.3 Module Components ......
4.2.3.4.3.2.4 Data Description .......
4.2.3.4.3.3 Vdu Access Method Io
Specification ..............
4.2.3.4.3.3.1 Functional Specification
4.2.3.4.3.3.2 Module Interface .......
4.2.3.4.3.3.3 Module Components ......
4.2.3.4.3.3.4 Data Description .......
4.2.3.4.3.4 Vdu Access Method Errl
Specification ..............
4.2.3.4.3.4.1 Functional Specification
4.2.3.4.3.4.3 Module Components ......
4.2.3.4.3.4.4 Data Description .......
4.2.3.4.4 Cif Access Method ..............
4.2.3.4.4.1 Cif Access Method
Specification ..............
4.2.3.4.4.1.1 Functional Specification
4.2.3.4.4.1.2 Module Interface .......
4.2.3.4.4.1.3 Module Components ......
4.2.3.4.4.1.4 Data Description .......
4.2.3.4.5 Memory Access Method - Mem Acc.
4.2.3.4.5.1 Memory Access Method
Specification ..............
4.2.3.4.5.1.1 Functional Specification
4.2.3.4.5.1.2 Module Interface .......
4.2.3.4.5.1.3 Module Components ......
4.2.3.4.5.1.4 Data Description .......
4.2.3.4.6 Field Sequence Access Method
Seq Acc ........................
4.2.3.4.6.1 Sequence Access Method
Specification ..............
4.2.3.4.6.1.1 Functional Specification
4.2.3.4.6.1.4 Data Description .......
4.2.3.4.7 Memory Management (Mem-Man) ....
4.2.3.4.7.1 Memory Management
Specification ..............
4.2.3.4.7.1.1 Functional Specification
4.2.3.4.7.1.2 Module Interface .......
4.2.3.4.7.1.3 Module Components ......
4.2.3.4.7.1.4 Data Description .......
4.2.3.4.8.1 Common Modules .............
4.2.3.4.8.1.1 Functial Specification
Copy ...................
4.2.3.4.8.1.2. Module Interface ......
4.2.3.4.8.1.3 Module Components .....
4.2.3.4.8.1.4 Data Description .......
4.2.3.4.8.2.1 Functional Specification
Get Mhi ................
4.2.3.4.8.2.2 Module Interface .......
4.2.3.4.8.2.3 Module Components ......
4.2.3.4.8.2.4 Data Description .......
4.2.3.4.8.3.1 Functional Specification
Vdia Com ...............
4.2.3.4.8.3.2 Module Interface .......
4.2.3 V̲D̲U̲ ̲D̲i̲a̲l̲o̲g̲u̲e̲ ̲(̲V̲D̲I̲A̲)̲
4.2.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
To fulfil the task of VDIA, which is mainly to transform
data from internal format to the format presented on
the VDU and visa versa, the following functions should
be implemented in the subpackage:
- control of main flow (VDIA main loop)
- interpretation of format control "programs"
- input from/output to VDU (VDU access method)
- Read from/write to CIF (CIF access method)
- Read from/write to memory (memory access method)
- Read from/write to sequence (sequence access method)
- Validation and conversion (Display, Syntax and
semantic)
- Error handling (Errl.)
- Handling of dynamic memory (memory management)
4.2.3.1.1 C̲o̲n̲t̲r̲o̲l̲ ̲o̲f̲ ̲m̲a̲i̲n̲ ̲f̲l̲o̲w̲ ̲(̲V̲D̲I̲A̲ ̲m̲a̲i̲n̲ ̲l̲o̲o̲p̲)
VDIA main loop receives commands in the activation
semaphore and control the main flow of the execution
of the commands.
4.2.3.1.2 I̲n̲t̲e̲r̲p̲r̲e̲t̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲f̲o̲r̲m̲a̲t̲ ̲c̲o̲n̲t̲r̲o̲l̲ ̲"̲p̲r̲o̲g̲r̲a̲m̲s̲"
This module performs the execution of the format control
program connected to the format displayed on the screen.
Each format, which contains fields, has an associated
format control program.
4.2.3.1.3 I̲n̲p̲u̲t̲ ̲f̲r̲o̲m̲/̲o̲u̲t̲p̲u̲t̲ ̲t̲o̲ ̲V̲D̲U̲ ̲(̲V̲D̲U̲ ̲a̲c̲c̲e̲s̲s̲ ̲m̲e̲t̲h̲o̲d̲)
Performs all input and output to the VDU. This module
is responsible for conversion between addressing on
the VDU (line, incornation and field number) and internal
adddressing (field type, field replica)
4.2.3.1.4 R̲e̲a̲d̲ ̲f̲r̲o̲m̲/̲w̲r̲i̲t̲e̲ ̲t̲o̲ ̲C̲I̲F̲ ̲(̲C̲I̲F̲ ̲a̲c̲c̲e̲s̲s̲ ̲m̲e̲t̲h̲o̲d̲)
The CIF access method performs read/write of data which
is/shall be stored in CAMPS INTERNAL FORMAT (CIF).
4.2.3.1.5 R̲e̲a̲d̲ ̲f̲r̲o̲m̲/̲w̲r̲i̲t̲e̲ ̲t̲o̲ ̲m̲e̲m̲o̲r̲y̲ ̲(̲m̲e̲m̲o̲r̲y̲ ̲a̲c̲c̲e̲s̲s̲ ̲m̲e̲t̲h̲o̲d̲)
The memory access method accesses data in memory records.
4.2.3.1.6 R̲e̲a̲d̲/̲w̲r̲i̲t̲e̲ ̲f̲r̲o̲m̲ ̲s̲e̲q̲u̲e̲n̲c̲e̲s̲ ̲(̲s̲e̲q̲u̲e̲n̲c̲e̲ ̲a̲c̲c̲e̲s̲s̲ ̲m̲e̲t̲h̲o̲d̲)
The sequence access method makes it possible to read
and write sequences of data by use of CIF access method
or memory access method.
4.2.3.1.7 V̲a̲l̲i̲d̲a̲t̲i̲o̲n̲ ̲a̲n̲d̲ ̲c̲o̲n̲v̲e̲r̲s̲i̲o̲n̲.
This is merely an interface to the subpackage User
Procedures, which is a collection of display, syntax
and sematic procedures. The USPR subpackage is connected
to the FCO subprocess.
4.2.3.1.8 E̲r̲r̲o̲r̲ ̲h̲a̲n̲d̲l̲i̲n̲g̲ ̲(̲E̲r̲r̲l̲.̲)
During validation this module collects errors and displayes
these when validation of format is finished.
4.2.3.1.9 H̲a̲n̲d̲l̲i̲n̲g̲ ̲o̲f̲ ̲d̲y̲n̲a̲m̲i̲c̲ ̲m̲e̲m̲o̲r̲y̲ ̲(̲m̲e̲m̲o̲r̲y̲ ̲m̲a̲n̲a̲g̲e̲m̲e̲n̲t̲)̲
The purpose of memory management module is to implement
the necessory dynamic memory allocation for buffers
in VDIA.
4.2.3.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The Dialogue Subpackage is an interpreter which is
able to activate procedures (belonging to a FCO subpackage)
for transformation of data in internal format to a
screen format and visa versa. Only conversion and validation
procedure belongs to the FCO subpackage while storage,
display and other general functions are implemented
in the VDIA subpackage.
4.2.3.2.1 M̲a̲i̲n̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲ ̲o̲f̲ ̲V̲D̲I̲A̲
VDIA is a service coroutine used by "UFCO-like" control
coroutines (SFCO, DIFCO, SEFCO, UFCO) for transfer
and convertion of data between the VDU and CIF/memory.
The function of VDIA is controlled by operation buffers
sent to the activation semaphore.
FIGURE 4.2.3.2.1-1
DEPICTS THE MAIN COMPONENTS OF VDIA
The components of VDIA may be grouped into the following
categories:
M̲a̲i̲n̲ ̲L̲o̲o̲p̲ ̲a̲n̲d̲ ̲F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
Receives commmands in the activation semaphore and
control the main flow of the execution of commands.
F̲i̲e̲l̲d̲ ̲S̲e̲q̲u̲e̲n̲c̲e̲ ̲A̲c̲c̲e̲s̲s̲,̲ ̲M̲e̲m̲o̲r̲y̲ ̲A̲c̲c̲e̲s̲s̲ ̲a̲n̲d̲ ̲C̲I̲F̲ ̲A̲c̲c̲e̲s̲s̲
Performs storage and retrieval of data stored internalty
in the CAMPS system.
V̲D̲U̲ ̲A̲c̲c̲e̲s̲s̲ ̲M̲e̲t̲h̲o̲d̲ ̲a̲n̲d̲ ̲E̲r̲r̲o̲r̲ ̲M̲e̲s̲s̲a̲g̲e̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲
Performs all input and output to the VDU. Performs
conversion between addressing on the VDU (line and
field number) and internal addressing (field type,
field replica).
M̲e̲m̲o̲r̲y̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲
Dynamic allocation and deallocation of memory areas
used as i/o buffers etc.
"P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲"̲
Procedures for syntactic and semantic valication of
input data from the VDU and procedures for conversion
to displayed format for output data to be shown on
the VDU.
4.2.3.2.2 V̲D̲U̲ ̲F̲o̲r̲m̲a̲t̲ ̲a̲n̲d̲ ̲A̲s̲s̲o̲c̲i̲a̲t̲e̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲D̲a̲t̲a̲
The complicated VDIA operations (data input and output)
require that a f̲o̲r̲m̲a̲t̲ has been specified to VDIA by
an output format command. A format is the combination
of a scheme of data on the VDU, a scheme of corresponding
data on disk or in memory, and the transformation between
the two schemes. A format is represented by three pieces
of control data:
F̲o̲r̲m̲a̲t̲ ̲H̲a̲n̲d̲l̲e̲r̲'̲s̲ ̲F̲o̲r̲m̲a̲t̲
Used by the format handler to generate the fixed part
of the VDU picture and to define and control the active
input-output fields.
V̲D̲I̲A̲ ̲F̲o̲r̲m̲a̲t̲ ̲M̲o̲d̲e̲l̲
Used by the VDU Access Method module in VDIA in order
to identify the data types for the fields on the VDU
and to generate and maintain error codes on the picture.
V̲D̲I̲A̲ ̲F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲
Used by the Format Control Module in VDIA in order
to control the execution of the operation. The control
programme is written in a special macro code. It is
interpreted by the format control module. Each instruction
is convented into a call of a procedure using the parametres
specified in the instruction.
4.2.3.2.3 F̲o̲r̲m̲a̲t̲ ̲M̲o̲d̲e̲l̲ ̲a̲n̲d̲ ̲V̲D̲U̲ ̲F̲i̲e̲l̲d̲ ̲T̲y̲p̲e̲
The VDIA Format Models are generated by use of the
offline Format Model Generator Utility. This utility
programme takes a text file (as prepared by use of
the Text Editor Utility as input in the same way as
the Format Generator Utility (generating the Format
Handler's Format). In fact, exactly the same input
text file is used for both generator utilities. This
file is called the F̲o̲r̲m̲a̲t̲ ̲S̲o̲u̲r̲c̲e̲ ̲F̲i̲l̲e̲. This file contains
various types of graphic information (fixed texts,
size and position of fields, video attributes and input/output
attributes for the fields) and beside that a symbolic
name defining the V̲D̲U̲ ̲F̲i̲e̲l̲d̲ ̲T̲y̲p̲e̲ for each field where
VDIA can perform input or output.
For each VDU Field Type the fields having this type
are numbered 1,2,.... according to their order of appearance
on the VDU picture. This F̲i̲e̲l̲d̲ ̲R̲e̲p̲l̲i̲c̲a̲ ̲N̲u̲m̲b̲e̲r̲ together
with the VDU Field Type uniquely determines the field.
The pair of integers,
VDU Field Type, Replica
are used internally in VDIA as field identification.
Line number and field number inside the line are used
solely by the VDU Access and Error Message Handling
Modules.
4.2.3.2.4 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲(̲F̲C̲P̲)̲
To a VDU format belongs a separate FCP for each VDIA
operation which can be executed using the format (OUTPUT
DATA, OUTPUT FORMAT, INPUT DATA). The FCP is prepared
by use of a FCP Conventor Utility. The input to the
utility is a text file where the FCP instructions are
written in symbolic form (ref. CPS/SDS/xxx appendix
A).
The main elements in the FCP programming language are
the following:
A̲c̲c̲e̲s̲s̲ ̲t̲o̲ ̲C̲I̲F̲ ̲f̲i̲e̲l̲d̲s̲ ̲o̲r̲ ̲f̲i̲e̲l̲d̲s̲ ̲i̲n̲ ̲m̲e̲m̲o̲r̲y̲ ̲r̲e̲c̲o̲r̲d̲s̲.
This is done by use of standard variables in the language.
When a CIF field variable is referenced the necessary
i/o is automatically executed. There is a fixed number
of memory records references by symbolic names M1,
M2,...... in the FCP. Some of these records may belong
to "UFCO" i.e. the address of the memory record is
transferred to VDIA in the operation buffer from UFCO.
I̲n̲p̲u̲t̲ ̲f̲r̲o̲m̲ ̲V̲D̲U̲ ̲a̲n̲d̲ ̲s̲y̲n̲t̲a̲c̲t̲i̲c̲ ̲v̲a̲l̲i̲d̲a̲t̲i̲o̲n̲
The FCP allows bundle input of several fields of the
same type to be processed in one batch by the syntax
validation procedure. The syntax procedure calls the
procedure STORE FIELD in order to store the converted
values in CIF
4.2.3.2.5 V̲D̲I̲A̲ ̲D̲a̲t̲a̲ ̲L̲a̲y̲o̲u̲t̲
For efficient reasons, VDIA data are separated into
two sections:
- VDIA ̲VAR is the VDIA coroutine record and
contains the actual data. It may
be located anywhere in the process.
- VDIA ̲POINTERS is a set of pointers to subrecords
of VDIA ̲VAR. Its purpose is to facilitate
fast addressing of data in VDIA
̲VAR. It must be located just after
COMONVAR in the process.
As VDIA ̲POINTERS is located at a f̲i̲x̲e̲d̲ address, the
addresses of the separate pointers can be defined as
constants in the VDIA code, even if VDIA is not linked
to the data modules of the process. Each module in
VDIA has its own subrecord in VDIA ̲VAR containing data,
which is used and maintained by the module. The subrecord
is named after which module it is belonging to.
Definitions of types, constant addresses and variables
are scetched in the following. As an example, the address
of FCP interpreter data is loaded into R5 by the swell
statement:
P ̲FCPI INTEGER = R5
FIGURE 4.2.3.2.5-1
VDIA ̲DATA LAYOUT
Definition of VDIA Pointer Record located just after COMONVAR:
TYPE
VDIA ̲PT = RECORD
DISPLAY LOCATION
OF DISPLAY
PROCEDURE
ENTRY
SYNTAX LOCATION
OF SYNTAX
PROCEDURE
ENTRY
SEMAN LOCATION
OF SEMATICS
PROCEDURE
ENTRY
S2 UFCO ACTIVATION
SEM
S3 VDIA ACTIVATION
SEM
INT ̲ERR LOCATION
OF TEP
̲INT ̲ ERROR
ROUTINE
Q ̲ERR: INTEGER; LOCATION
OF QUEUE
̲ ERROR
ROUTINE
STACK: STACK ̲CONTROL ̲BLOCK; VDIA STACK
CONTROL
GLOBAL GLOBAL
VDIA DATA
MAIN MAIN LOOP
CAM CIF ACCESS
FSAM FSAM DESCRIPTOR
MEMREC MEMORY
REC. DESOR
MEM ̲MANAG MEMORY
MANAGEMENT
FCPI FCP INTERPRETER
MODEL FORMAT
MODEL
ERROR ̲LIST ERROR
LIST
FORMAT ̲IF VDU I/C
INFO
POINTERS
TO VARIABLES
IN FCO
ITEM ITEM RECORD
VIEW ̲ATTR: INTEGER; VIEW ATTRIBUTES
TEST ̲SAVE: INTEGER; FOR TEST
PURPOSES
END;
V̲D̲I̲A̲ ̲P̲R̲O̲C̲E̲S̲S̲ ̲D̲A̲T̲A̲ ̲A̲R̲E̲A̲ POINTED TO BY VDIA ̲POINTERS:
VAR
VDIA ̲VAR:RECORD VDIA VARIABLES
GLOBAL: GLOBAL ̲DATA;
POINTED TO BY P ̲GLOBAL
MAIN: MAIN ̲LOOP ̲DATA;
POINTED TO BY P ̲MAIN
CAM: CAM;
POINTED TO BY P ̲CAM
CAM ̲FIELD ̲ARRAY: ARRAY (1..MAX ̲NO ̲OF ̲MF ̲FIELDS)
OF FIELD;
POINTED TO BY CAM. FIELDS ARRAY CONTROL BLOCK
FSAM: ARRAY ̲CONTROL ̲BLOCK;
POINTED TO BY P ̲FSAM
SEQUENCES: ARRAY (1..VDIA ̲NO ̲OF ̲SEQ)
OF SEQ ̲DESCR;
POINTED TO BY FSAM ARRAY CONTROL BLOCK
MEMREC: ARRAY ̲CONTROL ̲BLOCK;
POINTED TO BY P ̲MEMREC
MEM ̲ARRAY: ARRAY (0..VDIA ̲NO ̲OF ̲MEM ̲RECS)
OF MEM ̲REC;
MEM ̲MANAG: MMA;
POINTED TO BY P ̲MMA
SLICE ̲ARRAY: ARRAY (1..VDIA ̲NO ̲OF ̲SLICES)
OF SLICE ̲DESCRIPTOR;
FCPI: FCPI ̲REC;
POINTED TO BY P ̲FCPI
BUNDLE ̲ARRAY: ARRAY (0..VDIA ̲NO ̲OF ̲BUNDLES)
OF BUNDLE ̲DESCR;
STORAGE ̲TYPES: ARRAY (0..VDIA ̲NO ̲OF ̲STORAGE ̲TYPES)
OF STORAGE ̲TYPE;
MODEL: MODEL ̲REC;
POINTED TO BY P ̲MODEL
ERROR ̲LIST: ERR ̲REC;
POINTED TO BY P ̲EER ̲LIST
FORMAT ̲IF: FORMAT ̲IF ̲REC;
POINTED TO BY P ̲FORMAT ̲IF;
VDU ̲BUFFER: ARRAY (1..VDIA ̲VDU ̲BUF ̲SIZE) OF INTEGER;
MAINTAINED BY VDU I/O
STACK: ARRAY (1..VDIA ̲STACK ̲SIZE) OF INTEGER;
CONTROLLED BY STACK CONTROL BLOCK, POINTED TO BY P
̲STACK
WORKSP: ARRAY (1..VDIA ̲WORK SIZE) OF INTEGER;
MAINTAINED BY MEMORY MANAGEMENT
END; VDIA ̲VAR
DEFINITIONS OF CONSTANT ADDRESSES FOR VDIA POINTERS
THE TYPE VDIA ̲PT IS DEFINED IN THE TEP PREFIX:
CONST
PT ̲START = ADDR ̲OF ̲COMONVAR + COMONVARSIZE;
P ̲DISPLAY = ADDRESS (PT ̲START VDIA ̲PT.DISPLAY);
P ̲SYNTAX = ADDRESS (PT ̲START VDIA ̲PT.SYNTAX);
P ̲SEMAN = ADDRESS (PT ̲START VDIA ̲PT.SEMAN);
P ̲S2 = ADDRESS (PT ̲START VDIA ̲PT.S2);
P ̲S3 = ADDRESS (PT ̲START VDIA ̲PT.S3);
P ̲TEP ̲INT ̲ERR = ADDRESS (PT ̲START VDIA ̲PT.INT
̲ERR);
P ̲Q ̲ERR = ADDRESS (PT ̲START VDIA ̲PT.Q
̲ERR);
P ̲STACK = ADDRESS (PT ̲START VDIA ̲PT.STACK);
P ̲GLOBAL = ADDRESS (PT ̲START VDIA ̲PT.GLOBAL);
P ̲MAIN = ADDRESS (PT ̲START VDIA ̲PT.MAIN);
P ̲CAM = ADDRESS (PT ̲START VDIA ̲PT.CAM);
P ̲FSAM = ADDRESS (PT ̲START VDIA ̲PT.FSAM);
P ̲MEMREC = ADDRESS (PT ̲START VDIA ̲PT.MEMREC);
P ̲MMA = ADDRESS (PT ̲START VDIA ̲PT.MEM
̲MANAG);
P ̲FCPI = ADDRESS (PT ̲START VDIA ̲PT.FCPI);
P ̲MODEL = ADDRESS (PT ̲START VDIA ̲PT.MODEL);
P ̲ERR ̲LIST = ADDRESS (PT ̲START VDIA ̲PT.ERROR
̲LIST);
P ̲FORMAT ̲IF = ADDRESS (PT ̲START VDIA ̲PT.FORMAT
̲IF);
P ̲ITEM = ADDRESS (PT ̲START VDIA ̲PT.ITEM);
P ̲VIEW ̲ATTR = ADDRESS (PT ̲START VDIA ̲PT.VIEW
̲ATTR);
P ̲TEST ̲SAVE = ADDRESS (PT ̲START VDIA ̲PT.TEST
̲SAVE);
I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲V̲D̲I̲A̲ ̲d̲a̲t̲a̲
Initialization of data is stated in the VDIA ̲DAT.S
module. Every pointer is initialized e.g. the pointer
to data for main loop:
VDIA ̲POINTERS.MAIN = ADDRESS (VDIA ̲VAR.MAIN);
Main loop data now can be accessed by use of the pointer.
An example of data access to data could be:
P ̲MAIN INTEGER = R5;
R5 now contains the start address for main loop data.
R5 MAIN ̲LOOP ̲DATA. CURRENT ̲COMMAND = R0;
R0 now contains an information from main loop data.
Further initialization is performed, please refer the
source list VDIA ̲DAT.S
4.2.3.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲,̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
In order to understand the data flow for VDIA some
knowledge of the internal control structure of VDIA
- as given below - is needed.
Format Control, Format Model and Format are data tables.
Format Control is a sort of programme which is interpreted
by VDIA. For complicated VDIA operations (e.g. input
and output) most logic is actually found in the Format
Control Programme, which is loaded early in the operation.
Interfaces are shown by bold lines af follows:
1) Semaphore Operation interface between Requesting
Coroutine and VDIA.
2) I/O Interface to fields on the VDU. The interface
goes via the Format Handler and uses the Format
Model as well as the Format.
3) I/O Interface to internal data storage.
4) The semaphore operation contains pointers to data
records. These pointers are accessible from Format
Control. In many cases the actual record structure
is only known by the Requestor and Format Control
and not by the VDIA programme who merely acts as
a mailman.
5) Call of display, syntax and semantics procedures
are controlled by Format Control.
6) The display, syntax and semantics procedures use
various service routines in VDIA - in particular
for storing data in location determined by Format
control.
7) The procedures may directly access data in some
of the memory records without involving Format
Control (the address of the record is given as
parametre in the call of the procedure). This is
used e.g. by the semantic validation of "user"
formats.
8) The procedures are after compilation linked with
the requestor code (and not with VDIA). The procedures
may therefore directly access data in the requestor.
FIGURE 4.2.3.3-1
VDIA AND ITS SURROUNDINGS
4.2.3.3.1 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
4.2.3.3.1.1 U̲F̲C̲O̲ ̲V̲D̲I̲A̲ ̲U̲F̲C̲O̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲
S̲E̲M̲A̲P̲H̲O̲R̲E̲ ̲O̲P̲E̲R̲A̲T̲I̲O̲N̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲
In its idle state VDIA waits for the activation semaphore
S3. When a semaphore operation is received, VDIA executes
the command specified. When command execution is completed
VDIA updates the operation:
Sender Coroutine id: Changed to VDIA id
PARA 1: Completion code
PARA 2, PARA 3 Pointer to VDIA result data
and signals the operation to the requestor activation
semaphore S2. Upon this VDIA returns to the idle state
waiting for the next operation to be send to S3.
Execution of commands involving i/o to the VDU are
relative time consuming and VDIA will spend most of
the time waiting for completion of VDU i/o. If the
requestor sends a further operation to the semaphore
S3 (e.g. while the execution of the previous operation
is in progress), VDIA kills the current command execution
as fast as posible. The (old) operation is returned
to semaphore S2 with an "error" completion code and
VDIA continues immediately executing the new command.
The VDU is left with undefined data so the intervening
operation should contain a command resettting the VDU
(like "select menu" or "clear VDU")
Note, that all operations send to semaphore S3 are
returned to semaphore S2 - and in the same sequence
as they are received.
The figure 4.2.3.7.1-1 lists the commands recognized
by VDIA.
O̲P̲E̲R̲A̲T̲I̲O̲N̲ ̲T̲O̲ ̲V̲D̲I̲A̲ A̲N̲S̲W̲E̲R̲ ̲F̲R̲O̲M̲ ̲V̲D̲I̲A̲
C̲O̲M̲M̲A̲N̲D̲ ̲ ̲ ̲ ̲ ̲ ̲P̲A̲R̲A̲ ̲1̲ ̲ ̲ ̲ ̲P̲A̲R̲A̲ ̲2̲ ̲ ̲ ̲P̲A̲R̲A̲ ̲3̲ ̲ ̲ ̲P̲A̲R̲A̲ ̲1̲ ̲ ̲ ̲ ̲ ̲ ̲P̲A̲R̲A̲ ̲2̲ ̲ ̲P̲A̲R̲A̲
̲3̲
START ̲VDIA % Format % lnit % FF ̲ Completion
id Area Handle Code
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
SUSPEND Completion
Code
CLOSE ̲DOWN -"-
DISPLAY ̲MENU %Format
id -"-
CLEAR ̲VDU -"-
CANCEL I/O -"-
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
OUTPUT ̲FORM. %Format % M1 % M2 -"- % M3 %
M4
id
O ̲FORMAT ̲ %format % M1 % M2 -"- % M3 % M4
AND ̲DATA id
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
INPUT ̲DATA % M1 % M2 -"- % M3 % M4
APPEND % M1 -"-
(SUSPEND) % M1 % M2 -"- % M3 % M4
COPY ̲CIF COPY
TYPE -"-
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
L ̲INSERT Line %Cursor
Count Record -"-
L ̲DELETE Line %Cursor
Count Record -"-
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
INSERT ̲
GROUP -"- -"-
DELETE ̲
GROUP -"- -"-
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
ADAT P3 ̲
INPUT % M1 % M2 -"- % M3 % M4
ADAT P3 %Format
OUTPUT id % M1 % M2 -"- % M3 % M4
FIGURE 4.2.3.7.1-1
The symbols M1, M2, M3 and M4 denotes memory records.
The records M1 and M2 are allocated by the Requestor
before the command is send while the records M3 and
M4 are allocated by the Format Control Programme during
command execution. The VDIA programme does n̲o̲t̲ access
the data in these records but acts merely as a mailman
between Requestor and Format Control by copying the
addresses from and to the semaphore operation. The
structure of the memory records is therefore a interface
between Requestor and Format Control and will in fact
not be the same for all formats.
The VDIA Programme has 3 basic operational states:
A̲.̲ ̲V̲D̲U̲ ̲a̲n̲d̲ ̲O̲p̲e̲r̲a̲t̲o̲r̲ ̲U̲n̲d̲e̲f̲i̲n̲e̲d̲
The initial state of VDIA. only the START VDIA command
is meaningful. VDIA is returned to this state by the
CLOSE DOWN command.
B̲.̲ ̲V̲D̲U̲ ̲a̲n̲d̲ ̲O̲p̲e̲r̲a̲t̲o̲r̲ ̲D̲e̲f̲i̲n̲e̲d̲ ̲-̲ ̲N̲o̲ ̲A̲c̲t̲i̲v̲e̲ ̲F̲o̲r̲m̲a̲t̲
The idle state for a terminal in use. The following
internal variables in VDIA are defined
IFCB for Format Handler (VDU split identification)
Logical Terminal Number
Classification
Special Handling
The commands of categories (2) and (3) are meaningful
in this state. The state is reached by any of the commands:
START ̲VDIA, DISPLAY ̲MENU, CLEAR ̲VDU, CANCEL ̲10.
Also this state is reached if VDIA is interrupted during
command execution by an extra operation send to the
activation semaphore.
C̲.̲ ̲A̲c̲t̲i̲v̲e̲ ̲F̲o̲r̲m̲a̲t̲
This state is achieved by any of the commands in category
(3) (i.e. OUTPUT FORMAT or OUTPUT FORMAT AND DATA).
In this state all commands of categories (2), (3) and
(4) are meaningful.
C̲o̲m̲m̲a̲n̲d̲s̲
S̲T̲A̲R̲T̲ ̲V̲D̲I̲A̲: VDIA state is changed from A to B by
means of the parametres in the operation,
and the menu specified by Format id
is displayed. Used by operator log-in.
C̲L̲O̲S̲E̲D̲O̲W̲N̲ Return VDIA to state A. Used by operator
log-out.
D̲I̲S̲P̲L̲A̲Y̲ ̲M̲E̲N̲U̲ The menu specified by Format id is displayed.
VDIA gets state B.
C̲L̲E̲A̲R̲ ̲V̲D̲U̲ The VDU format area is cleared. VDIA
gets state B.
C̲A̲N̲C̲E̲L̲ ̲I̲1̲0̲: VDIA gets state B without operations
on the VDU. Used for fast cancel of
VDU input/output.
O̲U̲T̲P̲U̲T̲ ̲F̲O̲R̲M̲A̲T̲: Outputs the format specified by Format
Id and executes the associated Format
Control Programme for Output Format.
VDIA gets state C Usually the neat operation
will be an input data.
OUTPUT FORMAT
A̲N̲D̲ ̲D̲A̲T̲A̲: Outputs the format specified by Format
Id and executes the associated Format
Control Programme for Output Data. VDIA
gets state C.
I̲N̲P̲U̲T̲-̲D̲A̲T̲A̲: Loads the Format Control Programme (FCP)
for Input Data belonging to the current
format and executes the FCP. VDIA remains
in state C.
S̲U̲S̲P̲E̲N̲D̲: Same function as Input Data, just another
function code.
L̲I̲N̲E̲-̲I̲N̲S̲E̲R̲T̲: The cursor must be placed in a repeatable
line. The command inserts the specified
number of line copies with empty input
fields after the cursor line. An error
completion code is returned in the semaphore
operation if the insertion is not possible.
VDIA remains in state C after the insertion
has been performed.
L̲I̲N̲E̲ ̲D̲E̲L̲E̲T̲E̲: The cursor must be placed in a repeatable
line. The specified number of lines
starting at cursor line are deleted.
The command can not delete all lines
of the type pointed to. An error completion
code is returned in the semaphore operation
of the deletion is not possible. VDIA
remains in state C after the insertion
has been performed.
C̲O̲M̲M̲A̲N̲D̲-̲S̲U̲F̲F̲I̲X̲:
The command field of the semaphore operation sent to
VDIA in S3 is structured into two subfields:
- Command Code
- Command Suffix
The command suffix describes special actions to be
performed by VDIA in connection with execution of the
command, such as cleaning up after a previous transaction.
The possible values of command suffix are defined in
the type VDIA ̲COMMAND ̲SUFFIX in TEP prefix
When the semaphore operation is returned from VDIA
to the semaphore S2, the command suffix field will
be zero.
T̲Y̲P̲E̲:
VDIA ̲COMMAND ̲SUFFIX=
(CONTINUE ̲TRANS, new command within
same transaction
NEW ̲TRANS ̲NO ̲CIF, first command in a
new transaction without
CIF access.
NEW ̲TRANS ̲CIF); first command in a
new transaction with
CIF access.
4.2.3.3.1.2 V̲D̲I̲A̲ ̲U̲S̲P̲R̲ ̲V̲D̲I̲A̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The interface between VDIA and USPR is mainly a location
which is stored in VDIA pointers. The locations should
be stored during start up of the process. VDIA activates
the USPR procedure by using the ENTER instruction.
When the ENTER instruction has been performed VDIA
will have set up data, as described below, in the registers.
D̲I̲S̲P̲L̲A̲Y̲
This module consists of a main procedure, which contains
a case for switching to a set of different display
procedures. Each procedure is able to convert data
from internal representation to a format which can
be displayed on the VDU.
The register convertions are:
R0 C K Display procedure reference (case label)
R1 C K VDU field type
R3 C Data length in bytes
R Displayed data length in bytes
R4 C K Pointer to data, which shall be converted
R5 C K Pointer to output data
R6 C Link
S̲Y̲N̲T̲A̲X̲
This module consists of a main procedure, which contains
a case for switching to a set of different syntax procedures.
Each procedure is able to validate one kind of input
from the VDU and store in the internal data format.
The register conventions are:
R0 C Syntax procedure
reference (case
label)
R Result: OK, NOT
̲OK
R1 C K Pointer to of field
bundle
R4 C K Pointer to memory
record 1 M.1
(Account)
R5 C K Pointer to memory
record 3 M.3
(Semantic record)
R6 C - Link
a field bundle is a record with the layout depicted
below.
FIELD ̲BUNDLE = RECORD
F ̲TYPE VDU FIELD TYPE
REPLICA REPLICA WITHIN FIELD
TYPE OF FIRST FIELD
IN BUNDLE
COUNT NUMBER OF FIELDS
IN BUNDLE CONTAINING
DATA
F ̲SIZE: INTEGER; VDU FIELD SIZE.
FOR
VARIABLE FIELDS
IT
IS MAX SIZE
FIELDS ARRAY(FIELD ̲ONE
FIELD ̲ONE) OF
INTEGER; POINTERS TO THE
FIELDS. THERE IS
A
POINTER TO EACH
FIELD IN THE BUNDLE
END;
S̲E̲M̲A̲N̲T̲I̲C̲
This module consists of a main procedure, which contains
a case for switching to a set of different semantic
procedures. Each procedure is able to perform a semantic
validation of a whole VDU format.
The register conventions are:
R0 C Format number (From last 3 digits in
format name)
R Result: OK, NOT ̲OK
R4 C - Pointer to memory record 1 (M.1)
R5 C - Pointer to memory record 3 (M.3)
R6 C - Link
4.2.3.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.1 V̲D̲I̲A̲ ̲M̲A̲I̲N̲
The VDIA MAIN module contains the main loop for the
VDIA coroutine, with the main waiting point for communication
with UFCO. Furthermore the module contains a procedure
with waiting point for VDU I/O completion.
4.2.3.4.1.1 V̲D̲I̲A̲ ̲M̲a̲i̲n̲ ̲L̲o̲o̲p̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.1.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
VDIA Main Loop contains the initial entry point for
the VDIA coroutine.
When VDIA Main Loop has received an operation from
UFCO it will initiate the appropriate function.
If the command concerns read/write to the VDU, Main
Loop will load the FCP associated to format, which
is given in the operation and the command. Then it
will start interpreting of the FCP.
On other commands it will initiate functions in other
modules of VDIA. Depending on completion codes from
the interpretation of the FCP or execution of functions
in other VDIA modules the Main Loop will send answer
to UFCO.
Execution of commands which are extensions to VDIA
Main Loop, are called with the following conventions:
R0 - R Completion code (internal VDIA
value)
R1 C - Parametre 1 from operation
R2 C R Parametre 2 from operation
R3 C R Parametre 3 from operation
R5 C - Command code
R6 C - Link
4.2.3.4.1.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE N̲E̲W̲ ̲S̲T̲A̲T̲E̲
(R2 C K COMMAND CODE
R3 C VDIA STATE
R NEW STATE OR -1 FOR ILLEGAL STATE
R6) C LINK
COMPUTES NEW STATE FROM OLD STATE AND COMMAND CODE.
IF THE COMMAND IS ILLEGAL A STATE OF -1 IS RETURNED.
PROCEDURE E̲R̲R̲O̲R̲ ̲S̲T̲A̲T̲E̲
(R0 - R COMPLETION CODE FOR ANSWER TO FCO
R1 C COMPLETION CODE (INTERNAL VDIA)
R2 C K COMMAND CODE
R3 C VDIA STATE
R NEW STATE
R6) C LINK
COMPUTES THE STATE TO BE USED AFTER COMMAND TERMINATED
IN ERROR.
CALLS RESET FUNCTIONS IF REQUIRED.
COMPUTES THE ERROR CODE TO BE USED IN THE ANSWER TO
FCO.
PROCEDURE M̲O̲V̲E̲ ̲F̲O̲R̲M̲A̲T̲ ̲I̲D̲
(R1 C K %FORMAT ID
R6) C LINK
MOVES FORMAT ID TO GLOBAL DATA. EXTRACTS THE FORMAT
NUMBER FROM THE LAST THREE DIGITS IN THE FORMAT ID
AND STORES THE VALUE IN GLOBAL DATA.
PROCEDURE R̲E̲A̲D̲ ̲F̲O̲R̲M̲A̲T̲
(R1 C BYTE COUNT
R2 C K BYTE OFFSET IN FILE (15: 0)
R3 C K BYTE OFFSET IN FILE (31:16)
R4 C K % DESTINATION
R6) C LINK
READS A SPECIFIED PART OF THE VDIA CONTROL FILE WHICH
CONTAINS MODELS AND FCPS FOR ALL USER FORMATS. BYTE
COUNT (R1) SPECIFIES THE AMOUT TO BE INPUT, BYTE OFFSET
(R23) SPECIFY START POSITION IN FILE, WHILE DESTINATION
(R4) IS A WORD ADDRESS.
PROCEDURE I̲N̲S̲T̲A̲L̲L̲ ̲R̲E̲C̲ ̲P̲A̲R̲T̲
(R2 C WANTED PART: INS ̲MOD ̲OUT: MODEL AND FCP
̲OUT
INS ̲IN : FCP-IN
R4 R % MEMORY BUFFER
R6 C LINK
RELEASES MEMORY BUFFER(S) USED FOR THE MENTIONED PURPOSE.
RESERVES A MEMORY BUF BY CALL OF "GET ̲ALL ̲MEMORY" AND
INPUTS THE REQUESTED PART OF FCP ̲FILE RECORD (FOR CURRENT
FORMAT).
NOTE: THE VARIABLES IN MAIN ̲LOOP ̲DATA:
MODEL ̲START, FCP ̲START, FCP ̲SIZE ARE NOT UPDATED.
***
PROCEDURE U̲P̲D̲A̲T̲E̲ ̲I̲T̲E̲M̲S̲
(R6) C LINK
"PRIMARY ̲ITEM" AND "SECONDARY ̲ITEM" ARE MOVED FROM
FCO DATA TO VDIA GLOBAL VARIABLES.
PROCEDURE D̲E̲F̲I̲N̲E̲ ̲M̲1̲ ̲M̲2̲
(R2 C K ADDRESS OF MEMORY RECORD 1
R3 C K ADDRESS OF MEMORY RECORD 2
R6) C LINK
CALLS "DEFINE ̲MEMREC" IN ORDER TO DEFINE THAT MEMORY
RECORDS M1 M2 HAVE THE ADDRESSES SPECIFIED.
PROCEDURE G̲E̲T̲ ̲M̲3̲ ̲M̲4̲
(R2 R ADDRESS OF MEMORY RECORD M3
R3 R ADDRESS OF MEMORY RECORD M4
R6) C LINK
CALLS THE FUNCTION "GET ̲MEMREC ̲ATTR" IN ORDER TO FIND
THE ADDRESSES OF MEMORY RECORDS M3 M4.
4.2.3.4.1.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
TYPE MAIN ̲LOOP ̲DATA = RECORD
V̲D̲I̲A̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲F̲I̲L̲E̲ ̲D̲E̲S̲C̲R̲I̲P̲T̲O̲R̲:
CONTROL ̲FDCB FDCB INDEX FOR
FCP FILE
NO ̲OF ̲RECORDS NO OF RECORDS IN
FCP FILE
MODEL ̲MAX MAX WORD SIZE OF
MODEL
FCP ̲OUT ̲MAX MAX WORD SIZE OF
FCP ̲OUT
FCP ̲IN ̲MAX MAX WORD SIZE OF
FCP ̲IN
CTRL ̲REC ̲SIZE: INTEGER RECORD SIZE IN
BYTES
M̲O̲D̲E̲L̲ ̲A̲N̲D̲ ̲F̲C̲P̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲I̲N̲F̲O̲:
MODEL ̲START START ADDR FOR
MODEL
FCP ̲START START ADDR FOR
FCP
A ZERO INDICATES
THAT NO
BUFFER IS ALLOCATED.
FCP ̲SIZE: INTEGER SIZE IN WORDS ON
FCP BUFFER
C̲O̲M̲M̲A̲N̲D̲ ̲A̲N̲D̲ ̲S̲T̲A̲T̲E̲:
CURRENT ̲COMMAND CURRENT COMMAND
CODE
PREVIOUS ̲COMMAND PREVIOUS COMMAND
CODE
COMMAND ̲SUFFIX CURRENT COMMAND
SUFFIX
CIF ̲ACCESS COMMAND USES CIF
ACCESS
CURRENT ̲OPERATION POINTERS SEMAPHORE
NEXT
̲OPERATION: INTEGER OPERATIONS
RECEIVED
FROM
FCO.
L̲O̲N̲G̲ ̲E̲X̲I̲T̲:
LONG ̲EXIT ̲RETURN RETURN ADDRESS
LONG ̲EXIT ̲STACKPT STACK POINTER
VDIA ̲STATE: INTEGER STATE
END
P ̲MAIN POINTS TO A RECORD OF THIS TYPE
4.2.3.4.1.2 S̲t̲a̲c̲k̲ ̲E̲r̲r̲o̲r̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.1.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
CALLED IN THE ERROR EXIT FOR STACK OVERFLOW AS FOLLOWS:
SWITCH CSP ( (P ̲STACK = R0) INTEGER, (-SIZE (WORK)
) = R7)
ERROR ̲OK TO
ERROR: STACK ̲ERROR (R6)
END
THE PROCEDURE CALLS TEP ̲INT ̲ERROR. THE REGISTERS MUST
CORRESPOND TO THE ORDER SEQUENCE ABOVE.
4.2.3.4.1.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) STACK ̲ERROR
b) STACK ̲ERROR (R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R6 LINK destroyed
(R0 see description above)
(R7 see description above)
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
Stack overflow (always)
4.2.3.4.1.2.3 M̲o̲d̲u̲l̲e̲ ̲c̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
None.
4.2.3.4.1.3 L̲o̲n̲g̲ ̲E̲x̲i̲t̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.1.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
THE PROCEDURE JUMPS BACK TO MAIN LOOP WITH SPECIFIED
COMPLETION CODE. THE LINK REGISTER IS DUMMY AS THE
PROCEDURE WILL NEVER RETURN TO CALLER.
4.2.3.4.1.3.2 M̲o̲d̲u̲l̲ ̲i̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) LONG ̲EXIT
b) LONG ̲EXIT (R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R0 completion code (kept)
R6 Link (destroyed)
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R2 Para 2 in answer operation
R3 Para 3 in answer operation
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
None.
4.2.3.4.1.4 W̲a̲i̲t̲ ̲V̲d̲u̲ ̲I̲ ̲O̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.1.4.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
CALLS ASSOCIATE IN ORDER TO ASSOCIATE THE OPERATION
TO THE VDIA ACTIVATION SEMAPHORE S3 - AND WAITS FOR
THE SEMAPHORE.
IF THE SAME OPERATION IS RECEIVED BACK ON WAIT THE
FOLLOWING IS DONE:
WAIT ̲SYSTEM ̲CALL IN ORDER TO GET RESULT OF FORMAT
̲HANDLER I-O
IF RESULT = OK THE RETURN TO CALLER
ELSE LONG ̲EXIT.
IF ANOTHER OPERATION IS RECEIVED IN S3 THE RECEIVED
OPERATION POINTER IS STORED IN NEXT ̲OPERATION; THE
CURRENT FORMAT ̲HANDLER OPERATION IS CANCELLED, AND
A LONG ̲EXIT IS MADE WITH COMPLETION CODE = COMMAND
̲INTERRUPTION.
4.2.3.4.1.3.2 M̲o̲d̲u̲l̲e̲ ̲i̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) WAIT ̲VDU ̲I ̲O (RET ̲SYS ̲0,
RET ̲SYS ̲1,
RET ̲SYS ̲2,
RET ̲SYS ̲3,
RET ̲SYS ̲4,
SEM ̲PTR: INTEGER)
b) WAIT ̲VDU ̲I ̲O(R0, R1, R2, R3, R4, R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
(R0 - R RETURN FROM WAIT ̲SYSTEM ̲CALL
R1 - R RETURN FROM WAIT ̲SYSTEM ̲CALL
R2 - R RETURN FROM WAIT ̲SYSTEM ̲CALL
R3 - R RETURN FROM WAIT ̲SYSTEM ̲CALL
R4 - R RETURN FROM WAIT ̲SYSTEM ̲CALL
R5 C K POINTER TO SEMAPHORE OPERATION
R6) C - LINK
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
Errors from format handler (exept VDU ̲SPLIT ̲FAILED,
insert and delete not allowed).
4.2.3.4.2 F̲o̲r̲m̲a̲t̲ ̲P̲r̲o̲g̲r̲a̲m̲ ̲I̲n̲t̲e̲r̲p̲r̲e̲t̲e̲r̲
The Format Programme Interpreter executes the Format
Control Programme under control of VDIA Main Loop.
FCP is a variable length byte string, which must have
been read into a memory area by Main Loop before FCI
is activated.
When activated from Main Loop, FCI scans the FCP sequentially
and executes the commands one by one. When an END command
or the physical end of FCP is reached, whatever occurs
first, FCI returnes to Main Loop.
4.2.3.4.2.1 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲I̲n̲t̲e̲r̲p̲r̲e̲t̲e̲r̲ ̲M̲a̲i̲n̲
4.2.3.4.2.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
INTERPRETATE THE LOADED SEGMENT OF THE FORMAT ̲CONTROL
̲PROGRAMME (FCP).
THE FCP IS CONSIDERED AS A BYTE ̲ARRAY, WITH COMMANDS
(INSTRUCTION ̲CODES) ON BYTE ̲BOUNDARY. PARAMETRES TO
THE COMMAND (IF ANY) ARE PACKED IMMEDIATELY BEHIND
THE COMMAND. FIRST BYTE IS ASSUMED TO BE A COMMAND.
INTERPRETATION IS TERMINATED WHEN A EXIT ̲COMMAND OR
LIMIT OF THE BYTE ̲ARRAY IS REACHED.
THE COMPLETION CODE IS BASED ON VALIDATION RESULTS
FROM SYNTAX/SEMANTIC PROCEDURE.
4.2.3.4.2.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) FCPI ̲MAIN (COMMAND,
FCP ̲PT,
MAX ̲INDEX: INTEGER
CC: INTEGER
b) FCPI ̲MAIN (R0, R1, R4, R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R1 Command from FCO
R4 Pointer to first word in loades FCP segment
R5 Max number of FCP bytes (-1) to be interpreted
R6 Kept
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 Completion codes
R1 - R5 Kept
R6 Destroyed
R7 Kept
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
(see appendix XX)
4.2.3.4.2.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE
EVALUATE ̲CMD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R1 - R FCP ̲COMMAND: FCP ̲CMD
R5 C K % FCPI ̲DESCR
R6 - - LINK
) SKIP ̲EXEC
Narrative (Functional):
Auxilliary procedure. Determines if command is to be
skipped or executed. Further the trailing parametres
(if any) are moved to word boundary. Programme-Counters
(current, next) are updated.
PROCEDURE
INSTR ̲LENGTH
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R3 C R INSTRUCTION CODE / INSTRUCTION LENGTH
R6 - - LINK
)
Narrative (Functional):
Auxilliary procedure that returns the instruction length
(in bytes, including the instr. code) corresponding
to the specified instruction code.
Narrative (Design):
The procedure contains an inline table of instruction
̲lengths.
Note:
The table are ordered according to the scalar ̲type
FCP ̲CMD!
The inline table must be checked manually, when FCP
̲CMD is changed!
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
Local PROCEDURE
GET ̲LENGTH ( INSTR ̲LENGTH INTEGER R6 )
Narrative: This is a dummy procedure used to fetch
one word from an inline table
4.2.3.4.2.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
When FCPI is activated it receives a pointer and a
max. index for the area containing the Format Control
Program which is residing in the workspace of VDIA.
FCPI uses the following subrecords located in VDIA
̲DAT.
FCPI ̲REC, ARRAY OF BUNDL ̲DESCR and ARRAY OF STORAGE
̲TYPE.
The number of elements in the arrays are defined in
VDIA ̲DIM.S.
In FCPI ̲REC VAL ̲RES is used to keep the validation
result from the validation result from the syntax validation
procedures. FCO ̲CMD contains the actual command which
is under execution and VDU ̲RES keep the result from
VDU communication.
BUNDLE ̲CONTROL in an array control block for bundle
descriptors. A bundle descriptor refers to a field
bundle which actually is the vehichle used for transportation
of data from VDU ̲ACCESS to a syntax validation procedure.
A bundle descriptor contains the following informations:
SEQUENCE: the sequence to which the bundle is associated.
SYNTAX ̲PROC: Reference to the syntax validation procedure.
RECORD ̲TYPE: IOC record or fixed sized record.
MAX ̲COUNT: Max. numbers of fields in one bund.
BUNDLE ̲PT: Pointer to the bundle described by this
record.
STORAGE ̲CONTROL is an array control block for STORAGE
TYPES. A storage type is the description of the place
to store data which is read from the VDU. A storage
type contains the following informations:
OP ̲TYPE: Defines whether the operand is a sequence
or a variable.
VARIABLE or SEQUENCE: If OP ̲TYPE is variable this field
defines the location of the data, else the field gives
the number of the sequence.
Besides the data areas described here, FCPI dynamically
allocates memory areas via memory management or uses
the stack for storage of intermediate data.
FIGURE 4.2.3.4.2.1.4-1
FCPI DATA
4.2.3.4.2.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
As the length of parametres are uniquely related to
the command, update of the PROGRAMME ̲COUNTER (PT) may
be done before branching to "EXECUTE COMMAND". Data
from FCPI ̲MAIN to the underlying layer of "EXECUTE"
-procedures (one to each command) is handed over via
a FCPI ̲DESCRIPTOR (stacked). Data from "EXECUTE"-procedures
to FCPI ̲MAIN are handed-over via a flag-array (static
located by linker) or - if "EXECUTE"-procedure concerns
if, repeat, until, while, endwhile or exit commands
- via FCPI ̲DESCRIPTOR.
The FCPI ̲DESCRIPTOR contains mainly: index to CURRENT/NEXT
̲COMMAND, LOOP ̲CONTROL and parametres.
These parametres are, for further SWELL ̲PROCESSING,
moved to word boundary. No jump-forward is implemented,
i.e. a WHILE ̲LOOP is bypassed by repeated skips of
single commands until the ENDWHILE ̲COMMAND is reached.
While..endwhile loops should not be nested (no run-time
check). Repeat...until loops can be nested to a level
determined by constant defined in "FCP ̲PREFIX".
However, a WHILE ̲LOOP may be nested within a REPEAT
̲LOOP (or visa versa).
4.2.3.4.2.2 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲I̲n̲t̲e̲r̲p̲r̲e̲t̲e̲r̲ ̲I̲n̲p̲u̲t̲
S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲(̲M̲o̲d̲u̲l̲e̲ ̲d̲e̲s̲i̲g̲n̲)̲
X̲ ̲I̲N̲I̲T̲ ̲B̲U̲N̲D̲
Narrative (Functional):
Executes the FCP ̲INSTRUCTION INIT ̲BUNDLE. Ie.
Initializes a bundle. Mandatory for further processing
of specified bundle.
Narrative (Design):
Unpacks trailing parametres to command. Unpacked parametres
are re-arranged for call of auxilliary procedure INIT
̲BUNDLE.
X̲ ̲I̲N̲P̲ ̲F̲I̲E̲L̲D̲
Narrative (Functional):
Executes the FCP ̲INSTRUCTION INPUT ̲FIELD. Ie. a single
field of specified VDU ̲TYPE from the VDU. The field
is validated by specified SYNTAX ̲PROCEDURE, which uses
specified variable when storing results.
Flag VDU ̲RES is updated.
Narrative (Design):
A special bundle (BUNDLE ̲ZERO, not accessable from
FCP) is SET ̲UP ro the SYNTAX ̲PROCEDURE.
X̲ ̲I̲N̲P̲ ̲N̲X̲T̲
Narrative (Functional):
Executes the FCP ̲INSTRUCTION INPUT ̲NEXT. Ie. a single
field of specified VDU ̲TYPE from the VDU. The field
is validated by specified SYNTAX ̲PROCEDURE, which stores
results in specified sequence.
Flag VDU ̲RES is updated.
Narrative (Design):
A special bundle (BUNDLE ̲ZERO, not accessable from
FCP) is SET ̲UP for the SYNTAX ̲PROCEDURE.
X̲ ̲I̲L̲P̲ ̲N̲X̲T̲ ̲B̲U̲N̲D̲
Narrative (Functional):
Executes the FCP ̲INSTRUCTION INPUT ̲NEXT ̲BUNDLE. The
bundle in concern must have been initialized.
The next bundle of VDU ̲TYPE is input from VDU and inserted
into bundle. If bundle did not become full, no more
action is taken. Otherwise, if bundle did become full,
the field(s) is (are) validated and results stored
into Flag VDU ̲RES is updated. Sequence.
Note: No resources are relased. Consequently, this
command should never be the last concerning specified
bundle (refer X ̲FLUSH ̲BUND).
X̲ ̲I̲N̲P̲ ̲S̲E̲Q̲.
Narrative (Functional):
Executes the FCP ̲INSTRUCTION INPUT ̲SEQUENCE. Equivalent
to repeated calls of INPUT ̲NEXT until all fields of
VDU ̲TYPE have been input.
Flag VDU ̲RES is not updated.
Narrative (Design):
A special bundle (BUNDLE ̲ZERO, not accessable from
FCP)
is SET ̲UP for the SYNTAX ̲PROCEDURE.
X̲ ̲I̲N̲P̲ ̲S̲E̲Q̲ ̲B̲U̲N̲D̲.
Narrative (Functional):
Executes the FCP ̲INSTR. INPUT ̲SEQUENCE ̲TO ̲BUNDLE.
Equivalent to repeated calls of INPUT ̲NEXT ̲BUNDLE until
all fields of VDU ̲TYPE have been input. Flag VDU ̲RES
is not updated.
Narrative (Design):
Parametre (ie bundle number) is fetched to SET ̲UP a
pointer to actual BUNDLE ̲DESCRIPTOR.
Then repeated calls of INPUT ̲NEXT ̲FIELD ̲TO ̲BUNDLE
are executed until completion-code is NOT ̲FOUND.
Finally, a (possibly) partly filled field is handled
by HANDLE ̲BUNDLE.
X̲ ̲F̲L̲U̲S̲H̲ ̲B̲U̲N̲D̲.
Narrative (Functional):
Executes the FCP ̲INSTRUCTION FLUSH ̲BUNDLE. Ie remaining
fields in bundle are validated and stored. If the bundle
is un-initialized no action is taken. When this command
has been executed no further i/o on bundle should be
made.
A̲ ̲A̲S̲S̲I̲G̲.
Narrative (Functional):
Executes the FCP ̲INSTRUCTION assign (a STORAGE ̲TYPE
to an operand).
This allows subsequent reference to this STORAGE ̲TYPE
from a SYNTAX ̲PROCEDURE. Only operands of type variable
or sequence are allowed. Note that all "EXECUTE ̲INPUT"-procedures
make an implicit assignment to STORAGE ̲TYPES (ZERO).
Narrative (Design):
Data from parametres are used to SET ̲UP the variant-record
STORAGE ̲TYPE.
4.2.3.4.2.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
All the above mentioned procedures have the same module
interface, thus they will be described as one.
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) PROC ̲NAM (FCPI ̲DESCR ̲PT: INTEGER)
b) PROC ̲NAM (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R5 Pointer FCPI descriptor
R6 Link
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
see appendix A
4.2.3.4.2.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE
ASSIGN ̲STOR ̲ZERO
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R2 C K SEQUENCE
R6 - - LINK
)
Narrative (Functional):
Auxilliary procedure. Assigns a sequence (not a variable)
to STORAGE ̲TYPE (ZERO).
PROCEDURE
HANDLE ̲BUNDLE
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R5 C K % BUNDLE ̲DESCRIPTOR
R6 - - LINK
)
Narrative (Functional):
Handles the data fields in specified bundle; either
by call of relevant syntax procedure, or if SYNTAX
̲PROC = none - by repeated calls of STORE ̲FIELD. At
exit bundle is marked emoty. All data from/to caller
is via BUNDLE ̲DESCRIPTOR.
Narrative (Design):
General usage of registers throughout procedure:
R5 = %BUNDLE ̲DESCRIPTOR
PROCEDURE
INPUT ̲NEXT ̲FIELD ̲TO ̲BUNDLE
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R0 - R REPLICA/NOT ̲FOUND
R5 C K %BUNDLE ̲DESCRIPTOR
R6 - - LINK
)
Narrative (Functional):
Inputs next field to specified bundle. If this bundle
becomes FILLED ̲UP, HANDLE ̲BUNDLE is called. Except
R0, all data from/to caller is via BUNDLE ̲DESCRIPTOR.
Narrative (Design):
General usage of registers throughout procedure:
R5 = %BUNDLE ̲DESCRIPTOR
R6 = %FIELD ̲BUNDLE
PROCEDURE
INIT ̲BUNDLE
…02… ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(
R1 C K MAX ̲COUNT (OF FIELDS IN BUNDLE)
R2 C K LOWER BYTE: SEQUENCE (TO WHICH BUNDLE IS
ASSOCIATED)
R3 C K LOWER BYTE: SYNTAX ̲PROC (IN PACKED FORM
FROM PARAMETRES)
R4 C K LOWER BYTE: VDU ̲TYPE (IN PACKED FORM FROM
PARAMETRES)
R5 C K %BUNDLE ̲DESCRIPTOR
R6 - - LINK
)
Narrative (Functional):
Initializes specified BUNDLE ̲DESCRIPTOR. An associated
FIELD ̲BUNDLE is reserved and initialized too. The FIELD
̲BUFFERS appointed by this FIELD ̲BUNDLE are also reserved.
4.2.3.4.2.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.3.4.2.1.4
4.2.3.4.2.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Refer to 4.2.3.4.2.2.1
4.2.3.4.2.3 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲
I̲n̲t̲e̲r̲p̲r̲e̲t̲e̲r̲ ̲D̲i̲s̲p̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲(̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲)̲
A̲ ̲D̲I̲S̲P̲ ̲F̲I̲E̲L̲D̲
Narrative (Functional):
Executes the FCP ̲COMMAND DISPLAY ̲FIELD. Ie. displays
a single field on the VDU. The field may be converted
by a DISPLAY ̲PROCEDURE before the actual output is
done.
Narrative (Design):
Parametres are unpacked. An DISPLAY ̲DESCRIPTOR is SET
̲UP. SETUP ̲DISP and DO ̲DISPLAY are called.
X̲ ̲D̲I̲S̲P̲ ̲N̲X̲T̲
Narrative (Functional):
Executes the FCP ̲COMMAND DISPLAY ̲NEXT. Ie. displays
a (initialized!) sequence of fields on the VDU.
The fields are fethed one by one, then possibly converted
by a DISPLAY ̲PROCEDURE before display.
Only one replica is displayed at each call.
Narrative (Design):
Parametres are unpacked. Then a single call of READ
̲DISP is performed.
X̲ ̲D̲I̲S̲P̲ ̲S̲E̲Q̲
Narrative (Functional):
Executes the FCP ̲COMMAND DISPLAY ̲SEQUENCE. Ie displays
a (initialized!) sequence of fields on the VDU.
The fields are fethed one by one, then possible converted
by a DISPLAY ̲PROCEDURE before display.
All replicas are displayed at each call.
Narrative (Design).
Parametres are unpacked. Then repeated calls of READ
̲DISP are performed.
4.2.3.4.2.3.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
All the above mentioned procedures have the same module
interface, thus they will be described as one
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) PROC ̲NAM (FCPI ̲DESCR ̲PT: INTEGER)
b) PROC ̲NAM (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R5 Pointer FCPI Descriptor
R6 Link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
See appendix A
4.2.3.4.2.3.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE
SETUP ̲DISP
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R3 - R VDU FIELD LENGTH (IN BYTES EXCLUDING IOC)
R4 C R VDU ̲FIELD ̲TYPE / %GET ̲OP ̲BUFFER
R5 - R %DISPLAY ̲BUFFER
R6 - R LINK
)
Narrative (Functional):
To be called before any output to the VDU. Reserves
following buffers:
a buffer long enough to accomodate output from
GET ̲OPERAND (or S ̲READ ̲NEXT),
a buffer long enough to accomodate output from
DISPLAY ̲PROCEDURE.
Note that the two buffers are concanated, meaning that
they can be released as a entity (GET ̲OP ̲BUFFER is
first).
Narrative (Design):
A single buffer is reserved, then sliced into two parts.
PROCEDURE
DO ̲DISPLAY
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R5 C K %DISPLAY ̲DESCRIPTOR
R6 - - LINK
Narrative (Functional):
Does the actual display. In case a DISPLAY ̲PROCEDURE
is specified (via descriptor), the DISPLAY PROCEDURE
is called, before output is done.
The intended environment/flow can be depicted thus:
INPUT ̲BUFFER DISPLAY ̲PROC OUTPUT ̲BUFFER
OUTPUT ̲VDU ̲FIELD
Narrative (design):
Received DISPLAY ̲DESCRIPTOR is investigated and appropriate
action taken.
PROCEDURE
READ ̲DISP
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R0 - R OK, NOT ̲OK
R1 C K SEQUENCE
R4 C K VDU ̲TYPE
R5 C K DISPLAY ̲PROC
R6 - - LINK
)
Narrative (Functional):
This is an auxilliary procedure used when displaying
sequences. The COMPLETION ̲CODE is NOT ̲OK if the sequence
went exhausted.
Narrative (Design):
A setup for display is performed. The data to be displayed
is fetched via a call to the SEQUENCE-ACCESS ̲METHOD.
A DISPLAY ̲DESCRIPTOR is set-up for call of DO ̲DISPLAY.
Finally, the reserved resources are released (refer
SET ̲UP ̲DISP!).
4.2.3.4.2.3.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.3.4.2.1.4
4.2.3.4.2.3.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
See 4.2.3.4.2.3.1
4.2.3.4.2.4 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲C̲o̲n̲t̲r̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.4.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲(̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲)
X̲ ̲I̲F̲F̲
Executes the FCP ̲COMMAND if(f). Ie. skips next FCP
̲COMMAND if condition specified in parametres not are
fulfiled.
X̲ ̲W̲H̲I̲L̲
Executes the FCP ̲COMMAND whil(e). Ie. skips WHILE ̲LOOP
if condition specified in parametres is not fulfiled.
X̲ ̲U̲N̲T̲
Executes the FCP ̲COMMAND unt(il). Ie. exits REPEAT
̲LOOP if condition specified by parametres is fulfiled.
A̲ ̲E̲N̲D̲W̲H̲
Executes the FCP ̲COMMAND endwh(ile). Ie. dependent
on conditions (refer X ̲WHIL), either a BACK ̲WARD jump
to WHILE ̲COMMAND is performed or execution continues
with the command immediately following endwhile.
X̲ ̲R̲E̲P̲
Executes the FCP ̲COMMAND rep(eat). Ie. stores a RETURN
̲POINT for the corresponding UNTIL ̲COMMAND. The latter
decides if a jump to the RETURN ̲POINT is to be performed.
4.2.3.4.2.4.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
All the above mentioned procedures have the same module
interface, thus they will be described as one.
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) PROC ̲NAM (FCPI ̲DESCR ̲PT: INTEGER)
b) PROC ̲NAM (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R5 Pointer FCPI descriptor
R6 Link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
See appendix XX
4.2.3.4.2.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE
EVALUATE ̲CONDITION
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(
R5 C K %FCPI ̲DESCRIPTOR
R6 ̲ ̲ LINK
) BOOLEAN
Narrative:
Evaluates the conditione specified in conjugation with
the relational FCP ̲COMMANDS (IFF, WHIL, UNT), and exits
accordingly. Auxilliary procedure used in X ̲IFF/X ̲WHILE/X
̲UNT.
4.2.3.4.2.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.3.4.2.1.4
4.2.3.4.2.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
See 4.2.3.4.2.4.1
4.2.3.4.2.5 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲S̲e̲q̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.5.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲(̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲)̲
X̲ ̲I̲N̲I̲T̲ ̲S̲E̲Q̲ ̲I̲N̲P̲
Executes the FCP ̲COMMAND INIT ̲SEQ ̲INP. Ie. sets up
a SEQUENCE ̲DESCRIPTOR, which is passed on to the SEQUENCE
̲ACCESS ̲METHOD.
X̲ ̲I̲N̲I̲T̲ ̲S̲E̲Q̲ ̲D̲I̲S̲P̲
Executes the FCP ̲COMMAND INIT ̲SEQ ̲DISP. Ie. sets up
SEQUENCE ̲DESCRIPTOR, which is passed onto SEQUENCE
̲ACCESS ̲METHOD.
X̲ ̲I̲N̲I̲T̲ ̲S̲E̲Q̲ ̲U̲P̲D̲
Executes the FCP ̲COMMAND INIT ̲SEQ ̲UPD. Ie. sets up
a SEQUENCE ̲DESCRIPTOR, which is then passed on to the
SEQUENCE ̲ACCESS ̲METHOD.
X̲ ̲S̲A̲V̲E̲ ̲P̲O̲S̲
Executes the FCP ̲COMMAND SAVE ̲POS. Ie. gets SEQUENCE
̲POSITION via the seq. acc. method. The position is
stored according to specification in parametres.
X̲ ̲S̲A̲V̲E̲ ̲C̲O̲U̲N̲T̲
Executes the FCP ̲COMMAND SAVE ̲COUNT. Ie. gets SEQUENCE
̲COUNT via the seq. acc. method. The count is stored
according to specification in parametres.
X̲ ̲P̲O̲S̲ ̲S̲E̲Q̲
Executes the FCP ̲COMMAND POS ̲SEQ. Ie. gets SEQUENCE
̲POSITION and hands it over to the seq. acc. method.
X̲ ̲G̲E̲T̲ ̲N̲X̲T̲
Executes the FCP ̲COMMAND GET ̲NXT. The next record in
specified sequence (initialized for display or update!)
is moved to variable. The size of the (fixed!) record
must match that of the variable.
X̲ ̲P̲U̲T̲ ̲N̲X̲T̲
Executes the FCP ̲COMMAND PUT ̲NXT. The content of specified
operand is moved to next record in sequence. The sequence
must have been initialized for input or update with
fixed length records. The size of the operand must
match that of the records.
4.2.3.4.2.5.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
All the above mentioned procedures have the same module
interface, thus they will be described as one.
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) PROC ̲NAM (FCPI ̲DESCR ̲PT: INTEGER)
b) PROC ̲NAM (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R5 Pointer FCPI descriptor
R6 Link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
See appendix A
4.2.3.4.2.5.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
None.
4.2.3.4.2.5.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.3.4.2.1.4
4.2.3.4.2.5.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Refer to 4.2.3.4.2.5.1
4.2.3.4.2.6 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲M̲i̲s̲c̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.6.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
X̲ ̲E̲X̲
Executes the FCPI command EXIT. Ie. interpretation
of FCP programme is terminated unconditionally.
X̲ ̲M̲O̲V̲E̲
Moves the contents of specified source-operand (any
type except NIL ̲VAR) to specified destination-operand
(of type variable). The length of the two operands
must be equal.
A̲ ̲A̲L̲L̲O̲C̲
Executes the FCP command ALLOCATE. Ie. allocates a
memory area of size words and calls the memory access
method for initialization of the memory record. Amemory
record should only be allocated once. All allocated
memory areas are automatically deallocated when a new
command from FCO is received.
X̲ ̲V̲D̲U̲ ̲P̲O̲S̲ ̲H̲O̲M̲E̲
Executes the FCP command VDU ̲POS ̲HOME. The procedure
requests the VDU access method to reset its internal
VDU position.
X̲ ̲R̲E̲P̲ ̲F̲I̲E̲L̲D̲
Executes the FCP command REPEAT ̲FIELD. Ie. ensures
that the specified number of fields of specified VDU
type are made avaiable in the format, if required by
line repetion.
X̲ ̲X̲T̲R̲A̲ ̲L̲I̲N̲E̲S̲
Executes the FCP command EXTRA ̲LINES. Ie. generates
the specified number of extra copies of the line containing
the field of VDU field type.
X̲ ̲S̲E̲T̲ ̲C̲I̲F̲ ̲W̲I̲N̲D̲
Executes the FCP command SET ̲CIF ̲WINDOW. ie. requests
the CIF access method to make the CIF field specified
available.
X̲ ̲S̲E̲T̲ ̲C̲I̲F̲ ̲M̲O̲D̲
Executes the FCP command SET ̲CIF ̲MODE. Ie. requests
the CIF access method to set the specified mode.
X̲ ̲N̲E̲W̲ ̲C̲I̲F̲ ̲C̲M̲D̲
Executes the FCP command NEW ̲CIF. Ie. requests the
CIF access method to clean up for output to a clean
CIF.
4.2.3.4.2.6.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
All the above mentioned procedures have the same module
interface, thus they will be described as one.
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) PROC ̲NAM (FCPI ̲DESCR ̲PT: INTEGER)
b) PROC ̲NAM (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R5 Pointer FCPI descriptor
R6 Link
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
See appendix A
4.2.3.4.2.6.3 M̲o̲d̲u̲l̲e̲ ̲c̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
None
4.2.3.4.2.6.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.3.4.2.1.4
4.2.3.4.2.6.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Refer to 4.2.3.4.2.6.1
4.2.3.4.2.7 F̲o̲r̲m̲a̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲P̲r̲o̲g̲r̲a̲m̲m̲e̲ ̲A̲u̲x̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.2.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
G̲E̲T̲ ̲O̲P̲E̲R̲A̲N̲D̲
Moves the contents of the specified (long) operand
to the specified destination. If the wanted byte count
is less than that recognized on operand, a fatal error
is generated. note that only operands of the type variable
can have a byte count different from
P̲U̲T̲ ̲O̲P̲E̲R̲A̲N̲D̲
Moves the specified source byte array to the specified
variable. If the variable is memory based the offset
must be even.
S̲T̲O̲R̲E̲ ̲F̲I̲E̲L̲D̲
To be called by SYNTAX ̲VALIDATION, when a field has
been validated and converted into internal format.
The converted date will be stored in a location determined
STORAGE ̲TYPE ̲INDEX is zero unless the SYNTAX ̲PROCEDURE
produces output to more than one type of location.
if so the value of the index should be defined in a
prefix, and compiled into the SYNTAX ̲PROCEDURE. The
FCP will assign the values of the STORAGE ̲TYPE ̲INDEX
prior to the call of the SYNTAX ̲PROCEDURE.
4.2.3.4.2.7.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲
a) GET ̲OPERAND (BYTE ̲COUNT, DEST ̲PT,
OPERAND ̲PT)
PUT ̲OPERAND (BYTE ̲COUNT, SOUR ̲OFF,
SOUR ̲PT, OPERAND ̲PT)
STOR ̲FIELD (STOR ̲TYP, DATA ̲COUNT,
DATA ̲OFF, DATA ̲PT)
b) GET ̲OPERAND (R2, R4, R5, R6)
PUT ̲OPERAND (R2, R3, R4, R5, R6)
STORE ̲FIELD (R0, R2, R3, R4, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲c̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
R0 storage type index
R2 byte count
R3 offset
R4 data pointer (destination/source)
R5 operand pointer
R6 link
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 R5, R7 Kept
R6 Destroyed
F̲a̲t̲a̲l̲ ̲e̲r̲r̲o̲r̲s̲
See appendix XX
4.2.3.4.3 V̲D̲U̲ ̲A̲c̲c̲e̲s̲s̲ ̲M̲e̲t̲h̲o̲d̲
I̲N̲T̲R̲O̲D̲U̲C̲T̲I̲O̲N̲
The VDU Access Method is the set of functions performing
the communication between VDIA and the VDU Format Handler.
The MAIN Programme in VDIA may request the following
operations to be performed:
. Input of data fields from the VDU
. Outupt of data fields to the VDU
. Insertion of error codes in the error list
. Output of the error list to the VDU
. Initiation of a new format on the VDU
. Clear VDU
. Insertion or deletion of lines on the VDU
. Line numbering on/off
The VDU Access Method uses a VDU format model in order
to keep track of the fields on the VDU. The model is
input from disk when a new format is initiated and
it is updated whenever lines are inserted or deleted.
The VDU format file on the disk is generated by the
offline format m̲o̲d̲e̲l̲ ̲g̲e̲n̲e̲r̲a̲t̲o̲r̲ programme. This programme
uses the f̲o̲r̲m̲a̲t̲ ̲s̲o̲u̲r̲c̲e̲ file as input in order to generate
the model (i.e. same file as used by the format generator
for generating the format).
F̲I̲E̲L̲D̲ ̲T̲Y̲P̲E̲ ̲A̲N̲D̲ ̲R̲E̲P̲L̲I̲C̲A̲
Each field command in the format source must contain
a field type n̲a̲m̲e̲. This name is interpreted as a symbolic
notation for the f̲i̲e̲l̲d̲ ̲t̲y̲p̲e̲. For each field type the
fields of this type are numbered 1, 2,... as they appear
on the VDU. This r̲e̲p̲l̲i̲c̲a̲ ̲n̲u̲m̲b̲e̲r̲ together with the field
type determines uniquely each field. The callable interfaces
to the VDU Access Method use the internal identification
field type, replica number in order to specify a field
on the VDU. The conversion to the addressing used by
the format handler (line, incarnation, field) is performed
by the VDU Access Method by means of the format model.
F̲I̲E̲L̲D̲ ̲I̲N̲P̲U̲T̲/̲O̲U̲T̲P̲U̲T̲
The I/O interfaces use the VDU p̲o̲s̲i̲t̲i̲o̲n̲ p̲o̲i̲n̲t̲e̲r̲ in
the VDU Access Method Module. Input/output proceeds
sequentially through the VDU picture starting at the
c̲u̲r̲r̲e̲n̲t̲ ̲p̲o̲s̲i̲t̲i̲o̲n̲ defined by the position pointer -
but fields may be bypassed during input or output.
The position pointer may furthermore be used to the
start of the picture.
4.2.3.4.3.1 V̲d̲u̲ ̲A̲c̲c̲e̲s̲s̲ ̲M̲e̲t̲h̲o̲d̲ ̲M̲a̲i̲n̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.3.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
I̲N̲S̲T̲A̲L̲L̲ ̲M̲O̲D̲E̲L̲
INITIALIZES THE VDU ACCESS METHOD CONTROL DATA FOR
VDU MODEL AND ERROR LIST. THE MODEL HAS BEEN MOVED
TO ITS FINAL LOCATION PRIOR TO THE CALL. THE ERROR
LIST SHALL BE LOCATED JUST AFTER THE MODEL. THE ERROR
LIST AREA MAY AT CALL TIME CONTAIN PART OF FCP, THUS
THE PROCEDURE MUST NOT UPDATE THE ERROR LIST AREA.
IT SHALL JUST DETERMINE THE AREA, UPDATE CONTROL DATA
AND RETURN THE ADDRESS OF FIRST WORD AFTER THE ERROR
LIST.
THE PROCEDURE ALSO ISSUES THE FORMAT HANDLER FUNCTION
GET FORMAT, USING THE GLOBAL VARIABLE CURRENT ̲FORMAT.
I̲N̲P̲U̲T̲ ̲V̲D̲U̲ ̲F̲I̲E̲L̲D̲
VDU ̲POS AFTER FIELD READ, UNCHANGED IF FIELD NOT FOUND.
SCANS THROUGH THE FORMAT FOR FIRST FIELD AFTER CURRENT
FIELD (AS GIVEN BY VDU ̲POS) FOR A FIELD OF THE TYPE
SPECIFIED. IF FOUND THE FIELD IS READ INTO THE BUFFER
IN THE FORM (RECORD TYPE) SPECIFIED.
FIXED: ASCII CHARACTERS, HEADING SFACES REMOVED, TRAILING
SPACES SUPPLIED.
VARIABLE: RECORD WITH IOC HEADER.
THE FIELD REPLICA IS THE REPLICA COUNT FOR FIELD INPUT.
BYTE COUNT IS INTERPRETED AS A BUFFER LIMIT. A FATAL
ERROR RESULTS IF DATA IS LONGER THAN THIS LIMIT.
LONG EXIT ALSO IF: SPLIT FAILED, COMMAND INTERRUPTION.
O̲U̲T̲P̲U̲T̲ ̲V̲D̲U̲ ̲F̲I̲E̲L̲D̲
VDU ̲POS AFTER FIELD WRITTEN
SCANS THROUGH THE VDU MODEL FROM VDU ̲POS FOR THE FIRST
ACCURENCE OF A FIELD WITH THE SPECIFIED TYPE AND OUTPUTS
THE SPECIFIED DATA TO THE FIELD THE HANDLING OF THE
DATA DEPENDS ON THE FIRST DATA BYTE:
ALPHANUMERIC: THE NUMBER OF BYTES REQUIRED AS SPECIFIED
IN R0 ARE OUTPUT TO THE VDU.
NON ALPHANUMERIC: IT IS CHECKED THAT THE FIRST 3 DATA
BYTES FORMS THE HEADER FOR A VALID IOC RECORD WITH
COUNT = VDU FIELD SIZE. IF SO, THE DATA ARE OUTPUT
TO THE VDU.
LONG EXIT IF: FIELD NOT FOUND, SIZE ERROR, SPLIT
FAILED, COMMAND INTERRUPTION,
IOC ERROR.
I̲N̲S̲E̲R̲T̲ ̲L̲I̲N̲E̲S̲
CHECKS WHETHER THE CURSOR POSITION SPECIFIES A LINE
WHICH ALLOWS THE OPERATION. IF SO THE VDU FORMAT MODEL
IS UPDATED ACCORDINGLY AND THE INSERT COMMAND IS SENT
TO THE FORMAT HANDLER.
LONG EXIT IF: SPLIT FAIL, COMMAND INTERRUPTION.
D̲E̲L̲E̲T̲E̲ ̲L̲I̲N̲E̲S̲
CHECKS WHETHER THE CURSOR POSITION SPECIFIES A LINE
WHICH ALLOWS THE OPERATION. IF SO THE VDU FORMAT MODEL
IS UPDATED ACCORDINGLY AND THE DELETE COMMAND IS SENT
TO THE FORMAT HANDLER.
LONG EXIT IF: SPLIT FAIL, COMMAND INTERRUPTION.
M̲U̲L̲T̲I̲P̲L̲Y̲ ̲V̲D̲U̲ ̲F̲I̲E̲L̲D̲
SCANS THROUGH THE VDU MODEL FOR FIRST OCCURENCE OF
A FIELD WITH THE TYPE SPECIFIED. COUNTS THE NUMBERS
OF FIELDS OF THIS TYPE IN THE LINE FOUND AND REPEATS
THE LINE UNTIL THE REQUIRED NUMBER OF FIELDS CAN BE
ACCOMODATED. IF THE REQUIRED NO OF FIELDS CAN ALREADY
BE ACCOMODATED NO REPEAT IS PERFORMED. THE PROCEDURE
WILL NEVER DELETE LINES.
LONG EXIT IF: FIELD NOT FOUND, LINE NOT REPEATABLE,
SPLIT FAILED, COMMAND INTERRUPTION.
R̲E̲P̲E̲A̲T̲ ̲V̲D̲U̲ ̲F̲I̲E̲L̲D̲
SCANS THROUGH THE VDU MODEL FOR FIRST OCCURENCE OF
A FIELD WITH THE TYPE SPECIFIED. WHEN FOUND THE SPECIFIED
NO OF LINE COPIES ARE INSERTED BELOW THE EXISTING ONES.
LONG EXIT IF: FIELD NOT FOUND, LINE NOT REPEATABLE,
SPLIT FAILED, COMMAND INTERRUPTION.
P̲R̲E̲P̲ ̲A̲D̲A̲T̲ ̲P̲3̲
Requests the Format Handler to generate on ADAT ̲P3
̲MODEL, which contains information on the format actually
shown on the VDU. The information contained in the
model is the start line number of a group and number
of incornations of the group. From a syntax validation
procedure this information is available by accessing
memory record M9.
R̲E̲P̲E̲A̲T̲ ̲G̲R̲O̲U̲P̲
Requests the Format Handler to repeat the group pointed
out by the cursor.
D̲E̲L̲E̲T̲ ̲G̲R̲O̲U̲P̲
Requests the Format Handler to delete the group pointed
out by the cursor.
4.2.3.4.3.1.2 M̲o̲d̲u̲l̲e̲ ̲i̲n̲t̲e̲r̲f̲a̲c̲e̲
INSTALL ̲MODEL
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R4 C K %FORMAT HEAD
R5 C %MODEL START ADDRESS
R %TOP OF ERROR LIST
R6 C - LINK
INPUT ̲VDU ̲FIELD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 - R FIELD REPLICA, = 0 IF NOT FOUND
R1 C K VDU FIELD TYPE
R2 C K BYTE COUNT
R3 C K DATA BYTE OFFSET
R4 C K DATA POINTER
R5 C K RECORD TYPE, FIXED=0, VARIABLE =
1
R6) C - LINK
OUTPUT ̲VDU ̲FIELD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 C K NO OF BYTES FOR OUTPUT
(ONLY FOR NOT IOC)
R1 C K VDU FIELD TYPE
R3 C K BYTE OFFSET
R4 C K DATA BASE
R6) C - LINK
INSERT ̲LINES
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲
(R0 R RESULT: OK, NOT ̲OK
R4 C K NO OF LINES TO INSERT
R5 C K POINTER TO CURSOR ADDRESS RECORD
R6) C - LINK
DELETE ̲LINES
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲
(R0 R RESULT: OK, NOT ̲OK
R4 C K NO OF LINES TO DELETE
R5 C K POINTER TO CURSOR ADDRESS RECORD
R6) C - LINK
MULTIPLY ̲VDU ̲FIELD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 - R RESULT (OK/NOT OK)
R1 C K VDU FIELD TYPE
R2 C K REQUIRED NO OF FIELD REPLICAS
R6) C - LINK
REPEAT ̲VDU ̲FIELD ̲LINE
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 - R RESULT (OK/NOT ̲OK)
R1 C K VDU FIELD TYPE
R2 C K REQUIRED NO OF EXTRA LINES
R6) C - LINK
PREP ̲ADAT ̲P3(R6)
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
REPEAT ̲GROUP
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 R RESULT: OK, NOT ̲OK
R4 C K --
R5 C K POINTER TO CURSOR POSITION
R6)
DELET ̲GROUP
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 R RESULT: OK, NOT ̲OK
R4 C K --
R5 C K POINTER TO CURSOR
R6)
4.2.3.4.3.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
None
4.2.3.4.3.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
4.2.3.4.3.2 V̲d̲u̲ ̲A̲c̲c̲e̲s̲s̲ ̲M̲e̲t̲h̲o̲d̲ ̲M̲o̲d̲e̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.3.4.3.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
I̲N̲I̲T̲ ̲M̲O̲D̲E̲L̲
COMPUTES ADDRESSES IN MODEL BY USE OF THE DATA IN MODEL
HEAD AND INITIALIZE INTERNAL POINTERS IN VDIA DATA
FOR MODEL.
FETCHES NO OF ENTRIES IN ERROR LIST FROM MODEL ̲HEAD
AND RETURNS THE VALUE IN R1.
V̲D̲U̲ ̲P̲O̲S̲ ̲H̲O̲M̲E̲
VDU ̲POS SET TO HOME POSITION.
SETS THE VDU ̲POS TO POINT TO START OF THE VDU MODEL.
V̲D̲U̲ ̲F̲I̲E̲L̲D̲ ̲S̲I̲Z̲E̲
GETS THE VDU FIELD SIZE FROM THE INTERNAL TABLES IN
THE VDU FORMAT MODEL.
M̲O̲D̲E̲L̲ ̲F̲I̲N̲D̲ ̲L̲I̲N̲E̲S̲
FINDS THE LINE TABLE ENTRY FOR THE LINE CONTAINING
THE SPECIFIED FIELD TYPE AND EXTRACT THE RETURN INFORMATION.
F̲I̲N̲D̲ ̲F̲I̲E̲L̲D̲
VDU ̲POS UPDATED IF FIELD FOUND, UNCHANGED IF FIELD
NOT FOUND.
SCANS THROUGH THE FORMAT STARTING IN THE NEXT FIELD
AFTER VDU ̲POS. FOR A FIELD WITH THE SPECIFIED TYPE.
IF THE FIELD IS FOUND, VDU ̲POS IS UPDATED TO POINT
TO THE FIELD AND PARAMETRES FOR THE FIELD ARE RETURNED
IN THE REGISTERS. IF PRINTING OF LINE COUNT IS REQUIRED
THE FIELD NO FOR THE LINE COUNT FIELD IN THE LINE IS
RETURNED IN R4 - ELSE R4 IS EQUAL TO ZERO.
F̲I̲N̲D̲ ̲V̲D̲U̲ ̲A̲D̲D̲R̲E̲S̲S̲
FINDS THE VDU ADDRESS FOR THE SPECIFIED FIELD. IE.
CONVERTS THE VDU POSITION FROM INTERNAL REPRESENTATION
(FIELD TYPE, REPLICA NUMBER) TO EXTERNAL REPRESENTATION
(LINE NUMBER, INCORNATION NUMBER, FIELD NUMBER).
IF THE LINE CONTAINS AN ERROR CODE FIELD THE FIELD
NO IS GIVEN IN R4, OTHERWISE R4 = 0.
M̲O̲D̲E̲L̲ ̲I̲N̲S̲ ̲L̲I̲N̲E̲S̲
TEST IF THE INSERTION IS ALLOWED/POSSIBLE AND UPDATES
THE MODEL FOR INSERTION. IF THE INSERTION IS NOT ALLOWED
THE FOLLOWING HAPPENS:
OPERATOR: RETURN RESULT = ERROR.
FCP: FATAL ERROR.
LONG EXIT IF: SPLIT FAILED, COMMAND INTERRUPTION.
M̲O̲D̲E̲L̲ ̲D̲E̲L̲ ̲L̲I̲N̲E̲S̲
TEST THAT THE DELETION IS ALLOWED/POSSIBLE AND UPDATES
THE MODEL FOR DELETION. IF DELETION IS NOT ALLOWED
THE FOLLOWING HAPPENS:
OPERATOR: RETURN RESULT = ERROR
FCP: FATAL ERROR TERMINATION
NOTE THE INCARNATION IS SPECIFYING THE FIRST LINE TO
BE REMOVED. PROCEDURE MUST CHECK THAT NOT ALL LINE
INCARNATIONS ARE REMOVED.
LONG EXIT IF: SPLIT FAIL, COMMAND INTERRUPTION.
E̲R̲R̲O̲R̲ ̲F̲I̲E̲L̲D̲ ̲S̲I̲Z̲E̲
RETURNES THE SIZE OF THE ERROR FIELD CONNECTED TO THE
ACTUAL LINE.
4.2.3.4.3.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
INIT ̲MODEL
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R1 R %NO OF ENTRIES IN ERROR LIST
R4 C K %FORMAT ̲HEAD
R5 C %MODEL ̲START
R %MODEL ̲TOP
R6) C - LINK
VDU ̲POS ̲HOME
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R6) C - LINK
VDU ̲FIELD ̲SIZE
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R4 C K VDU FIELD TYPE
R5 R SIZE OF FIELD ON VDU
R6) C - LINK
MODEL ̲FIND ̲LINES
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R1 C VDU FIELD TYPE
R LINE NO
R2 R NO OF INCARNATION OF LINE
R5 R NO OF FIELDS IN ONE LINE
R6) C - LINK
FIND ̲FIELD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
(R0 R FIELD REPLICA NUMBER OR = 0 FOR
NOT FOUND
R1 C VDU FIELD TYPE
R VDU LINE NUMBER
R2 R VDU LINE INCARNATION
R3 R VDU FIELD NUMBER
R4 R LINE COUNT FIELD NUMBER OR ZERO
R5 R SIZE OF LINE COUNT FIELD
R6) C - LINK
FIND ̲VDU ̲ADDRESS
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 R RESULT: OK, NOT ̲OK
R1 C VDU FIELD TYPE
R VDU ̲LINE ̲NUMBER
R2 C REPLICA NUMBER
R VDU LINE INCARNATION
R3 R VDU FIELD NUMBER IN LINE
R4 R ERROR CODE FIELD NO (OR 0)
R6) C - LINK
MODEL ̲INS ̲LINES
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(R0 R RESULT: OK, NOT ̲OK
R1 C K VDU LINE NUMBER
R2 C K VDU INCARNATION NUMBER
R4 C K NO OF LINES TO INSERT
R5 C K TYPE OF CALLER: 0 = OPERATOR, 1
= FCP
R6) C - LINK
MODEL ̲DEL ̲LINES
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
(R0 R RESULT: OK, NOT ̲OK
R1 C K VDU LINE NUMBER
R2 C K VDU INCARNATION NUMBER
R4 C K NO OF LINES TO DELETE
R5 C K TYPE OF CALLER: 0 = OPERATOR, 1
= FCP
R6) C - LINK
E̲R̲R̲O̲R̲ ̲F̲I̲E̲L̲D̲ ̲S̲I̲Z̲E̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R5 R SIZE OF ERROR CODE FIELD
R6) C - LINK
4.2.3.4.3.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PROCEDURE INCR ̲LINE ̲INC(R5;R6)
THIS PROCEDURE UPDATE THE "SPARE" IN LINE TABLE WITH
CURRENT INCARNATION NUMBER IN ORDER TO SOLVE THE ADAT
P3.
PROCEDURE DECR ̲LINE ̲INC(R5,R6)
THIS PROCEDURE UPDATE THE "SPARE" IN LINE TABLE WITH
CURRENT INCARNATION NUMBER IN ORDER TO SOLVE THE ADAT
P3.
PROCEDURE STEP ̲FIELD
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
(R0 C R SHIFTED MASK 15-0
R1 C R SHIFTED MASK 31-16
R2 C R LINE COUNT
R3 C R FIELD NO IN LINE
R4 C R FIELD TYPE REPLICA COUNT
R5 C K ADDRESS OF FIELD TYPE DESCRIPTOR
R6) C - LINK
FINDS THE NEXT FIELD OF THE TYPE BELONGING TO THE FIELD
TYPE DESCRIPTOR BY STEPPING FORWARDS IN AN ASSUMED
UNLIMITED SEQUENCE OF REPEATED LINES.
SHIFTED MASK: THE MASK FOR THE FIELD TYPE SHIFTED FIELD
NUMBER (R3)
POSITIONS TO THE RIGHT.
LINE COUNT: INCREMENT EACH TIME THE PROCEDURE CHANGES
LINE IN ORDER TO FIND NEXT FIELD.
FIELD TYPE REPLICA COUNT: INCREMENT EACH TIME THE
PROCEDURE IS CALLED.
4.2.3.4.3.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
VDU ̲MODEL uses the subrecord MODEL ̲REC. The subrecord
consists of the description of two tables LINE ̲TABLE
and FIELD ̲TABLE which together are called the VDU ̲MODEL.
The VDU ̲MODEL is read by the main loop from the FCP
file. The VDU ̲MODEL is VDIA's description of a format.
Besides the description of the tables the subrecord
contains the following informations:
ERROR ̲CODE ̲SIZE: The size of the margin area for display
of error codes.
LINE ̲CODE ̲SIZE: The size of the margin area for display
of line numbers.
VDU position: This record points out the position on
the VDU which is treated at the moment.
The FIELD ̲TABLE contains information of every field
in the format:
FIELD ̲MASK: Is a bitmask with a bit set for all fields
of this type in one line. F.ex. #0000 1034 tells that
field no. 3, 5, 6 and 11 are fields of this type.
M ̲FIELD ̲SIZE: The size of the field.
M ̲LINE ̲INDEX: The index to the LINE ̲TABLE where the
field is located.
The LINE ̲TABLE contains informations of every line
in the format:
INCARNATIONS: Number of incarnations of the line (how
many times has the line been repeated).
L ̲ERROR ̲FIELD: Error code field no. or, if the line
does not contain an error code, the field contains
a zero.
L ̲LINE ̲NO ̲FIELD: Line no. field no. or, if the line
does not contain ac line number, the field contains
a zero.
L ̲ATTRIBUTES: Gives the attributes of the field (i.e.
repeatable, insertable and deletable).
FIGURE 4.2.3.4.3.2.4-1
VDU MODEL DATA