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

⟦93e5046da⟧ Wang Wps File

    Length: 24032 (0x5de0)
    Types: Wang Wps File
    Notes: CPS/SDS/002               
    Names: »1056A «

Derivation

└─⟦5a07e954e⟧ Bits:30006038 8" Wang WCS floppy, CR 0062A
    └─ ⟦this⟧ »1056A « 

WangText



&…09…&…0e…&
&…07…%…0b…%…0c…%…0d…%…0e…%…0f…%
%…86…1   
      
      
      
      
      
      
      …02…
      
     …02… 
  …02…    
    

…02…CPS/SDS/002

…02…OKH/810801…02……02…
CAMPS
 SYSTEM
 FUNCTIONS
…02……02…CAMPS








4.2.1.1.1    S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲

         A subprocess is an entity within a process to which
         separate functional capabilities and access rights
         shall be assigned. The most typical example is a VDU
         subprocess. A VDU Process manages and communicates
         with a number of VDUs. Each VDU is then assigned a
         subprocess within the process, and this subprocess
         is the carrier of the access rights assigned to that
         VDU.

         The rights and capabilities of a subprocess are described
         in the associated subprocess record, shown on figure
         4.2.1.4.1.

         FUNCTIONAL CAPABILITIES are a function mask with a
         bit for each privileged CSF function.

         Subprocesses within CAMPS are identified by a unique
         SUBPROCESS ID, which is a BYTE.

         For each process there is a variable CURRENT SUBPROCESS
         holding the subprocess id of the subprocess in control
         at the moment. The value is maintained by the function
         Change Subprocess Id.

         For processes structured into coroutines, each coroutine
         belongs to one subprocess. The coroutine monitor will
         then maintain the current subprocess id.



4.2.1.1.1.1 G̲e̲t̲ ̲S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲

         Output: Subprocess Record Pointer

         Internal CSF function returning a pointer to the subprocess
         record of current subprocess within the process.



4.2.1.1.1.2 C̲h̲a̲n̲g̲e̲ ̲S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲I̲d̲

         Input:…02…New Subprocess Id

         Output:…02…Completion Code.



         Checks that the specified subprocess belongs to calling
         process. Then changes the value of current subprocess
         in the process.



4.2.1.1.1.3 C̲h̲a̲n̲g̲e̲ ̲S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         Input:  Subprocess Id
                 New Attributes

         Output: Completion Code.

         Privileged function used to change the fields FUNCTIONAL
         CAPABILITIES through QUEUE ELEMENT CLAIM of the subprocess
         record. The QUEUE MONITOR CAPABILITY ARRAY is updated
         by the QMON function Set Capabilities.

         Checks that calling process has the right to call this
         function. Then inserts the new attributes into the
         subprocess record.



4.2.1.1.1.4 C̲h̲e̲c̲k̲ ̲P̲a̲g̲e̲ ̲A̲c̲c̲e̲s̲s̲ ̲R̲i̲g̲h̲t̲s̲

         Input:  Buffer Address
                 Buffer Length
                 Required Access

         Output: Physical Address
                 Completion Code

         Internal function checking if pages corresponding to
         specified buffer are mapped in by the process with
         required access rights, e.g. read or write access.



4.2.1.1.2 B̲u̲f̲f̲e̲r̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲B̲l̲o̲c̲k̲ ̲P̲o̲o̲l̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲

         Shared buffers are used by application processes to
         communicate data which are not stored on disk. Examples
         are log records and reports.

         Shared buffers are held in buffer pools. The buffers
         in a pool are of equal size.



         Shared buffers are kept in protected data area and
         can only be referenced via queue elements.

         Control Blocks used by other CSF subpackages are kept
         in similar pools. They are allocated and released by
         calling a common function.



4.2.1.1.2.1 R̲e̲s̲e̲r̲v̲e̲ ̲B̲u̲f̲f̲e̲r̲

         Input:  Buffer Size
                 Destination Queue

         Output: Buffer Reference   (Queue Element)
                 Completion Code

         Reserves a buffer of specified size. If there are no
         free buffers, this will be signalled in Completion
         Code.



4.2.1.1.2.2 D̲i̲s̲m̲a̲n̲t̲l̲e̲ ̲B̲u̲f̲f̲e̲r̲

         Input:  Buffer Reference

         Output: Completion Code

         Releases a buffer from the calling subprocess. If it
         is the last QEL referencing the buffer, it is returned
         to its pool.



4.2.1.1.2.3 W̲r̲i̲t̲e̲ ̲B̲u̲f̲f̲e̲r̲

         Input:  Buffer Reference
                 Buffer Offset
                 Record Length
                 Record Address     (Even Byte address)

         Output: No. of bytes written
                 Completion Code.

         A record of "Record Length" bytes starting at "Record
         Address" is written into the referenced buffer, starting
         at "Buffer Offset".



         The QEL used as reference must be owned by calling
         subprocess. If the record length is too large, a smaller
         number of bytes may be moved.



4.2.1.1.2.4 R̲e̲a̲d̲ ̲B̲u̲f̲f̲e̲r̲

         Input:  Buffer Reference
                 Buffer Offset
                 Record Length
                 Record Address

         Output: No. of bytes read
                 Completion Code

         A record of "Record Length" bytes starting at "Buffer
         Offset" is read into the memory area starting at "Record
         Address". The QEL used as reference must be owned by
         calling subprocess.

         If buffer is shorter than specified, a smaller number
         of bytes may be read.



4.2.1.1.2.5 A̲l̲l̲o̲c̲a̲t̲e̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲B̲l̲o̲c̲k̲

         Input:  Pool Pointer

         Output: Control Block Pointer.

         Internal function allocating a free control block.
         If pool is empty, the returned pointer is NIL.



4.2.1.1.2.4 R̲e̲l̲e̲a̲s̲e̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲B̲l̲o̲c̲k̲ 

         Input:  Pool Pointer
                 Control Block Pointer

         Internal Function.
         Returns a Control Block to its pool.





4.2.1.1.3    L̲i̲s̲t̲ ̲a̲n̲d̲ ̲C̲h̲a̲i̲n̲ ̲M̲a̲n̲i̲p̲u̲l̲a̲t̲i̲o̲n̲

         Contains internal functions for inserting and removing
         elements from single and double chained lists.



4.2.1.1.4    L̲o̲g̲ ̲a̲n̲d̲ ̲R̲e̲p̲o̲r̲t̲ ̲G̲e̲n̲e̲r̲a̲t̲i̲o̲n̲

         Contains internal functions for generating error or
         warning reports and log records.



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

         The external functions are CSF procedures as described
         in section 4.1.2.

         The internal functions are internal procedures and
         a coroutine in CSF process as described in 4.1.2.



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̲

         See Figures 4.1.3-1 and 4.1-3-3.



4.2.1.4  S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲

         Consists of the following 3 data types:

         a)  Subprocess Record, shown in 4.2.1.4.1.

             There is one for each subprocess containing the
             access control information for the subprocess.

         b)  Buffer Pool, shown in 4.2.1.4.2.

             A buffer pool is an array of equal sized buffer
             elements and a pool descriptor describing the state
             of the pool.



         c)  Control Block Pool Descriptor, shown in 4.2.1.4.2.

             A pool descriptor for each type of control block
             used by other subpackages.










                    Figure 4.2.1.4.1-1









                    Figure 4.2.1.4.2-1











                     Figure4.2.1.5-1


4.2.2    Q̲u̲e̲u̲e̲ ̲M̲o̲n̲i̲t̲o̲r̲

         The Queue Monitor (QMON) manipulates QELs. The QELs
         are a record type which normally is held in a double
         linked list, a Queue (Q). The main purpose of the QELs
         is that they are used as reference to objects which
         are sent from one application module to another.



4.2.2.1  F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         This functional breakdown shows which functions QMON
         must contain to fulfil its functional requirement.

         QMON will be implemented as 7 modules. The first 6
         modules (4.2.2.1.1-6) contain the functions called
         by other subpackage while the last module 4.2.2.1.7
         contains simple functions called by more than one of
         the main functions in the other 6 modules or by other
         CSF subpackage.

         In the following each module will be broken down so
         each main function and the common functions used by
         it can be identified.







                          Figure






                     Figure 4.2.2.1-1


4.2.2.1.1    R̲e̲c̲e̲i̲v̲e̲

         Receive identifies and reserves a QEL and delivers
         it to caller. The QEL is selected according to criteria
         specified by caller.

         All QELs may be received if caller has capability to
         the queue where they reside, but if the QEL profile
         exceeds the calling subprocess profile, the QEL will
         be marked by setting Profile Check Status and can thus
         not be used as a view reference.

         Every time a QEL is received by a subprocess the number
         of remaining QELs in the capability array of the subprocess
         is decreased by one.

         Receive module is broken down as shown in figure 4.2.2.1.1.

         The Receive functions are called via System Call Monitor,
         cf 4.2.6.



4.2.2.1.1.1 R̲e̲c̲e̲i̲v̲e̲ ̲F̲i̲r̲s̲t̲ ̲Q̲E̲L̲

         If caller has capability to the queue it is inspected.

         If queue is empty and wait is false, a nil QEL reference
         is put into SOCB and SOCB Call Status is set to "done".

         If queue is empty and wait is true, the absolute queue
         reference and owner reference are put into SOCB. 

         If queue is not empty, the first QEL is marked as owned
         by calling subprocess and queue length is decreased
         by one. The QEL is put into SOCB and SOCB Call status
         is set to "done".

         The queue may be a main queue or a subqueue.

         Input   QID

                 -   Queue reference

                 Wait

                 -   Boolean…86…1         …02…   …02…   …02…   …02…            
                      …02…                            
         Output in SOCB

                 QEL

                 -   QEL reference may be nil

                 Subqueue Index

                 CC

                 -   Complete
                 -   QEL has higher prof.
                 -   No capability
                 -   Q is empty
                 -   QEL claim exceeded
                 -   Cancelled



4.2.2.1.1.2 I̲n̲s̲p̲e̲c̲t̲ ̲R̲e̲c̲e̲i̲v̲e̲

         This is the "answer received" entry point from System
         Call Monitor.

         The list of pending SOCBs is scanned. For each SOCB,
         an inspection is made as to whether a QEL has been
         sent to the referenced queue.

         If the queue is still empty nothing is done. If the
         queue is not empty, the first QEL is reserved and its
         reference is put into the SOCB which is then marked
         as "done".

         When all SOCBs have been inspected, QMON returns to
         System Call Monitor with parameters telling how many
         SOCBs have been marked as "done" indicating the first
         in the list.

         The queue referred to in the SOCB may be a main queue
         or a sub queue.

         Input:  SOCB list



         Output: n

                 -   Number of affected SOCBs

                 SOCB ref

                 -   Pointer to first affected SOCB

                 CC

                 -   Complete
                 -   Fail



4.2.2.1.1.3 C̲a̲n̲c̲e̲l̲ ̲R̲e̲c̲e̲i̲v̲e̲

         Cancel terminates the waiting on an empty queue. The
         SOCB status is set to done, QEL reference to nil and
         completion code to cancelled.

         Input:  SOCB

                 -   References to a SOCB

         Output: CC

                 -   Cancel complete
                 -   Fail



4.2.2.1.1.4 R̲e̲c̲e̲i̲v̲e̲ ̲N̲e̲x̲t̲ ̲Q̲E̲L̲

         If caller owns the referred QEL, the next QEL in same
         queue is reserved for caller and QEL reference is returned.

         If there are no more QELs in the same queue, only completion
         code is returned.

         Input:  QEL

                 -   Reference to an owned QEL



         Output: QEL

                 -   QEL ref may be nil

                 CC





                     Figure 4.2.2.1-2


4.2.2.1.2    C̲l̲e̲a̲r̲i̲n̲g̲

         The clearing functions are used when the owner of a
         QEL no longer wants to use it. The clearing module
         has been broken down under figure 4.2.2.1.2.



4.2.2.1.2.1 R̲e̲t̲u̲r̲n̲

         If caller owns the QEL, the owner reference in the
         QEL is cleared and queue length is increased by one.
         If the queue was empty before return, the Sync. Element
         associated with the queue is signalled if Sync. Element
         ref. is not nil.

         The QEL claim of calling suprocess is incremented.

         Input:  QEL

                 -   Reference to a QEL owned by caller

         Output: CC

                 -   Complete
                 -   QEL not owned





4.2.2.1.2.2 D̲i̲s̲m̲a̲n̲t̲l̲e̲

         The QEL is removed from the list where it resides and
         returned to CSF shared data functions if the following
         conditions are fulfilled:

         -   The caller is owner of the QEL.

         -   The QEL does not refer to a view.
             A view must be dismantled by the MMON Dismantle
             View

         -   The QEL does not refer to a buffer.
             A buffer must be dismantled by the Shared Buffer
             Management Function Release Buffer.

         The QEL claim of calling subprocess is incremented.

         Input:  QEL

                 -   Reference to a QEL owned by caller.

         Output: CC

                 -   Complete
                 -   QEL not owned
                 -   QEL refers to an object







                     Figure 4.2.2.1-3


4.2.2.1.3    S̲e̲n̲d̲

         Send sends a QEL to specified sub queue.

         The QEL may be a copy of a QEL owned by caller or a
         new QEL generated by QMON.

         QMON generates a new QEL if caller specifies a nil
         reference instead of a reference by input parameters
         for send.

         Caller may specify View Control Information and 3 word
         information as input parameters by send.

         Caller may only send to the queues to which he has
         send capability.

         A QEL can not be sent to a queue with lower profile
         than the QEL. If this check is not passed, a profile
         mask is returned to caller, specifying the profile
         fields which are too high.

         If a QEL is sent to an empty queue, the Sync. Elements
         associated with the queue is signalled if this is not
         nil.

         If a QEL referring to an object, e.g. a view or a shared
         buffer, is copied, the object server is activated.

         Send is broken down in fig. 4.2.2.1.3.

         A QEL may not be sent to a blocked queue.

         If the threshold of destination queue is exceeded,
         a warning report is sent to supervisor.





4.2.2.1.3.1 S̲e̲n̲d̲ ̲Q̲E̲L̲

         A QEL is sent to destination queue if the following
         conditions are fulfilled:

         -   QEL is a nil reference or owned by caller.

         -   Destination queue has a higher profile than QEL.

         -   Caller has capability to destination queue.

         Input:  QEL

                 -   Reference to an owned QEL or nil reference

                 Dest QID

                 -   Sub queue reference

                 View Control Information

                 Info.

                 -   Three word information specified by caller.

         Output: CC

                 -   Complete
                 -   QEL has higher prof. than dest. queue
                 -   No capability
                 -   QEL not owned by caller
                 -   Function not allowed
                 -   Queue blocked

                 Profile Mask.



4.2.2.1.3.2 S̲e̲n̲d̲ ̲R̲e̲q̲u̲e̲s̲t̲

         This function is special in so far as an answer queue
         must be specified by input parameter. The answer queue
         specifies which queue the receiving module shall send
         to, after the requested function has been performed.

         A QEL is sent to destination queue if the following
         conditions are fulfilled.



         -   QEL is a nil ref or owned by caller.

         -   Destination queue has higher profile than QEL.

         -   Caller has capability to send to destination queue.

         -   Caller has capability to use answer queue as such.

         -   Before send, function request flag is set.

         Input:  QEL

                 -   Reference to a QEL owned by caller or a
                     nil reference.


                 Dest QID

                 -   Destination QID of the type sub queue ref.

                 View Control Information

                 Info

                 -   Three word information specified by caller.

                 Answ QID

                 -   The Q where first answer to the request
                     is to be sent to. QID of the type sub queue
                     ref.

         Output: CC

                 -   Function complete
                 -   QEL has higher prof. than destination queue
                 -   QEL not owned by caller
                 -   No capability
                 -   Function not allowed
                 -   Queue blocked

                 Profile Mask





4.2.2.1.3.3 S̲e̲n̲d̲ ̲R̲e̲p̲l̲y̲

         This function is special in so far as destination queue
         is specified by means of a QEL which has been sent
         as a function request.

         A QEL is sent to destination queue if the following
         conditions are fulfilled:

         -   QEL is a nil reference or owned by caller

         -   Answer queue has a higher profile than QEL

         -   Destination QEL contains an answer QID

         Input:  QEL

                 -   Reference to QEL owned or nil. An owned
                     QEL may be the same as Dest QEL

                 Dest QEL

                 -   The QEL by which the request was received.
                     The Dest QEL must be owned by caller.

                 View Control Information

                 Info

                 -   Three word information specified by caller

         Output: CC

                 -   Function complete
                 -   QEL has higher prof that destination queue
                 -   QEL not owned by caller
                 -   No answer Q in QEL
                 -   Function not allowed
                 -   Queue blocked

                 Profile Mask









                     Figure 4.2.2.1.4


4.2.2.1.4    P̲r̲o̲f̲i̲l̲e̲s̲ ̲a̲n̲d̲ ̲B̲l̲o̲c̲k̲i̲n̲g̲

         The profile module manipulates data related to profiles.

         The only output from these functions is the completion
         code.

         The profile module is broken down in figure 4.2.2.1.4.



4.2.2.1.4.2 S̲e̲t̲ ̲P̲r̲o̲f̲i̲l̲e̲

         The profile of a main queue is set

         If the new profile is higher than the old profile,
         the profiles of all QELs in the Q are compared with
         the new value and the QELs with too high a profile
         are moved to an alternative queue specified by caller.

         Only SSC is allowed to use this function

         Input:  QID

                 -   Main queue reference

                 Alt QID

                 -   Sub queue reference to the alternative
                     queue where QELs with too high a profile
                     are moved

         Output: CC

                 -   Function complete
                 -   Alternative queue has too low a profile
                 -   Function not allowed





4.2.2.1.4.3 B̲l̲o̲c̲k̲ ̲Q̲u̲e̲u̲e̲

         The specified queue is blocked by setting the blocked
         flag to true. If a main queue is referenced, all its
         sub queues are blocked.

         Input:  Queue ID

         Output: Completion code



4.2.2.1.4.4 U̲n̲b̲l̲o̲c̲k̲ ̲Q̲u̲e̲u̲e̲

         The specified queue is unblocked by setting the blocked
         flag to false. If a main queue is referenced, all its
         sub queues are unblocked.

         Input:  Queue ID

         Output: Completion code






                     Figure 4.2.2.1.5


4.2.2.1.5    G̲e̲t̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         This function reads or determines the wanted attributes
         and delivers them to caller by writing the attributes
         at a location specified by caller.

         Get attributes are broken down in fig. 4.2.2.1.5-1.



4.2.2.1.5.1 G̲e̲t̲ ̲Q̲u̲e̲u̲e̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         The attributes of a queue are read from queue description
         and delivered to caller.

         Input:  QID

                 -   Queue reference

                 Output address

                 -   Pointer to output buffer

         Output: Queue Attributes

                 -   Profile
                 -   Length
                 -   Threshold

         Output: CC

                 -   Function complete
                 -   No capability
                 -   Output buffer unavailable



4.2.2.1.5.2 G̲e̲t̲ ̲Q̲u̲e̲u̲e̲ ̲L̲e̲n̲g̲t̲h̲

         The length of a sub queue or a main queue is determined.

         The profile of each unreserved QEL in queue is compared
         with a Profile Mask specified by caller.


         Only QELs, the qprofile of which contains at least
         one bit from Profile Mask are counted in the queue
         length.

         Input:  Queue reference

                 Profile Mask

         Output: Queue length

                 -   Integer

                 CC

                 -   Function complete
                 -   No capability
                 -   Output buffer unavailable



4.2.2.1.5.3 G̲e̲t̲ ̲Q̲E̲L̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         The attributes of a QEL are delivered to caller.

         Input   QEL

                 Output address

                 -   Pointer to output buffer

         Output: QEL Attributes

                 -   Time Stamp
                 -   View Control Information
                 -   Profile Check Status
                 -   Object type
                 -   Owner
                 -   Information field

                 CC

                 -   Complete
                 -   Output buffer unavailable











                     FIGURE 4.2.2.1-6



4.2.2.1.6    I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲

         Initialize module consists of functions to initialize
         and maintain data structures.

         The only output from this function is completion code.

         Initialize is broken down in figure 4.2.2.1-6.



4.2.2.1.6.1 I̲n̲i̲t̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲Q̲u̲e̲u̲e̲

         The queue descriptions are initiated. Only SSC is allowed
         to use this function.

         Input:  Initialize data

         Output: CC

                 -   Function Complete



4.2.2.1.6.2 S̲e̲t̲ ̲C̲a̲p̲a̲b̲i̲l̲i̲t̲i̲e̲s̲

         The Main queue referred by a queue capability is changed.

         Only SSC is allowed to use this function.

         Input:  Subprocess ID

                 -   The identification of the Subprocess using
                     actual capability array.

                 -   Queue Capability

                 -   Capability index

                 Main queue

                 New Main Queue reference



                 Functions

                 -   New functions the subprocess is allowed
                     to perform on this queue.

         Output: CC

                 -   Function complete
                 -   Unknown capability



4.2.2.1.6.3  S̲e̲t̲ ̲Q̲u̲e̲u̲e̲ ̲T̲h̲r̲e̲s̲h̲o̲l̲d̲

         The threshold values of a main queue are changed as
         specified.

         Input:  Main Queue Reference

                 Threshold Values

         Output: CC
















                     Figure 4.2.2.1-7



4.2.2.1.7    I̲n̲t̲e̲r̲n̲a̲l̲ ̲Q̲M̲O̲N̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲s̲

         The internal functions are only called by QMON or other
         CSF functions. They are not called directly from the
         applications.



4.2.2.1.7.1 C̲h̲e̲c̲k̲ ̲C̲a̲p̲a̲b̲i̲l̲i̲t̲y̲

         A callers capability is checked. If capability is accepted
         capability index is converted to main queue index.
         From the capability array the functions are read, which
         the caller may use at this queue.

         Input:  Cap ind, Sub queue ind

         Output: Main queue, Sub queue

                 Functions

                 -   The functions which the caller is allowed
                     to use on this queue.



4.2.2.1.7.2 I̲n̲s̲p̲e̲c̲t̲ ̲Q̲u̲e̲u̲e̲

         If inspected queue is empty nothing is done.

         If the queue is not empty the first QEL in it is marked
         as owned by caller and the QEL reference is put into
         a SOCB.

         The queue length is decreased by one and SOCB is set
         to "done".

         Input:  Main queue, Subqueue

                 -   Queue reference

         Output in SOCB:

                 QEL





4.2.2.1.7.3 R̲e̲m̲o̲v̲e̲ ̲Q̲E̲L̲

         The QEL is chained out of the queue where it resides
         and QID is cleared.



4.2.2.1.7.4 P̲u̲t̲ ̲Q̲E̲L̲

         The QEL is chained in the tail of specified queue and
         queue length is increased by one.

         QID in QEL is updated and time stamp is set to current
         time.



4.2.2.1.7.5 S̲i̲g̲n̲a̲l̲ ̲S̲y̲n̲c̲h̲ ̲E̲l̲e̲m̲e̲n̲t̲

         This function is used to signal synchronization element
         associated with queues. Cf. section 4.1.1.2.6.

         When the Send and Return functions discover that the
         destination queue is empty, they send an info element
         to the CSF Process QMON Synchronization Element. The
         info block identifies a main queue.

         The QMON coroutine receives the info. It uses an internal
         table to identify one or more synchronization elements
         associated with the main queue. These synchronization
         elements are signalled.



4.2.2.1.7.6 C̲o̲m̲p̲a̲r̲e̲ ̲P̲r̲o̲f̲i̲l̲e̲

         Two profiles are compared and the result tells whether
         the first profile is higher than the second or not:

         Input:  First Profile

                 Second Profile

         Output: Boolean





4.2.2.1.7.7 C̲o̲p̲y̲ ̲Q̲E̲L̲

         A free buffer of the type used as QEL is allocated
         and the relevant attributes are copied into it from
         another QEL.

         The other QEL may be an existing QEL or a record of
         the same structure as a QEL.

         If the object referred by an existing QEL was a CIF
         or a buffer object server is activated.

         Input:  QEL

                 reference to QEL or a record of QEL structure

         Output: QEL

                 reference to the new QEL.



4.2.2.1.7.8 C̲r̲e̲a̲t̲e̲ ̲Q̲E̲L̲

         All input parameters are read from a record of the
         same type as a QEL Owners Capability to the destination
         queue read from QID field is checked. QID field is
         updated with converted QID.

         If the QEL profile allows the QEL to be sent to destination
         queue a QEL is allocated and the QEL record is copied
         into it.

         It is checked whether owner has a profile which allows
         him to use the QEL as a reference to an object and
         function field is updated. The QEL is put into the
         destination without queue length being changed. The
         QEL is time stamped and delivered to caller.

         Input:  QEL

                 Reference to a record of QEL type

         Output: QEL

                 Reference to a QEL



                 CC

                 -   Complete

                 -   No capability

                 -   QEL must not be sent to queue

                 -   QEL has higher priority than caller



4.2.2.1.7.9 R̲e̲-̲I̲n̲s̲e̲r̲t̲ ̲I̲n̲ ̲Q̲u̲e̲u̲e̲

         A QEL is generated and inserted in the queue specified
         in input data. The input is a complete copy of the
         data contained in a QEL when it resides in a queue.

         The QEL is put back in the queue in the position according
         to its time stamp. The function is called by Message
         Monitor during recovery.

         Input:  QEL

                 A copy of the data in a QEL

         Output: CC

                 -   Function Complete