procedure SemanticError(Code: Scalar);
  extern;

procedure StartList(var List: IdList);
  extern;

procedure AppendId(var List: IdList; var Id: IdEntry);
  extern;

procedure ForAll(List: IdList; procedure Action(Id: IdEntry));
  extern;

procedure DsposeList(List: IdList);
  extern;

procedure StartSet(var s: IdSet);
  extern;

function InSet(s: IdSet; Id: IdEntry): Boolean;
  extern;

procedure Include(var s: IdSet; Id: IdEntry);
  extern;

procedure Exclude(var s: IdSet; Id: IdEntry);
  extern;

procedure DsposeSet(s: IdSet);
  extern;

procedure InitScope;
  extern;

procedure OpenScope(Kind: ScopeKind);
  extern;

procedure SaveScope(var Scope: ScopeCopy);
  extern;

procedure ReEnterScope(Scope: ScopeCopy);
  extern;

procedure CheckScope(BlockId: IdEntry);
  extern;

procedure CloseScope;
  extern;

procedure CreateId(var Entry: IdEntry; ClassNeeded: IdClass);
  extern;

procedure EnterId(NewEntry: IdEntry; var Scope: IdEntry);
  extern;

procedure SeekLocalId(Scope: IdEntry; var Entry: IdEntry);
  extern;

procedure SearchScopes(Inner, Outer: DispRange;
                       var Entry: IdEntry);
  extern;

procedure SearchGlobals(ClassNeeded: IdClass;
                        var IdFound: IdEntry);
  extern;

procedure BindDomain(Domain: IdEntry);
  extern;

procedure SearchDomain(var Entry: IdEntry);
  extern;

procedure NewId(var Entry: IdEntry; ClassNeeded: IdClass);
  extern;

procedure SearchId(AllowableClasses: SetOfIdClass;
                   var Entry: IdEntry);
  extern;

procedure NewType(var Entry: TypEntry; FormNeeded: TypeForm);
  extern;

procedure SeekLabel(FirstLabel: LabelEntry;
                      var Entry: LabelEntry);
  extern;

procedure CreateLabel(var Entry: LabelEntry);
  extern;

procedure NewLabel;
  extern;

procedure AllLabels(var Entry: LabelEntry);
  extern;

procedure InitLabelDepth;
  extern;

procedure OpenLabelDepth;
  extern;

procedure DefineLabel;
  extern;

procedure CheckLabel(var Entry: LabelEntry);
  extern;

procedure CloseLabelDepth;
  extern;

procedure DisposeScope;
  extern;

procedure InitSemanticTables;
  extern;

procedure StringType(var StringEntry: TypEntry);
  extern;

function String(TheType: TypEntry): Boolean;
  extern;

function StringFound: Boolean;
  extern;

function Identical(Type1, Type2: TypEntry): Boolean;
  extern;

function CAPString(TheType: TypEntry): Boolean;
  extern;

function Compatible(Type1, Type2: TypEntry): Boolean;
  extern;

function Ordinal(TheType: TypEntry): Boolean;
  extern;

function EmbeddedFile(TheType: TypEntry): Boolean;
  extern;

procedure EnsureOrdinal(var TheType: TypEntry);
  extern;

procedure EnsureFormIs(FormRequired: TypeForm;
                       var TheType: TypEntry);
  extern;

procedure EnsureEnumerated(var TheType: TypEntry);
  extern;

procedure DomainCheck(TheType: TypEntry);
  extern;

procedure CheckAssignment(Type1, Type2: TypEntry);
  extern;

procedure Threaten(v: IdEntry);
  extern;

procedure GetBounds(OrdinalType: TypEntry;
                    var Lower, Upper: ObjectValue);
  extern;

function IsConformant(TheType: TypEntry): Boolean;
  extern;

function ElementOf(Structure: TypEntry): TypEntry;
  extern;

function IndexOf(Structure: TypEntry): TypEntry;
  extern;

function PackingOf(Structure: TypEntry): Boolean;
  extern;

function MultiLevel(Structure: TypEntry): Boolean;
  extern;

function LastLevelOf(Structure: TypEntry): TypEntry;
  extern;

procedure WithSchema(Schema: TypEntry;
                     procedure  Action(Packing, InnerMost: Boolean;
                                       LowBound, HighBound:
                                         CAPBound;
                                       ElemRep: TypeRepresentation));
  extern;

function TaggedVarPart(ThisVarPart: TypEntry;
                        TagId: IdEntry): TypEntry;
  extern;

function VariantField(VariantPart: TypEntry;
                      FieldId: IdEntry): Boolean;
  extern;

procedure SeekByValue(VariantPart: TypEntry; var Variant: TypEntry;
                      TheValue: ObjectValue);
  extern;

procedure SelectLocal(VariantPart: TypEntry; var Variant: TypEntry;
                      Field: IdEntry);
  extern;

procedure SeekByName(var VariantPart, Variant: TypEntry;
                     Field: IdEntry);
  extern;

function Congruent(Formals1, Formals2: FormalEntry): Boolean;
  extern;