mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 19:39:40 +02:00
.. | ||
demos | ||
nwimp | ||
tests | ||
aio.pp | ||
classes.pp | ||
crt.pp | ||
dos.pp | ||
errno.inc | ||
keyboard.pp | ||
Makefile | ||
Makefile.fpc | ||
mouse.pp | ||
netware.pp | ||
npackoff.inc | ||
npackon.inc | ||
nwnit.pp | ||
nwpre.as | ||
nwpre.pp | ||
nwprot.pp | ||
nwserv.pp | ||
nwsnut.pp | ||
nwsock.inc | ||
nwsys.inc | ||
prelude.as | ||
qos.inc | ||
README | ||
sockets.pp | ||
system.pp | ||
systhrds.pp | ||
sysutils.pp | ||
tthread.inc | ||
varutils.pp | ||
video.pp | ||
winsock.pp |
News ==== 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.1/units/netware/rtl. Compile and install the rtl with make install on win32 you can use the script compile.cmd. You need to adjust the destination directory in the script. 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.1/units/netware/rtl -Fl/usr/lib/fpc/1.1/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) $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 --------- Thats currently a problem. As for as i know, there is no source level debugger available that works with freepascal. (But i have a modified version of Novells Rdebug that works with nlms generated by freepascal. Currently i'm waiting for novell to answer my questions about redistributing Rdebug. The only way to debug i know is using the netware internal debugger or nwdbg. Nwdbg is a debugger on assembler level written by Jan Beulich. Symbols are supported. You can get nwdbg for netware 4.11,5.0 or 5.1 at developer.novell.com. I have no Information about netware 6 yet. I also have a compiled version of gdbserve.nlm for gdb on my homepage but this does not seem to be stable and will only run on netwar 4.x. I also have a patched version of novells RDebug, you can try http://home.arcor.de/armin.diehl/fpcnw/Rdebug.exe - 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 armin@freepascal.org