Global.mod 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. IMPLEMENTATION MODULE Global ;
  2. FROM Memory IMPORT WriteSlot, WriteByte ;
  3. VAR
  4. moduleBase : ARRAY [0 .. MaxModules - 1] OF LONGCARD ;
  5. moduleProcs : ARRAY [0 .. MaxModules - 1] OF LONGCARD ;
  6. moduleFlags : ARRAY [0 .. MaxModules - 1] OF CHAR ;
  7. currentModule : CARDINAL ;
  8. PROCEDURE InitModuleTable ;
  9. VAR i: CARDINAL ;
  10. BEGIN
  11. FOR i := 0 TO MaxModules - 1 DO
  12. moduleBase [i] := 0 ;
  13. moduleProcs [i] := 0 ;
  14. moduleFlags [i] := CHR (0) ;
  15. END ;
  16. currentModule := 0 ;
  17. END InitModuleTable ;
  18. PROCEDURE GetModuleBase (m: CARDINAL) : LONGCARD ;
  19. BEGIN
  20. RETURN moduleBase [m] ;
  21. END GetModuleBase ;
  22. PROCEDURE SetModuleBase (m: CARDINAL; base: LONGCARD) ;
  23. BEGIN
  24. moduleBase [m] := base ;
  25. END SetModuleBase ;
  26. PROCEDURE GetModuleProcs (m: CARDINAL) : LONGCARD ;
  27. BEGIN
  28. RETURN moduleProcs [m] ;
  29. END GetModuleProcs ;
  30. PROCEDURE SetModuleProcs (m: CARDINAL; procs: LONGCARD) ;
  31. BEGIN
  32. moduleProcs [m] := procs ;
  33. END SetModuleProcs ;
  34. PROCEDURE GetModuleFlag (m: CARDINAL) : CARDINAL ;
  35. BEGIN
  36. RETURN ORD (moduleFlags [m]) ;
  37. END GetModuleFlag ;
  38. PROCEDURE SetModuleFlag (m: CARDINAL; f: CARDINAL) ;
  39. BEGIN
  40. moduleFlags [m] := CHR (f MOD 256) ;
  41. END SetModuleFlag ;
  42. PROCEDURE GetCurrentModule () : CARDINAL ;
  43. BEGIN
  44. RETURN currentModule ;
  45. END GetCurrentModule ;
  46. PROCEDURE SetCurrentModule (m: CARDINAL) ;
  47. BEGIN
  48. currentModule := m ;
  49. END SetCurrentModule ;
  50. PROCEDURE FindModuleByBase (base: LONGCARD) : CARDINAL ;
  51. VAR i: CARDINAL ;
  52. BEGIN
  53. i := 0 ;
  54. WHILE (i < MaxModules) AND (moduleBase [i] # base) DO
  55. INC (i) ;
  56. END ;
  57. IF i >= MaxModules THEN
  58. RETURN 0 ;
  59. ELSE
  60. RETURN i ;
  61. END ;
  62. END FindModuleByBase ;
  63. END Global.