summaryrefslogtreecommitdiff
path: root/rtl/netware/nwpre.pp
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/netware/nwpre.pp')
-rw-r--r--rtl/netware/nwpre.pp158
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
+
+}