top - download
⟦088f11208⟧ Wang Wps File
Length: 73679 (0x11fcf)
Types: Wang Wps File
Notes: CMS/SDS/004
Names: »4578A «
Derivation
└─⟦2e54efd14⟧ Bits:30006189 8" Wang WCS floppy, CR 0430A
└─ ⟦this⟧ »4578A «
WangText
…00……00……00……00……00…;…02…;
; ;…06…:…0c…:…00…:…02…:
: 9…0a…9…00…9…07…8…0c…8…0f…8…01…8…02…8…07…7…08…7…0d…7
6…08…6…0d…6…02…6…06…5…08…5…0b…5…0e…5…00…5…02…5…05…5…06…4…09…4…0a…4…0c…4…0f…4…00…4…05…3…0a…3…0b…3…01…3…06…2…0a…2…0d…2…00…2 1…08…1…0d…1…02……86…1 …02…
…02… …02…
…02…CMS/SDS/004
…02…840501 …02……02…
TDP PACKAGE DESIGN SPECIFICATION
…02…ISSUE 1…02…CAMPS
4.2.9 LTUX Transparent Firmware Subpackage
Specification ..........................
4.2.9.1 Functional Specification ...........
4.2.9.2 Software Structure .................
4.2.3 V̲D̲U̲ ̲S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
4.2.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
VDU split control receives IOC records or arm commands
from VDU handler IF and reacts on the commands, or
updates split memory if data.
Arm commands recognized:
- send M fields (30,#30,#5C, a, N, M)
- send first line (SO,#30,#5C, $)
- send cursor pos. (SO,#30,#5C, !)
- send one field (SO,#30,#5C, ', N)
IOC records are unpacked and contents recognized are:
Control Types:
format on (SO, A)
format off (SO, )
first line displayed (SO, $, HHHH)
delete line (SO, L)
insert line (SO, M)
cursor position (SI, column, line)
home (SO, Q)
clear split (SO, R)
clear n.characters (SO, +, G, HHH)
define field (30, (, Param, HHH)
write field (SO, %)
erase highlightes (SO, q, N)
alternate characters (SO, &, ch)
P-function keys (SO, *...)
video attribute (SO,', param)
data key enable(filter) (SO, +, I, 64 hex keycodes)
select split host & VDU (SO, +, (v)W, split no.)
lock keyboard (SO, G(
set split sizes (SO, +, S...)
unlock keyboard (SO, W)
clear all splits (SO, +, R)
request keystatus (SO, +, v)
link split (SO, +, e)
split xmit destination (SO, +, c)
data types;
type data, 1 to 80 chars.
type line, 1 to 80 chars.
type contr., formatdata possible t̲o̲ VDU
When sending data to CAMPS, this module packs the data
in LDU's and evt. in IOC records.
For detailed description of above functions refer to
VDU-manual DELTA 7260T reference manual.
4.2.3.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The module is divided in a number of procedures interpreting
one byte a time to decide the function, and a procedure
for each of the most complicated functions, among the
functions mentioned on 4.2.3.1.
CHECK 1.
BYTE
RS or SO ?
RS SO
IOC RECORD ARM COMMAND
4.2.3.2-2 4.2.3.2-4
FIGURE 4.3.4.3-1
IOC RECORD
save length
3. byte
IOC type
Data type Line type Control
type
4.2.3.2-3
FIGURE 4.2.3.2-2
IOC Record
FIGURE 4.2.3.2-3
Control Type
Interpret
arm command
Send fields
Send Cursor
position
Send first
line displayed
FIGURE 4.2.3.2-4
Arm Commands
4.2.3.3 D̲a̲t̲a̲f̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
IOC records or arm commands are received from VDU handler
interface. An IOC record of control type can consist
of several VDU functions, all starting with the character
SO (hex OE) and with a function dependent layout for
the rest of characters to the function. Format txt
possible.
Data- or line-type IOC records will each contain only
one data record.
The control logic should be obvious from the functional
description and description of software structure.
Refer to these in 4.2.3.1 and 4.2.3.2.
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̲U̲ ̲S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲M̲a̲i̲n̲ ̲M̲o̲d̲u̲l̲e̲
VDU split control consists of two modules with procedures
for each function, described in 4.2.3.1. Divided only
caused by size of the modules - no logical division
required
4.2.3.4.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̲
Refer to 4.2.3.1 for functions.
The module will call IOC/LDU pack routine which will
call the send routine to send data or answers to CAMPS.
E̲r̲r̲o̲r̲s̲:
Unrecognizable characters or functions will result
in an error message to the VDU. Split control will
then try to find the next "good" records, skipping
the rest of the error prone record.
4.2.3.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
Call: DATA ̲ENTRY ̲INT (R3,R4,R5,R7,R6);
R3 C - points to first char in IOC-rec-header
R4 C - IOC-rec-lgth+lgth of header (3)
R5 C K address of IOC-rec-buffer
R7 - R completion code (OK, NOT ̲OK)
R6 C - link
Called from VDU ̲IF only.
4.2.3.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Short description of each m̲a̲i̲n̲ procedure in the module
(utility procedures not described):
D̲A̲T̲A̲ ̲E̲N̲T̲R̲Y̲ ̲I̲N̲T̲E̲R̲P̲R̲E̲T̲A̲T̲I̲O̲N̲ is the main procedure called
from the subpackage VDU ̲HANDLER ̲IF.
The procedure calls IOC ̲REC ̲IN or ARM ̲COM ̲IN depending
on first character in the record (RS or SO).
I̲O̲C̲ ̲R̲E̲C̲ ̲I̲N̲ interprets IOC record headers, saves IOC
record length and identifies the types data, line and
control. It calls procedures DATA ̲REC ̲IN, LINE ̲REC
̲IN or CONTROL ̲REC ̲IN depending on the type.
A̲R̲M̲ ̲C̲O̲M̲ ̲I̲N̲. Arm commands and poss. split select record
are identified for further interpretation.
D̲A̲T̲A̲ ̲R̲E̲C̲ ̲I̲N̲ places data in split memory. Only non format
mode.
L̲I̲N̲E̲ ̲R̲E̲C̲ ̲I̲N̲ places data in split memory as above and
changes to next line after the update of split memory.
Only non format mode.
C̲O̲N̲T̲R̲O̲L̲ ̲R̲E̲C̲ ̲I̲N̲ interprets first character of a control
function and selects procedure for further interpretation.
I̲O̲C̲ ̲S̲H̲I̲F̲T̲ ̲O̲U̲T̲ ̲T̲Y̲P̲E̲ interprets the next (second) character
of the control record above if it is a shift out type.
F̲I̲R̲S̲T̲ ̲L̲I̲N̲E̲ ̲D̲I̲S̲P̲L̲A̲Y̲E̲D̲ validates and accepts a new first
line displayed.
D̲E̲L̲E̲T̲E̲ ̲L̲I̲N̲E̲ deletes a line in split memory and moves
all lines below the deleted line up.
I̲N̲S̲E̲R̲T̲ ̲L̲I̲N̲E̲.̲ An empty line is inserted before current
line and all lines below are pushed down.
C̲U̲R̲S̲O̲R̲ ̲T̲O̲ ̲H̲O̲M̲E̲.̲ Moves current cursor home and adjust
first line displayed.
C̲L̲E̲A̲R̲ ̲S̲P̲L̲I̲T̲.̲ One split or all splits are cleared and
all fields to the split(s) are released.
S̲O̲ ̲P̲L̲U̲S̲ ̲T̲Y̲P̲E̲. Identification of extended shift out
functions. These are further interpreted.
D̲E̲F̲I̲N̲E̲ ̲F̲I̲E̲L̲D̲.̲ A new field format validated and saved
if OK.
W̲R̲I̲T̲E̲ ̲T̲O̲ ̲F̲I̲E̲L̲D̲.̲ The function is identified but not
implemented. Error message will be sent. Not fatal.
V̲I̲D̲E̲O̲ ̲A̲T̲T̲R̲.̲ As for WRITE ̲TO ̲FIELD.
S̲E̲N̲D̲ ̲F̲I̲E̲L̲D̲S̲.̲ Reaction on the arm command - send fields.
The number of fields requested are packed in IOC records
ready for send. Calls SEND ̲TO ̲CAMPS (OUTPUT ̲DATA).
S̲E̲N̲D̲ ̲V̲D̲U̲ ̲F̲I̲R̲S̲T̲ ̲L̲I̲N̲E̲.̲ Arm command identified and first
line displayed is packed in IOC record for send before
calling SEND ̲TO ̲CAMPS.
S̲E̲N̲D̲ ̲V̲D̲U̲ ̲C̲U̲R̲S̲O̲R̲ ̲P̲O̲S̲.̲ Arm command identified. Cursor
position and line number are packed in IOC record before
calling SEND ̲TO ̲CAMPS.
C̲L̲E̲A̲R̲ ̲N̲ ̲C̲H̲A̲R̲S̲.̲ A number of characters in split memory
is cleared.
L̲I̲N̲K̲ ̲S̲P̲L̲I̲T̲.̲ Identified, but not implemented. Error
message "not implemented" send to VDU.
C̲H̲A̲N̲G̲E̲ ̲S̲P̲L̲I̲T̲.̲ Host split number is positioned.
D̲A̲T̲A̲ ̲K̲E̲Y̲ ̲E̲N̲A̲B̲L̲E̲. Keyboard filter is received, but ignored.
No error message.
K̲E̲Y̲L̲O̲C̲K̲ ̲S̲T̲A̲T̲U̲S̲ ̲R̲E̲Q̲U̲E̲S̲T̲.̲ Responds to request of keylock
status. The respond is an LDU of interrupt type, ITL
with the hardware (always unlocked) and the software
keylock status.
S̲E̲T̲ ̲C̲U̲R̲S̲O̲R̲ ̲P̲O̲S̲I̲T̲I̲O̲N̲.̲ Column and line number are converted
to current cursor position.
4.2.3.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to TDS-PRX and VDU-PRX.
Local Data:
Type
IOC ̲REC ̲BUF : array(1..1) of char;
IOC ̲T=(N ̲DATA,N ̲LINE,N ̲SP1,N ̲SP2,N ̲CONT)
VAR
IOC ̲TYPE ̲OF ̲REC : IOC ̲T;
BUF ̲LENGTH : INTEGER;
IT ̲LDU : array(1..5) of char;
NOT ̲FOUND : BOOLEAN;
CONST
SOFTKEY ̲LOCKED = #41; "hardkey unlocked
SOFTKEY ̲UNLOCKED = #40; "hardkey unlocked
RS = #1E; "record separator
4.2.3.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Only main structure shown. For details refer to
VDU ̲SPLIT1 & VDU ̲SPLIT2 sources.
Case first char. in buffer of
RS: "IOC record
Case third char. in buffer of
DATA: put data chars;
LINE: put line chars;
CONT: interpret control chars;
otherwise msg.error "bad IOC";
SO: "arm command
Select split
Validate arm command
case first char in arm command of
"a": interpret send fields;
"'": interpret send one field;
"$": send VDU first line;
"!": send VDU cursor pos;
otherwise msg ̲error "bad arm";
otherwise msg ̲error "unknown function";
Return.
4.2.3.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
All data common - refer to 4.2.3.4.1.4.
4.2.3.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
None.
4.2.4 V̲D̲U̲ ̲H̲a̲n̲d̲l̲e̲r̲ ̲I̲/̲F̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This subpackage handles the interface to the VDU Handler
package (Transparent VDU handler & TDSLTUX ̲FW).
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̲
The function of the VDU Handler I/F subpackage is divided
into two main functions and some subfunctions. The
main functions are
1) LDU Transfer
2) LDU Unpacking
In fig. 4.2.4.1-1 is shown a functional breakdown.
FIGURE 4.2.4.1-1
Functional Breakdown.
4.2.4.1.1 L̲D̲U̲ ̲T̲r̲a̲n̲s̲f̲e̲r̲
LDU's received from VDU Handler are, after unpacking,
delivered to VDU Split Control or CONTROL ̲ENTRY ̲INT.
LDU'S from VDU Split Control are transferred to VDU
Handler.
4.2.4.1.2 L̲D̲U̲ ̲U̲n̲p̲a̲c̲k̲i̲n̲g̲
LDU's are selected between Data and Control. After
selection the LDU header is removed.
4.2.4.1.3 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲
During start up of the TDP package the VDU Handler
I/F is activated by the VDU Simulator Control. The
VDU Handler I/F requests the LTUX for data and waits
until data are received.
4.2.4.1.4 E̲r̲r̲o̲r̲ ̲P̲r̲o̲c̲e̲s̲s̲i̲n̲g̲
Error Reports received from the VDU Handler are delivered
to CONTROL ̲ENTRY ̲INT which takes action on the report.
4.2.4.2 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The VDU Handler I/F consists of two modules performing
the functions listed in section 4.2.4.1.
The Input ̲Data module is part of a coroutine further
containing the VDU ̲SPLIT ̲CONTROL module. The OUTPUT
̲DATA module is independent.
The software structure is shown in fig. 4.2.4.2-1.
FIGURE 4.2.4.2-1
Software STructure.
I̲n̲p̲u̲t̲ ̲D̲a̲t̲a̲ ̲M̲o̲d̲u̲l̲e̲
Receives LDU's from the LTUX. Unpacks the LDU's and
delivers IOC records to VDU ̲SPLIT ̲CONTROL or CONTROL
̲ENTRY ̲INT.
O̲u̲t̲p̲u̲t̲ ̲D̲a̲t̲a̲ ̲M̲o̲d̲u̲l̲e̲
Receives LDU's and transfers them to the LTUX for further
transmission.
4.2.4.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
The Data Flow is described in section 4.2.4.4.
4.2.4.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.4.4.1 I̲n̲p̲u̲t̲ ̲D̲a̲t̲a̲ ̲M̲o̲d̲u̲l̲e̲
4.2.4.4.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̲
LDU's received from CAMPS are routed to the Input ̲Data
procedure. The LTU Type is detected and the LDU is
selected between Data and Control. If the LDU contains
Data, the LDU Header is removed and the LDU is delivered
to the VDU ̲Split ̲Control.
If the LDU contains Control the Header is removed and
the LDU is delivered to the VDU ̲Split ̲Control if it
was an input request (arm command), otherwise to the
CONTROL ̲ENTRY ̲INT. All Data to/from the VDU Handler
I/F module are sent for logging.
4.2.4.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
No internal module interfaces in this subpackage.
4.2.4.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module is divided into the following procedures
- Input ̲Data (Main Procedure)
- Interpret ̲Data
- Interpret ̲Control
- Identify ̲IOC ̲REC
- Divided ̲IOC ̲REC
- Adjust ̲For ̲Divided ̲IOC
I̲n̲p̲u̲t̲ ̲D̲a̲t̲a̲
Requests for input data from the LTUX and receives
LDU's in specified work buffers. Call the Log module
for logging the LDU's. Decides further action on the
LDU's depending on the content (Data ̲Content).
I̲n̲t̲e̲r̲p̲r̲e̲t̲ ̲D̲a̲t̲a̲
Selects the LDU type and depending on the type decides
further action.
I̲n̲t̲e̲r̲p̲r̲e̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
If control type is an input request IOC records are
delivered to the VDU Split Control, otherwise to the
CONTROL ̲ENTRY ̲INT.
I̲d̲e̲n̲t̲i̲f̲y̲ ̲I̲O̲C̲ ̲R̲E̲C̲
IOC records are delivered to the VDU Split Control.
D̲i̲v̲i̲d̲e̲d̲ ̲I̲O̲C̲ ̲R̲E̲C̲
If the IOC Record is divided in two LDU's the first
part of the IOC record is moved to another work buffer
so when the next LDU, containing the last part of the
IOC record is received the IOC record exists as entire
record, otherwise the last IOC record is delivered
to the VDU Split Control.
A̲d̲j̲u̲s̲t̲ ̲F̲o̲r̲ ̲D̲i̲v̲i̲d̲e̲d̲ ̲I̲O̲C̲
If the IOC record was divided, the now entire record
(of Divided ̲IOC ̲REC) is adjusted by the last char of
the first LDU replacing the LDU header of the second
LDU.
4.2.4.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.4.5.
4.2.4.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The flows are shortly described in this section.
1) I̲n̲p̲u̲t̲ ̲D̲a̲t̲a̲ (Main flow)
In detail ?: Refer to source.
- Append-/Read ̲Bytes. Receive an LDU from the LTUX.
- Work ̲Buffer Selection, Select/work buffer containing/to
contain current LDU and next LDU.
- Init Read ̲Bytes, Reserve a buffer for the next
LDU.
- Call Log, Send LDU for logging.
- Case LDU ̲Content ̲State, Call Interpret ̲Data (flow
2), Call Interpret ̲Control (flow 3).
- Wait (init read ̲bytes), Receive the next LDU.
- Change Read ̲Bytes ̲State, Change work ̲buffer.
- Jump to Append ̲Bytes, Request for LDU.
2) I̲n̲t̲e̲r̲p̲r̲e̲t̲ ̲D̲a̲t̲a̲
Detailed ?: Refer to source.
- Case LDU ̲Type,
Start ̲Of ̲LDU
- Check LDU ̲State, LDU ̲State = Start
Set LDU ̲State = Mid
- Save LDU ̲Seq ̲No
- Set Pointer to IOC ̲Record
- Call Identify ̲IOC ̲REC flow 4
- Call Divided ̲IOC ̲REC flow 5
Mid ̲Of ̲LDU
- Check LDU ̲State, LDU ̲State = Mid
Set LDU ̲State = End
- Call Adjust ̲For ̲Divided ̲IOC flow 6
- Call Identify ̲IOC ̲REC
- Call Divided ̲IOC ̲REC
End ̲Of ̲LDU
- Check LDU ̲State, LDU ̲State = End
Set LDU ̲State = Start
- Call Adjust ̲For ̲Divided ̲IOC
- Call Identify ̲IOC ̲REC
- Check LDU ̲Buf ̲Lgth, If OK then
Call Divided ̲IOC ̲REC else error.
Entire ̲LDU
- Check LDU-State, LDU ̲State not equal to
Start then error
- Save LDU ̲Seq ̲No
- Set Pointer to IOC ̲Record
- Call Identify ̲IOC ̲REC
- Check LDU ̲Buf ̲Lgth, If OK then
Call Divided ̲IOC ̲REC else error
Return
3) I̲d̲e̲n̲t̲i̲f̲y̲ ̲I̲O̲C̲ ̲R̲e̲c̲
D̲e̲t̲a̲i̲l̲e̲d̲: Refer to source.
- While DO, Repeat Loop Start
- Call Data ̲Entry ̲Interpretation,
Deliver IOC Record to VDU Split Control
- End while , Repeat Loop End
4) D̲i̲v̲i̲d̲e̲d̲ ̲I̲O̲C̲ ̲R̲e̲c̲
Detailed: Refer to source.
- Check last IOC Record for divided
- If divided, Move the first part of the IOC record
to the second work buffer
- Call Data ̲Entry ̲Interpretation. If not divided
the IOC record is delivered to VDU Split Control.
5) A̲d̲j̲u̲s̲t̲ ̲F̲o̲r̲ ̲D̲i̲v̲i̲d̲e̲d̲ ̲I̲O̲C̲
Details: Refer to source.
- If last IOC record was complete then exit the procedure
- If IOC record was divided, the last char from the
first part of the IOC record is inserted instead
of the LDU header of the next LDU, containing the
last part of the IOC record, for completion of
the entire IOC record.
- Call Data ̲Entry ̲Interpretation. The IOC record
is delivered to VDU Split Control.
6) I̲n̲t̲e̲r̲p̲r̲e̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
Details: Refer to source.
- Check Control Type,
- If Input Request, Call Data ̲Entry ̲ Interpretation,
Arm Command delivered to VDU Split Control.
- Not Input Request, Call Control ̲Entry ̲In-
terpretation, Command delivered to VDU Simulator
Control.
4.2.4.4.2 O̲u̲t̲p̲u̲t̲ ̲D̲a̲t̲a̲ ̲M̲o̲d̲u̲l̲e̲
4.2.4.4.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̲
For transmission of data to CAMPS VDU Split Control
calls the Send ̲CAMPS procedure which transfers a whole
LDU to the VDU Handler (LTUX), for further transmission.
One LDU at a time.
4.2.4.4.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
No internal module interface in this subpackage.
4.2.4.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module contains only one procedure.
- Send ̲CAMPS
LDU's received from VDU Split Control are transferred
to VDU Handler (LTUX). The log module is called for
logging of the LDU's.
4.2.4.4.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to 4.2.4.5.
4.2.4.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The flow is shortly described in this section.
1) S̲e̲n̲d̲ ̲C̲A̲M̲P̲S̲
Refer to source for details.
- LDU transferred to VDU Handler (LTUX)
- Call Log, LDU send for logging.
4.2.4.5 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to TDS ̲PRX and VDUH ̲IF ̲PRX.
4.2.4.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲
No common procedures in this subpackage.
4.2.4.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲s̲
This subpackage interfaces to the VDU Simulator Control
-, the VDU Split Control - and the Log Handling subpackage.
T̲o̲ ̲V̲D̲U̲ ̲S̲i̲m̲u̲l̲a̲t̲o̲r̲ ̲C̲o̲n̲t̲r̲o̲l̲
Control ̲Entry ̲Int (Pointer, LDU ̲Buf ̲Lgth,Link)
E̲r̲r̲o̲r̲ (MSG ̲Address)
F̲r̲o̲m̲ ̲V̲D̲U̲ ̲S̲i̲m̲u̲l̲a̲t̲o̲r̲ ̲C̲o̲n̲t̲r̲o̲l̲
Send ̲CAMPS (Pointer, Buf ̲Lgth, Link)
T̲o̲ ̲V̲D̲U̲ ̲S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
Data ̲Entry ̲Interpretation (Pointer, IOC ̲Rec ̲Lgth, Link)
F̲r̲o̲m̲ ̲V̲D̲U̲ ̲S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲
Send ̲CAMPS (Pointer, Buf ̲Lgth, Link)
T̲o̲ ̲L̲o̲g̲
LOG ̲IO (Pointer, Buf ̲Lgth, Link).
4.2.5 L̲o̲g̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲
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̲
This subpackage logs all ingoing and outgoing traffic
from/to CAMPS with sequence number and timetag.
LOG
Get Put Write to
time and date sequence No. log file
4.2.5.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
LOG
Module
LOG
Procedure
4.2.5.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
Log procedure called with buffer pointer, buffer length
and ident (in/outgoing).
Only one procedure containing:
read time and date;
convert to integer;
put hour, minute, sec, millisec. into outputrecord;
put ident;
put sequence No;
copy buffer into log record;
if buffer length ( log record put trailing #00;
write log record
return.
4.2.5.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
Only one module.
4.2.5.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̲
Refer to 4.2.5.1.
4.2.5.4.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
Call specification:
LOG ̲IO (R3,R4,R5,R6).
R3 C - IO ̲ID, in/outgoing
R4 C - LDU ̲Buffer ̲Lgth
R5 C - LDU ̲Buffer ̲Pointer
R6 C - link
4.2.5.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Only one preocedure. Refer to 4.2.5.3.
4.2.5.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Log ̲Record:
hour : integer;
minute : integer;
second : integer;
m ̲sec : integer;
io ̲id : integer;
io ̲no : integer;
io ̲buffer: array (1..128) of char;.
5.2.5.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Refer to source list.
4.2.5.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲
N/A
4.2.5.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
N/A
4.2.5.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲s̲
Refer to 4.2.5.4.2
4.2.6 I̲n̲t̲e̲r̲p̲r̲e̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲s̲
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̲
This is a minor package, interpreting control type
LDU's from LTUX.
LDU's recognized are
reception ̲status,
transmission ̲status,
protocol ̲status and
interrupts.
4.2.6.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
4.2.6.3 D̲a̲t̲a̲f̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
Case "second character in buffer" of
0: transmission ̲status;
1: reception ̲status;
2: interrupt ̲type;
3: protocol ̲response;
case end
return;
Refer to source for details.
4.2.6.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
Only one module. Entry point procedure CONTR ̲ENTRY
̲INT.
4.2.6.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̲
Refer to 4.2.6.1.
4.2.6.4.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
CONTR ̲ENTRY ̲INT (R3,R4,R5,R6)
R3 C - index in buffer, of second LDU char.
R4 C - buffer length
R5 C K buffer pointer
R6 C - link.
4.2.6.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Refer to source.
4.2.6.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer to TDS ̲PRX,
SIM ̲PRX,
VDUH ̲IF ̲PRX.
4.2.6.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Refer to 4.2.6.3.
4.2.6.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
N/A
4.2.6.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
None.
4.2.7 C̲o̲m̲m̲o̲n̲ ̲W̲a̲i̲t̲i̲n̲g̲
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̲
This is a low priority routine, executed when no other
coroutine is working. The general waitings upon IO
̲answers and time ̲interrupts are performed here.
When an IO operation is finished or a time interrupt
is sent, this routine receives control and signals
a semaphore, selected by operation ID from the finished
operation.
TDP is divided in 2 "independent" coroutines - see
drawing on the next page. Both coroutines contain several
waiting points.
FIGURE
4.2.7.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e
Refer to source. Only one procedure.
4.2.7.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
Refer to source.
4.2.7.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
One module with only one procedure.
Known only by coroutine monitor.
Not called - executed by semaphore signalling.
4.2.7.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
N/A
4.2.7.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
N/A
4.2.7.7 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
N/A
4.2.8 O̲f̲f̲l̲i̲n̲e̲ ̲C̲o̲m̲m̲a̲n̲d̲ ̲/̲D̲a̲t̲a̲f̲i̲l̲e̲ ̲G̲e̲n̲e̲r̲a̲t̲o̲r̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This subpackage includes command/parameter validation
and command-/datafile generation.
4.2.8.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 functions of the Offline Command-/Datafile Generator
Subpackage are divided into 4 main functions and some
subfunctions. In fig. 4.2.8.1-1 is shown a functional
breakdown and below are the main functions listed.
1) Open files
2) Read from Input file
3) Validation
4) File generation
FIGURE 4.2.8.1-1
Functional Breakdown.
In the Command Reading Module is implemented the functions
- Open files
- Read Command
- Command Validation
In the Parameter Reading Module is implemented the
functions
- Read Parameter
- Parameter Validation
File generation and Error Table Generation are implemented
as common procedures.
4.2.8.1.1 O̲p̲e̲n̲ ̲F̲i̲l̲e̲s̲
During start up of the Offline Command-/Datafile Generation
subpackage input-and output files are read from the
parameter file. Input files and output files are opened.
4.2.8.1.2 R̲e̲a̲d̲ ̲F̲r̲o̲m̲ ̲I̲n̲p̲u̲t̲ ̲F̲i̲l̲e̲
Commands and the belonging parameters are read from
the input file.
4.2.8.1.3 V̲a̲l̲i̲d̲a̲t̲i̲o̲n̲
The commands and parameters read from the input file
are validated. If errors, then error messages and line
No. are stored in the error table.
4.2.8.1.4 F̲i̲l̲e̲ ̲G̲e̲n̲e̲r̲a̲t̲i̲o̲n̲
If no errors in the validation of the commands and
parameters these are stored in a command file and data
file.
4.2.8.1.5 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲
Refer to section 4.2.8.4.1.
4.2.8.1.6 E̲r̲r̲o̲r̲ ̲P̲r̲o̲c̲e̲s̲s̲i̲n̲g̲
Errors in command and parameter specifications result
in an update of the error table. The error table is
displayed at the VDU after completion of the program
run. Completion code errors result in a termination.
4.2.8.1.7 C̲l̲o̲s̲e̲ ̲D̲o̲w̲n̲
If a completion code error occurs the process (program)
is terminated, else a termination happens at the end
of the program.
4.2.8.2 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The Offline Command-/Datafile Generator Subpackage
consists of one process performing the functions listed
in section 5.2.8.1.
The process consists of two software modules as shown
in fig. 4.2.8.2-1.
C̲o̲m̲m̲a̲n̲d̲ ̲R̲e̲a̲d̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲
The Command Reading Module is the main module. It reads
and validates commands from input file and defines
the actions to be performed.
P̲a̲r̲a̲m̲e̲t̲e̲r̲ ̲R̲e̲a̲d̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲
The Parameter Reading Module validates the parameters
belonging to the commands and decides the further action.
The module is called from the Command Reading Module.
FIGURE 4.2.8.2-1
Software Structure.
4.2.8.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲A̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
The Data Flow is described in section 4.2.8.4.
4.2.8.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.8.4.1 C̲o̲m̲m̲a̲n̲d̲ ̲R̲e̲a̲d̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲
4.2.8.4.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̲
During start up of the Offline Command-/Datafile Generator
Subpackage the input- and output file names are read
from the parameter file generated at the start of the
execution of the program. The files are opened.
The first line in the input file is read. The first
character is validated. If a command line the command
is read and the Parameter Reading module is called
if the command was valid, else a new line is read.
If the line was a comment line or an empty line a new
line is read. If the first character was a space the
Line ̲Check procedure is called. If the first character
was anything else than the above described the error
table is updated.
4.2.8.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
The main module is not called from other modules.
The module calls the Parameter Reading module by the
procedure call Read ̲Param /Command Name). Further the
main module calls common procedures.
4.2.8.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module is divided into
- The main program
- The Start ̲Up Procedure
- The Read ̲Command Procedure
M̲a̲i̲n̲ ̲P̲r̲o̲g̲r̲a̲m̲
Calls the Start Up procedure to open files. Reads a
line from the input file and validates the first character.
Selects the further action to be performed. The main
program repeats the reading from input file until end
of file.
S̲t̲a̲r̲t̲ ̲U̲p̲
The Start ̲Up procedure reads the file names from the
parameter file. It opens the input- and output files
and sets the file position on these files.
R̲e̲a̲d̲ ̲C̲o̲m̲m̲a̲n̲d̲
The Read ̲Command procedure reads the command from the
line.
4.2.8.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
No specific module data is identified for this module.
Please refer to section 4.2.8.5.
4.2.8.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The flows are described shortly in this section.
1) M̲a̲i̲n̲ ̲F̲l̲o̲w̲
Description: Refer to Source PAR1.S.
- Start-Up, Open input and output files flow 2.
- Read the first line from input file.
- Case first character, Read ̲Command Line ̲Check,
continue or Error Table updating; (Read ̲Command
flow 3).
- If end of file then output Error Table on the VDU
else read next line from input file.
2) S̲t̲a̲r̲t̲ ̲U̲p̲
Description: Refer to Source PAR1.S.
File names are read from parameter file and input-and
output files are opened.
3) R̲e̲a̲d̲ ̲C̲o̲m̲m̲a̲n̲d̲
Description: Refer to Sourcr PAR1.S,
A command is read from the input file.
4.2.8.4.2 P̲a̲r̲a̲m̲e̲t̲e̲r̲ ̲R̲e̲a̲d̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲
4.2.8.4.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̲
The Parameter Reading Module is called from the Command
Reading Module when a command is read from the input
file. The module validates the command and depending
on the command it calls a procedure for reading and
validating the parameters belonging to the command.
If the commands and parameters are valid these are
stored on the command- and data file. Otherwise the
Error Table is updated.
4.2.8.4.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
This module is called from the Command Reading Module
by the procedure call Read ̲Param.
The module itself calls the common procedures.
4.2.8.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
R̲e̲a̲d̲ ̲P̲a̲r̲a̲m̲
It is the main procedure in this module.
The procedure validates the command read from the input
file and calls a subprocedure depending on the command.
The following procedures read and validate parameters
belonging to the commands.
(̲L̲a̲b̲e̲l̲ ̲E̲n̲d̲
(̲R̲e̲p̲e̲a̲t̲
(̲T̲i̲m̲e̲
(̲D̲e̲l̲a̲y̲
(̲D̲e̲l̲a̲y̲ ̲F̲a̲c̲t̲o̲r̲
(̲F̲K̲
(̲P̲a̲s̲s̲w̲o̲r̲d̲
(̲C̲o̲m̲m̲a̲n̲d̲
(̲D̲a̲t̲a̲ , DRead ̲Content
(̲V̲e̲r̲i̲f̲y̲ , VRead ̲Content
(̲M̲S̲T̲ (Message, Stop, Terminate)
(̲Q̲u̲e̲u̲e̲
Common procedure to (Data and (Verify:
R̲e̲a̲d̲ ̲S̲p̲l̲i̲t̲ ̲N̲o̲
R̲e̲a̲d̲ ̲L̲i̲n̲e̲ ̲N̲o̲
R̲e̲a̲d̲ ̲C̲o̲l̲ ̲N̲o̲
4.2.8.4.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
No specific module data is identified for this module.
Please refer to section 4.2.8.5.
4.2.8.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The flows are shortly described in this section
1) M̲a̲i̲n̲ ̲F̲l̲o̲w̲ (Read ̲Param)
Description: Refer to Source PAR1.S.
- Case Command of
- Label, (2)
- End, (2)
- Repeat, (3)
- Time, (4)
- Delay, (5)
- Delay Factor, (6)
- FK, (7)
- Password, (8)
- Command, (9)
- Data, (10)
- Verify, (15)
- Message, (16)
- Queue, (17)
- Stop, (16)
- Terminate, (16)
2) L̲a̲b̲e̲l̲, E̲n̲d̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in command record
- Data are read, validated and stored in command
record, common procedure
- File Output, command record stored in command file,
common procedure.
3) R̲e̲p̲e̲a̲t̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in command record
- Label name is read and stored in command record,
common procedure
- The repeat no is read and validated, common procedure
- The repeat no is stored on common record
- File Output, command record stored on command file,
common procedure.
4) T̲i̲m̲e̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in command record
- The hour is read, validated and stored on the command
record
- The minute is read, validated and stored on command
record
- The second is read, validated and stored on command
record
- File Output, command record is stored on command
file.
5) D̲e̲l̲a̲y̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in the command record
- The no of delays is read, validated and stored
in the command record
- File Output, command record is stored on the command
file
6) D̲e̲l̲a̲y̲ ̲F̲a̲c̲t̲o̲r̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer source PAR1.S.
- The command is stored in the command record
- The delay factor is read, validated and stored
in the command record
- File Output, command record is stored on the command
7) F̲K̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in the command record
- The function key is read, validated and stored
in the command record
- File Output, command record is stored on the command
file.
8) P̲a̲s̲s̲w̲o̲r̲d̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer Source PAR1.S.
- Command is stored in the command record
- The password is read, validated and stored in the
command record
- File Output, the command record is stored on the
command file.
9) C̲o̲m̲m̲a̲n̲d̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in the command record
- The command function is read, validated and stored
in the command record
- File Output, command record is stored on the command
file.
10) D̲a̲t̲a̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer Source PAR1.S.
- The data ̲ID no is stored in the data record
- Data file position and data ̲ID no is stored in
the command record
- Command is stored in the command record
- Out file, command record is stored on the command
file
- The split no is read, validated and stored in the
data record.
- The line no is read, validated and stored in the
data record.
- The col no is read, validated and stored in the
data record.
- The data content is read, validated and stored
in the data record.
- Read a new line if more fields are specified
- Out File, the data record is stored on the data
file.
15) V̲e̲r̲i̲f̲y̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
See description of data.
16) M̲e̲s̲s̲a̲g̲e̲,̲ ̲S̲t̲o̲p̲,̲ ̲T̲e̲r̲m̲i̲n̲a̲t̲e̲ ̲(̲M̲S̲T̲)̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- Command is stored in the command record
- The message is read and stored in the command record
- File Output, the command record is stored on the
command file.
17) Q̲u̲e̲u̲e̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
- The command is stored in the command record
- The queue function is read, validated and stored
in the command record
- The queue parameter is read, validated and stored
in the command record
- File Output, the command record is stored on the
command file.
4.2.8.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
F̲l̲o̲w̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
1) E̲r̲r̲o̲r̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
The error table is updated with an error message
pointer and a line no
2) L̲i̲n̲e̲ ̲C̲h̲e̲c̲k̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
The line or the rest of a line is validated for
a comment line or an empty line.
3) R̲e̲a̲d̲ ̲D̲a̲t̲a̲ ̲1̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
Data are read from file and validated for letter.
If letter data are stored in the command record.
4) R̲e̲a̲d̲ ̲D̲a̲t̲a̲ ̲2̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
Data are read from file and validated for oversize
and limitations. If data are valid they are stored
in the command record.
5) R̲e̲a̲d̲ ̲D̲i̲g̲i̲t̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
Data are read from file and validated for digits.
If data are valid a calculation is made and the
result is compared against max.size.
6) O̲u̲t̲ ̲F̲i̲l̲e̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
If no errors have occurred the command record is
stored on the command file and/or the data record
is stored on the data file.
7) F̲i̲l̲e̲ ̲O̲u̲t̲p̲u̲t̲
D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲: Refer to Source PAR1.S.
The Line Check procedure is called. If no errors
on the line the Out File procedure is called for
storage of command-and/or data record.
4.2.8.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲s̲
This subpackage is an offline subpackage and interfaces
to SCRIPT ̲CONTROL via CMD ̲FILE & DATA ̲FILE only.
Below are shown file- and record formats for input
text editor file and for output files, CMD- & DATA
file.
T̲e̲x̲t̲ ̲E̲d̲i̲t̲o̲r̲ ̲S̲c̲r̲i̲p̲t̲ ̲F̲o̲r̲m̲a̲t̲s̲
General format:
%̲ ( script ̲command ̲id) :̲ (SP) (parameters)
(script ̲command ̲id)::=
FK/COMMAND/DATA/VERIFY/DELAY/DELAYFACTOR/
TIME/PASSWORD/LABEL/END/REPEAT/QUEUES/MESSAGE/STOP/
TERMINATE/RELEASE
(SP)::= space space
(parameters)::= (set of param) !̲(NL)(set of param)
(set of param)::= parameters depending on SCRIPT
̲COMMAND ̲ID. If several parameters
in set, delimiter is semicolon(;)
(NL):: new ̲line.
For exact format of each command ̲type refer to USER
̲MANUAL.
Since it is a text ̲editor ̲file, each record is in "free
format", variable size delimited by "NEW ̲LINE" character.
C̲M̲D̲ ̲F̲I̲L̲E̲ ̲(̲o̲u̲t̲p̲u̲t̲)̲
Fixed size records, 102 characters each.
One record type for each command type, described in
detail below.
General format:
C ̲COUNT : INTEGER;
CMD ̲NAME : ARRAY(1..11) OF CHAR;
DATA ̲ID : INTEGER;
D ̲COUNT : INTEGER;
FILE ̲POS : LONG;
DATA : ARRAY(1..80) OF CHAR;
C ̲COUNT: refers to no of significant characters
in CMD ̲NAME
DATA ̲ID ̲: 0, if all parameters in this rec.
1, if reference to a data record
D ̲COUNT: no of used characters in field DATA.
FILE ̲POS: used only when referring to data records
in data file.
Points to first data record to this
command.
label ̲rec:
label name
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲
0̲5̲ ̲L̲A̲B̲E̲L̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲4̲ ̲ ̲-̲ ̲ ̲X̲X̲X̲X̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲
end ̲rec:
label name
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
0̲3̲ ̲E̲N̲D̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲4̲ ̲ ̲-̲ ̲ ̲X̲X̲X̲X̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
repeat ̲rec:
label name
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
0̲6̲ ̲R̲E̲P̲E̲A̲T̲ ̲ ̲ ̲ ̲ ̲0̲ ̲6̲ ̲ ̲-̲ ̲ ̲X̲X̲X̲X̲ ̲Y̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
no ̲of ̲repeats:integer
time ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲4̲ ̲T̲I̲M̲E̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲6̲ ̲ ̲-̲ ̲h̲h̲ ̲m̲m̲ ̲s̲s̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
HOUR,MINUTE,SECOND:INTEGER
delay ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲5̲ ̲D̲E̲L̲A̲Y̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲2̲ ̲ ̲-̲ ̲ ̲ ̲ ̲d̲d̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
delay:integer;
delay ̲factor ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
1̲1̲ ̲D̲E̲L̲A̲Y̲F̲A̲C̲T̲O̲R̲ ̲0̲ ̲2̲ ̲-̲ ̲ ̲f̲f̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
delay factor:INTEGER;
fk ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲2̲ ̲F̲K̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲X̲ ̲ ̲-̲ ̲ ̲Y̲Y̲.̲.̲.̲.̲Y̲Y̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
functionkey ̲name:array(1..26)char.
password ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲8̲ ̲P̲A̲S̲S̲W̲O̲R̲D̲ ̲ ̲ ̲0̲ ̲1̲2̲ ̲-̲ ̲X̲.̲.̲.̲.̲.̲.̲X̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
id ̲comma ̲passw:array(1..12)of char.
command ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲7̲ ̲C̲O̲M̲M̲A̲N̲D̲ ̲ ̲ ̲ ̲0̲ ̲4̲ ̲ ̲-̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
command ̲name:array(1..4)ofchar.
ex. SION
message ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲
̲7̲ ̲M̲E̲S̲S̲A̲G̲E̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲X̲ ̲-̲ ̲ ̲t̲e̲x̲t̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲
message ̲text:array(1..25)of char.
queue ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲6̲ ̲Q̲U̲E̲U̲E̲S̲ ̲ ̲ ̲ ̲ ̲0̲ ̲5̲ ̲ ̲-̲ ̲ ̲X̲X̲X̲X̲ ̲Y̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
QUEUE ̲ID:array(1..4)of char;(RELS/RECV)
QUEUE ̲ACT: char (E/O)
stop ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲4̲ ̲S̲T̲O̲P̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲X̲ ̲ ̲-̲ ̲ ̲t̲e̲x̲t̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
stop ̲message:array(1..25)of char.
terminate ̲rec:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲9̲ ̲T̲E̲R̲M̲I̲N̲A̲T̲E̲ ̲ ̲0̲ ̲4̲ ̲ ̲-̲ ̲ ̲t̲e̲x̲t̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
term ̲message:array(1..25)ofchar.
data ̲rec (data in command ̲rec type)::
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
̲4̲ ̲D̲A̲T̲A̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲X̲ ̲ ̲-̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
field ̲rec:
split : integer;
line : integer;
column : integer;
data ̲lgth : integer;
data ̲text : array(1..80)
of char;
field ̲sep : char; (FS)
data ̲rec (data in DATA ̲file):
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
CMD ̲FILE ̲4̲ ̲D̲A̲T̲A̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲1̲ ̲ ̲-̲ ̲ ̲P̲o̲i̲n̲t̲ ̲ ̲ ̲ ̲ ̲-̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
DATA ̲FILE 2̲2̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
fs : char; field ̲sep.
no : INTEGER; id ̲number;
data ̲id : INTEGER; always #22
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
field ̲1 ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
field ̲2 ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
field ̲n ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
field ̲rec as described above
verify ̲rec (in CMD ̲FILE):
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
\̲6̲ ̲V̲E̲R̲I̲F̲Y̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲0̲ ̲X̲ ̲ ̲-̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲
field ̲rec's as described
with data ̲rec.
Verify ̲rec (in DATA ̲FILE)
As described for data ̲rec.
4.2.9 L̲T̲U̲X̲ ̲T̲r̲a̲n̲s̲p̲a̲r̲e̲n̲t̲ ̲F̲i̲r̲m̲w̲a̲r̲e̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.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 LTUX ̲TSP supports the interface between two CAMPS
host computers via V24 asynchronous lines. It is supported
in the following ways:
o ASCII character transfer
o 2400 bps input/output speed
o Optional usage of V24 lines 105/106 and 108.2/107
o Optional flow control
o Optional usage of even/odd/none parity
o 8 bit/char + parity
o 1 - l 1/2 - 2 stop bits
Each LTUX ̲TSP can support different numbers of lines
(max.4 lines).
The DIL switch S2 decides the mode to run the program.
If CAMPS side then the switch shall be CLOSED. If Test
Drive side then OPEN.
4.2.9.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The following modules are defined:
INILSL: Initializes data structures such as queue
and buffer headers. Initializes scheduling
system.
PROCESS: Main routine activated by scheduling system
(one special section defined per channel).
Each section activates the subroutine needed
for service of actual channel.
LDUSCH: Main routine activated by scheduling system
(one special section defined per channel).
Each section activates the LDUDEMUX and
buffer release module of actual channel.
LDUREL: Buffer release module. Returns empty buffer
to queue indicated in buffer header byte
0 and 1.
LDUDEM: Reads LDU - buffer from TDX-I/F queue,
specified subdevice. The LDU's are verified
with respect to LDU-type, command codes
or data content. Data LDU's are delivered
in a special queue, command LDU's in an
other.
CMDINT: Reads command LDU's from the LDUDEM module.
The commands are verified and executed.
In most cases a completion code is returned.
The module generates asynchronous status
reports and transmission/reception status
reports too.
LINKPRO: This is the "master" module controlling
the input and output of data. The control
is based on V24-line state and commands
received by CMDINT.
OUTBHAND: Controls the transmission of data packets.
Whenever a LDU is finished a "transmission
status report" request is flagged to the
module CMDINT.
INBHAND: Controls the transport of LDU's from device
to CR80. The module will wait for device
ready and input request before releasing
any buffer for transmission on the TDX-system.
RXSYNT: Data from the V24 line are packed in buffers
as they are sent from opposite side. Data
are sent to the host exactly as received
from the 24 line (no packing in IOC records).
INTERRUPT: Interrupt routines used by serial interface
(SIO). Following interruptions are serviced:
TX-buffer empty, RX-character available,
external status interruption and special
receiver condition.
V24DRV: General subroutines used for initialization
and operation of serial interfaces (SIO's).
KERNEL: An assembly of subroutines used by one
or more of the other modules.
An overview of the firmware structure and the data
flow is shown in fig. 4.2.9.3-1. The figure shows one
channel, up to 4 channels may be used in each LTUX-TSP.
The figure does not show the scheduling system nor
the initialization modules.
4.2.9.3 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲ ̲W̲i̲t̲h̲i̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲
For each channel used a number of queues are defined.
INFTQ: Data buffers ready for transmission. IOC-record
headers are sent unchanged and transmitted
as data.
Enqueing module: LDUDEM
Dequeing module: OUTBHAND
Initial no. of elements: 0
INTCQ: Command buffers with commands from the
CR80 or locally generated commands. The
CR80 commands are validated with respect
to command code and buffer size.
Enqueing module: LDUDEM
Dequeing module: CMDINT
Initial no. of elements: 0
INETQ: Empty packet buffers for outbound data.
Enqueing module: OUTBHAND
Dequeing module: LDUDEM
Initial no. of elements: 2
INFRQ: Data buffer with inbound data ready for
delivery to the CR80.
Enqueing module: RXSYNT
Dequeing module: INBHAND
Initial no. of elements: 0
INERQ: This queue is not used in LTUX-TSP
INWRQ: Empty pocket buffers for inbound data.
Enqueing module: LDUREL, INBHAND
Dequeing module: RXSYNT
Initial no. of elements: 3
INFIQ: This queue is not used in LTUX-TSP
INEIQ: Empty buffers for asynchronous reports
for the CR80.
Enqueing module: LDUREL
Dequeing module: CMDINT
Initial no. of elements: 3
INTRQ: "Output request" buffers received from
LDUDEM by CMDINT. The buffers are for transmission
to complete, and are used for the generation
of transmission status report.
Enqueing module: CMDINT
Dequeing module: CMDINT
Initial no. of elements: 0
INWCQ: Command buffer received from LDUDEM by
CMDINT. The buffers are waiting for the
completion of actual command (open/close
protocol), and are used for the generation
of completion code.
Enqueing module: CMDINT
Dequeing module: CMDINT
Initial no. of elements: 0
Fig. 4.2.9.3-1
4.2.9.4 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲
4.2.9.4.1 M̲o̲d̲u̲l̲e̲ ̲I̲N̲I̲T̲S̲P̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲
4.2.9.4.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̲
This module cleares all RAM and initializes buffer-
and queue-headers. RAM areas are reserved for control
tables (TSPCTAB 1-4). Process scheduling is initialized.
The resulting schedule list is:
LSJAK 1 (LDUDEM, LDUREL)
SCANIN (TDX-service)
SCANOUT (TDX-service) JACK 1 service
PROCESS 1 (CMDINT, OUTBHAND,
LINKPRO, RXSYNT,
INBHAND)
SCANIN
SCANOUT
LSJAK 2
SCANIN
SCANOUT JACK 2 service
PROCESS2
SCANIN
SCANOUT
LSJAK3
SCANIN
SCANOUT
PROCESS3 JACK 3 service
SCANIN
SCANOUT
LSJAK4
SCANIN
SCANOUT
PROCESS4 JACK 4 service
SCANIN
SCANOUT
The process INITSP is passivated, when init is finished.
V24-driver tables are initialized
4.2.9.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Module is activated as process no. 4 and must be situated
a PROM location 6000H
4.2.9.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
N.A.
4.2.9.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Actual buffer and queue layout are determined by the
tables BETA 1 (JACK 1 - JACK 4), and table BRAM. Resulting
buffer layout per JACK are:
QUEUE NO. OF SIZE OFF-SET
BUFFERS
TDX-outbound
empty buffer 3 128 0
INETQ 2 131 3
INEIQ 3 16 0
INWRQ 3 128 0
4.2.9.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲T̲S̲P̲
Clear all RAM
Create application processes
Passivate init processes
Evaluate buffers
Initialize V24-driver
Schedule
FIGURE 4.2.9.4.1.5-1
4.2.9.4.2 M̲o̲d̲u̲l̲e̲ ̲L̲D̲U̲S̲C̲H̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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̲
This module defines 4 processes (one for each jack)
to serve the communication to/from the LTUX system
firmware. A jack table (one for each process) is initialized.
4.2.9.4.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module is activated by the scheduler and call the
modules: LDUREL and LDUDEM.
4.2.9.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The module consists of 4 sections, each serving one
JACK. Each section contains a main program (LSJA10,
LSJA20, LSJA30, LSJA40) and a subroutine (LSINI1, LSINI2,
LSINI3, LSINI4) and a common subroutine (LSQINI).
4.2.9.4.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
A JACK table is defined for each JACK. The offset to
the elements in the table is showing in section 4.2.9.5.
4.2.9.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
When first time activated the module initializes the
JACK table. In normal running the release buffer routine
(LDUREL) is called and the LDU demultiplexing routine.
Then the process is scheduled out.
4.2.9.4.3 M̲o̲d̲u̲l̲e̲ ̲L̲D̲U̲R̲E̲L̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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 module releases empty buffers from the TDX bus
to the empty queues.
4.2.9.4.3.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module dequeued buffers from TDX Inbound Empty
Queue. The buffers are enqueued in Waiting Receiver
Queue (INWRQ), Empty Interrupt Queue (INEIQ) and TDX
Outbound Empty Queue.
4.2.9.4.3.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The module contains only a little main program.
4.2.9.4.3.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The following queues are used:
TDX Inbound Empty Queue
TDX Outbound Empty Queue
Waiting Receiver Queue (INWRQ)
Empty Interrupt Queue (INEIQ)
4.2.9.4.3.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The TDX Inbound Empty Queue is polled. If the buffer
available then the address of return queue is checked.
If the MSB address is zero then the buffer is a TDX
buffer and will be sent to TDX Outbound Empty Queue.
Else the buffer will be sent to either Empty Interrupt
Queue or Waiting Receiver Queue.
4.2.9.4.4 M̲o̲d̲u̲l̲e̲ ̲L̲D̲U̲D̲E̲M̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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̲
Buffers from TDX Outgoing Package Queue are dequeued.
D̲a̲t̲a̲ ̲B̲u̲f̲f̲e̲r̲s̲ are copied to another buffer and the new
buffer is enqueued in Full Transmitter Queue (INFTQ).
If the buffer is Start of LDU or Entire LDU then the
original buffer is sent to the Control Queue (INTCQ)
as an output request. Else the original buffer is released
to TDX Outbound Empty Queue. The sequence of the buffer
shall be correct else an error report is sent to the
host.
C̲o̲m̲m̲a̲n̲d̲ ̲B̲u̲f̲f̲e̲r̲s̲ are sent directly to the Control Queue
(INTCQ). The command "Input Request" is handled in
two ways depending on whether it is the CAMPS side
or the Test Driver side. If CAMPS side then the "Input
Request" is sent to the Full Transmitter Queue too.
4.2.9.4.4.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module receives full buffers from TDX Outgoing
Package Queue. Empty buffers are fetched from Empty
Transmitter Queue (INETQ). Full buffers are delivered
to Full Transmitter Queue (INFTQ) or Control Queue
(INTCQ).
4.2.9.4.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The module contains a main program, state/event table,
some actions and coroutines. Below the header of the
subroutine with the call parameters and a short description
are listed.
LIST OF HEADER
4.2.9.4.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The JACK table is used. The layout listed in 4.2.9.5
FIGURE 4.2.9.4.4.3-1
FIGURE 4.2.9.4.4.3-2
FIGURE 4.2.9.4.4.3-3
The transmission buffer is formatted with an offset
of 6 bytes. The first two bytes use the module OUTBHAND.
The four next are transmitted at the V24 line to indicate
start of buffer.
The buffer format is shown below.
FIGURE 4.2.9.4.4.4-1
4.2.9.4.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
LDU Demultiplexing ()()
Less than min.no. of buf.in INETEQ ?
Dequeue TDX package queue
Buffer not available ?
Completion code not zero ? Async.report: TDX error
Buffer to control queue
Bytecount EQ zero ? Release buffer to TDX
outbound empty queue
Command buffer ? Check command and format and get event
Get event
Calculate event/state
Case LDUDEM action of
LDUA00 ? Dummy
LDUA10 ? Release buffer to TDX
LDUA20 ? Buffer to TX queue SOL/ENL
LDUA30 ? Buffer to TX queue
LDUA40 ? Command to LTUX
LDUA50 ? Input request
LDUA60 ? Illegal command
LDUA70 ? Command out of sequence
End LDUDEM action case.
Return
FIGURE 4.2.9.4.4.5-1
4.2.9.4.5 M̲o̲d̲u̲l̲e̲ ̲P̲R̲O̲C̲E̲S̲S̲E̲S̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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̲
This module defines 4 processes, PROCESS1-4, each serving
the corresponding jack no.
When activated the first time the process performs
the final initialization of control table and V24 driver.
4.2.9.4.5.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
N/A
4.2.9.4.5.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Module consist of 4 sections, each serving one JACK.
The sections are scheduled individually.
4.2.9.4.5.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
N.A.
4.2.9.4.5.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
An overall flowgram is shown (fig. 4.2.9.4.5.5-1)
Processes
Init control table of JACK1
Loop
Call relevant modules
Schedule
End loop
Init control table of JACK2
Loop
Call relevant modules
Schedule
End loop
Init control table of JACK3
Loop
Call relevant module
Schedule
End loop
Init control table of JACK4
Loop
Call relevant module
Schedule
End loop
FIGURE 4.2.9.4.5.5-1
4.2.9.4.6 M̲o̲d̲u̲l̲e̲ ̲C̲M̲D̲I̲N̲T̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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̲
The command interpreter module receives commands from
the LDU demultiplex modules. Commands may be init commands,
input request or error reports. Another function of
the command interpreter is the generation of command
responses, TX and RX completion codes and asynchronous
error reports.
4.2.9.4.6.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Command buffers are received on queue INTCQ. Empty
buffer for reports etc. are fetched from INEIQ. Reports
etc. are delivered for the TDX-bus for transmission
(JACK1 uses subdevice 2, JACK2 uses subdevice 3 etc.).
Two control bytes, CMDCONT1 and CMDCONT2, are used
to indicate reports to generate. Error codes are returned
in other 7 bytes, for details refer section 4.2.9.5:
Common subpackage data.
4.2.9.4.6.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Module contain a sequential code area and a section
with the fixed part of the responses/reports to be
used.
4.2.9.4.6.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The data formats used corresponds to the formats specified
in section 4.1.4 Common package data.
4.2.9.4.6.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
C̲o̲m̲m̲a̲n̲d̲ ̲i̲n̲t̲e̲r̲p̲r̲e̲t̲e̲r̲
Command queue empty?
Get command/error report
Internale report? I̲n̲t̲e̲r̲n̲a̲l̲e̲ figure 4.2.9.9.5-2
Case of command code
Input request? Signal to INBHAND
Cancel inp. req.? Command not allowed
Report status? L̲i̲n̲e̲ ̲c̲o̲m̲m̲a̲n̲d̲s̲ figure
4.2.9.9.5-3
Open channel? Signal to LINKPRO
Close channel? Signal to LINKPRO
End command case
Get control bytes
Test flags
Generate reports accordingly
End
FIGURE 4.2.9.4.6.5-1
I̲n̲t̲e̲r̲n̲a̲l̲e̲
ASYNC status report?
Completion code NE 0? Send buffer to host
Queue buffer to TX-status
FIGURE 4.2.9.4.6.5-2
L̲i̲n̲e̲ ̲C̲o̲m̲m̲a̲n̲d̲s̲
Case of subcommand
Enable? Verify enable command
Init table accordingly
Signal to LINKPRO
Open Protocol? Signal to LINKPRO
Close Protocol? Signal to LINKPRO
Statistic? Generate statistic report
Status ? Generate status report
Device status? Generate device status
report
End subcommand case
FIGURE 4.2.9.4.6.5-3
4.2.9.4.7 M̲o̲d̲u̲l̲e̲ ̲L̲I̲N̲K̲P̲R̲O̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.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̲
This module is the "master" module in the LTUX-TSP.
It controls all data transfer based on the state of
the V24-lines and based on the commands received from
the command interpreter.
4.2.9.4.7.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Thru the control table the module receives the necessary
information from the other modules. The module receives
no data packets from any module.
4.2.9.4.7.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Module consists of a program part, a state/event table,
a number of actions and some special subroutines.
4.2.9.4.7.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The module refers to a number of fields in the control
table, the most important being the control byte (LINKCONT)
and the timer fields. For more details refer to section
4.2.9.5 Common subpackages data.
4.2.9.4.7.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
L̲i̲n̲k̲ ̲P̲r̲o̲t̲o̲c̲o̲l̲
Update all active timers
Get V24 state of JACK
Update V24-event-field
Get link control byte
No flags set? Event based on V24 state
Determine event
Determine new state
Determine action
A̲c̲t̲i̲o̲n̲s̲ figure 4.2.9.4.4.5-2
End
FIGURE 4.2.9.4.7.5-1
A̲c̲t̲i̲o̲n̲s̲
Case of action
LINKA000? no action
LINKA010? open out of sequence
LINKA020: close out of sequence
LINKA030: start open protocol
LINKA040: complete open protocol
LINKA050: open failed
LINKA060: open command overrided
LINKA070: drop V24-line 106 and 107
LINKA080: drop V24-line 106
LINKA090: drop V24-line 107
LINKA100: device failure due to drop 106 and
107
LINKA110: clean-up for restart
LINKA120: device failure due to close protocol
LINKA130: device failure due to paper out
LINKA140: recover after device failure
LINKA150: device failure due to drop 106
LINKA160: device failure due to drop 107
LINKA170: device failure due to unexpected action
LINKA180: V24-OK but paper out
LINKA190: error restart (master clear LTUX)
LINKA200: 106, low, check for timeout
LINKA210: 107 low, check for timeout
LINKA220: 106 and 107 low, check for timeout
LINKA230: waiting for V24-OK, check open timer
End action case
FIGURE 4.2.9.4.7.5-2
C̲l̲o̲s̲e̲ ̲d̲o̲w̲n̲ ̲a̲f̲t̲e̲r̲ ̲d̲e̲v̲i̲c̲e̲ ̲e̲r̲r̲o̲r̲
Disable transmitter
Disable receiver
Drain receiver registers
Close V24 line
Update state of V24
Stop used timer
Signal dev. fail for OUTBHAND
Signal dec. fail to INBHAND
Return
FIGURE 4.2.9.4.7.5-3
V̲2̲4̲-̲l̲i̲n̲e̲ ̲1̲0̲6̲ ̲t̲i̲m̲e̲o̲u̲t̲ ̲o̲r̲ ̲1̲0̲7̲ ̲t̲i̲m̲e̲o̲u̲t̲
Get state of timer
No timeout?
Signal timeout to LINKPRO
Reset timeout
Return
FIGURE 4.2.9.4.7.5-4
Fig. 4.2.9.4.7.5-5…01…Determination of V24-event
Fig. 4.2.9.4.7.5-6…01…LINKPRO state/action tables
4.2.9.4.8 M̲o̲d̲u̲l̲e̲ ̲O̲U̲T̲B̲H̲A̲N̲D̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.8.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This module controls the transmission of data. When
a LDU is finished (or transmission repeated) a transmission
status report is generated (completion forwarded to
CMDINT and corresponding flag set).
4.2.9.4.8.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Information status about changes in the link protocol
(LINKPRO) are received in the control table by OUTBCONT.
Full data buffers are received in queue INFTQ.
Buffers are delivered for transmission by interrrupt
routine thru the control table. The pointer and byte
count areas (TXBYTES, TXNEXTL, TXNEXTM) are loaded
with the current values. Whenever a buffer has to be
cancelled it is returned as empty in the queue INETQ.
4.2.9.4.8.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Module contains 4 parts: Event determination, state/action-tables,
action programs and special subroutines. 4 subroutines
are defined, ref. overleaf.
4.2.9.4.8.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The module uses the common control table. Most important
is the OUTBCONT byte in which events are received from
other modules. The transmission control section storing
buffer links element, current position and bytes lift
is important too. For details refer 4.2.9.5.
FIGURE 4.2.9.4.8.3-1
4.2.9.4.8.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The module is state/event controlled with the first
part used to determine actual event.
Outbound Handler
No flags set ? Transmission active
?
Buffer not ready ?
Get buffer type
Buffer type EQ event
Control entire LDU
Not cancel this LDU
Event EQ cancel
Determine new state
Determine action
Outbound Action
Return
FIGURE 4.2.9.4.8.5-1
O̲u̲t̲b̲o̲u̲n̲d̲ ̲a̲c̲t̲i̲o̲n̲s̲
case action of
OUTBA000? no action
OUTBA010? start TX of buffer
OUTBA020? cancel buffer
OUTBA030? generate TX-status = OK
OUTBA040? not used (spare)
OUTBA050? cancel buffer, gen. device error
OUTBA060? cancel buffer, gen device status errror
OUTBA070? release buffer, gen. device error
OUTBA080? release buffer, gen. device
status error
OUTBA090? release buffer due to cancel cmd
OUTBA100? cancel SOL/EOL due to cancel cmd
OUTBA110? Unexpected start of LDU
OUTBA120? Spare
OUTBA130? Spare
OUTBA140? Spare
OUTBA150? Error restart (master clear LTUX)
OUTBA160? Start TX of buffer, SOL or EOL
end of action cases.
FIGURE 4.2.9.4.8.5-2
Fig. 4.2.9.4.8.5-3
OUTBHAND state and action tables
4.2.9.4.9 M̲o̲d̲u̲l̲e̲ ̲I̲N̲B̲H̲A̲N̲D̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.9.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
Controls the transport of LDU's from device to CR80.
The module will wait for device ready and input request
before releasing any data buffer for transmission on
the TDX-system. Control buffers can be delivered to
the TDX system without an input request.
4.2.9.4.9.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
External events are signalled to the module in the
control table, byte INBCONT. The current LDU no. to
insert in case of LDU-TYPE = SOL/EOL is read from control
table too (byte RLDU ̲NO). For details ref. section
4.2.9.5.
Bufer ready to transmission on the TDX-bus are received
in queue INFRQ. When a buffer is released for transmission
on TDX-bus, subdevice no. (1 + JACK no.) is used.
When a buffer is descarded it is inserted as empty
in the queue INWRQ.
4.2.9.4.9.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
As many of the other modules this contains 4 parts:
event determination, state/action table, action programs
and special subroutines. Only one subroutine is defined;
ref. below.
FIGURE 4.2.9.4.9.3-1
4.2.9.4.9.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲s̲
The module uses the common control table. The INBCONT
byte is the most important part (as in any other module).
For details ref. section 4.2.9.5.
4.2.9.4.9.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The module is state/event controlled with the first
part used to determine actual event.
INBHAND
Get control byte
No flags set? Receiver timeout? Full receiver
queue not empty?
Event EQ 8
Dequeue full receiver queue
Buffer not available?
Event EQ LDU-type
Determine new state
Determine action
I̲n̲b̲o̲u̲n̲d̲ ̲a̲c̲t̲i̲o̲n̲s̲
Return
FIGURE 4.2.9.4.9.5-1
I̲n̲b̲o̲u̲n̲d̲ ̲a̲c̲t̲i̲o̲n̲
Case action of
INBA000: No action
INBA010: Discard buffer
INBA020: Transmit buffer as SOL/EOL*
INBA030: Transmit buffer as POL/LOL*
INBA040: Clean-up after device error
INBA050: Clean-up after dev. status error
INBA060: SOTF-interruption*
INBA070: Reset when device ready
INBA080: Generate reciver timeout report
INBA090: Cancel input request
End of action case
* A̲b̲b̲r̲e̲v̲i̲a̲t̲i̲o̲n̲:
LDU: Logical data unit
SOL: Start of LDU
POL: Part of LDU
LOL: Last of LDU
ENL: Entire LDU
FIGURE 4.2.9.4.9.5-2
4.2.9.4.10 M̲o̲d̲u̲l̲e̲ ̲R̲X̲S̲Y̲N̲T̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.10.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
Handles the transport of characters from RXFIFO to
packed in buffers. Fins start of the buffer and the
length by the sequence:"GS", "GS", "*", "bytecounter".
Report error if the length of the buffer is incorrect,
if a new buffer is started before current not finished,
or if buffer not finished.
4.2.9.4.10.3 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
External events are signalled to the module in the
control table, byte RXSYCONT.
Characters are read from Receiver F/FO (RXFIFO) and
buffers are delivered to Full Receiver Queue (INFRQ).
Empty buffers are fetched from Waiting Receiver Queue
(INWRQ). There also using a Syntax FIFO (SYFIFO) to
temporary store of start of buffer characters.
4.2.9.4.10.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The module contains 4 parts: Event termination, state/action
tables, action programs and subroutines. Overleaf the
header of subroutines is shown.
FIGURE 4.2.9.4.10.3-1
4.2.9.4.10.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
In the control table there is a special section to
the Receiver Syntax Analysis, ref. 4.2.9.5.
The format of the data from the V24 line is described
in section 4.2.9.4.4.4.
4.2.9.4.10.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Receiver Syntax ()()
Not min. no. of buf. in INWRQ ?
Receiver Loop:
Time-out ? Event 4
Buffer overrun ? Event 3
Buffer finish ? Event 5
Get char. from RXFIFO
RXFIFO empty ? Exit loop
Char. EQ GS ? Event 0
Char. EQ * ? Event 1
Event 2
Calculate new state
Get action
Case of Receiver Actions:
RXACOO ? Dummy
RXAC10 ? Bytecounter
RXAC20 ? Character to Buffer
RXAC30 ? Character to Syntax FIFO
RXAC40 ? Start of new buffer in data
RXAC50 ? Not start of buffer
RXAC60 ? Buffer overrun
RXAC70 ? Time-out
RXAC80 ? Buffer finish
RXAC90 ? End buffer
RXERR ? Error Action
End of Receiver Actions Case
End Receiver Loop
Return.
FIGURE 4.2.9.4.10.5-1
FIGURE 4.2.9.4.10.5-2
4.2.4.3.4.11 M̲o̲d̲u̲l̲e̲ ̲I̲N̲T̲E̲R̲R̲U̲P̲T̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.4.3.4.11.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This is the low level communication module. The subroutines
defined are all interrupt activated (except for TXSTOP)
and deal with character I/O and SIO control.
4.2.4.3.4.11.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The subroutines defined are called from the corresponding
interrupt routine in the V24DRV module. The routines
uses the general control table, ref. section 4.2.4.3.5.
4.2.4.3.4.11.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
Module contains 5 subroutines, ref. section module
design.
4.2.4.3.4.11.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The Output and Input section in the control table are
used by the interrupt routines.
4.2.4.3.4.11.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The subroutines are shown on the following pages.
Transmitter interrupt ()()
Next TX-byte valid ? More bytes to send
?
Release buffer to INETQ
Clear buf.info. in
cont.table
Indicate buffer finish
Stop transmitter ()()
Update pointers
Send character
Return
FIGURE 4.2.9.4.11.5-1
Receiver char. interrupt ()()
Read character
Parity error? Load replace character
Write char. to RX-FIFO
RX-FIFO full? Indicate error
FIFO exceed flow boundary ? - Activate flowcontrol
Restart receiver timer Stop receiver timer
Return
FIGURE 4.2.9.4.11.5-2
Special Receiver Conditions ()()
Read Error Status ()(status byte)
Framing error? Indicate RX char. error
Send error report
Increment no. of framing error
Receiver overrun? Indicate receiver error
Send error report
Increment no. of RX overrun
Parity error? Indicate RX char. error
Increment no. of parity error
Return
FIGURE 4.2.9.4.11.5-3
Externale Status Interrupt (status byte)()
Break/abort? Indicate receiver error
Send error report
Return
FIGURE 4.2.9.4.11.5-4
Stop Transmitter ()()
Reset TX interrupt pending
Indicate transmission stopped
Return
FIGURE 4.2.9.4.11.5-5
4.2.9.4.12 M̲o̲d̲u̲l̲e̲ ̲V̲2̲4̲ ̲D̲r̲i̲v̲e̲r̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
4.2.9.4.12.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 V24 driver is a collection of utilities to make
the use of the SIO easy. A number of subroutines is
defined which communicate directly with the SIO in
accordance with the call parameters.
4.2.9.4.12.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Refer to Module Components 4.2.9.4.12.3.
4.2.9.4.12.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The following subroutines are defined:
VDINIT: Initialize V24 driver
VCINIT: Initialize V24 channel
SETSIO: Setup S10 channel
ESENAB: Enable external status interrupt
ESDIAB: Disable external status interrupt
TXE: Transmitter enable
TXD: Transmitter disable
RXE: Receiver enable
RXD: Receiver disable
RDRAIN: Receiver drain
SBREAK: Send break
TBREAK: Terminate break
OUCHAR: Output character
INCHAR: Input character
RERSTA: Read error status
GEXSTA: Get external status
VOPCON: V24 output control
SETCTC: Set CTC channel
T1ESER: TX buffer empty interrupt service routine-
jack 1 (one each jack)
R1ASER: RX char. available interrupt service routine
- jack 1 (one each jack)
R1ESER: RX error interrupt service routine - jack
1 (one each jack)
E1SSER: External status change interrupt service
routine - jack 1 (one each jack)
RETINT: Return from interrupt.
If details wanted then see source code.
4.2.9.4.12.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The module uses some tables special to the SIO. They
are shown overleaf.
FIGURE 4.2.9.4.12.4-1
FIGURE 4.2.9.4.12.4-2
4.2.9.4.12.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The module is a SIO service module and contains only
subroutines and tables. Four routines per jack are
activated by interrupt from the SIO. These routines
save the actual used registers. The address of the
control table is saved too, and the address of the
control table belonging to the jack is loaded. Then
one of the routines in the module INTERRUPT is called.
When returning from interrupt the original registers
and control tables are restored.
The other routines are called from other modules to
handle the SIO.
4.2.9.4.12.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
To ensure that the modules may be used reentrant all
variables are assembled in a control table . The variables
are addressed by use of the Z80 index register IX plus
on offset. The variable is defined by the value of
this offset. In the actual design 4 control tables
and 4 jack tables are defined, two tables per JACK.
The tables are completely independent.
A number of constants are used which are specific to
the LTUX-OCR subpackage. Their names, values and usage
are shown in OCR ̲NAMES.
FIGURES 4.2.9.5-1 to 4.2.9.5-7
4.2.9.4.12.7 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
The subroutines are assembled in the module KERNEL.
On the following pages they are described by their
subroutine headers. The following subroutines are defined:
GENRESPO
GENASYNC
RANGE
SWTIM
LOOKUP
INIT QUARE
CASE
DISBUF
FIFPUT
FIGURES 4.2.9.6-1 to 4.2.9.6-3
4.2.9.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
Refer to Interface 4.1.7.2 and LTUX-S V24 Interfaces
CMS/TCN/031
4.3 M̲E̲M̲O̲R̲Y̲ ̲L̲A̲Y̲O̲U̲T̲
Refer to TDP ̲VDU link list
4.3.9 M̲e̲m̲o̲r̲y̲ ̲L̲a̲y̲o̲u̲t̲ ̲L̲T̲U̲X̲ ̲T̲S̲P̲
FIGURE 4.3.9-1