DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Wang WCS documentation floppies

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

See our Wiki for more about CR80 Wang WCS documentation floppies

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c07ebd851⟧ Wang Wps File

    Length: 39804 (0x9b7c)
    Types: Wang Wps File
    Notes: CPS/SDS/028               
    Names: »2013A «

Derivation

└─⟦6ff65156a⟧ Bits:30006101 8" Wang WCS floppy, CR 0160A
    └─ ⟦this⟧ »2013A « 

WangText

…05……00……00……00……00…C…02……00……00…C
B…09…B…0d…B…0e…B…0f…7…00…7…01…7…02…7
…1c……00……1c……01……1c……02……1c…
…1c……07……1b……08……1b……09……1b……0b……1b……0c……1b……00……1b……01……1b……86…1                                             …02…           …02…   …02…        

…02…CPS/SDS/028

…02…850301…02……02…
I/O CONTROL
DETAILED DESIGN SPECIFICATION …02…ISSUE 1…02…CAMPS








4.2.1    F̲o̲r̲m̲a̲t̲ ̲H̲a̲n̲d̲l̲e̲r̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲

         The Format Handler Subpackage consist of a set of monitor
         procedures called via the System Call Monitor. It performs
         input and output to a number of VDU splits via the
         VDU handler.



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̲



4.2.1.1.1    F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲B̲r̲e̲a̲k̲d̲o̲w̲n̲

         The Format Handler implements the application use of
         VDU formatted splits. The Format Handler is responsible
         for the formatting within the split.

         The Format Handler is functional divided in five groups:

         - Initialization
         - Format File Functions
         - Format I/O Functions
         - Split Control Functions
         - Line Group Functions

         The functions for each group are described in the following
         sections and shown in figure 4.2.1.1.1-1 to 6.



4.2.1.1.1.1 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲

         The overall initialization is performed by initializing
         the Format Handler administered, process resident data
         area to support up to the defined number of VDU split
         interfaces, each with an interface control area, an
         area for storage of format tables and a work buffer.



4.2.1.1.1.2 F̲o̲r̲m̲a̲t̲ ̲F̲i̲l̲e̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲

         The following functions are performed in this group:

         -   Load and initialize the split oriented control
             data and format tables from the format file  

         -   Accept connection to a split

         -   Remove connection to a split





4.2.1.1.1.3 F̲o̲r̲m̲a̲t̲ ̲I̲/̲O̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲

         The following functions are performed in this group:

         -   Send the loaded format data file to the specified
             split 

         -   Output host and user fields data 

         -   Request user fields data from the specified split
             

         -   Save the field data in the application buffer and
             the description of the received fields in the application
             field descriptor buffer 



4.2.1.1.1.4 S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲

         The following functions are performed in this group:

         - set cursor position
         - get cursor position
         - get cursor group position
         - send control ; ring the bell and clear split
         - receive control
         - enable datakeys
         - change field attributes
         - build ADAT P3 table



4.2.1.1.1.5 L̲i̲n̲e̲ ̲G̲r̲o̲u̲p̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲

         The following functions are performed in this group:

         - insert lines
         - delete lines
         - insert line group
         - delete line group
         - control of the VDU memory consumption
         - update format description.



















































                   FIGURE 4.2.1.1.1-1 
                   FUNCTIONAL BREAKDOWN























































                    FIGURE 4.2.1.1.1-2
                   FUNCTIONAL BREAKDOWN





















































                    FIGURE 4.2.1.1.1-3
                   FUNCTIONAL BREAKDOWN






















































                    FIGURE 4.2.1.1.1-4
                   FUNCTIONAL BREAKDOWN






















































                    FIGURE 4.2.1.1.1-5
                   FUNCTIONAL BREAKDOWN






















































                    FIGURE 4.2.1.1.1-6
                   FUNCTIONAL BREAKDOWN




4.2.1.2  S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲

         The Format Handler consists of a set of monitor procedures,
         called from the application via the System Call Monitor,
         and is divided in the following five modules:

         -   Main Entry Module; performing the functions described
             in section 4.2.1.1.1.1 including selection of functions.

         -   Format Initialize Module; performing the functions
             described in section 4.2.1.1.1.2.

         -   Format I/O Module; performing the functions described
             in section 4.2.1.1.1.3

         -   Split Control Module; performing the functions
             described in section 4.2.1.1.1.4

         -   Line Group Module; performing the functions described
             in section 4.2.1.1.1.5.

         The software structure is shown in figure 4.2.1.2-1.

         The four entry points required by the System Call Monitor
         are all resident in the Main Entry Module

         -   Init
         -   Answer Received
         -   Complete
         -   Cancel

         In figure 4.2.1.2-2 is shown the hierarchy of functions
         (calls) within the Format Handler Subpackage.

         The waiting point routines Return Pending and Return
         Done are shown as Waiting Point Routines in figure
         4.2.1.2-3. They are called from practically all of
         function routines.



















































                     FIGURE 4.2.1.2-1
                    SOFTWARE STRUCTURE




















































                     FIGURE 4.2.1.2-2
              HIERARCHY OF FUNCTIONS (CALLS)



















































                     FIGURE 4.2.1.2-3
                  WAITING POINT ROUTINES


4.2.1.3  D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲



4.2.1.3.1    O̲v̲e̲r̲v̲i̲e̲w̲

         The FORMAT HANDLER transfers data from the applications
         buffers to the VDU and receives data from the VDU for
         the applications buffer. To control this, it loads
         a format file.

         For one process the FORMAT HANDLER handles a set of
         interfaces, each controlled by an interface control
         block (IFCB).

         Interfaces are defined by numbers 1 through N. They
         work independently of each other except that the format
         area definition reserves memory from one common consecutive
         section of memory. Figure 4.2.1.3.1-1 presents the
         interface concept.


         The FORMAT HANDLER is accessed via the SYSTEM CALL
         MONITOR as shown in figure 4.2.1.3.1-2.
















































                    FIGURE 4.2.1.3.1-1
                THE CONCEPT OF INTERFACES















































                    FIGURE 4.2.1.3.1-2
                CONTROL AND DATA INTERFACE


         The FORMAT HANDLER accesses the I/O system for transfers
         of data to/from a terminal (split)

         The split is accessed via two connections, one for
         data transfer (fields) and one for function key transfer.

         Fig. 4.2.1.3.1-3 shows the interface to IOS.

         The data transfer connection is used for all transfers
         except the reads within the RECIEVE CONTROL, which
         are performed on the control connection.…86…1         …02…
           …02…   …02…   …02…                                          
         












































                    FIGURE 4.2.1.3.1-3
                      IOS INTERFACE


4.2.1.3.2    I̲n̲t̲e̲r̲n̲a̲l̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲a̲n̲d̲ ̲D̲a̲t̲a̲ ̲F̲l̲o̲w̲

         The four entry points of the FORMAT HANDLER are all
         resident in the main module where it is determined
         what is to be done. The action can be :

             -   select function to be performed
             -   continue already initiated function
             -   return to requestor, illegal function selected.

         A function procedure may be one of two categories :

             -   function is performed at once
             -   the function contains one or more waiting 
                 points.

         When a function procedure has a waiting point, it returns
         in the procedure RETURN PENDING : This procedure saves
         the current state and returns to the System Call Monitor.

         When ANSWER RECIEVED is entered, the function procedure
         is resumed as if return from the RETURN PENDING was
         performed.

         Fig. 4.2.1.3.2-1 illistrates the approach.

         The concept presented is the same for waiting points
         where the function is DONE.















































                    FIGURE 4.2.1.3.2-1
              FUNCTION PROCEDURE SCHEDULING


4.2.1.4  M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲

         The following software modules are identified in the
         Format Handler Subpackage (refer section 4.2.1.2):

         - Main Entry Module
         - Format Initialize Module
         - Format I/O Module
         - Split Control Module
         - Line Group Module

         Each module is described in separate sections.



4.2.1.4.1    M̲a̲i̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.1.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̲

         The main entry module performs the format handler data
         initialization and selects the split functions.The
         format handler data initialization includes setting
         up the format handler header with the number of splits
         and with pointers to the split work data area. The
         selection of split function is performed by identifying
         the system call and activate the proper procedures
         in the "work" modules.



4.2.1.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲.̲

         The Main Entry module interfaces to the System Call
         Monitor through the following procedures:

         a)  I̲O̲C̲ ̲I̲n̲i̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  IOC ̲Init

                     (Function:  FH ̲Func,
                      SOCB    :  Pointer,
                      CC      :  Completion Code)




             2)  IOC ̲Init (R3, R5, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R3          Function
             R5          Pointer to SOCB
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R3          Exit number
             R5          Completion Code


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             CSP ̲Error



         b)  I̲O̲C̲ ̲A̲n̲s̲w̲e̲r̲ ̲R̲e̲c̲e̲i̲v̲e̲d̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  IOC ̲Answer-Received

                     (Count            :  Integer,
                      IOS Operation Ref:  Integer,
                      SOCB             :  Pointer)


             2)  IOC ̲Anser ̲Received (R2, R3, R5, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R3          IOS Operation Ref
             R5          Pointer to SOCB
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R2          Done Count

             R0,R1,R4,R7 Destroyed




             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             CSP ̲Error
             FH ̲Stack ̲Error


         c)  I̲O̲C̲ ̲C̲o̲m̲p̲l̲e̲t̲e̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  IOC ̲Complete

                     (SOCB :           Pointer)


             2)  IOC ̲Complete (R5, R6)


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R5          Pointer to SOCB
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             None

             R0-R5, R7   Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             CSP ̲Error
             FH ̲Stack ̲Error

         d)  I̲O̲C̲ ̲C̲a̲n̲c̲e̲l̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  IOC ̲Cancel

                 (SOCB : Pointer)

             2)  IOC ̲Cancel (R5, R6)




             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R5          Pointer to SOCB
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             None

             R0-R4, R7   Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             CSP ̲Error
             FH ̲Stack ̲Error



4.2.1.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  I̲O̲C̲ ̲I̲n̲i̲t̲

             This procedure is the entry point for the format
             handler.

             The request registers are loaded to the SOCB and
             a pointer to the format handler header data is
             obtained. Depending on the function specified in
             the call the proper procedure is called. If the
             function differ from Initformat an operation is
             obtained for use throughout the handling of the
             request. If the function differ from Initformat
             and Define Formatarea a pointer to the actual split
             data is obtained. After ended handling of the request
             the obtained operation, if any, is returned to
             the queue and a ultimate return is made to System
             Call Monitor.


         b)  I̲O̲C̲ ̲A̲n̲s̲w̲e̲r̲ ̲R̲e̲c̲e̲i̲v̲e̲d̲

             The procedure is called when an IOS answer has
             been received. If all pending IO's for the call
             of Return ̲Pending are completed the return is to
             the caller of Return ̲Pending else a return is made
             to System Call Monitor with no action.




         c)  I̲O̲C̲ ̲C̲o̲m̲p̲l̲e̲t̲e̲

             This procedure is called, when handling of the
             request has been completed identified by call of
             Return ̲Done, just to load return registers.


         d)  I̲O̲C̲ ̲C̲a̲n̲c̲e̲l̲

             This procedure cancels all outstanding IO requests
             in a split.


         e)  F̲H̲ ̲I̲n̲i̲t̲f̲o̲r̲m̲a̲t̲

             This procedure is called by IOC ̲Init and initializes
             the format handler data by allocate memory for
             the specified number of splits and the number of
             operations per split and initializes the format
             header. Further an FDCB index is obtained via TMS
             by using one of the initialized operations. The
             operation is returned to the queue when the FDCB
             index is obtained.


         f)  F̲H̲ ̲D̲e̲f̲i̲n̲e̲ ̲F̲o̲r̲m̲a̲t̲a̲r̲e̲a̲

             This procedure is called by IOC ̲Init and builts
             up and initalizes format area for the specified
             split by allocate memory for table and buffers,
             initalizes split header, initializes split control
             interface, initializes split format interface and
             setup work buffers.


         g)  G̲e̲t̲ ̲R̲e̲q̲u̲e̲s̲t̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             This procedure is called by IOC ̲Init and loads
             the request registers from the context stack into
             the SOCB.


         h)  F̲H̲ ̲P̲o̲i̲n̲t̲ ̲S̲p̲l̲i̲t̲

             This procedure is called by IOC ̲Init and sets up
             R4 (interface no. identifying a split) as general
             pointer to the actual split. If the interface no
             is out of range FH ̲Kill ̲Requestor is called.


         i)  I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲I̲f̲

             This procedure is called by FH ̲Defineformat ̲area
             and initializes the split control record.




         j)  I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲S̲p̲l̲i̲t̲ ̲F̲o̲r̲m̲a̲t̲ ̲I̲f̲

             This procedure is called by FH ̲Defineformat ̲area
             and initializes the split format state.



4.2.1.4.1.4 M̲a̲i̲n̲ ̲E̲n̲t̲r̲y̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The data used by the Main Entry Module are all common
         data described in section 4.2.1.5.



4.2.1.4.1.5 M̲a̲i̲n̲ ̲M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Refer source code Main ̲Entry.s



4.2.1.4.2    F̲o̲r̲m̲a̲t̲ ̲I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.1.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 handles the connection/disconnection of
         VDU splits. It accepts the connection via TMS for the
         specified split. The split can be removed (e.g. for
         a redefinition). Further the module load, from the
         format file, and initializes the control data and format
         table, to be used for the specified split.





4.2.1.4.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The Format Initialize Module interfaces to the Main
         Entry module through the following procedures:

         a)  F̲H̲ ̲I̲n̲i̲t̲t̲e̲r̲m̲i̲n̲a̲l̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Initterminal

                     (CC:              Completion Code)

             2)  FH ̲Initterminal (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4                        Pointer to split (general
                                       pointer not specified
                                       in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1                        Completion Code

             R0, R2, R3,
             R5-R7                     Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error

             FH ̲IOS ̲Retire




         b)  F̲H̲ ̲R̲e̲m̲o̲v̲e̲t̲e̲r̲m̲i̲n̲a̲l̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Removeterminal

                     (CC: Completion Code)


             2)  FH ̲Removeterminal (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4                        Pointer to split (general
                                       pointer not specified
                                       in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1                        Completion Code

             R0,R2,R3,
             R5-R7                     Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲IOS ̲Retire



         c)  F̲H̲ ̲G̲e̲t̲f̲o̲r̲m̲a̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Getformat

                     (CC: Completion Code)

             2)  FH ̲Getformat (R1, R6)


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4                        Pointer to split (general
                                       pointer not specified
                                       in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1                        Completion Code

             R0, R2, R3,
             R5-R7                     Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Format ̲Not ̲Found
             FH ̲Too ̲Small ̲Table ̲Size
             FH ̲VDU ̲Memory ̲Exceeded




         d)  F̲H̲ ̲S̲e̲t̲ ̲W̲o̲r̲k̲ ̲B̲u̲f̲f̲e̲r̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Set ̲Work ̲Buffer

                     (Buffer Distribution: Work ̲Buffer ̲Distribution)


             2)  FH ̲Set ̲Work ̲Buffer (R0, R6)


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R0                        Buffer Distribution

             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             None

             R0-R7  Kept


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲




         e)  F̲H̲ ̲P̲o̲i̲n̲t̲ ̲F̲o̲r̲m̲a̲t̲f̲i̲l̲e̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Point ̲Formatfile

                     (Offset:          Long,
                      Size:            Integer,
                      Byte no.:        Integer)


             2)  FH ̲Point ̲Formatfile (R01, R2, R6)


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R01         Offset in bytes
             R2          Size
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R2          Byte no. in Buffer
             R0, R1,
             R3-R7       Kept

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲





4.2.1.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  F̲H̲ ̲I̲n̲i̲t̲t̲e̲r̲m̲i̲n̲a̲l̲

             This procedure accepts a control and data connection
             via TMS for the specified split.


         b)  F̲H̲ ̲R̲e̲m̲o̲v̲e̲t̲e̲r̲m̲i̲n̲a̲l̲

             This procedure removes via TMS the accepted control
             and data connections to the specified split.

         c)  F̲H̲ ̲G̲e̲t̲f̲o̲r̲m̲a̲t̲

             This procedure sets up work buffer for format load
             and if necessary loads the file containing format
             descriptor. Search through the file and points
             out the specified format descriptor. When the format
             descriptor is found the split ̲format is updated
             and the format table is loaded. Then the split
             format control blocks are initialized. The VDU
             memory consumption is calculated and if exceeded
             FH ̲Kill ̲Requestor is called. If the VDU memory
             consumption was not exceeded the work buffers are
             set for normal use.

         d)  F̲H̲ ̲S̲e̲t̲ ̲W̲o̲r̲k̲ ̲B̲u̲f̲f̲e̲r̲

             This procedure creates work 1 and work 2 buffer
             as defined by work buffer distribution.

         e)  F̲H̲ ̲P̲o̲i̲n̲t̲ ̲F̲o̲r̲m̲a̲t̲f̲i̲l̲e̲

             This procedure inspects the content of work 1 buffer.
             A load or reload of the file (or part of) containing
             format description is performed if no file is loaded,
             or the requested offset is less than the offset
             for the work 1 buffer, or the requested area (size
             of format descriptor) is not available.

         f)  R̲e̲a̲d̲ ̲F̲o̲r̲m̲a̲t̲ ̲F̲i̲l̲e̲

             This procedure reads a format file based on work
             1 file address and buffer list element.





4.2.1.4.2.4 M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The data used by the Format Initialize Module are all
         common data described in section 4.2.1.5



4.2.1.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Refer source code Format ̲Init.s



4.2.1.4.3    F̲o̲r̲m̲a̲t̲ ̲I̲/̲O̲ ̲M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.1.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̲

         This module performs output of specified formats and
         fields output and input.

         -   The already specified format is transmitted to
             the specified split.

         -   Field data are transfered from the application
             buffers to the specified split. Fields are taken
             as specified in the field list, assuming that the
             fields are sequenced in the field buffer as defined
             in the field list.

         -   Field data are transferred to the application buffers
             from the specified split. The contents of the defined
             fields is put into the application field buffer
             and a matching field list is constructed and put
             into the application field list buffer.





4.2.1.4.3.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The Format I/O Module interfaces to the Main Entry
         module through the following procedures:

         a)  F̲H̲ ̲O̲u̲t̲p̲u̲t̲f̲o̲r̲m̲a̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Outputformat

                     (CC:           Completion Code)

             2)  FH ̲Outputformat    (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4                     Pointer to Split (general
                                    pointer not specified in
                                    the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1                     Completion Code

             R0, R2, R3, R5-R7      Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲No ̲Format ̲Loaded




         b)  F̲H̲ ̲F̲i̲e̲l̲d̲s̲o̲u̲t̲p̲u̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Fieldsoutput

                     (High Priority:   :  Boolean,
                      Same Split       :  Boolean,
                      CC               :  Completion Code)

             2)  FH ̲Fieldsoutput (R0, R1, R2, R6)


             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R0          High Priority
             R2          Same Split
             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Line ̲Out ̲Range
             FH ̲Array ̲Error




         c)  F̲H̲ ̲F̲i̲e̲l̲d̲s̲i̲n̲p̲u̲t̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Fieldsinput

                     (CC: Completion Code)

             2)  FH ̲Fieldsinput (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2-R7   Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Access ̲Right ̲Violation
             FH ̲Incarnation ̲Out ̲Ranges
             FH ̲Array ̲Error
             FH ̲Field ̲Out ̲Range
             FH ̲Field ̲Not ̲User ̲Field
             FH ̲SW ̲Error





4.2.1.4.3.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  F̲H̲ ̲O̲u̲t̲p̲u̲t̲f̲o̲r̲m̲a̲t̲

             This procedure outputs an already specified format
             to the specified split by set up work buffers for
             format output, lock the VDU reset key, leave format
             mode, clear the split and output the format. When
             the format is output the first part of the format
             is displayed (put first line displayed) and format
             mode is entered.

         b)  F̲H̲ ̲F̲i̲e̲l̲d̲s̲o̲u̲t̲p̲u̲t̲

             This procedure outputs fields specified by requestors
             field list.

             The format state is tested and a check of the read
             access to the data contained in the chain of buffer
             list element is performed. Then the VDU keyboard
             is locked, the inhibit cursor is restored and format
             mode is left. The fields are output one by one
             by calculating the line incarnation offset, put
             first line display if necessary, put cursor position
             and verify the IOC header and field size. The data
             are (if valid) transferred from work 1 to work
             2 buffer and transmitted the the VDU when work
             2 buffer is full. If bad data is found in the IOC
             header or no more fields are to be output, the
             cursor is restored, the keyboard is unlocked, the
             memory compressed and format mode entered.

         c)  F̲H̲ ̲F̲i̲e̲l̲d̲i̲n̲p̲u̲t̲

             This procedure reads specified fields from the
             split and transfers them to the application defined
             buffer.

             The format state is tested and the write capability
             to the data buffer and field list is checked. The
             field parameters are checked by testing the number
             of field to be within the number available in the
             format. Then the fields are read by first calculate
             the maximum used buffer size, which might reduce
             the number of fields to receive, and then set the
             fileaddress for the receive buffer (work 2) and
             set up the input request to the VDU (arm command)
             in work 2 buffer. The input request is transmitted
             and when data are received the field list is generated.



         d)  D̲e̲c̲o̲d̲e̲ ̲U̲s̲e̲r̲ ̲F̲i̲e̲l̲d̲ ̲N̲o̲

             This procedure is called by FH ̲Fieldsinput and
             calculates the line, incarnation and field numbers
             for a given user field 1..N (screen numbering of
             unprotected fields).

         e)  P̲o̲i̲n̲t̲ ̲E̲l̲e̲m̲e̲n̲t̲ ̲W̲i̲t̲h̲ ̲U̲s̲e̲r̲ ̲F̲i̲e̲l̲d̲

             This procedure is called by Decode ̲User ̲Field ̲No
             and is recursive. In a hierarchy of groups the
             elements wherein the field no. (user field) is
             located are searched. For a given group the procedure
             scan all children until a line or group which contains
             the given field is located.

             After recursive calls the work parameters of all
             involved groups will be updated so that they point
             in a chain backwards from the group defined by
             the returned link to group 0.

         f)  N̲e̲x̲t̲ ̲B̲l̲e̲ ̲C̲h̲a̲r̲

             This procedure is called by FH ̲Fieldsoutput and
             obtains the next byte in a chain of buffer list
             elements.



4.2.1.4.3.4 M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The data used by the Format I/O Module are all common
         data described in section 4.2.1.5



4.2.1.4.3.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Refer source code Format ̲IO.s





4.2.1.4.4    S̲p̲l̲i̲t̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲I̲/̲O̲ ̲M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.1.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̲

         This module performs the split control functions such
         as:

         a)  Change a specified field to a specified video attribute.

         b)  Request the cursor position for the specified split.

         c)  Change the cursor position for the specified split.

         d)  Request the cursor group position for the specified
             split.

         e)  Activate the bell on the VDU or clear the specified
             split.

         f)  Receive split function keys from the specified
             split and return to the application keys.

         g)  Enable the specified split data keys.

         h)  Return to the application a table describing the
             layout of an ADAT-P3 format.





4.2.1.4.4.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The Split Control Module interfaces to the Main Entry
         Module through the following procedures:

         a)  F̲H̲ ̲C̲h̲a̲n̲g̲e̲f̲i̲e̲l̲d̲a̲t̲t̲r̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Changefieldattr

                     (CC:           Completion Code)

             2)  FH ̲Changefieldattr (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4                     Pointer to Split (general
                                    pointer not specified in
                                    the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1                     Completion Code

             R0, R2, R3, R5-R7      Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Number ̲Out ̲Range
             FH ̲Array ̲Error
             FH ̲Field ̲Out ̲Range



         b)  F̲H̲ ̲G̲e̲t̲c̲u̲r̲s̲o̲r̲p̲o̲s̲i̲t̲i̲o̲n̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Getcursorposition

                     CC : Completion Code)

             2)  FH ̲Getcursorposition (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error



         c)  F̲H̲ ̲S̲e̲t̲c̲u̲r̲s̲o̲r̲p̲o̲s̲i̲t̲i̲o̲n̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Setcursorposition

                     (CC: Completion Code)

             2)  FH ̲Setcursorposition (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Field ̲Out ̲Range



         d)  F̲H̲ ̲S̲e̲n̲d̲c̲o̲n̲t̲r̲o̲l̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Sendcontrol

                     (CC: Completion Code)

             2)  FH ̲Sendcontrol (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Unknown ̲Send ̲Control



         e)  F̲H̲ ̲R̲e̲c̲e̲i̲v̲e̲c̲o̲n̲t̲r̲o̲l̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Receivecontrol

                     (CC: Completion Code)

             2)  FH ̲Receivecontrol (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲FK ̲Req ̲Already ̲Active
             FH ̲IOS ̲Retire



         f)  F̲H̲ ̲E̲n̲a̲b̲l̲e̲d̲a̲t̲a̲k̲e̲y̲s̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Enabledatakeys

                     (CC: Completion Code)

             2)  FH ̲Enabledatakeys (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Control ̲Out ̲Active
             FH ̲IOS ̲Retire



         g)  F̲H̲ ̲G̲e̲t̲c̲u̲r̲s̲o̲r̲g̲r̲o̲u̲p̲p̲o̲s̲i̲t̲i̲o̲n̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Getcursorgroupposition

                     (CC: Completion Code)

             2)  FH ̲Getcursorgroupposition (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error



         h)  F̲H̲ ̲B̲u̲i̲l̲d̲a̲d̲a̲t̲p̲3̲t̲a̲b̲l̲e̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Buildadatp3table

                     (CC: Completion Code)

             2)  FH ̲Buildadatp3table (R1, R3)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Bad ̲Format ̲State





4.2.1.4.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  F̲H̲ ̲C̲h̲a̲n̲g̲e̲f̲i̲e̲l̲d̲a̲t̲t̲r̲

             This procedure changes a specified field to a specified
             video attribute.

             The format state is tested and the line incarnation
             offset is obtained. Then the page is calculated
             and the column and line no. is obtained. The keyboard
             is locked, format mode left and the non-video attribute
             is output at the end of the field. The VDU codes
             for the video attribute are generated and output.
             Then the format mode is entered and the keyboard
             is unlocked.

         b)  F̲H̲ ̲G̲e̲t̲c̲u̲r̲s̲o̲r̲p̲o̲s̲i̲t̲i̲o̲n̲

             This procedure obtaines the cursor position from
             the VDU.

             The format state is tested and the cursor position
             is requested from the VDU by use of arm command.
             The returned screen line number is decoded and
             it is checked that the cursor is in a field.

         c)  F̲H̲ ̲S̲e̲t̲c̲u̲r̲s̲o̲r̲p̲o̲s̲i̲t̲i̲o̲n̲

             This procedure sets the cursor in the split to
             the first position of field and with the specified
             number of lines above by testing the format state,
             obtain the line incarnation offset, point out the
             line and output the cursor position to the VDU.

         d)  F̲H̲ ̲S̲e̲n̲d̲c̲o̲n̲t̲r̲o̲l̲

             This procedure outputs a bell command to the VDU
             or clears the specified split by leaving the format
             mode and output a clear split command.

         e)  F̲H̲ ̲R̲e̲c̲e̲i̲v̲e̲c̲o̲n̲t̲r̲o̲l̲

             This procedure awaits function key activation by
             issuing a init read and a wait read command.

         f)  F̲H̲ ̲E̲n̲a̲b̲l̲e̲d̲a̲t̲a̲k̲e̲y̲s̲

             This procedure requests the VDU handler to enable
             datakeys for this split. (Datakeys are disabled
             after depression of a valid function key).



         g)  F̲H̲ ̲G̲e̲t̲c̲u̲r̲s̲o̲r̲g̲r̲o̲u̲p̲p̲o̲s̲i̲t̲i̲o̲n̲

             This procedure returns the group and the incarnation
             of the first (lowest) group in the hierarchy of
             linegroups where insert-/delete line is allowed.

             The format state is tested and the cursor position
             is obtained from the VDU. The memory line is pointed
             out and the group hierarchy from root to bottom
             is scanned. If a non-group mode or a repeated mode
             is pointed the search is stopped and the lowest
             group, which can be repeated, is returned.

         h)  F̲H̲ ̲B̲u̲i̲l̲d̲a̲d̲a̲t̲p̲3̲t̲a̲b̲l̲e̲

             This procedure builds up a table describing the
             layout of the specified Adat-P3 format.

         i)  D̲e̲c̲o̲d̲e̲ ̲M̲e̲m̲ ̲L̲i̲n̲e̲ ̲P̲o̲s̲

             This procedure is called by FH ̲Getcursorposition
             and calculates the line and incarnation for a given
             memory line 1..N (screen numbering of lines).

         j)  P̲o̲i̲n̲t̲ ̲E̲l̲e̲m̲e̲n̲t̲ ̲W̲i̲t̲h̲ ̲M̲e̲m̲ ̲L̲i̲n̲e̲

             This procedure is called by FH ̲Getcursorgroupposi-
             tion and Decode ̲Mem ̲Line ̲Pos and is recursive.
             In a hierarchy of groups the elements wherein the
             line is located are searched. After recursive call
             the work parameters of all involved groups will
             be updated so that they point in a chain backwards
             from the group defined by the returned link to
             group 0.



4.2.1.4.4.4 M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The data used by Split Control Module are all common
         data described in section 4.2.1.5.



4.2.1.4.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Refer source code Split ̲Control.s





4.2.1.4.5    L̲i̲n̲e̲ ̲G̲r̲o̲u̲p̲ ̲M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲



4.2.1.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 performs the insertion and deletion of
         lines or linegroups. It is checked that the line or
         line group is repeatable. The last incarnation of the
         line or linegroup cannot be deleted. Further the modue
         performs the control of the VDU memory consumption.



4.2.1.4.5.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The Line Group Module interfaces to the Main Entry
         Module through the following procedures:

         a)  F̲H̲ ̲I̲n̲s̲e̲r̲t̲l̲i̲n̲e̲s̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Insertlines

                     (CC: Completion Code)

             2)  FH ̲Insertlines (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Incarnation ̲Out ̲Range
             FH ̲Number ̲Out ̲Range
             FH ̲Bad ̲Format ̲State



         b)  F̲H̲ ̲D̲e̲l̲e̲t̲e̲l̲i̲n̲e̲s̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Deletelines

                     (CC: Completion Code)

             2)  FH ̲Deletelines (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Incarnation ̲Out ̲Range
             FH ̲Number ̲Out ̲Range
             FH ̲Bad ̲Format ̲State



         c)  F̲H̲ ̲I̲n̲s̲e̲r̲t̲l̲i̲n̲e̲g̲r̲o̲u̲p̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Insertlinegroup

                     (CC: Completion Code)

             2)  FH ̲Insertlinegroup (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Incarnation ̲Out ̲Range
             FH ̲Bad ̲Format ̲State



         d)  F̲H̲ ̲D̲e̲l̲e̲t̲e̲l̲i̲n̲e̲g̲r̲o̲u̲p̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Deletelinegroup 

                     (CC: Completion Code)

             2)  FH ̲Deletelinegroup  (R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link


             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code

             R0, R2-R7   Destroyed


             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Incarnation ̲Out ̲Range
             FH ̲Bad ̲Format ̲State



         e)  F̲H̲ ̲M̲e̲m̲o̲r̲y̲ ̲C̲N̲T̲L̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             1)  FH ̲Memory CNTL 

                     (Request: Memory ̲Request ̲Type,
                      CC     : Completion Code)

             2)  FH ̲Memory CNTL  (R0, R1, R6)

             R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲r̲s̲i̲o̲n̲

             C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R0          Memory Request Type
             R4          Pointer to Split (general pointer not
                         specified in the call)
             R6  Link

             R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲

             R1          Completion Code
             R0, R2, R3,
             R5-R7       Destroyed

             F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲

             FH ̲Stack ̲Error
             FH ̲Array ̲Error
             FH ̲Bad ̲Format ̲State





4.2.1.4.5.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         a)  F̲H̲ ̲I̲n̲s̲e̲r̲t̲l̲i̲n̲e̲s̲

             This procedure inserts the specified number of
             lines below the given incarnatiuon number. To insert
             above incarnation number 1 the incarnation number
             must be set to 0. If the format has not been output
             the incarnation count for the line is just incremented.
             The line is pointed out and checked for repeatability.
             Then the memory consumption, the incarnation number
             and repetition number is tested and the group size
             is updated (number of user fields and number of
             physical lines in all group levels). 

             The cursor is set to the first position of the
             specified line and format mode is left. Then the
             specified number of lines are inserted and format
             mode is entered.

         b)  F̲H̲ ̲D̲e̲l̲e̲t̲e̲l̲i̲n̲e̲s̲

             This procedure deletes the specified number of
             lines below the given incarnation number. If the
             specified number of lines is 0 or too big all incarnations
             below the given are deleted. If the format has
             not been output the incarnation count is just decremented.

             The line is pointed out and checked for repeatability.
             Then the incarnation number and the repetition
             number are tested. The VDU memory and the group
             size (number of user fields and number of physical
             lines in all group levels) are updated. The cursor
             is set to the first position of the specified line
             and the specified number of lines are deleted.

         c)  F̲H̲ ̲I̲n̲s̲e̲r̲t̲l̲i̲n̲e̲g̲r̲o̲u̲p̲

             This procedure inserts a copy of the linegroup
             after the specified incarnation of the linegroup.
             The incarnation number 0 means insertion in front
             of the already existing incarnation of the linegroup.
             The insertion can only be performed if no repetition
             has been performed on linegroups containing this
             linegroup. If the format has not been output the
             incarnation count for the specified linegroup is
             just incremented.



             The linegroup is pointed out and checked for repeatability.
             Then the memory consumption and the incarnation
             number are tested and the group size is updated
             (number of user fields and number of physical lines
             in all group levels). The group incarnation offset,
             the final VDU memory line and the page is calculated,
             the cursor is set to the calculated position and
             format mode is left. The linegroup is inserted,
             the VDU memory compressed and format mode entered.

         d)  F̲H̲ ̲D̲e̲l̲e̲t̲e̲l̲i̲n̲e̲g̲r̲o̲u̲p̲

             This procedure deletes the specified incarnation
             of a linegroup. The deletion is only allowed if
             no repetition has been performed on the linegroup
             containing this linegroup. If the format has not
             been output the incarnation count is just descremented.

             The linegroup is pointed out and checked for repeatability.
             The VDU memory and group size (number of user fields
             and number of physical lines) are updated. The
             group incarnation offset, the final VDU memory
             line and the page is calculated, the cursor is
             set to the calculated position. The linegroup is
             then deleted.

         e)  F̲H̲ ̲M̲e̲m̲o̲r̲y̲ ̲C̲N̲T̲L̲

             This procedure calculates and returns the size
             of VDU memory consumption for a line or a group.
             Further the size of free VDU memory can be returned.

         f)  S̲e̲t̲ ̲P̲o̲s̲i̲t̲i̲o̲n̲

             This procedure is called by FH ̲Insertlines and
             FH ̲Deletelines and positions the cursor on the
             first position of the specified line. Further is
             paging performed.

             The line incarnation offset and paging is calculated.
             Then the cursor is positions to the calculated
             memory line and column.

         g)  P̲u̲t̲ ̲I̲n̲s̲e̲r̲t̲ ̲L̲i̲n̲e̲s̲

             This procedure is called by FH ̲Insertlines and
             FH ̲Insertlinegroup and outputs to the VDU line
             insertion codes for the specified number of lines.



         h)  P̲u̲t̲ ̲D̲e̲l̲e̲t̲e̲ ̲L̲i̲n̲e̲s̲

             This procedure is called by FH ̲Deletelines and
             FH ̲Deletelinegroup and outputs to the VDU line
             deletion codes for the specified number of lines.
             The format mode is left before line deletion codes
             are outputted. When all lines are deleted format
             mode is entered.

         i)  C̲h̲e̲c̲k̲ ̲L̲i̲n̲e̲ ̲R̲e̲p̲e̲a̲t̲a̲b̲i̲l̲i̲t̲y̲

             This procedure is called by FH ̲Insertlines and
             FH ̲Deletelines and checks if a line may be repeated.
             I.e. that no group above the group in which the
             line is contained has been either deleted or repeated.

         j)  C̲h̲e̲c̲k̲ ̲G̲r̲o̲u̲p̲ ̲R̲e̲p̲e̲a̲t̲a̲b̲i̲l̲i̲t̲y̲

             This procedure is called by FH ̲Insertlinegroup,
             FH ̲Deletelinegroup and Check ̲Line ̲Repeatability
             and checks if a group may be repeated. I.e. if
             none of the groups above the group in the hierarchy
             has been either deleted or repeated.

         k)  U̲p̲d̲a̲t̲e̲ ̲G̲r̲o̲u̲p̲ ̲S̲i̲z̲e̲s̲

             This procedure is called by FH ̲Insertlines, FH
             ̲Deletelines, FH ̲Insertlinegroup and FH ̲Deletelinegroup
             and updates the group size for all groups by pointing
             out the group and calling the Update ̲Group ̲Size
             procedure.

         l)  U̲p̲d̲a̲t̲e̲ ̲G̲r̲o̲u̲p̲ ̲S̲i̲z̲e̲

             This procedure is called by Update ̲Group ̲Sizes
             and updates the number of user fields and number
             of physical links in all group levels.



4.2.1.4.5.4 M̲o̲d̲u̲l̲e̲ ̲D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The data used by the Line Group Module are all common
         data described in section 4.2.1.5.



4.2.1.4.5.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Refer source code Line ̲Group.s