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)
|
|||
|
|
|||
|
|
|||
|
|