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/.
#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 */ }
# # hello.def - NLM Header definition file for nlmconv(1) # Copyright (c) 2000 Martin Hinner <mhi@penguin.cz> # # 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 <mhi@penguin.cz>" # (c) ... DESCRIPTION "Simple 'Hello world' NLM module." # title of nlm SCREENNAME "System Console" # Default screen name MODULE CLIB,THREADS # req'd modules
# 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
You must pass these arguments to the gcc:
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".