mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-19 08:54:01 +02:00
133 lines
3.9 KiB
ObjectPascal
133 lines
3.9 KiB
ObjectPascal
unit nwpre;
|
|
|
|
interface
|
|
|
|
// AD 02.09.2000: Dont know why its not working with kNLMInfo...
|
|
// It always abends in TerminateNLM, so i am using the old style
|
|
{$DEFINE OldPrelude}
|
|
|
|
FUNCTION _Prelude (NLMHandle : LONGINT;
|
|
initErrorScreenID : LONGINT;
|
|
cmdLineP : PCHAR;
|
|
loadDirectoryPath : PCHAR;
|
|
uninitializedDataLength : LONGINT;
|
|
NLMFileHandle : LONGINT;
|
|
readRoutineP : POINTER;
|
|
customDataOffset : LONGINT;
|
|
customDataSize : LONGINT) : LONGINT; CDECL;
|
|
|
|
|
|
implementation
|
|
|
|
|
|
FUNCTION _TerminateNLM (NLMInformation : POINTER; threadID, status : LONGINT) : LONGINT; CDECL; EXTERNAL;
|
|
FUNCTION _SetupArgV_411 (MainProc : POINTER) : LONGINT; CDECL; EXTERNAL;
|
|
FUNCTION _StartNLM (NLMHandle : LONGINT;
|
|
initErrorScreenID : LONGINT;
|
|
cmdLineP : PCHAR;
|
|
loadDirectoryPath : PCHAR;
|
|
uninitializedDataLength : LONGINT;
|
|
NLMFileHandle : LONGINT;
|
|
readRoutineP : POINTER;
|
|
customDataOffset : LONGINT;
|
|
customDataSize : LONGINT;
|
|
NLMInformation : POINTER;
|
|
userStartFunc : POINTER) : LONGINT; CDECL; EXTERNAL;
|
|
//PROCEDURE _exit (x : LONGINT); CDECL; EXTERNAL;
|
|
|
|
|
|
(*****************************************************************************)
|
|
|
|
CONST TRADINIONAL_NLM_INFO_SIGNATURE = 0;
|
|
TRADINIONAL_FLAVOR = 0;
|
|
TRADINIONAL_VERSION = 0;
|
|
LIBERTY_VERSION = 1;
|
|
TERMINATE_BY_EXTERNAL_THREAD = 0;
|
|
TERMINATE_BY_UNLOAD = 5;
|
|
|
|
|
|
{$IFDEF OldPrelude}
|
|
CONST NLMID : LONGINT = 0;
|
|
{$ELSE}
|
|
TYPE
|
|
kNLMInfoT =
|
|
PACKED RECORD
|
|
Signature : ARRAY [0..3] OF CHAR; // LONG
|
|
Flavor : LONGINT;
|
|
Version : LONGINT;
|
|
LongDoubleSize : LONGINT;
|
|
wchar_tSize : LONGINT;
|
|
END;
|
|
|
|
CONST NLM_INFO_SIGNATURE = 'NLMI'; // $494d3c3e; // NLMI
|
|
|
|
kNLMInfo : kNLMInfoT =
|
|
(Signature : NLM_INFO_SIGNATURE;
|
|
Flavor : TRADINIONAL_FLAVOR; // 0
|
|
Version : LIBERTY_VERSION; // 1
|
|
LongDoubleSize : 8;
|
|
wchar_tSize : 2);
|
|
{$ENDIF}
|
|
|
|
(*****************************************************************************)
|
|
|
|
FUNCTION _nlm_main (Argc : LONGINT; ArgV : ARRAY OF PCHAR) : LONGINT; CDECL;
|
|
EXTERNAL;
|
|
|
|
|
|
FUNCTION _Stop : LONGINT; CDECL;
|
|
BEGIN
|
|
{$IFDEF OldPrelude}
|
|
_Stop := _TerminateNLM (POINTER(NLMID),0,TERMINATE_BY_UNLOAD);
|
|
{$ELSE}
|
|
_Stop := _TerminateNLM (@kNLMInfo,0,TERMINATE_BY_UNLOAD);
|
|
{$ENDIF}
|
|
END;
|
|
|
|
|
|
FUNCTION _cstart_ : LONGINT; CDECL;
|
|
BEGIN
|
|
_cstart_ := _SetupArgV_411 (@_nlm_main);
|
|
END;
|
|
|
|
|
|
FUNCTION _Prelude (NLMHandle : LONGINT;
|
|
initErrorScreenID : LONGINT;
|
|
cmdLineP : PCHAR;
|
|
loadDirectoryPath : PCHAR;
|
|
uninitializedDataLength : LONGINT;
|
|
NLMFileHandle : LONGINT;
|
|
readRoutineP : POINTER;
|
|
customDataOffset : LONGINT;
|
|
customDataSize : LONGINT) : LONGINT; CDECL;
|
|
BEGIN
|
|
_Prelude := _StartNLM
|
|
(NLMHandle,
|
|
initErrorScreenID,
|
|
cmdLineP,
|
|
loadDirectoryPath,
|
|
uninitializedDataLength,
|
|
NLMFileHandle,
|
|
readRoutineP,
|
|
customDataOffset,
|
|
customDataSize,
|
|
{$IFDEF OldPrelude}
|
|
@NLMID,
|
|
{$ELSE}
|
|
@kNLMInfo,
|
|
{$ENDIF}
|
|
@_cstart_);
|
|
END;
|
|
|
|
|
|
|
|
|
|
end.
|
|
{
|
|
$Log$
|
|
Revision 1.2 2001-04-11 14:17:00 florian
|
|
* added logs, fixed email address of Armin, it is
|
|
diehl@nordrhein.de
|
|
|
|
}
|