Nächste Seite: Residente Programme Aufwärts: Externe Prozeduren, Libraries Vorherige Seite: Optionale Libraries ohne Implementation

### Optionale Libraries mit Implementation

Optionale Libraries werden nicht automatisch geöffnet. Vor der Benutzung irgendwelcher Prozeduren einer solchen Library muss unbedingt getestet werden, dass die Library-Basis ungleich `NIL` ist!

Dabei sind folgende Punkte zu beachten:

- Das Modul darf nur -Variablen beinhalten.
- Die Library-Basis muss auf der Langwortadresse mit dem Offset 4 liegen. Auf Offset 0 liegt der versteckte Initialisierungszähler -- eine `INTEGER`-Variable -- des Moduls.

Das Gerüst eines solchen Moduls sieht folgendermassen aus:

    DEFINITON MODULE OptLib;
     ...
    (*$LargeVars:=FALSE *)
    (*$LongAlign:=FALSE *)
    VAR
      optLibVersion: INTEGER;   (* Offset = 2 *)
      optLibBase: ...           (* Offset = 4 *)

    PROCEDURE ...
      CODE ...
    (* beliebige Mischung von CODE und normalen Prozeduren *)

    END OptLib.

    IMPLEMENTATION MODULE OptLib;
    (*$LargeVars:=FALSE *)
     ...

    BEGIN
      optLibBase:=OpenLibrary( ... );
      IF optLibBase<>NIL THEN
        optLibVersion:=optLibBase^.Lib.version
      END
    CLOSE
      IF optLibBase<>NIL THEN
        CloseLibrary( ... );
        optLibBase:=NIL
      END
    END OptLib.