summaryrefslogtreecommitdiff
path: root/netware/start.c
blob: c9b69b37838f3149533aa52efcbb0baba25af47b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*=============================================================================
=  CodeWarrior Stationery for Creating a NetWare Executable with NKS/LibC
=
=  Copyright (C) Unpublished Work of Novell, Inc. All Rights Reserved.
=
=  This work is an unpublished work and contains confidential, proprietary and
=  trade  secret information of Novell, Inc. Access to this work is restricted
=  to (i) Novell, Inc. employees who have a need to know how to perform  tasks
=  within  the scope of their assignments and (ii) entities other than Novell,
=  Inc. who have entered into appropriate license agreements. No part of  this
=  work may be used, practiced, performed, copied, distributed, revised, modi-
=  fied, translated, abridged, condensed, expanded, collected, compiled, link-
=  ed,  recast,  transformed  or  adapted without the prior written consent of
=  Novell, Inc. Any use or exploitation of  this  work  without  authorization
=  could subject the perpetrator to criminal and civil liability.
=
=  CodeWarrior is a trademark of Metrowerks Corporation, a Motorola Company.
=  NetWare is a trademark of Novell, Inc.
=
=  When this file is used to instantiate real source code in the CodeWarrior
=  IDE, this copyright notice should be removed and replaced with a different
=  copyright indicating ownership by the developer. Novell assumes no
=  liability for how this sample code is used or modified by any developer.
===============================================================================
*/
#include <library.h>
#include <netware.h>
#include <nks/synch.h>

void			*gLibHandle = (void *) NULL;
rtag_t		gAllocTag = (rtag_t) NULL;
NXMutex_t	*gLibLock = (NXMutex_t *) NULL;
int gLibId=0;

int DisposeLibraryData(	void	*data)
{

	return 0;
}


int _NonAppStart
(
	void			*NLMHandle,
	void			*errorScreen,
	const char	*cmdLine,
	const char	*loadDirPath,
	size_t		uninitializedDataLength,
	void			*NLMFileHandle,
	int			(*readRoutineP)( int conn, void *fileHandle, size_t offset,
								size_t nbytes, size_t *bytesRead, void *buffer ),
	size_t		customDataOffset,
	size_t		customDataSize,
	int			messageCount,
	const char	**messages
)
{
	NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0);

#pragma unused(cmdLine)
#pragma unused(loadDirPath)
#pragma unused(uninitializedDataLength)
#pragma unused(NLMFileHandle)
#pragma unused(readRoutineP)
#pragma unused(customDataOffset)
#pragma unused(customDataSize)
#pragma unused(messageCount)
#pragma unused(messages)

/*
** Here we process our command line, post errors (to the error screen),
** perform initializations and anything else we need to do before being able
** to accept calls into us. If we succeed, we return non-zero and the NetWare
** Loader will leave us up, otherwise we fail to load and get dumped.
*/
//	gAllocTag = AllocateResourceTag(NLMHandle,
//								"<library-name> memory allocations", AllocSignature);

//	if (!gAllocTag)
//	{
//		OutputToScreen(errorScreen, "Unable to allocate resource tag for "
//											"library memory allocations.\n");
//		return -1;
//	}

	gLibId = register_library(DisposeLibraryData);

	if (gLibId < -1)
	{
		OutputToScreen(errorScreen, "Unable to register library with kernel.\n");
		return -1;
	}

	gLibHandle = NLMHandle;

	gLibLock = NXMutexAlloc(0, 0, &liblock);

	if (!gLibLock)
	{
		OutputToScreen(errorScreen, "Unable to allocate library data lock.\n");
		return -1;
	}

	return 0;
}


void _NonAppStop( void )
{
/*
** Here we clean up any resources we allocated. Resource tags is a big part
** of what we created, but NetWare doesn't ask us to free those.
*/
	(void) unregister_library(gLibId);
	NXMutexFree(gLibLock);
}

int  _NonAppCheckUnload( void )
{
/*
** This function cannot be the first in the file for if the file is linked
** first, then the check-unload function's offset will be nlmname.nlm+0
** which is how to tell that there isn't one. When the check function is
** first in the linked objects, it is ambiguous. For this reason, we will
** put it inside this file after the stop function.
**
** Here we check to see if it's alright to ourselves to be unloaded. If not,
** we return a non-zero value. Right now, there isn't any reason not to allow
** it.
*/
	return 0;
}