peter dbc2025604 ErrOutput added 21 năm trước cách đây
..
demos 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
tests abb6577ccd * changes for new threadvar support 22 năm trước cách đây
Makefile 86f78c7300 * units are now created in separate directory units/cpu-os/ 21 năm trước cách đây
Makefile.fpc 86f78c7300 * units are now created in separate directory units/cpu-os/ 21 năm trước cách đây
README 458e3c3780 * makefiles regenerated 21 năm trước cách đây
aio.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
aio.pp 7b8ac3c767 * added declarations with var parameters 22 năm trước cách đây
audnlm32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
calnlm32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
ccs-os.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
ccs.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
classes.pp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
clib.imp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
clibaux.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
clibctx.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
clxnlm32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
convertimp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
crt.pp 66dd127bd9 + Moved CRT interface to common include file 21 năm trước cách đây
dos.pp bd9e93087c * changed dir separator from \ to / 21 năm trước cách đây
dplsv386.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
dsapi.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
dsevent.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
errno.inc 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
initc.pp 3cb6e124b3 first version for netware 21 năm trước cách đây
keyboard.pp 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
lib0.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
locnlm32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
mouse.pp 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
ndpsrpc.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
netnlm32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
netware.pp 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
nit.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
nlmlib.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
npackoff.inc 5c0479975e * removed nwstdio and nwthread 22 năm trước cách đây
npackon.inc 5c0479975e * removed nwstdio and nwthread 22 năm trước cách đây
nwnit.pp 5c0479975e * removed nwstdio and nwthread 22 năm trước cách đây
nwpre.as cc769a33ea * support for fcl, support for linking without debug info 22 năm trước cách đây
nwpre.pp 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
nwprot.pp bd9e93087c * changed dir separator from \ to / 21 năm trước cách đây
nwpsrv.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
nwpsrv3x.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
nwserv.pp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
nwsnut.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
nwsnut.pp 6cd83c6db8 * added nwsnut, nwconio and nwthreads for netware 22 năm trước cách đây
nwsock.inc c500543105 * added some missing functions 23 năm trước cách đây
nwsys.inc 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
prelude.as cc769a33ea * support for fcl, support for linking without debug info 22 năm trước cách đây
qos.inc 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
requestr.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
sockets.pp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
socklib.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
streams.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
system.pp dbc2025604 ErrOutput added 21 năm trước cách đây
systhrds.pp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
sysutils.pp bd9e93087c * changed dir separator from \ to / 21 năm trước cách đây
threads.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
tli.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
tthread.inc 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
varutils.pp 9f31783a0a * old logs removed and tabs fixed 23 năm trước cách đây
video.pp 5c03484982 * SysUpdateScreen modified esi and edi 21 năm trước cách đây
vollib.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
winsock.pp 0f1fec0de1 * exiting threads at nlm unload 21 năm trước cách đây
ws2_32.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây
ws2nlm.imp e925386393 * moved rtl/netware/nwimp/*.imp to rtl/netware 21 năm trước cách đây

README

News
====

2004/08/01 armin:
- lot of fixes, compiler can compile itself on a netware server
2003/02/16 armin:
- added nwconio, nwthreads, nwsnut
2003/02/15 armin:
- changes for new threadvars
2002/02/27 armin:
- changes for current fpc 1.1
2001/04/16 armin:
- implemented CRT and SYSUTILS
- nwimp/convertimp to convert .imp files to unix
2001/05/26 armin:
- successfuly compiled binutils for win32 under linux. Patched nlmconv
for win32 available. This makes it possible to use FPC to create NLM's
unter win32.



General
=======

Currently generating NetWare-NLM's only work under Linux and win32. (may be under bsd also)
For Win32 you need a win32 compiled binutils with netware target enabled. Because nlmconv
only works with elf objects, elf support in binutils is also needed.


Binutils with netware-support needed
====================================

You need a version of binutils compiled with netware-support. (nlmconv has to be present)
Unfortunately in the Linux distibutions this component of the binutils is not included
so you have to compile it. So download the latest stable binutils package from your
favourite GNU mirror, decompress it ('tar xfz binutils-x.yy.z.tar.gz' on unices
with GNU tar), change to the binutils-x.yy.z directory and configure:

./configure --prefix=/usr --enable-shared --enable-targets=i386-netware,i386-linux

I used the prefix /usr because thats the default location on redhat (thats what I'm using)

and use

make
make install

to build and install binutils. To check that netware is supported by the version of binutils
installed, use ld --version. The emulation 'i386nw' must be present. Also check that nlmconv
is present and can be started without specifying the complete path of nlmconv.

You can find more information and a binary version of binutils with netware-support for
linux on:
http://home.sch.bme.hu/~keresztg/novell/howto/NLM-Linux-HOWTO.html.

Binutils-2.11 for win32 and RedHat 7.2 with netware support and a patched nlmconv
that supports "copyright" are available from:
http://home.arcor.de/armin.diehl/fpcnw

The copyright-patch is included in newer versions of binutils (2.13)


Building the freepascal runtime-library for netware
===================================================

Install the current fpc sources from ftp.freepascal.org and change to the directory
rtl/netware under the freepascal sourcetree. Verify the path of your units in
Makefile. The default is /usr/lib/fpc/1.9.5/units/netware/rtl.
Compile and install the rtl with

make install

Settings and needed files to compile for netware
================================================

Edit your /etc/fpc.cfg and add the rtl source path for netware. This are my settings,
you may paste it to your fpc.cfg:

#IFDEF Netware
-Fu/usr/lib/fpc/1.9.5/units/netware/rtl
-Fl/usr/lib/fpc/1.9.5/units/netware/rtl
#ENDIF

This adds the search path for the rtl-units as well as for the needed import-files.
You can use the import files from the rtl/netware directory, they are automaticly
installed. If you want to use import files from novell, be aware that you have to
convert the files to unix format (i.e. with dos2unix).

Building the first nlm
======================

Ok, now you have installed all needed files, try the following program and compile it
with

ppc386 -Tnetware hello.pas

PROGRAM Hello;
{$Description The FreePascal HelloWorld for Netware}
{$Version 1.0.0}
{$Copyright Copyright (c) 2001 The FreePascal Development Team}
{$Screenname The Pascal Hello World for Netware}

BEGIN
WriteLn ('This is open source ! FreePascal for netware');
END.

Hints on using freepascal for nlm's
===================================

- Compiler Switches for Netware
-----------------------------
The following compiler-swiches are supported for NetWare:
$DESCRIPTION : NLM-Description, will be displayed at load-time
$M : For Stack-Size. Heap-Size will be ignored
$VERSION x.x.x : Sets Major, Minor and Revision, Revision 0 is nothing, 1=a, 2=b ...
$COPYRIGHT : Sets Copyright, needs a patched nlmconv, patch is
available at the location for binutils-win32 shown
above.
$SCREENNAME : Sets the screen-name (i.e. shown in ctrl-esc screen)
$SCREENNAME DEFAULT : output to logger screen
$SCREENNAME NONE : no output at all
$SCREENNAME MyScreen: Name the screen "MyScreen"
$THREADNAME : Sets the thread name (dont use names that are to long
for netware, that will prevent your nlm from loading)

- Exports
-------

Exports will be handled like in win32:
procedure bla; CDECL; EXPORT;
begin
end;

exports bla name 'bla';

Be aware that without Name 'bla' this will be exported in upper-case.

- Netware import (.imp) files
---------------------------

Import files are needed by nlmconv as with other netware linkers. FreePascal is
searching import files via the specified library path (-Fl). If you plan to use
import files from novell be aware that they have to be converted from CR/LF to
LF only. The script 'convertimp' in rtl/netware/nwimp will do that.
If a module name is specified in an import, the module is automaticly
declared as autoload by FreePascal.

I.e. the following declaration needs nlmlib.imp and sets nlmlib.nlm as autoload:

FUNCTION rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL 'nlmlib.nlm' NAME 'rmdir';

while the following declaration only imports the symbol without autoloading:

FUNCTION rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL;

If nlmlib.nlm is not loaded while loading your nlm, you will get an error about
unknown symbols.


- Debugging
---------

Debugging is possible with gdb on Netware 4.11, 5, 6 and 6.5.
See http://home.arcor.de/armin.diehl/fpcnw/gdbnw.html for details


- Netware SDK
-----------

Delphi declarations for the multiplattform api is available at
http://developer.novell.com. You can download the sdk after registering
as a developer.
The files are designed for win32 so they will not work off the box.
I think changing the dll-name to the corrosponding nlm-name will work.
i.e. in calwin32.imp the following declaration:

function NWAbortServicingQueueJob2; StdCall; external 'calwin32.dll' index 231;

has to be changed to

function NWAbortServicingQueueJob2; CDecl; external 'calwin32.nlm';

- FreePascal RTL
--------------

Currently the following units are available for netware:

- SYSTEM
- CRT
- DOS
- SYSUTILS
- STRINGS
- KEYBOARD
- VIDEO
- MATH
- TYPINFO
- OBJECTS
- GETOPTS
- HEAPTRC
- VARUTILS
- CPU
- MMX
- WinSock2
- SYSTHRDS
- nwconio
- nwthreads
- nwsnut


[email protected]