123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- 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
- [email protected]
|