[PEN_CHECKING_STYLE(NONE)] MODULE PASCAL$PPL_ROUTINES; { © Copyright 2005 Hewlett-Packard Development Company, L.P. } { } { Confidential computer software. Valid license from HP and/or } { its subsidiaries required for possession, use, or copying. } { } { Consistent with FAR 12.211 and 12.212, Commercial Computer Software, } { Computer Software Documentation, and Technical Data for Commercial } { Items are licensed to the U.S. Government under vendor's standard } { commercial license. } { } { Neither HP nor any of its subsidiaries shall be liable for technical } { or editorial errors or omissions contained herein. The information } { in this document is provided "as is" without warranty of any kind and } { is subject to change without notice. The warranties for HP products } { are set forth in the express limited warranty statements accompanying } { such products. Nothing herein should be construed as constituting an } { additional warranty. } { } [HIDDEN] TYPE (**** Pre-declared data types ****) $BYTE = [BYTE] -128..127; $WORD = [WORD] -32768..32767; $QUAD = [QUAD,UNSAFE] RECORD L0:UNSIGNED; L1:INTEGER; END; $OCTA = [OCTA,UNSAFE] RECORD L0,L1,L2:UNSIGNED; L3:INTEGER; END; $UBYTE = [BYTE] 0..255; $UWORD = [WORD] 0..65535; $UQUAD = [QUAD,UNSAFE] RECORD L0,L1:UNSIGNED; END; $UOCTA = [OCTA,UNSAFE] RECORD L0,L1,L2,L3:UNSIGNED; END; $PACKED_DEC = [BIT(4),UNSAFE] 0..15; $DEFTYP = [UNSAFE] INTEGER; $DEFPTR = [UNSAFE] ^$DEFTYP; $BOOL = [BIT(1),UNSAFE] BOOLEAN; $BIT = [BIT(1),UNSAFE] BOOLEAN; $BIT2 = [BIT(2),UNSAFE] 0..3; $BIT3 = [BIT(3),UNSAFE] 0..7; $BIT4 = [BIT(4),UNSAFE] 0..15; $BIT5 = [BIT(5),UNSAFE] 0..31; $BIT6 = [BIT(6),UNSAFE] 0..63; $BIT7 = [BIT(7),UNSAFE] 0..127; $BIT8 = [BIT(8),UNSAFE] 0..255; $BIT9 = [BIT(9),UNSAFE] 0..511; $BIT10 = [BIT(10),UNSAFE] 0..1023; $BIT11 = [BIT(11),UNSAFE] 0..2047; $BIT12 = [BIT(12),UNSAFE] 0..4095; $BIT13 = [BIT(13),UNSAFE] 0..8191; $BIT14 = [BIT(14),UNSAFE] 0..16383; $BIT15 = [BIT(15),UNSAFE] 0..32767; $BIT16 = [BIT(16),UNSAFE] 0..65535; $BIT17 = [BIT(17),UNSAFE] 0..131071; $BIT18 = [BIT(18),UNSAFE] 0..262143; $BIT19 = [BIT(19),UNSAFE] 0..524287; $BIT20 = [BIT(20),UNSAFE] 0..1048575; $BIT21 = [BIT(21),UNSAFE] 0..2097151; $BIT22 = [BIT(22),UNSAFE] 0..4194303; $BIT23 = [BIT(23),UNSAFE] 0..8388607; $BIT24 = [BIT(24),UNSAFE] 0..16777215; $BIT25 = [BIT(25),UNSAFE] 0..33554431; $BIT26 = [BIT(26),UNSAFE] 0..67108863; $BIT27 = [BIT(27),UNSAFE] 0..134217727; $BIT28 = [BIT(28),UNSAFE] 0..268435455; $BIT29 = [BIT(29),UNSAFE] 0..536870911; $BIT30 = [BIT(30),UNSAFE] 0..1073741823; $BIT31 = [BIT(31),UNSAFE] 0..2147483647; $BIT32 = [BIT(32),UNSAFE] UNSIGNED; (* MODULE PPL$DEF ; *) (* [HIDDEN] TYPE (**** Pre-declared data types ***?? *) (* $BYTE = [BYTE] -128..127; *) (* $WORD = [WORD] -32768..32767; *) (* $QUAD = [QUAD,UNSAFE] RECORD *) (* L0:UNSIGNED; L1:INTEGER; END; *) (* $OCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2:UNSIGNED; L3:INTEGER; END; *) (* $UBYTE = [BYTE] 0..255; *) (* $UWORD = [WORD] 0..65535; *) (* $UQUAD = [QUAD,UNSAFE] RECORD *) (* L0,L1:UNSIGNED; END; *) (* $UOCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2,L3:UNSIGNED; END; *) (* $UOCTAQUAD = [OCTA(2),UNSAFE] RECORD *) (* L0,L1,L2,L3,L4,L5,L6,L7:UNSIGNED; END; *) (* $PACKED_DEC = [BIT(4),UNSAFE] 0..15; *) (* $DEFTYP = [UNSAFE] INTEGER; *) (* $DEFPTR = [UNSAFE] ^$DEFTYP; *) (* $BOOL = [BIT(1),UNSAFE] BOOLEAN; *) (* $BIT2 = [BIT(2),UNSAFE] 0..3; *) (* $BIT3 = [BIT(3),UNSAFE] 0..7; *) (* $BIT4 = [BIT(4),UNSAFE] 0..15; *) (* $BIT5 = [BIT(5),UNSAFE] 0..31; *) (* $BIT6 = [BIT(6),UNSAFE] 0..63; *) (* $BIT7 = [BIT(7),UNSAFE] 0..127; *) (* $BIT8 = [BIT(8),UNSAFE] 0..255; *) (* $BIT9 = [BIT(9),UNSAFE] 0..511; *) (* $BIT10 = [BIT(10),UNSAFE] 0..1023; *) (* $BIT11 = [BIT(11),UNSAFE] 0..2047; *) (* $BIT12 = [BIT(12),UNSAFE] 0..4095; *) (* $BIT13 = [BIT(13),UNSAFE] 0..8191; *) (* $BIT14 = [BIT(14),UNSAFE] 0..16383; *) (* $BIT15 = [BIT(15),UNSAFE] 0..32767; *) (* $BIT16 = [BIT(16),UNSAFE] 0..65535; *) (* $BIT17 = [BIT(17),UNSAFE] 0..131071; *) (* $BIT18 = [BIT(18),UNSAFE] 0..262143; *) (* $BIT19 = [BIT(19),UNSAFE] 0..524287; *) (* $BIT20 = [BIT(20),UNSAFE] 0..1048575; *) (* $BIT21 = [BIT(21),UNSAFE] 0..2097151; *) (* $BIT22 = [BIT(22),UNSAFE] 0..4194303; *) (* $BIT23 = [BIT(23),UNSAFE] 0..8388607; *) (* $BIT24 = [BIT(24),UNSAFE] 0..16777215; *) (* $BIT25 = [BIT(25),UNSAFE] 0..33554431; *) (* $BIT26 = [BIT(26),UNSAFE] 0..67108863; *) (* $BIT27 = [BIT(27),UNSAFE] 0..134217727; *) (* $BIT28 = [BIT(28),UNSAFE] 0..268435455; *) (* $BIT29 = [BIT(29),UNSAFE] 0..536870911; *) (* $BIT30 = [BIT(30),UNSAFE] 0..1073741823; *) (* $BIT31 = [BIT(31),UNSAFE] 0..2147483647; *) (* $BIT32 = [BIT(32),UNSAFE] UNSIGNED; *) (*** MODULE PPL$DEF ***) (* Definitions for RTL Parallel Processing Facility - PPL *) (* *) (* Pre-defined event ids. *) (* *) CONST PPL$K_ABNORMAL_EXIT = -2; (* abnormal participant termination *) PPL$K_NORMAL_EXIT = -1; (* normal participant termination *) (* *) (* Shared memory options flags. *) (* *) CONST PPL$M_NOZERO = 1; PPL$M_NOWRT = 2; PPL$M_FLUSH = 4; PPL$M_NOUNI = 8; PPL$m_mopt_spare = -16; TYPE mem_options$TYPE = RECORD PPL$V_NOZERO : [POS(0)] $BOOL; (* not demand-zero *) PPL$V_NOWRT : [POS(1)] $BOOL; (* read-only *) PPL$V_FLUSH : [POS(2)] $BOOL; (* write to disk *) PPL$V_NOUNI : [POS(3)] $BOOL; (* non-unique name not requested *) PPL$v_mopt_spare : [POS(4)] $BIT28; (* extra bits *) END; (* *) (* Processing options flags. *) (* *) CONST PPL$M_INIT_SYNCH = 1; PPL$M_NODEBUG = 2; PPL$M_STOP_CHILDREN = 4; PPL$M_NON_BLOCKING = 8; PPL$M_NOTIFY_ONE = 16; PPL$M_SPIN_WAIT = 32; PPL$M_FORMONLY = 64; PPL$M_JOINONLY = 128; PPL$M_PERM = 256; PPL$M_SYSTEM = 512; PPL$M_DELETEALL = 1024; PPL$M_TAILFIRST = 2048; PPL$M_ATHEAD = 4096; PPL$M_FROMTAIL = 8192; PPL$M_FORCEDEL = 16384; PPL$M_NOCLISYM = 32768; PPL$M_NOLOGNAM = 65536; PPL$M_NOKEYPAD = 131072; PPL$M_NOTIFY = 262144; PPL$M_NOCONTROL = 524288; PPL$M_CALL_UNIQUE = 1048576; PPL$M_PROC_UNIQUE = 2097152; PPL$M_SPIN_COUNTED = 4194304; PPL$M_NOSAVE_PROC_INFO = 8388608; PPL$M_IGNORE_EXITS = 16777216; PPL$m_popt_spare = -33554432; TYPE proc_options$TYPE = RECORD PPL$V_INIT_SYNCH : [POS(0)] $BOOL; (* parent blocks until children init *) PPL$V_NODEBUG : [POS(1)] $BOOL; (* disable DEBUG *) PPL$V_STOP_CHILDREN : [POS(2)] $BOOL; (* stop children of terminating process *) PPL$V_NON_BLOCKING : [POS(3)] $BOOL; (* don't block if semaphore unavailable *) PPL$V_NOTIFY_ONE : [POS(4)] $BOOL; (* notify only one enabler for event *) PPL$V_SPIN_WAIT : [POS(5)] $BOOL; (* spin rather than $HIBER *) PPL$V_FORMONLY : [POS(6)] $BOOL; (* Only form (do not join) a new appl. *) PPL$V_JOINONLY : [POS(7)] $BOOL; (* Only join (do not form) a new appl. *) PPL$V_PERM : [POS(8)] $BOOL; (* Create a permanent application *) PPL$V_SYSTEM : [POS(9)] $BOOL; (* Create a system-wide application *) PPL$V_DELETEALL : [POS(10)] $BOOL; (* Delete all corresponding work items *) PPL$V_TAILFIRST : [POS(11)] $BOOL; (* Delete from tail of queue *) PPL$V_ATHEAD : [POS(12)] $BOOL; (* Insert at the head of queue *) PPL$V_FROMTAIL : [POS(13)] $BOOL; (* Remove from tail of queue *) PPL$V_FORCEDEL : [POS(14)] $BOOL; (* Force deletion of work queue *) PPL$V_NOCLISYM : [POS(15)] $BOOL; (* Do not inherit parent's CLI symbols *) PPL$V_NOLOGNAM : [POS(16)] $BOOL; (* Do not inherit parent's logicals *) PPL$V_NOKEYPAD : [POS(17)] $BOOL; (* Inherit parent's keypad state & defs *) PPL$V_NOTIFY : [POS(18)] $BOOL; (* Broadcast message on child terminate *) PPL$V_NOCONTROL : [POS(19)] $BOOL; (* No carriage control prefix on prompt *) PPL$V_CALL_UNIQUE : [POS(20)] $BOOL; (* Request call unique name *) PPL$V_PROC_UNIQUE : [POS(21)] $BOOL; (* Request process unique name *) PPL$V_SPIN_COUNTED : [POS(22)] $BOOL; (* Spin for counted period before hiber *) PPL$V_NOSAVE_PROC_INFO : [POS(23)] $BOOL; PPL$V_IGNORE_EXITS : [POS(24)] $BOOL; PPL$v_popt_spare : [POS(25)] $BIT7; (* extra bits *) END; (* END. *) (* MODULE PPL$ROUTINES ; *) (* [HIDDEN] TYPE (**** Pre-declared data types ***?? *) (* $BYTE = [BYTE] -128..127; *) (* $WORD = [WORD] -32768..32767; *) (* $QUAD = [QUAD,UNSAFE] RECORD *) (* L0:UNSIGNED; L1:INTEGER; END; *) (* $OCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2:UNSIGNED; L3:INTEGER; END; *) (* $UBYTE = [BYTE] 0..255; *) (* $UWORD = [WORD] 0..65535; *) (* $UQUAD = [QUAD,UNSAFE] RECORD *) (* L0,L1:UNSIGNED; END; *) (* $UOCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2,L3:UNSIGNED; END; *) (* $UOCTAQUAD = [OCTA(2),UNSAFE] RECORD *) (* L0,L1,L2,L3,L4,L5,L6,L7:UNSIGNED; END; *) (* $PACKED_DEC = [BIT(4),UNSAFE] 0..15; *) (* $DEFTYP = [UNSAFE] INTEGER; *) (* $DEFPTR = [UNSAFE] ^$DEFTYP; *) (* $BOOL = [BIT(1),UNSAFE] BOOLEAN; *) (* $BIT2 = [BIT(2),UNSAFE] 0..3; *) (* $BIT3 = [BIT(3),UNSAFE] 0..7; *) (* $BIT4 = [BIT(4),UNSAFE] 0..15; *) (* $BIT5 = [BIT(5),UNSAFE] 0..31; *) (* $BIT6 = [BIT(6),UNSAFE] 0..63; *) (* $BIT7 = [BIT(7),UNSAFE] 0..127; *) (* $BIT8 = [BIT(8),UNSAFE] 0..255; *) (* $BIT9 = [BIT(9),UNSAFE] 0..511; *) (* $BIT10 = [BIT(10),UNSAFE] 0..1023; *) (* $BIT11 = [BIT(11),UNSAFE] 0..2047; *) (* $BIT12 = [BIT(12),UNSAFE] 0..4095; *) (* $BIT13 = [BIT(13),UNSAFE] 0..8191; *) (* $BIT14 = [BIT(14),UNSAFE] 0..16383; *) (* $BIT15 = [BIT(15),UNSAFE] 0..32767; *) (* $BIT16 = [BIT(16),UNSAFE] 0..65535; *) (* $BIT17 = [BIT(17),UNSAFE] 0..131071; *) (* $BIT18 = [BIT(18),UNSAFE] 0..262143; *) (* $BIT19 = [BIT(19),UNSAFE] 0..524287; *) (* $BIT20 = [BIT(20),UNSAFE] 0..1048575; *) (* $BIT21 = [BIT(21),UNSAFE] 0..2097151; *) (* $BIT22 = [BIT(22),UNSAFE] 0..4194303; *) (* $BIT23 = [BIT(23),UNSAFE] 0..8388607; *) (* $BIT24 = [BIT(24),UNSAFE] 0..16777215; *) (* $BIT25 = [BIT(25),UNSAFE] 0..33554431; *) (* $BIT26 = [BIT(26),UNSAFE] 0..67108863; *) (* $BIT27 = [BIT(27),UNSAFE] 0..134217727; *) (* $BIT28 = [BIT(28),UNSAFE] 0..268435455; *) (* $BIT29 = [BIT(29),UNSAFE] 0..536870911; *) (* $BIT30 = [BIT(30),UNSAFE] 0..1073741823; *) (* $BIT31 = [BIT(31),UNSAFE] 0..2147483647; *) (* $BIT32 = [BIT(32),UNSAFE] UNSIGNED; *) (*** MODULE ppl$routines ***) (**************************************************************************** *) (* * *) (* COPYRIGHT (c) 1988 BY * *) (* DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. * *) (* ALL RIGHTS RESERVED. * *) (* * *) (* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * *) (* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * *) (* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * *) (* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * *) (* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * *) (* TRANSFERRED. * *) (* * *) (* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * *) (* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * *) (* CORPORATION. * *) (* * *) (* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * *) (* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * *) (* * *) (* * *) (**************************************************************************** *) (* PPL$ADJUST_SEMAPHORE_MAXIMUM *) (* *) (* Adjust a Semaphore Maximum *) (* *) (* The Adjust a Semaphore Maximum routine increments or decrements the maximum *) (* associated with a semaphore. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$adjust_semaphore_maximum ( semaphore_id : UNSIGNED; amount : $WORD) : INTEGER; EXTERNAL; (* PPL$ADJUST_QUORUM *) (* *) (* Adjust Barrier Quorum *) (* *) (* The Adjust Barrier Quorum routine increments or decrements the quorum *) (* associated with a barrier. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$adjust_quorum ( barrier_id : UNSIGNED; amount : $WORD) : INTEGER; EXTERNAL; (* PPL$AWAIT_EVENT *) (* *) (* Await Event Occurrence *) (* *) (* The Await Event Occurrence routine blocks the caller until an event *) (* occurs. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$await_event ( event_id : UNSIGNED; VAR output : [VOLATILE] UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_APPLICATION *) (* *) (* Form or Join a PPL$ Application *) (* *) (* The Form or Join a PPL$ Application routine informs the PPL$ facility *) (* that the calling process is forming or joining a parallel application. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_application ( size : UNSIGNED := %IMMED 0; application_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0; protection : UNSIGNED := %IMMED 0; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_BARRIER *) (* *) (* Create a Barrier *) (* *) (* The Create a Barrier routine creates and initializes a *) (* barrier, and returns the barrier identifier. *) (* You use the barrier identifier to perform all operations on that *) (* barrier. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_barrier ( VAR barrier_id : [VOLATILE] UNSIGNED; barrier_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0; quorum : $WORD := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_EVENT *) (* *) (* Create an Event *) (* *) (* The Create an Event routine creates an arbitrary user-defined event *) (* and returns the event identifier. You use the event identifier to *) (* perform all operations on that event. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_event ( VAR event_id : [VOLATILE] UNSIGNED; event_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_SPIN_LOCK *) (* *) (* Create Spin Lock *) (* *) (* The Create Spin Lock routine creates and initializes a simple (spin) *) (* lock, and returns the lock identifier. You use that lock identifier to *) (* get and free the lock. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_spin_lock ( VAR lock_id : [VOLATILE] UNSIGNED; lock_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_SHARED_MEMORY *) (* *) (* Create Shared Memory *) (* *) (* The Create Shared Memory routine creates (if necessary) and maps a *) (* section of memory that can be shared by multiple processes. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_shared_memory ( section_name : [CLASS_S] PACKED ARRAY [$l1..$u1:INTEGER] OF CHAR; %REF memory_area : [VOLATILE] ARRAY [$l2..$u2:INTEGER] OF UNSIGNED; flags : UNSIGNED := %IMMED 0; file_name : [CLASS_S] PACKED ARRAY [$l4..$u4:INTEGER] OF CHAR := %IMMED 0; protection : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_WORK_QUEUE *) (* *) (* Create a Work Queue *) (* *) (* The Create a Work Queue routine creates and initializes a work queue, and *) (* returns the work queue identifier. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_work_queue ( VAR queue_id : [VOLATILE] UNSIGNED; queue_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_SEMAPHORE *) (* *) (* Create a Semaphore *) (* *) (* The Create a Semaphore routine creates and initializes a *) (* semaphore with a waiting queue, and returns the semaphore identifier. *) (* You use the semaphore identifier to perform all operations on that *) (* semaphore. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_semaphore ( VAR semaphore_id : [VOLATILE] UNSIGNED; semaphore_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0; semaphore_maximum : $WORD := %IMMED 0; semaphore_initial : $WORD := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$CREATE_VM_ZONE *) (* *) (* Create a New Virtual Memory Zone *) (* *) (* The Create a New Virtual Memory Zone routine creates a new storage *) (* zone, according to specified arguments, which is available to all *) (* participants in the application. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$create_vm_zone ( VAR zone_id : [VOLATILE] UNSIGNED; algorithm : INTEGER := %IMMED 0; algorithm_argument : INTEGER := %IMMED 0; flags : UNSIGNED := %IMMED 0; extend_size : INTEGER := %IMMED 0; initial_size : INTEGER := %IMMED 0; block_size : INTEGER := %IMMED 0; alignment : INTEGER := %IMMED 0; page_limit : INTEGER := %IMMED 0; smallest_block_size : INTEGER := %IMMED 0; zone_name : [CLASS_S] PACKED ARRAY [$l11..$u11:INTEGER] OF CHAR := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$DELETE_APPLICATION *) (* *) (* Delete a PPL$ Application *) (* *) (* The Delete a PPL$ Application routine marks all shared memory for *) (* deletion and prevents additional processes from joining the application. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$delete_application : INTEGER; EXTERNAL; (* PPL$DECREMENT_SEMAPHORE *) (* *) (* Decrement a Semaphore *) (* *) (* The Decrement a Semaphore routine waits for a semaphore to have a *) (* value greater than 0, then decrements the value *) (* by 1 to indicate the allocation of a resource. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$decrement_semaphore ( semaphore_id : UNSIGNED; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$DISABLE_EVENT *) (* *) (* Disable Asynchronous Notification of an Event *) (* *) (* The Disable Asynchronous Notification of an Event routine disables delivery to a *) (* process of notification of an event by either AST or signal. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$disable_event ( event_id : UNSIGNED) : INTEGER; EXTERNAL; (* PPL$DELETE_WORK_ITEM *) (* *) (* Delete a Work Queue Item *) (* *) (* The Delete a Work Queue Item routine deletes a work item from a work *) (* queue. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$delete_work_item ( queue_id : UNSIGNED; %IMMED work_item : UNSIGNED; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$DELETE_SHARED_MEMORY *) (* *) (* Delete Shared Memory *) (* *) (* The Delete Shared Memory routine deletes or unmaps from a global *) (* section that you created using the PPL$CREATE_SHARED_MEMORY routine. *) (* Optionally, this routine writes the contents of the global section to *) (* disk before deleting the section. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$delete_shared_memory ( section_name : [CLASS_S] PACKED ARRAY [$l1..$u1:INTEGER] OF CHAR; %REF memory_area : ARRAY [$l2..$u2:INTEGER] OF UNSIGNED := %IMMED 0; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$DELETE_WORK_QUEUE *) (* *) (* Delete a Work Queue *) (* *) (* The Delete a Work Queue routine deletes the specified work queue, and releases *) (* any storage associated with it. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$delete_work_queue ( queue_id : UNSIGNED := %IMMED 0; queue_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$ENABLE_EVENT_AST *) (* *) (* Enable AST Notification of an Event *) (* *) (* The Enable AST Notification of an Event routine specifies the address of *) (* an AST routine (and optionally an argument to that routine) to be delivered *) (* when an event occurs. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$enable_event_ast ( event_id : UNSIGNED; %IMMED [UNBOUND, ASYNCHRONOUS] PROCEDURE astadr; %IMMED astprm : [UNSAFE] INTEGER := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$ENABLE_EVENT_SIGNAL *) (* *) (* Enable Signal Notification of an Event *) (* *) (* The Enable Signal Notification of an Event routine specifies a *) (* condition value to be signaled when the event occurs. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$enable_event_signal ( event_id : UNSIGNED; %IMMED signal_value : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$FLUSH_SHARED_MEMORY *) (* *) (* Flush Shared Memory *) (* *) (* The Flush Shared Memory routine writes (flushes) to disk the contents *) (* of a global section that you created using the PPL$CREATE_SHARED_MEMORY *) (* routine. Only pages that have been modified are flushed to disk. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$flush_shared_memory ( section_name : [CLASS_S] PACKED ARRAY [$l1..$u1:INTEGER] OF CHAR; %REF memory_area : ARRAY [$l2..$u2:INTEGER] OF UNSIGNED := %IMMED 0; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$FIND_OBJECT_ID *) (* *) (* Find Object Identification *) (* *) (* Given the name of a spin lock, semaphore, barrier, event, work queue, *) (* or shared memory zone, the Find Object Identification routine returns *) (* the identifier of the object associated with the name you specify. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$find_object_id ( VAR object_id : [VOLATILE] UNSIGNED; object_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR) : INTEGER; EXTERNAL; (* PPL$FIND_SYNCH_ELEMENT_ID *) (* *) (* Find *) (* *) (* Given the name of a spin lock, semaphore, barrier, or event, the *) (* Find Synchronization Element Identification routine returns the *) (* identifier of the associated synchronization element. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$find_synch_element_id ( VAR element_id : [VOLATILE] UNSIGNED; element_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR) : INTEGER; EXTERNAL; (* PPL$GET_INDEX *) (* *) (* Get Index of a Participant *) (* *) (* The Get Index of a Participant routine returns an index that is unique *) (* within the application. A value of zero signifies the participant that *) (* formed the application. The other participants in the application *) (* always return an index greater than zero. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$get_index ( VAR participant_index : [VOLATILE] UNSIGNED) : INTEGER; EXTERNAL; (* PPL$INSERT_WORK_ITEM *) (* *) (* Insert a Work Queue Item *) (* *) (* The Insert a Work Queue Item routine inserts a work item into the specified work *) (* queue. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$insert_work_item ( queue_id : UNSIGNED; %IMMED work_item : UNSIGNED; flags : UNSIGNED := %IMMED 0; priority : INTEGER := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$INCREMENT_SEMAPHORE *) (* *) (* Increment a Semaphore *) (* *) (* The Increment a Semaphore routine increments the value of the semaphore *) (* by 1, analogous to the signal protocol. If any other participants *) (* are blocked on a call to PPL$DECREMENT_SEMAPHORE for this semaphore, *) (* one is removed from the queue and awakened. *) (* The semaphore must have been created by PPL$CREATE_SEMAPHORE. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$increment_semaphore ( semaphore_id : UNSIGNED) : INTEGER; EXTERNAL; (* PPL$INDEX_TO_PID *) (* *) (* Convert Participant Index to VMS PID *) (* *) (* The Convert Participant Index to VMS PID routine returns the VMS PID *) (* of the process associated with the specified index. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$index_to_pid ( participant_index : UNSIGNED; VAR pid : [VOLATILE] UNSIGNED) : INTEGER; EXTERNAL; (* PPL$INITIALIZE *) (* *) (* Initialize the PPL$ Facility *) (* *) (* The Initialize the PPL$ Facility routine informs the PPL$ facility that the *) (* caller is forming or joining the parallel application. Calling this *) (* routine is optional, because PPL$ initializes itself at the *) (* first call to a PPL$ routine. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$initialize ( size : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$PID_TO_INDEX *) (* *) (* Convert VMS PID to Participant Index *) (* *) (* The Convert VMS PID to Participant Index routine returns the PPL$-defined *) (* participant index of the process associated with the *) (* specified VMS PID. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$pid_to_index ( pid : UNSIGNED; VAR participant_index : [VOLATILE] UNSIGNED) : INTEGER; EXTERNAL; (* PPL$READ_BARRIER *) (* *) (* Read a Barrier *) (* *) (* The Read a Barrier routine returns the specified barrier's current quorum and *) (* the number of participants currently waiting (blocked) at the barrier. The *) (* barrier must have been created by PPL$CREATE_BARRIER. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$read_barrier ( barrier_id : UNSIGNED; VAR quorum : [VOLATILE] $WORD; VAR waiters : [VOLATILE] $WORD) : INTEGER; EXTERNAL; (* PPL$READ_EVENT *) (* *) (* Read an Event State *) (* *) (* The Read an Event State routine returns the current state of the specified *) (* event. *) (* The state can be not_occurred or not_occurred. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$read_event ( event_id : UNSIGNED; VAR occurred : [VOLATILE] UNSIGNED) : INTEGER; EXTERNAL; (* PPL$READ_SEMAPHORE *) (* *) (* Read Semaphore Values *) (* *) (* The Read Semaphore Values routine returns the current or *) (* maximum values, or both, of the specified counting semaphore. *) (* The semaphore must have been created by *) (* PPL$CREATE_SEMAPHORE. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$read_semaphore ( semaphore_id : UNSIGNED; VAR semaphore_value : [VOLATILE] $WORD := %IMMED 0; VAR semaphore_maximum : [VOLATILE] $WORD := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$RELEASE_SPIN_LOCK *) (* *) (* Release Spin Lock *) (* *) (* The Release Spin Lock routine relinquishes the spin lock by clearing the *) (* bit representing the lock. The lock must have been created by *) (* PPL$CREATE_SPIN_LOCK. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$release_spin_lock ( lock_id : UNSIGNED) : INTEGER; EXTERNAL; (* PPL$RESET_EVENT *) (* *) (* Reset an Event *) (* *) (* The Reset an Event routine resets an event's state to *) (* not_occurred. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$reset_event ( event_id : UNSIGNED) : INTEGER; EXTERNAL; (* PPL$REMOVE_WORK_ITEM *) (* *) (* Remove a Work Queue Item *) (* *) (* The Remove a Work Queue Item routine removes the next item in order from a work *) (* queue. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$remove_work_item ( queue_id : UNSIGNED; VAR work_item : [VOLATILE] UNSIGNED; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$READ_SPIN_LOCK *) (* *) (* Read a Spin Lock State *) (* *) (* The Read a Spin Lock State routine returns the current state of a spin *) (* lock. The state can be not_seized or not_seized. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$read_spin_lock ( lock_id : UNSIGNED; VAR seized : [VOLATILE] UNSIGNED) : INTEGER; EXTERNAL; (* PPL$READ_WORK_QUEUE *) (* *) (* Read a Work Queue *) (* *) (* The Read a Work Queue routine returns information about a work queue. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$read_work_queue ( queue_id : UNSIGNED; VAR queue_value : [VOLATILE] INTEGER := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$SET_SEMAPHORE_MAXIMUM *) (* *) (* Set a Semaphore Maximum *) (* *) (* The Set a Semaphore Maximum routine dynamically sets the maximum value of a *) (* semaphore. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$set_semaphore_maximum ( semaphore_id : UNSIGNED; semaphore_maximum : $WORD) : INTEGER; EXTERNAL; (* PPL$SPAWN *) (* *) (* Initiate Parallel Execution *) (* *) (* The Initiate Parallel Execution routine executes code in parallel *) (* with the caller by creating one or more subordinate threads of execution *) (* (VMS subprocesses). *) (* *) [ASYNCHRONOUS] FUNCTION ppl$spawn ( VAR copies : [VOLATILE] UNSIGNED; program_name : [CLASS_S] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR := %IMMED 0; %REF children_ids : [VOLATILE] ARRAY [$l3..$u3:INTEGER] OF UNSIGNED := %IMMED 0; flags : UNSIGNED := %IMMED 0; std_input_file : [CLASS_S] PACKED ARRAY [$l5..$u5:INTEGER] OF CHAR := %IMMED 0; std_output_file : [CLASS_S] PACKED ARRAY [$l6..$u6:INTEGER] OF CHAR := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$SET_QUORUM *) (* *) (* Set Barrier Quorum *) (* *) (* The Set Barrier Quorum routine dynamically sets a value for the *) (* specified barrier's quorum. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$set_quorum ( barrier_id : UNSIGNED; quorum : $WORD) : INTEGER; EXTERNAL; (* PPL$STOP *) (* *) (* Stop a Participant *) (* *) (* The Stop a Participant routine terminates the execution of the specified *) (* participant in this application. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$stop ( participant_index : UNSIGNED) : INTEGER; EXTERNAL; (* PPL$SEIZE_SPIN_LOCK *) (* *) (* Seize Spin Lock *) (* *) (* The Seize Spin Lock routine retrieves a simple (spin) lock by waiting in a *) (* spin loop until the lock is free. The lock must have been created by *) (* PPL$CREATE_SPIN_LOCK.…/* *) (* *) [ASYNCHRONOUS] FUNCTION ppl$seize_spin_lock ( lock_id : UNSIGNED; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$TERMINATE *) (* *) (* Abort PPL$ Participation *) (* *) (* The Abort PPL$ Participation routine ends the caller's *) (* participation in the application prematurely---that is, at some time *) (* before the caller actually completes its execution. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$terminate ( flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$TRIGGER_EVENT *) (* *) (* Trigger an Event *) (* *) (* The Trigger an Event routine causes the event's state to become *) (* occurred. You control whether all pending actions for *) (* the event are processed (made to occur), or just one is processed. *) (* A pending action can be an AST, a signal (condition), or a wakeup. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$trigger_event ( event_id : UNSIGNED; %IMMED event_param : UNSIGNED := %IMMED 0; flags : UNSIGNED := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$UNIQUE_NAME *) (* *) (* Produce a Unique Name *) (* *) (* The Produce a Unique Name routine returns an application-unique name. *) (* A system-unique string specific to the calling application is appended *) (* to the string specified by the user. *) (* The resulting name is identical for all participants in *) (* the application, but different from those for all other applications on that *) (* system. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$unique_name ( name_string : [CLASS_S] PACKED ARRAY [$l1..$u1:INTEGER] OF CHAR; VAR resultant_string : [CLASS_S,VOLATILE] PACKED ARRAY [$l2..$u2:INTEGER] OF CHAR; VAR resultant_length : [VOLATILE] $UWORD := %IMMED 0) : INTEGER; EXTERNAL; (* PPL$WAIT_AT_BARRIER *) (* *) (* Synchronize at a Barrier *) (* *) (* The Synchronize at a Barrier routine causes the caller to *) (* wait at the specified barrier. *) (* The barrier is in effect from the time the first participant calls *) (* PPL$WAIT_AT_BARRIER until each member of the *) (* quorum has issued the call. At that time, the wait concludes and *) (* all are released for further execution. *) (* *) [ASYNCHRONOUS] FUNCTION ppl$wait_at_barrier ( barrier_id : UNSIGNED) : INTEGER; EXTERNAL; (* END. *) (* MODULE PPLMSG ; *) (* [HIDDEN] TYPE (**** Pre-declared data types ***?? *) (* $BYTE = [BYTE] -128..127; *) (* $WORD = [WORD] -32768..32767; *) (* $QUAD = [QUAD,UNSAFE] RECORD *) (* L0:UNSIGNED; L1:INTEGER; END; *) (* $OCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2:UNSIGNED; L3:INTEGER; END; *) (* $UBYTE = [BYTE] 0..255; *) (* $UWORD = [WORD] 0..65535; *) (* $UQUAD = [QUAD,UNSAFE] RECORD *) (* L0,L1:UNSIGNED; END; *) (* $UOCTA = [OCTA,UNSAFE] RECORD *) (* L0,L1,L2,L3:UNSIGNED; END; *) (* $UOCTAQUAD = [OCTA(2),UNSAFE] RECORD *) (* L0,L1,L2,L3,L4,L5,L6,L7:UNSIGNED; END; *) (* $PACKED_DEC = [BIT(4),UNSAFE] 0..15; *) (* $DEFTYP = [UNSAFE] INTEGER; *) (* $DEFPTR = [UNSAFE] ^$DEFTYP; *) (* $BOOL = [BIT(1),UNSAFE] BOOLEAN; *) (* $BIT2 = [BIT(2),UNSAFE] 0..3; *) (* $BIT3 = [BIT(3),UNSAFE] 0..7; *) (* $BIT4 = [BIT(4),UNSAFE] 0..15; *) (* $BIT5 = [BIT(5),UNSAFE] 0..31; *) (* $BIT6 = [BIT(6),UNSAFE] 0..63; *) (* $BIT7 = [BIT(7),UNSAFE] 0..127; *) (* $BIT8 = [BIT(8),UNSAFE] 0..255; *) (* $BIT9 = [BIT(9),UNSAFE] 0..511; *) (* $BIT10 = [BIT(10),UNSAFE] 0..1023; *) (* $BIT11 = [BIT(11),UNSAFE] 0..2047; *) (* $BIT12 = [BIT(12),UNSAFE] 0..4095; *) (* $BIT13 = [BIT(13),UNSAFE] 0..8191; *) (* $BIT14 = [BIT(14),UNSAFE] 0..16383; *) (* $BIT15 = [BIT(15),UNSAFE] 0..32767; *) (* $BIT16 = [BIT(16),UNSAFE] 0..65535; *) (* $BIT17 = [BIT(17),UNSAFE] 0..131071; *) (* $BIT18 = [BIT(18),UNSAFE] 0..262143; *) (* $BIT19 = [BIT(19),UNSAFE] 0..524287; *) (* $BIT20 = [BIT(20),UNSAFE] 0..1048575; *) (* $BIT21 = [BIT(21),UNSAFE] 0..2097151; *) (* $BIT22 = [BIT(22),UNSAFE] 0..4194303; *) (* $BIT23 = [BIT(23),UNSAFE] 0..8388607; *) (* $BIT24 = [BIT(24),UNSAFE] 0..16777215; *) (* $BIT25 = [BIT(25),UNSAFE] 0..33554431; *) (* $BIT26 = [BIT(26),UNSAFE] 0..67108863; *) (* $BIT27 = [BIT(27),UNSAFE] 0..134217727; *) (* $BIT28 = [BIT(28),UNSAFE] 0..268435455; *) (* $BIT29 = [BIT(29),UNSAFE] 0..536870911; *) (* $BIT30 = [BIT(30),UNSAFE] 0..1073741823; *) (* $BIT31 = [BIT(31),UNSAFE] 0..2147483647; *) (* $BIT32 = [BIT(32),UNSAFE] UNSIGNED; *) (*** MODULE $PPLDEF ***) (* *) (* This SDL File Generated by VAX-11 Message V04-00 on 30-MAR-2010 17:29:39.44 *) (* *) (* FILE: PPLMSG.MSG EDIT: CMF1004 *) (* *) (***************************************************************************** *) (** * *) (** COPYRIGHT (C) 1987 BY * *) (** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. * *) (** ALL RIGHTS RESERVED. * *) (** * *) (** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * *) (** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * *) (** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * *) (** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * *) (** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * *) (** TRANSFERRED. * *) (** * *) (** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * *) (** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * *) (** CORPORATION. * *) (** * *) (** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * *) (** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * *) (** * *) (** * *) (***************************************************************************** *) (* *) (*++ *) (* *) (* FACILITY: VAX PPL *) (* *) (* ABSTRACT: *) (* *) (* THIS FILE CONTAINS THE DEFINITION FOR THE PPL FACILITY SPECIFIC *) (* ERROR MESSAGES. THE FACILITY CODE FOR PPL IS 481. *) (* *) (* ENVIRONMENT: VAX/VMS USER MODE *) (* *) (* AUTHOR: P. GILBERT, CREATION DATE: 30-SEP-1986 *) (* *) (* MODIFIED BY: *) (* *) (* E01-001 ORIGINAL *) (* *) (* E01-002 TO ADD THE FACILITY CODE. CMF 23-JAN-1987 *) (* *) (* E01-003 TO CORRECT THE IDENT TO MATCH CMF 26-JAN-1987 *) (* THE CMS GENERATION NUMBER. *) (* *) (* E01-004 REVAMP THE FILE TO CONFORM TO CMF 28-JAN-1987 *) (* RTL STANDARDS. ( PATTERNED AFTER *) (* LIBMSG.MSG ) *) (* *) (* E01-005 TO CHANGE THE MODULE NAME FROM CMF 16-FEB-1987 *) (* PPL$MSG TO PPL$MSGDEF TO BE *) (* CONSISTENT WITH THE OTHER RTLS *) (* *) (* E01-006 TO ADD PPL$_ATTUSETWO TO INDICATE CMF 16-FEB-1987 *) (* THAT AN ATTEMPT HAS BEEN MADE TO *) (* USE TWO BARRIERS THUS RESULTING IN *) (* DEAD LOCK. *) (* *) (* E01-007 ADD MSGS FOR BARRIERS AND EVENTS, DLR 24-JUL-87 *) (* PLUS OTHER MISC UPDATES. *) (* REMOVE OLD DEAD ONES BY ! *** NOTATION. *) (* *) (* E01-008 CONFORM TO DOCUMENTATION STANDARDS. DLR 19-AUG-1987 *) (* *) (* V051-001 ADDED PPL$_NO_NEXT_PROC WWS 09-SEP-1988 *) (* *) (* V53-001 CORRECTED EVENT SIGNAL MESSAGES WWS 20-MAR-1989 *) (* *) (* V53-002 ADDED THE V5.3 MESSAGES WWS 27-MAR-1989 *) (* *) (* V57-001 ADD A SPACE TO NOONE_ENABLED TEXT PJC 22-JAN-1993 *) (* *) (* V57-002 CHANGE REFERENCE TO PPL$INITIALIZE PJC 30-AUG-1993 *) (*-- *) (*+ *) (* SYMBOLS ARE DEFINED FOLLOWING THE STANDARD FOR GLOBAL NAMES: *) (* *) (* PPL$_ABCMNOXYZ *) (* *) (* IN ADDITION, THE IBRARY STANDARDS SPECIFY THAT THE LETTERS "abc", "mno", *) (* AND "xyz" ARE THE FIRST THREE LETTERS OF THE FIRST THREE WORDS OF THE *) (* ERROR MESSAGE, NOT COUNTING ARTICLES AND PREPSITIONS. *) (* *) (* THE NAMES OF ALL PROCEDURES USING EACH ERROR CONDITION VALUE SHOULD APPEAR *) (* IN THE COMMENTS INCLUDED WITH EACH ERROR DEFINITION. *) (* *) (* *) (* *) (* MACRO-32PROGRAMMING: *) (* *) (* THE MACROS CALL: *) (* *) (* $PPLDEF *) (* *) (* WILL CAUSE ALL SYMBOLS TO BE MADE AVAILABLE TO THE MODULE. *) (* THE RUN-TIME LIBRARY DECLARES THESE SYMBOLS AS EXTERNAL; *) (* THE MACROS ARE PROVIDED ONLY FOR THE COVENIENCE OF THE USER. *) (*- *) (*+ *) (* SPECIAL NOTE: *) (* *) (* THE MESSAGES HERE SHOULD BE RESOLVED FROM STARLET.OLB. INORDER *) (* FOR THIS TO HAPPEN, SEVERAL VMS BUILD FILES NEED TO BE EDITED. *) (* THIS WILL BE DONE FOR SYS 11. NOTE THAT SEVERAL OF OUT BUILD *) (* PROCEDURES MAY NEED TO BE EDITED. PPLRTLBLD.COM TO COPY *) (* AND DELETE APPROPRIATE FILE IN APPROPRIATE PLACES. *) (* *) (* ALSO, THE FILE PPLDEF WILL NEED TO BE CHANGED TO BE NAME PPLMSGDEF *) (* TO FOLLOW THE STANDARDS OF THE OTHER ROUTINES. *) (* *) (* PPLRTLLNK.OPT MAY NEED TO BE EDITED TO GET RID OF UNIVERSAL SYMBOLD *) (* SO THAT THERE WON'T BE EXTRA BAGAGE IN THE SHAREABLE IMAGE. *) (* *) (*- *) (* ; SET LH TO 481 (DECIMAL). *) CONST PPL$_FACILITY = 481; PPL$_NORMAL = 31555585; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ALL IS WELL. *) (* USER ACTION: ENJOY YOUR SUCCESS. ALL THINGS MUST PASS. *) (*-- *) CONST PPL$_CREATED = 31555601; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ITEM WAS CREATED, AN ALTERNATE SUCCESS STATUS *) (* INDICATING THE ITEM WAS NOT JUST SUCCESSFULLY FOUND. *) (* USER ACTION: CONTINUE NORMALLY. *) (*-- *) CONST PPL$_NOONE_ENABLED = 31555609; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: EVENT TRIGGER IS SUCCESSFULLY QUEUED, AND NO ONE IS *) (* PRESENTLY ENABLED TO RECEIVE IT. THE FIRST CALLER TO *) (* ENABLE IT WILL RECEIVE IT. *) (* USER ACTION: CONTINUE NORMALLY. *) (*-- *) CONST PPL$_NOT_AVAILABLE = 31555617; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ALTERNATE SUCCESS STATUS RETURNED WHEN USER REQUESTS *) (* IMMEDIATE NON-BLOCKING ACCESS TO A RESOURCE WHICH *) (* WAS NOT AVAILABLE. *) (* USER ACTION: CONTINUE NORMALLY. *) (*-- *) CONST PPL$_CREATED_SOME = 31555625; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: SOME OF THE REQUESTED ITEMS WERE CREATED, BUT NOT ALL. *) (* USER ACTION: IF PROCESSING CAN CONTINUE WITH FEWER ITEMS THAN THOSE *) (* REQUESTED, THEN CONTINUE NORMALLY. *) (*-- *) CONST PPL$_NO_NEXT_PROC = 31555633; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* *) (* EXPLANATION: THIS CODE IS FOR INTERNAL USE ONLY AND IS RETURNED *) (* FROM THE ROUTINE, PPL$$TELL, WHEN IT IS INVOKED WITH *) (* THE TELL_K_NEXT_PROCESS FLAG AND THERE IS ONLY ONE *) (* PROCESS CURRENTLY IN THE APPLICATION. *) (* *) (* USER ACTION: NONE: THIS CODE IS FOR INTERNAL USE ONLY. *) (*-- *) CONST PPL$_DELETED = 31555641; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* *) (* EXPLANATION: THE USER REQUESTED THAT THE OBJECT BE DELETED *) (* REGARDLESS OF ITS STATE. THE DELETION WAS SUCCESSFULLY *) (* PERFORMED. *) (* *) (* USER ACTION CONTINUE NORMALLY *) (*-- *) (* ; NOTE: ERROR CODES MUST NOT OVERLAP SUCCESS CODES!!! *) (* ; SET SUB-SYSTEM SPECIFIC BIT FOR NOW. *) (* ; SET LH TO 481 (DECIMAL) *) (**** EXCQUESIZ *) (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: TOO MANY CALLERS REQUIRED QUEUING. *) (* USER ACTION: RECODE TO REDUCE NUMBER OF CALLERS ACCESSING RESOURCE. *) (*-- *) CONST PPL$_INCOMPEXI = 31556100; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ALL PPL OBJECTS MUST HAVE UNIQUE NAMES. *) (* USER ACTION: RECODE THE CALL TO SPECIFY A DIFFERENT NAME. *) (*-- *) CONST PPL$_INSVIRMEM = 31556108; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: CALLER DOES NOT HAVE SUFFICIENT AVAILABLE SPACE TO *) (* COMPLETE REQUEST. *) (* USER ACTION: IF YOU USE EXTENSIVE PPL SERVICES, TRY SPECIFYING A *) (* LARGER VALUE TO PPL$INITIALIZE. OTHERWISE, CHECK *) (* YOUR SYSTEM QUOTAS TO SEE IF AN INCREASE IS NEEDED. *) (*-- *) CONST PPL$_INVDESC = 31556116; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: DESCRIPTOR IS INVALID. *) (* USER ACTION: RECODE TO CORRECT THE DESCRIPTOR. *) (*-- *) CONST PPL$_INVELEID = 31556124; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: SPECIFIED ELEMENT ID IS NOT A LEGITIMATE ID. *) (* USER ACTION: EXAMINE PROGRAM CODE - SOME MODIFICATION OF THE *) (* ELEMENT ID HAS OCCURRED. *) (*-- *) CONST PPL$_INVELENAM = 31556132; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ILLEGAL CHARACTER STRING. *) (* USER ACTION: FIX THE CHARACTER STRING. *) (*-- *) CONST PPL$_INVELETYP = 31556140; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: USER SPECIFIED AN ELEMENT WHICH CANNOT BE OPERATED *) (* BY THE CALLED ROUTINE. *) (* USER ACTION: RECODE TO PASS THE PROPER ELEMENT TYPE. *) (*-- *) CONST PPL$_INVNUMCHI = 31556148; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: USER REQUESTED CREATION OF A NUMBER < 1. *) (* USER ACTION: RECODE REQUEST TO USE THE PROPER VALUE. *) (*-- *) (**** INVQUESIZ *) (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: INVALID QUEUE SIZE. *) (* USER ACTION: SPECIFY A POSITIVE NUMBER. *) (*-- *) CONST PPL$_INVSEMINI = 31556156; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: A SEMAPHORE INITIAL VALUE MUST BE <= ITS MAXIMUM. *) (* USER ACTION: CHANGE THE SPECIFIED INITIAL VALUE. *) (*-- *) CONST PPL$_INVSEMMAX = 31556164; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: A SEMAPHORE'S MAXIMUM VALUE MUST BE POSITIVE. *) (* USER ACTION: CHANGE THE SPECIFIED MAXIMUM VALUE. *) (*-- *) CONST PPL$_LOCNOTEST = 31556172; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: YOU CANNOT RELEASE A LOCK YOU HAVE NOT BEEN GRANTED. *) (* USER ACTION: RECODE TO ASSURE THAT THE LOCK IS HELD BY THE *) (* CALLER ATTEMPTING TO RELEASE IT. *) (*-- *) CONST PPL$_NOSECEX = 31556180; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: SECTION SPECIFIED FOR FLUSH OR DELETE DOES NOT EXIST. *) (* USER ACTION: RECODE TO ASSURE THAT SECTION TO DELETE/FLUSH HAS BEEN *) (* CREATED. *) (*-- *) (**** NOSHRM *) (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: NO SHARED MEMORY EXISTS. *) (* USER ACTION: DITTO. *) (*-- *) CONST PPL$_NOSUCHELE = 31556188; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: NO ELEMENT IS SPECIFIED BY THE INPUT ID. *) (* USER ACTION: RECODE TO ASSURE THAT THE INPUT ID IS FOR A *) (* LEGITIMATELY CREATED ELEMENT. *) (*-- *) CONST PPL$_NOSUCHLOC = 31556196; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: NO LOCK ELEMENT IS SPECIFIED BY THE INPUT ID. *) (* USER ACTION: RECODE TO ASSURE THAT THE INPUT ID IS FOR A *) (* LEGITIMATELY CREATED LOCK ELEMENT. *) (*-- *) CONST PPL$_NOSUCHNAM = 31556204; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: INPUT NAME DOES NOT SPECIFY AN EXISTING ELEMENT. *) (* USER ACTION: RECODE TO ASSURE THAT THE NAME MATCHES A CREATED *) (* ELEMENT. *) (*-- *) CONST PPL$_WRONUMARG = 31556212; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: TOO MANY OR TOO FEW ARGUMENTS SPECIFIED IN THE CALL. *) (* USER ACTION: RECODE USING PROPER NUMBER OF ARGUMENTS. *) (*-- *) CONST PPL$_ABNTERMIN = 31556220; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ABNORMAL TERMINATION. *) (* USER ACTION: AN APPLICATION PARTICIPANT HAS ENDED ABNORMALLY. *) (* SOME APPLICATION-SPECIFIC RECOVERY MAY BE DESIRED. *) (*-- *) CONST PPL$_EXHNEVCAL = 31556228; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: AN APPLICATION PARTICIPANT TERMINATED WITHOUT *) (* EXECUTING ITS PPL EXIT HANDLER. *) (* USER ACTION: APPLICATION HAS BEEN ABNORMALLY TERMINATED. SOME *) (* APPLICATION-SPECIFIC RECOVERY MAY BE DESIRED. *) (*-- *) CONST PPL$_INVARG = 31556236; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: A SPECIFIED ARGUMENT IS INVALID. *) (* USER ACTION: RECODE TO PASS THE PROPER ARGUMENT. *) (*-- *) CONST PPL$_NOINIT = 31556244; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: PPL$INITIALIZE MUST BE CALLED BEFORE THIS ROUTINE. *) (* USER ACTION: RECODE TO ASSURE THAT CALLS ARE ISSUED IN PROPER ORDER. *) (* PPL$INITIALIZE IS PERFORMED AUTOMATICALLY FOR MOST *) (* CALLS, BUT NOT FOR THOSE WHICH REQUIRE THE PRIOR *) (* CREATION OF AN ELEMENT. *) (*-- *) CONST PPL$_NONPIC = 31556252; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: PPL CANNOT MAP REQUESTED ADDRESS SPACE TO THE SAME *) (* ADDRESSES IN ALL PROCESSES. *) (* USER ACTION: IF IT IS CRITICAL TO THE APPLICATION THAT THE REQUESTED *) (* SPACE APPEAR AT THE SAME ADDRESSES IN ALL PROCESSES, *) (* THE USER MUST TAKE STEPS TO ASSURE THAT ENOUGH SPACE *) (* IS MADE AVAILABLE. THIS MAY REQUIRE INCREASING SYSTEM *) (* QUOTAS OR RESERVING THE REQUIRED ADDRESSES THROUGH *) (* LINKTIME OPERATIONS. *) (*-- *) CONST PPL$_SEMININON = 31556260; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: IMPROPER INITIAL VALUE SPECIFIED. *) (* USER ACTION: RECODE TO ASSURE THAT PROPER VALUE IS PASSED. *) (*-- *) CONST PPL$_NOTIMP = 31556268; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: A CALL HAS BEEN ISSUED TO AN UNIMPLEMENTED SERVICE. *) (* USER ACTION: RECODE TO ELIMINATE THIS CALL. *) (*-- *) CONST PPL$_ATTUSETWO = 31556276; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: USER HAS ATTEMPTED TO WAIT ON 2 APPLICATION-WIDE *) (* BARRIERS AT THE SAME TIME. *) (* USER ACTION: RECODE TO ASSURE THAT DEADLOCK IS AVOIDED BY WAITING *) (* ON ONLY ONE APPLICATION-WIDE BARRIER AT A TIME. *) (*-- *) CONST PPL$_IN_BARRIER_WAIT = 31556284; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THE BARRIER WAS ALREADY IN EFFECT AT THE TIME OF *) (* THIS CALL. *) (* USER ACTION: RECODE TO ASSURE THAT THE BARRIER QUORUM IS ESTABLISHED *) (* BEFORE ANYONE ATTEMPTS TO WAIT ON THE BARRIER. *) (*-- *) CONST PPL$_NO_SUCH_PARTY = 31556292; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: SPECIFIED PARTICIPANT DOES NOT EXIST IN THIS *) (* APPLICATION. *) (* USER ACTION: RECODE TO ASSURE THAT PROPER PARTICIPANT IS SPECIFIED *) (* IN THE CALL TO THIS ROUTINE. *) (*-- *) CONST PPL$_APPALREXI = 31556300; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS ATTEMPTED SPECIFICALLY TO FORM AN *) (* APPLICATION WITH A PARTICULAR NAME. THAT APPLICATION *) (* ALREADY EXISTS, AND SO CANNOT BE FORMED BY THIS *) (* PROCESS. *) (* USER ACTION: SINCE THE USER SPECIFICALLY REQUESTED TO FORM AN *) (* APPLICATION, THIS IS APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_ELEINUSE = 31556308; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS ATTEMPTED AN OPERATION WHICH MAY ONLY *) (* BE PERFORMED ON AN OBJECT WHICH IS NOT IN USE. *) (* THE SPECIFIED OBJECT IS CURRENTLY IN USE AND THEREFORE *) (* THE OPERATION MAY NOT BE PERFORMED. *) (* USER ACTION: RECODE TO FREE THE OBJECT BEFORE ATTEMPTING THIS *) (* OPERATION, OR, IF APPLICABLE, SPECIFY THE OPTION TO FORCE *) (* THIS OPERATION. *) (*-- *) CONST PPL$_INCOMPARG = 31556316; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS SPECIFIED A SIZE, PROTECTION, OR FLAG ON A *) (* CALL TO PPL$INITIALIZE WHICH IS INCOMPATIBLE WITH THE *) (* EXISTING APPLICATION WHICH THIS PROCESS IS ATTEMPTING *) (* TO JOIN. *) (* USER ACTION: RECODE THE CALL TO OMIT THE ARGUMENTS, OR SPECIFY *) (* ARGUMENTS WHICH ARE COMPATIBLE WITH THE EXISTING *) (* APPLICATION. *) (*-- *) CONST PPL$_INVAPPNAM = 31556324; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: ILLEGAL CHARACTER STRING. *) (* USER ACTION: FIX THE CHARACTER STRING. *) (*-- *) CONST PPL$_NOSUCHAPP = 31556332; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS ATTEMPTED SPECIFICALLY TO JOIN AN EXISTING *) (* APPLICATION WITH A PARTICULAR NAME. THAT APPLICATION *) (* DOES NOT EXIST, AND SO CANNOT BE JOINED BY THIS *) (* PROCESS. *) (* USER ACTION: SINCE THE USER SPECIFICALLY REQUESTED TO JOIN AN *) (* APPLICATION, THIS IS APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_BUFOVFL = 31559680; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: BUFFER COULD NOT CONTAIN THE COMPLETE OUTPUT STRING. *) (* USER ACTION: RECODE TO PASS A LARGER BUFFER. *) (*-- *) CONST PPL$_ALTSIZE = 31559688; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: PPL$INITIALIZE HAS ALREADY BEEN CALLED. *) (* USER ACTION: RECODE TO ASSURE THAT CALLS ARE ISSUED IN PROPER ORDER. *) (* PPL$INITIALIZE IS PERFORMED AUTOMATICALLY FOR MOST *) (* CALLS. ALTERING THE INTERNAL STRUCTURE SIZE MUST BE *) (* DONE BEFORE ANY OTHER CALL TO PPL. *) (*-- *) CONST PPL$_ELEALREXI = 31571971; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: AN ELEMENT BY THIS NAME ALREADY EXISTS, AND ITS *) (* ID HAS BEEN RETURNED. *) (* USER ACTION: CONTINUE NORMALLY IF THE NAME IS EXPECTED TO EXIST. *) (*-- *) CONST PPL$_SEMALRMAX = 31571979; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: SEMAPHORE CANNOT BE INCREMENTED FURTHER. *) (* USER ACTION: RECODE TO ASSURE THAT ONLY THE PROPER MAXIMUM NUMBER *) (* OF PPL$INCREMENT_SEMAPHORE REQUESTS ARE ISSUED. *) (*-- *) CONST PPL$_INTDELPRC = 31571987; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: AN APPLICATION CALL TO PPL$STOP FORCED THE TEMINATION *) (* OF THIS PARTICIPANT. *) (* USER ACTION: SINCE THE APPLICATION ITSELF TERMINATED THIS PARTY, *) (* ANY ACTIONS ARE APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_INTTERMIN = 31571995; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: AN APPLICATION CALL TO PPL$TERMINATE FORCED THE *) (* TEMINATION OF THIS PARTICIPANT. *) (* USER ACTION: SINCE THE APPLICATION ITSELF TERMINATED THIS PARTY, *) (* ANY ACTIONS ARE APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_EXITSTATUS = 31572003; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: AN APPLICATION PARTICIPANT EXITED WITH THIS STATUS. *) (* USER ACTION: DETERMINE THE CAUSE OF THE TERMINATION BY EXAMINING *) (* THE STATUS CODE. *) (*-- *) CONST PPL$_EVENT_OCCURRED = 31572011; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS CODE INDICATES THE OCCURRENCE OF AN EVENT FOR *) (* WHICH NOTIFICATION HAS BEEN REQUESTED BY THE USER. *) (* USER ACTION: SINCE THE APPLICATION REQUESTED THIS NOTIFICATION, *) (* RESPONSE IS APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_NORMAL_EXIT = 31572019; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS CODE INDICATES THE OCCURRENCE OF THE NORMAL *) (* PARTICIPANT TERMINATION EVENT. *) (* USER ACTION: SINCE THE APPLICATION REQUESTED THIS NOTIFICATION, *) (* RESPONSE IS APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_ABNORMAL_EXIT = 31572027; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS CODE INDICATES THE OCCURRENCE OF THE ABNORMAL *) (* PARTICIPANT TERMINATION EVENT. *) (* USER ACTION: SINCE THE APPLICATION REQUESTED THIS NOTIFICATION, *) (* RESPONSE IS APPLICATION-DEPENDENT. *) (*-- *) CONST PPL$_FORMEDAPP = 31572035; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS FORMED A NEW APPLICATION. *) (* USER ACTION: CONTINUE NORMALLY IF THIS WAS AN EXPECTED RESULT. *) (*-- *) CONST PPL$_JOINEDAPP = 31572043; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: THIS PROCESS JOINED AN EXISTING APPLICATION. *) (* USER ACTION: CONTINUE NORMALLY IF THIS WAS AN EXPECTED RESULT. *) (*-- *) CONST PPL$_NOMATCH = 31572051; (*++ *) (* FACILITY: PPL, RUN-TIME LIBRARY *) (* EXPLANATION: NO MATCH FOR THE SPECIFIED ELEMENT WAS FOUND. *) (* USER ACTION: CONTINUE NORMALLY IF THIS WAS AN EXPECTED RESULT. *) (*-- *) (* END. *) END.