nwpre.pp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. unit nwpre;
  2. interface
  3. // AD 02.09.2000: Dont know why its not working with kNLMInfo...
  4. // It always abends in TerminateNLM, so i am using the old style
  5. {$DEFINE OldPrelude}
  6. FUNCTION _Prelude (NLMHandle : LONGINT;
  7. initErrorScreenID : LONGINT;
  8. cmdLineP : PCHAR;
  9. loadDirectoryPath : PCHAR;
  10. uninitializedDataLength : LONGINT;
  11. NLMFileHandle : LONGINT;
  12. readRoutineP : POINTER;
  13. customDataOffset : LONGINT;
  14. customDataSize : LONGINT) : LONGINT; CDECL;
  15. implementation
  16. FUNCTION _TerminateNLM (NLMInformation : POINTER; threadID, status : LONGINT) : LONGINT; CDECL; EXTERNAL;
  17. FUNCTION _SetupArgV_411 (MainProc : POINTER) : LONGINT; CDECL; EXTERNAL;
  18. FUNCTION _StartNLM (NLMHandle : LONGINT;
  19. initErrorScreenID : LONGINT;
  20. cmdLineP : PCHAR;
  21. loadDirectoryPath : PCHAR;
  22. uninitializedDataLength : LONGINT;
  23. NLMFileHandle : LONGINT;
  24. readRoutineP : POINTER;
  25. customDataOffset : LONGINT;
  26. customDataSize : LONGINT;
  27. NLMInformation : POINTER;
  28. userStartFunc : POINTER) : LONGINT; CDECL; EXTERNAL;
  29. //PROCEDURE _exit (x : LONGINT); CDECL; EXTERNAL;
  30. (*****************************************************************************)
  31. CONST TRADINIONAL_NLM_INFO_SIGNATURE = 0;
  32. TRADINIONAL_FLAVOR = 0;
  33. TRADINIONAL_VERSION = 0;
  34. LIBERTY_VERSION = 1;
  35. TERMINATE_BY_EXTERNAL_THREAD = 0;
  36. TERMINATE_BY_UNLOAD = 5;
  37. {$IFDEF OldPrelude}
  38. CONST NLMID : LONGINT = 0;
  39. {$ELSE}
  40. TYPE
  41. kNLMInfoT =
  42. PACKED RECORD
  43. Signature : ARRAY [0..3] OF CHAR; // LONG
  44. Flavor : LONGINT;
  45. Version : LONGINT;
  46. LongDoubleSize : LONGINT;
  47. wchar_tSize : LONGINT;
  48. END;
  49. CONST NLM_INFO_SIGNATURE = 'NLMI'; // $494d3c3e; // NLMI
  50. kNLMInfo : kNLMInfoT =
  51. (Signature : NLM_INFO_SIGNATURE;
  52. Flavor : TRADINIONAL_FLAVOR; // 0
  53. Version : LIBERTY_VERSION; // 1
  54. LongDoubleSize : 8;
  55. wchar_tSize : 2);
  56. {$ENDIF}
  57. (*****************************************************************************)
  58. FUNCTION _nlm_main (Argc : LONGINT; ArgV : ARRAY OF PCHAR) : LONGINT; CDECL;
  59. EXTERNAL;
  60. FUNCTION _Stop : LONGINT; CDECL;
  61. BEGIN
  62. {$IFDEF OldPrelude}
  63. _Stop := _TerminateNLM (POINTER(NLMID),0,TERMINATE_BY_UNLOAD);
  64. {$ELSE}
  65. _Stop := _TerminateNLM (@kNLMInfo,0,TERMINATE_BY_UNLOAD);
  66. {$ENDIF}
  67. END;
  68. FUNCTION _cstart_ : LONGINT; CDECL;
  69. BEGIN
  70. _cstart_ := _SetupArgV_411 (@_nlm_main);
  71. END;
  72. FUNCTION _Prelude (NLMHandle : LONGINT;
  73. initErrorScreenID : LONGINT;
  74. cmdLineP : PCHAR;
  75. loadDirectoryPath : PCHAR;
  76. uninitializedDataLength : LONGINT;
  77. NLMFileHandle : LONGINT;
  78. readRoutineP : POINTER;
  79. customDataOffset : LONGINT;
  80. customDataSize : LONGINT) : LONGINT; CDECL;
  81. BEGIN
  82. _Prelude := _StartNLM
  83. (NLMHandle,
  84. initErrorScreenID,
  85. cmdLineP,
  86. loadDirectoryPath,
  87. uninitializedDataLength,
  88. NLMFileHandle,
  89. readRoutineP,
  90. customDataOffset,
  91. customDataSize,
  92. {$IFDEF OldPrelude}
  93. @NLMID,
  94. {$ELSE}
  95. @kNLMInfo,
  96. {$ENDIF}
  97. @_cstart_);
  98. END;
  99. end.