diff options
Diffstat (limited to 'rtl/netware/nwpre.pp')
-rw-r--r-- | rtl/netware/nwpre.pp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/rtl/netware/nwpre.pp b/rtl/netware/nwpre.pp new file mode 100644 index 0000000000..6153cf648e --- /dev/null +++ b/rtl/netware/nwpre.pp @@ -0,0 +1,158 @@ +{ + $Id: nwpre.pp,v 1.6 2005/02/14 17:13:30 peter Exp $ + This file is part of the Free Pascal run time library. + Copyright (c) 1999-2000 by the Free Pascal development team + Copyright (c) 2001 Armin Diehl + + This unit implements the startup code for a netware nlm. It must be the first object file + linked. Currently the 'old-style', similar to novell's prelude.obj is used. With the newer + way (novells nwpre.obj) i only got abends. Dont know what's different in novells nwpre. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +**********************************************************************} + +unit nwpre; + +interface + +{ 2000/08/29 armin: first version, untested + 2000/09/02 armin: Dont know why its not working with kNLMInfo... + It always abends in TerminateNLM, so i am using the old style + 2001/04/15 armin: Added comments, S- + Removed dead code } + +{$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 + +{$S-} + +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; + + +{**************************************************************************************************} + +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'; // 0x494d3c3e; + + kNLMInfo : kNLMInfoT = + (Signature : NLM_INFO_SIGNATURE; + Flavor : TRADINIONAL_FLAVOR; // 0 + Version : LIBERTY_VERSION; // 1 + LongDoubleSize : 8; + wchar_tSize : 2); +{$ENDIF} + +{**************************************************************************************************} + +{ _nlm_main is defined in system.pp. It sets command line parameters and calls PASCALMAIN } +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: nwpre.pp,v $ + Revision 1.6 2005/02/14 17:13:30 peter + * truncate log + +} |