fpc/rtl/netware
2001-04-16 18:53:18 +00:00
..
nwimp * updates from Armin commited 2001-04-16 18:53:18 +00:00
tests * updates from Armin commited 2001-04-16 18:33:14 +00:00
crt.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
dos.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
errno.inc * added logs, fixed email address of Armin, it is 2001-04-11 14:17:00 +00:00
keyboard.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
Makefile * updates from Armin commited 2001-04-16 18:33:14 +00:00
mouse.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
netware.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
nwpre.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
nwsock.inc * updates from Armin commited 2001-04-16 18:33:14 +00:00
nwsys.inc * updates from Armin commited 2001-04-16 18:33:14 +00:00
objinc.inc * updates from Armin commited 2001-04-16 18:33:14 +00:00
README * updates from Armin commited 2001-04-16 18:33:14 +00:00
sockets.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
system.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
sysutils.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
varutils.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00
video.pp * updates from Armin commited 2001-04-16 18:33:14 +00:00

    News
    ====
    
    2001/04/16 armin:
     - implemented CRT and SYSUTILS
     - nwimp/convertimp to convert .imp files to unix



    General
    =======

    Currently generating NetWare-NLM's only work under Linux. (may be under bsd also)
    This is because nlmconv from binutils does not work with i.e. win32 coff object files. 
    It works fine with ELF-Objects.
    
    
    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.
    
    
    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
      
    Settings and needed files to compile for netware
    ================================================
    
    Edit your /etc/ppc386.cfg and add the rtl source path for netware. This are my settings,
    you may paste it to your ppc386.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}
    
    BEGIN
      WriteLn ('This is open source ! FreePascal for netware');
    END.
    
    Hints on using freepascal for nlm's
    ===================================

    - Compiler Switches
      -----------------
      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 ...

      Sorry, Displaying copyright does not work with nlmconv from gnu bunutils. There is a patch
      available for nlmconv but currently there is no compiler switch in fpc. Implementing the
      compiler switch is on my todo list. This is also valid for the screen-name.
      
    - 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 yout nlm, you will get an error abount
      unknown symbols. 
      

    - Debugging
      ---------
      
      Thats currently a problem. There is no source level debugger available. The only way
      to debug 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 read about plans to adapt gdb to current netware versions. As soon as i have news
      about gdb i will change this document.
      
    - 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