mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-27 08:53:42 +02:00
222 lines
7.8 KiB
Plaintext
222 lines
7.8 KiB
Plaintext
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
|