A Server Library Entrypoint occupies 1 Stack Cell.
The Compiler generates a special Tag 5 Untouched Data Descriptor for each Entrypoint, rather than a PCW for a Procedure.
The Untouched Data Descriptor references the Library Template of the Library which owns the EntryPoint.
Tag 5 - Library Entrypoint Untouched Data Descriptor | ||
---|---|---|
Field | Name | Description |
[42:3] | SizeF | Descriptor Element Size is set to 7, which is an invalid number and causes a Hardware Interrupt. |
[39:4] | L_BitsF | The MCP uses this field with these
values, CLBitsV = 4 Connection Library Object LBitsV = 8 Server Library Entrypoint These fields overlap the fields below used by the Compilers. |
[39:1] | L_LibEntryPointF | 1 = Server Library Entrypoint. |
[38:1] | L_ConnLibEntryPointF | 1 = Connection Library Entrypoint. |
[35:16] | L_TemplateInxF | The Index of the Entrypoint Object Entry in the Library Template. |
[19:1] | L_ObjOffSignF | Set if a Negative Library Offset. |
[18:19] | L_ObjOffsetF | Offset in the Stack to the Library Template Descriptor. |
A call on an Entrypoint is generated as a normal MKST,NAMC,ENTR sequence, where the NAMC address is the stack location of the special Tag 5 Descriptor. An Hardware Interrupt occurs on the first call to the Entrypoint, due to the invalid SZF field.
The MCP overwrites the Descriptor with an SIRW to the Library PCW and subsequent calls function as a normal Procedure call.
An EntryPoint Name may be set explicitly using the ActualName phrase in Algol, or it is derived from the Name of the Procedure, or the SetActualName Intrinsic can be used at RunTime. In all cases, the Library Linkage of the EntryPoint is Case Sensitive. If the ActualName is specified as "LibProcZ", then it will not match an Exported Object called "LIBPROCZ".