884 lines
19 KiB
Plaintext
884 lines
19 KiB
Plaintext
NetWare Loadable Module Programming HOWTO
|
||
Martin Hinner, <martin@hinner.info>
|
||
Version 0.3, 04 January 2007
|
||
|
||
This document describes how to develop NetWare Loadable Modules under
|
||
Linux, using GNU CC and nlmconv(1) from GNU binutils. This is not an
|
||
official Novell document; I wrote it without any help or cooperation
|
||
from Novell, Inc.. Please note that Novell Netware is becoming quite
|
||
obsolete nowadays. In fact I have not updated this howto for more than
|
||
five years till now (2007).
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
|
||
1. Introduction
|
||
1.1 C++ Development
|
||
1.2 Related Documentation
|
||
1.3 Copying
|
||
1.4 Contacting the author
|
||
|
||
2. Setting Up Your Linux Box and NetWare Server
|
||
2.1 Novell NetWare Server
|
||
2.2 Linux Box With IPX/NCPFS
|
||
2.3 GNU C Compiler
|
||
2.4 nlmconv(1) from GNU binutils
|
||
2.5 The nlm-kit Package
|
||
2.6 Include Files and Documentation from the NDK
|
||
2.7 Access to the NetWare Server (Xconsole or rconsole)
|
||
|
||
3. First Step: Hello world
|
||
3.1 hello.c - Source File
|
||
3.2 hello.def - NLM header file
|
||
3.3 Makefile
|
||
3.4 GCC problems
|
||
3.5 Testing the Module
|
||
|
||
4. NLM Header file
|
||
4.1 AUTOUNLOAD
|
||
4.2 CHECK
|
||
4.3 CODESTART
|
||
4.4 COPYRIGHT
|
||
4.5 CUSTOM
|
||
4.6 DATASTART
|
||
4.7 DATE
|
||
4.8 DEBUG
|
||
4.9 DESCRIPTION
|
||
4.10 EXIT
|
||
4.11 EXPORT
|
||
4.12 FLAG_OFF
|
||
4.13 FLAG_ON
|
||
4.14 HELP
|
||
4.15 IMPORT
|
||
4.16 INPUT
|
||
4.17 MAP
|
||
4.18 MESSAGES
|
||
4.19 MODULE
|
||
4.20 MULTIPLE
|
||
4.21 NAMELEN
|
||
4.22 OS_DOMAIN
|
||
4.23 OUTPUT
|
||
4.24 PATH
|
||
4.25 PSEUDOPREEMPTION
|
||
4.26 REENTRANT
|
||
4.27 SCREENNAME
|
||
4.28 SHARELIB
|
||
4.29 STACK
|
||
4.30 STACKSIZE
|
||
4.31 STAMPEDDATA
|
||
4.32 START
|
||
4.33 SYNCHRONIZE
|
||
4.34 THREADNAME
|
||
4.35 TYPE
|
||
4.36 VERSION
|
||
4.37 XDCDATA
|
||
|
||
5. Message files
|
||
6. Help Files
|
||
7. XDC Data Files
|
||
8. Header Files (.h)
|
||
9. Import Files (.imp)
|
||
9.1 Generating Import Files Using nlmimp(1)
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
NetWare Loadable Modules (NLMs) are programs which run on Novell
|
||
NetWare server. NLMs become part of the NetWare OS. You can load and
|
||
unload NLMs while the server is running.
|
||
|
||
|
||
"Official" compilers for NLMs are:
|
||
|
||
|
||
<20> Watcom C/C++
|
||
|
||
<20> Metrowerks Codewarrior for NetWare (see
|
||
<http://www.metrowerks.com/>)
|
||
|
||
<20> EPC C/C++ (see <http://www.epc.com>)
|
||
|
||
<20> Novell NLMLINK.EXE
|
||
|
||
(On a side note, NetWare 5 can also load 32bit DLLs, which can be
|
||
built using Microsoft Visual C++, Borland C++ and other Windows
|
||
compilers. For more information see
|
||
<http://developer.novell.com/ndk/dllcomp.htm>)
|
||
|
||
|
||
This document describes how to get started with NLM development under
|
||
Linux (and possibly other Unixes). Please note that this project is in
|
||
very early stages of development, so a lot of things may not work as
|
||
you'd expect.
|
||
|
||
|
||
This document assumes that you are familiar with Novell NetWare, and
|
||
that you have at least basic knowledge of writing NLMs. For more
|
||
information about writing NLMs, see Novell's developer site,
|
||
<http://developer.novell.com/>. You should also have experience with
|
||
Unix and C/C++ programming with GNU CC. You can find a lot of
|
||
information about this topic at <http://www.linuxdoc.org/>.
|
||
|
||
|
||
1.1. C++ Development
|
||
|
||
As far as I know, C++ development with gcc is currently impossible,
|
||
till somebody ports at least the libstdc++ and libgcc libraries from
|
||
the gcc package.
|
||
|
||
|
||
1.2. Related Documentation
|
||
|
||
|
||
Other documents that might be useful are:
|
||
|
||
|
||
<20> The IPX-HOWTO, which describes the details of configuring IPX
|
||
protocol on Linux.
|
||
|
||
<20> The Linux GCC HOWTO, which covers how to set up the GNU C compiler
|
||
and development libraries under Linux, and gives an overview of
|
||
compiling, linking, running and debugging programs under it.
|
||
|
||
<20> The Assembly HOWTO, which describes how to program in assembly
|
||
language using FREE programming tools, focusing on development for
|
||
or from the Linux Operating System on the i386 platforms.
|
||
|
||
<20> The Creating NLMs on Linux x86,
|
||
<http://home.sch.bme.hu/~keresztg/novell/howto/NLM-Linux-
|
||
HOWTO.html>, by Gabor Keresztvalvi <keresztg@mail.com>. His page
|
||
describes the same thing as my HOWTO. I found Gabor's page ten
|
||
days after releasing version 0.1 of this document :( .
|
||
|
||
|
||
1.3. Copying
|
||
|
||
Copyright (c) 2000 Martin Hinner, <martin@hinner.info>,
|
||
<http://martin.hinner.info>.
|
||
|
||
|
||
This HOWTO is Free documentation; you can redistribute it and/or
|
||
modify it under the terms of the GNU General Public License as
|
||
published by the Free Software Foundation; either version 2 of the
|
||
License, or (at your option) any later version.
|
||
|
||
This document 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. See the GNU
|
||
General Public License for more details.
|
||
|
||
You can obtain a copy of the GNU General Public License by writing to
|
||
the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
|
||
USA.
|
||
|
||
|
||
1.4. Contacting the author
|
||
|
||
You can contact me at martin@hinner.info. I welcome any suggestions
|
||
and corrections, but please before you ask a question, try searching
|
||
the internet first. You should also check my homepage (
|
||
<http://martin.hinner.info/>) for any updates or additional
|
||
information. Please note that I am very busy with my other projects
|
||
(like automotive diagnostics, ARM-based microprocessors development
|
||
tools) and I have a full time job (I am working for SECONS Ltd. and
|
||
Fintera Ltd.).
|
||
|
||
|
||
|
||
2. Setting Up Your Linux Box and NetWare Server
|
||
|
||
You need to install and configure these things for NLM development:
|
||
|
||
|
||
<20> Linux box with configured IPX and NCPFS
|
||
|
||
<20> GNU C compiler (gcc) for elf-i386 (nearly all i386 Linux
|
||
Distributions include it)
|
||
|
||
<20> GNU binutils with nlmconv(1) program
|
||
|
||
<20> My nlm-kit package
|
||
|
||
<20> Novell Developer Kit - NDK (include files and documentation)
|
||
|
||
<20> DOSemu (with rconsole) or X11 server for running NetWare Xconsole.
|
||
|
||
<20>
|
||
|
||
You might also want to download the nlm-examples package from my FTP
|
||
site: <ftp://ftp.penguin.cz/pub/users/mhi/nlm/> or
|
||
<ftp://ftp.funet.fi/pub/mirrors/ftp.penguin.cz/pub/users/mhi/nlm/>.
|
||
2.1. Novell NetWare Server
|
||
|
||
Let's start with the NetWare server. You can use NetWare versions 3.X,
|
||
4.X or 5.X. NetWare 5 (or 5.1) three user "demo" version can be
|
||
ordered from Novell Inc. for a few dollars. Don't be confused with
|
||
word "demo", it's fully functional NetWare, except that it is limited
|
||
to three users. By the way, this license can be upgraded online, at no
|
||
cost, to five users. You might also try asking your local Novell
|
||
partner for demo CDs (they may be free).
|
||
|
||
|
||
2.2. Linux Box With IPX/NCPFS
|
||
|
||
You need to recompile your kernel with "The IPX protocol" and "NCP
|
||
file system support" options enabled. Don't forget to say YES to "NDS
|
||
authentication support" if you are using the NDS. Then you must
|
||
configure the IPX protocol and mount your NetWare server volumes.
|
||
Make sure that you have installed the ncpfs package! I use this
|
||
script:
|
||
|
||
|
||
______________________________________________________________________
|
||
#!/bin/sh
|
||
|
||
ipx_interface delall
|
||
ipx_interface add -p eth0 802.2 120 # Frame Ethernet_802.2, ipx net num 120
|
||
insmod ncpfs # I have NCPfs compiled as module
|
||
ncpmount -U admin -S elf -P XYZ /nw # mount all ELF's volumes as /nw
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
For more information about configuring IPX and NCPFS, see the IPX-
|
||
HOWTO.
|
||
|
||
|
||
2.3. GNU C Compiler
|
||
|
||
I think that all modern Linuxes for the Intel x86 include gcc, which
|
||
generates ELF32/i386 object files. If you have an older Linux
|
||
distribution, it may use the a.out format instead of ELF. If your
|
||
Linux doesn't use ELF, get and install a newer gcc.
|
||
|
||
|
||
2.4. nlmconv(1) from GNU binutils
|
||
|
||
The nlmconv(1) utility links object files to the NLM format. It is a
|
||
standard part of GNU binutils, but unfortunately it is not included in
|
||
current distributions (RedHat, SuSE, Debian, ...). Get the binutils
|
||
sources from ftp.gnu.org, and compile them, or simply use the pre-
|
||
compiled nlmconv from my nlm-kit package.
|
||
|
||
|
||
|
||
2.5. The nlm-kit Package
|
||
|
||
My nlm-kit package is avaliable from
|
||
<ftp://ftp.penguin.cz/pub/users/mhi/nlm/>. It contains necessary files
|
||
for NLM development. Extract it and run "make all" and "make install".
|
||
It will create the directory /usr/nwsdk/ and install all import files,
|
||
object files and the nlmimp(1) utility.
|
||
|
||
|
||
|
||
2.6. Include Files and Documentation from the NDK
|
||
|
||
|
||
Getting the NDK is easy:
|
||
|
||
<20> Download it from <http://developer.novell.com/ndk/>.
|
||
|
||
<20> Order two NDK CDs from Novell.
|
||
|
||
<20> Get these CDs at no cost at BrainShare, Novell Developer Workshop
|
||
or at other Novell Developer events.
|
||
|
||
|
||
You need these files from the NDK (all are available online at
|
||
<http://developer.novell.com/ndk/clib.htm>:
|
||
|
||
<20> C language header and import files (cdrom:\files\download\clib.exe)
|
||
|
||
<20> C language API documentation (cdrom:\files\download\clib_doc.exe)
|
||
|
||
<20> C language samples (optional)
|
||
(cdrom:\files\download\clib_sample.exe)
|
||
|
||
It's a pity that all the files mentioned above are InstallShield Win32
|
||
executables. You must find some Windows machine to extract them and
|
||
then copy the include files to /usr/nwsdk/include/ and
|
||
documentation/samples to anywhere you want. The Novell License
|
||
doesn't allow me to distribute include files or documentation with the
|
||
nlm-kit.
|
||
|
||
|
||
Because the NDK include files don't work under Linux, you need to
|
||
patch them manually by typing "make install-include" in the nlm-kit-
|
||
X.Y/ directory.
|
||
|
||
|
||
2.7. Access to the NetWare Server (Xconsole or rconsole)
|
||
|
||
You can access the NetWare server console directly (keyboard and
|
||
monitor), using rconsole.exe (from dosemu), or using
|
||
telnetd.nlm/Xconsole (you need X server for this).
|
||
|
||
|
||
3. First Step: Hello world
|
||
|
||
As usual, we will start with the famous "Hello world" program. The
|
||
source code for hello.nlm is available in the nlm-samples package. You
|
||
can download it from <ftp://ftp.penguin.cz/pub/users/mhi/nlm/>.
|
||
|
||
|
||
3.1. hello.c - Source File
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
#define N_PLAT_NLM /* Define dest. platform */
|
||
|
||
#include <nwconio.h> /* ConsolePrintf */
|
||
|
||
int
|
||
main (int argc, char **argv)
|
||
{
|
||
int i;
|
||
|
||
ConsolePrintf ("\rHello world!\n\n"); /* print on system console */
|
||
|
||
ConsolePrintf("Arguments:\n"); /* all arguments */
|
||
for (i=0;i<argc;i++)
|
||
ConsolePrintf("argv[%u]=\"%s\"\n",i, argv[i]);
|
||
|
||
return 0; /* exit NLM */
|
||
}
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
3.2. hello.def - NLM header file
|
||
|
||
|
||
______________________________________________________________________
|
||
#
|
||
# hello.def - NLM Header definition file for nlmconv(1)
|
||
# Copyright (c) 2000 Martin Hinner <martin@hinner.info>
|
||
#
|
||
|
||
# define startup object files
|
||
INPUT hello.o
|
||
INPUT /usr/nwsdk/lib/prelude.o # clib startup code
|
||
|
||
# all imported functions and import lists
|
||
IMPORT @/usr/nwsdk/imports/clib.imp # Functions in CLIB.NLM
|
||
IMPORT @/usr/nwsdk/imports/threads.imp # Functions in THREADS.NLM
|
||
|
||
# NLM header...
|
||
OUTPUT hello.nlm # output file
|
||
TYPE 0 # Ordinary NLM
|
||
VERSION 1,0,0 # Version 1.0
|
||
COPYRIGHT "Copyright (c) 2000 Martin Hinner <martin@hinner.info>" # (c) ...
|
||
DESCRIPTION "Simple 'Hello world' NLM module." # title of nlm
|
||
SCREENNAME "System Console" # Default screen name
|
||
|
||
MODULE CLIB,THREADS # req'd modules
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
3.3. Makefile
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
# makefile for "hello world" NLM
|
||
|
||
CC = gcc
|
||
CFLAGS = -Wall -O2 -g -I/usr/nwsdk/include/ -nostdinc -fno-builtin -fpack-struct
|
||
|
||
hello.nlm: hello.o hello.def
|
||
nlmconv --output-target=nlm32-i386 -T hello.def
|
||
|
||
hello.o: hello.c
|
||
$(CC) $(CFLAGS) -c hello.c
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
3.4. GCC problems
|
||
|
||
You must pass these arguments to the gcc:
|
||
|
||
|
||
<20> -fno-builtin: GCC's fast builtin functions sometimes cause server
|
||
to abend, so we don't want to use them.
|
||
|
||
<20> -nostdinc: Only include files in /usr/nwsdk/include are valid for
|
||
NLMs (don't forget to use also -I/usr/nwsdk/include).
|
||
|
||
<20> -fpack-struct: GCC's struct packing method is not valid for Novell
|
||
NetWare, so we won't use it. Thanks to Gabor Keresztvalvi for this
|
||
information.
|
||
|
||
<20> -fno-canary-all-functions: If you have Immunix StackGuard GCC, we
|
||
don't want to use it. StackGuard doesn't work under NetWare.
|
||
|
||
|
||
|
||
3.5. Testing the Module
|
||
|
||
Copy hello.nlm to the SYS:\SYSTEM directory on your NetWare server.
|
||
Then, on the system console, type "load hello.nlm". If everything went
|
||
fine, you should see NLM version information, a copyright message and
|
||
"Hello world".
|
||
|
||
|
||
4. NLM Header file
|
||
|
||
The NLM header file contains information for nlmconv(1). Each line
|
||
contains one option or directive; everything after "#" is comment.
|
||
This chapter describes all options and directives.
|
||
|
||
|
||
This chapter is not yet finished, sorry.
|
||
|
||
|
||
4.1. AUTOUNLOAD
|
||
|
||
Syntax:
|
||
|
||
AUTOUNLOAD
|
||
|
||
|
||
|
||
4.2. CHECK
|
||
|
||
Syntax:
|
||
|
||
CHECK <check procedure name>
|
||
|
||
|
||
This directive specifies the function to be executed when the NLM is
|
||
unloaded using the UNLOAD Server console command. If this function
|
||
returns zero, the NLM can be unloaded, else the NLM is not ready to be
|
||
unloaded.
|
||
|
||
|
||
Example:
|
||
|
||
______________________________________________________________________
|
||
CHECK CheckUnload
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.3. CODESTART
|
||
|
||
Syntax:
|
||
|
||
CODESTART <map file code start offset>
|
||
|
||
Map file start offset may be decimal or Xhex.
|
||
|
||
|
||
4.4. COPYRIGHT
|
||
|
||
Syntax:
|
||
|
||
COPYRIGHT ["Copyright string"]
|
||
|
||
The copyright string is displayed on the server console screen when
|
||
the NLM is loaded. If this option is not used, no copyright
|
||
information is displayed.
|
||
|
||
|
||
Example:
|
||
|
||
______________________________________________________________________
|
||
COPYRIGHT "Copyright (c) 1998 ABC Inc."
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.5. CUSTOM
|
||
|
||
Syntax:
|
||
|
||
CUSTOM <custom data file path>
|
||
|
||
|
||
4.6. DATASTART
|
||
|
||
Syntax:
|
||
|
||
DATASTART <map file data start offset>
|
||
|
||
Map file data start offset may be decimal or Xhex.
|
||
|
||
|
||
|
||
4.7. DATE
|
||
|
||
Syntax:
|
||
|
||
DATE <month, day, year>
|
||
|
||
|
||
|
||
4.8. DEBUG
|
||
|
||
Syntax:
|
||
|
||
DEBUG
|
||
|
||
|
||
This directive tells the nlmconv(1) to include debugging information
|
||
in the NLM file.
|
||
|
||
Example:
|
||
|
||
______________________________________________________________________
|
||
DEBUG
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.9. DESCRIPTION
|
||
|
||
Syntax:
|
||
|
||
DESCRIPTION "NLM Description String"
|
||
|
||
|
||
|
||
4.10. EXIT
|
||
|
||
Syntax:
|
||
|
||
EXIT <exit procedure name>
|
||
|
||
|
||
|
||
4.11. EXPORT
|
||
|
||
Syntax:
|
||
|
||
EXPORT <symbol list>
|
||
|
||
EXPORT @<symbol list file>
|
||
|
||
|
||
|
||
4.12. FLAG_OFF
|
||
|
||
Syntax:
|
||
|
||
FLAG_OFF <decimal number>
|
||
|
||
|
||
|
||
4.13. FLAG_ON
|
||
|
||
Syntax:
|
||
|
||
|
||
FLAG_ON <decimal number>
|
||
|
||
|
||
|
||
4.14. HELP
|
||
|
||
Syntax:
|
||
|
||
HELP <help file path>
|
||
|
||
|
||
|
||
4.15. IMPORT
|
||
|
||
Syntax:
|
||
|
||
IMPORT <symbol list>
|
||
|
||
IMPORT @<symbol list file>
|
||
|
||
|
||
|
||
4.16. INPUT
|
||
|
||
Syntax:
|
||
|
||
INPUT <object file> [, <object file> [, ...] ]
|
||
|
||
INPUT @<object list file>
|
||
|
||
|
||
This directive lists the input ELF (.o) object files that are to be
|
||
linked. You can also list the object files in the list file, each
|
||
object file on one line.
|
||
|
||
|
||
Example:
|
||
|
||
|
||
______________________________________________________________________
|
||
INPUT @objectfiles.txt
|
||
INPUT main.o
|
||
INPUT /usr/nwsdk/lib/prelude.o
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.17. MAP
|
||
|
||
Syntax:
|
||
|
||
MAP [map file name]
|
||
|
||
|
||
|
||
4.18. MESSAGES
|
||
|
||
Syntax:
|
||
|
||
MESSAGES <message file path>
|
||
|
||
|
||
|
||
4.19. MODULE
|
||
|
||
Syntax:
|
||
|
||
MODULE <autoload NLM list>
|
||
|
||
|
||
|
||
4.20. MULTIPLE
|
||
|
||
Syntax:
|
||
|
||
MULTIPLE
|
||
|
||
|
||
|
||
4.21. NAMELEN
|
||
|
||
Syntax:
|
||
|
||
NAMELEN <decimal number>
|
||
|
||
Default is 31. Zero is no limit.
|
||
|
||
|
||
|
||
4.22. OS_DOMAIN
|
||
|
||
Syntax:
|
||
|
||
OS_DOMAIN
|
||
|
||
|
||
|
||
4.23. OUTPUT
|
||
|
||
Syntax:
|
||
|
||
OUTPUT <target file name>
|
||
|
||
|
||
|
||
4.24. PATH
|
||
|
||
Syntax:
|
||
|
||
PATH [search path;...]
|
||
|
||
|
||
for following CUSTOM, HELP, INPUT, MESSAGES, SHARELIB, STAMPEDDATA and
|
||
XDCDATA.
|
||
|
||
|
||
4.25. PSEUDOPREEMPTION
|
||
|
||
Syntax:
|
||
|
||
PSEUDOPREEMPTION
|
||
|
||
|
||
|
||
4.26. REENTRANT
|
||
|
||
Syntax:
|
||
|
||
|
||
REENTRANT
|
||
|
||
|
||
|
||
4.27. SCREENNAME
|
||
|
||
Syntax:
|
||
|
||
SCREENNAME "Initial Screen Name (CLIB)"
|
||
|
||
|
||
|
||
4.28. SHARELIB
|
||
|
||
Syntax:
|
||
|
||
SHARELIB <shared library path>
|
||
|
||
|
||
|
||
4.29. STACK
|
||
|
||
Syntax:
|
||
|
||
STACK <stack size>
|
||
|
||
|
||
|
||
4.30. STACKSIZE
|
||
|
||
Syntax:
|
||
|
||
STACKSIZE <stack size>
|
||
|
||
|
||
|
||
4.31. STAMPEDDATA
|
||
|
||
Syntax:
|
||
|
||
STAMPEDDATA "Stamp" <data file path>
|
||
|
||
|
||
Stamp is 8 char max.
|
||
|
||
|
||
4.32. START
|
||
|
||
Syntax:
|
||
|
||
START <start procedure name>
|
||
|
||
|
||
Default is _Prelude.
|
||
|
||
|
||
4.33. SYNCHRONIZE
|
||
|
||
Syntax:
|
||
|
||
SYNCHRONIZE
|
||
|
||
|
||
|
||
4.34. THREADNAME
|
||
|
||
Syntax:
|
||
|
||
THREADNAME "Initial Process Name (CLIB)"
|
||
|
||
|
||
|
||
4.35. TYPE
|
||
|
||
Syntax:
|
||
|
||
TYPE <version>
|
||
|
||
|
||
This directive specifies the format (NLM, LAN, DSK, NAM) of the NLM
|
||
file to be generated. Valid values are:
|
||
|
||
|
||
<20> 0 - NLM
|
||
|
||
<20> 1 - LAN
|
||
|
||
<20> 2 - DSK
|
||
|
||
<20> 3 - NAM
|
||
|
||
|
||
Example:
|
||
|
||
|
||
______________________________________________________________________
|
||
TYPE 0
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.36. VERSION
|
||
|
||
Syntax:
|
||
|
||
|
||
VERSION <major version>, <minor version> [, <revision>]
|
||
|
||
|
||
The version information is displayed on the server system console when
|
||
the NLM loads. The major and minor version numbers can be 0 - 99. The
|
||
revision can be 0 - 26 ("a" - "z") and is optional. The version
|
||
directive is required.
|
||
|
||
Example:
|
||
|
||
|
||
______________________________________________________________________
|
||
VERSION 1,5
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.37. XDCDATA
|
||
|
||
Syntax:
|
||
|
||
|
||
XDCDATA <XDC data file path>
|
||
|
||
|
||
|
||
5. Message files
|
||
|
||
A message file contains (as you guess) text messages generated by the
|
||
NLM. You can create it using DOS programs MSGLIB.EXE and MSGMAKE.EXE.
|
||
I don't know any similar utility for Unix. Sorry, you'll have to use
|
||
dosemu or DOS machine :-(
|
||
|
||
|
||
6. Help Files
|
||
|
||
Help files contain help for use with the NWSNUT user interface
|
||
library. There is no known Linux utility for creating help files. You
|
||
must use the DOS program HELPLIB.EXE, which is available from Novell
|
||
developer site.
|
||
|
||
|
||
7. XDC Data Files
|
||
|
||
XDC files are used by NetWare 5 (or SMP NetWare 4.x), and store
|
||
information about symmetric multiprocessing (SMP). You will probably
|
||
not need them. At least not now :-) Again, there is no Unix utility
|
||
for creating XDC files, you will have to use the MPKXDC.EXE program
|
||
(also available on the Novell developer site).
|
||
|
||
|
||
|
||
8. Header Files (.h)
|
||
|
||
(todo)
|
||
|
||
|
||
9. Import Files (.imp)
|
||
|
||
(todo)
|
||
|
||
|
||
9.1. Generating Import Files Using nlmimp(1)
|
||
|
||
Program nlmimp(1) is part of my nlm-kit package. (todo)
|
||
|
||
|
||
|