IMPLEMENTATION MODULE Global ; FROM Memory IMPORT WriteSlot, WriteByte ; VAR moduleBase : ARRAY [0 .. MaxModules - 1] OF LONGCARD ; moduleProcs : ARRAY [0 .. MaxModules - 1] OF LONGCARD ; moduleFlags : ARRAY [0 .. MaxModules - 1] OF CHAR ; currentModule : CARDINAL ; PROCEDURE InitModuleTable ; VAR i: CARDINAL ; BEGIN FOR i := 0 TO MaxModules - 1 DO moduleBase [i] := 0 ; moduleProcs [i] := 0 ; moduleFlags [i] := CHR (0) ; END ; currentModule := 0 ; END InitModuleTable ; PROCEDURE GetModuleBase (m: CARDINAL) : LONGCARD ; BEGIN RETURN moduleBase [m] ; END GetModuleBase ; PROCEDURE SetModuleBase (m: CARDINAL; base: LONGCARD) ; BEGIN moduleBase [m] := base ; END SetModuleBase ; PROCEDURE GetModuleProcs (m: CARDINAL) : LONGCARD ; BEGIN RETURN moduleProcs [m] ; END GetModuleProcs ; PROCEDURE SetModuleProcs (m: CARDINAL; procs: LONGCARD) ; BEGIN moduleProcs [m] := procs ; END SetModuleProcs ; PROCEDURE GetModuleFlag (m: CARDINAL) : CARDINAL ; BEGIN RETURN ORD (moduleFlags [m]) ; END GetModuleFlag ; PROCEDURE SetModuleFlag (m: CARDINAL; f: CARDINAL) ; BEGIN moduleFlags [m] := CHR (f MOD 256) ; END SetModuleFlag ; PROCEDURE GetCurrentModule () : CARDINAL ; BEGIN RETURN currentModule ; END GetCurrentModule ; PROCEDURE SetCurrentModule (m: CARDINAL) ; BEGIN currentModule := m ; END SetCurrentModule ; PROCEDURE FindModuleByBase (base: LONGCARD) : CARDINAL ; VAR i: CARDINAL ; BEGIN i := 0 ; WHILE (i < MaxModules) AND (moduleBase [i] # base) DO INC (i) ; END ; IF i >= MaxModules THEN RETURN 0 ; ELSE RETURN i ; END ; END FindModuleByBase ; END Global.