diff --git a/rtl/netware/README b/rtl/netware/README index 65db2c021e..00ac6be350 100644 --- a/rtl/netware/README +++ b/rtl/netware/README @@ -1,42 +1,22 @@ - 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. + Currently generating NetWare-NLM's only work under Linux and win32. (may work under other + unix versions also but this is not tested yet) Binutils with netware-support needed ==================================== - You need a version of binutils compiled with netware-support. (nlmconv has to be present) + You need a version of binutils compiled with netware-support. As of FreePascal 1.9.5 Nov 2004 + binutils needs to be named i386-netware-* (i.e. i386-netware-ld, i386-netware-nlmconv). 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 + ./configure --prefix=/usr --enable-shared --enable-target=i386-netware I used the prefix /usr because thats the default location on redhat (thats what I'm using) @@ -46,29 +26,38 @@ 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. + installed, use i386-netware-ld --version. The emulation 'i386nw' must be present. Also check that + i386-netware-nlmconv + is present and can be started without specifying the complete path of i386-netware-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 + Binutils for win32 and Fedora Core 2 are available from: + ftp://ftp.freepascal.org/pub/fpc/contrib/cross - 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. + Makefile. The default is /usr/lib/fpc/1.9.5/units/i386-netware/*. Compile and install the rtl with make install + + This will install the basic rtl files. To install all (packages,fcl and nlm's) do a + + make OS_TARGET=netware build + + and + + make OS_TARGET=netware install + + at the fpc source root dir. + Settings and needed files to compile for netware ================================================ @@ -76,9 +65,15 @@ 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 +#IFDEF Netware_clib + -Fu/usr/lib/fpc/1.9.5/units/i386-netware/* + -Fl/usr/lib/fpc/1.9.5/units/i386-netware/rtl +#ENDIF + +#IFDEF Netware_libc + -Fu/usr/lib/fpc/1.9.5/units/i386-netwlibc/* + -Fl/usr/lib/fpc/1.9.5/units/i386-netwlibc/rtl + -XPi386-netware- #ENDIF This adds the search path for the rtl-units as well as for the needed import-files. @@ -98,10 +93,10 @@ {$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} + {$Screenname FPC Hello World for Netware} BEGIN - WriteLn ('This is open source ! FreePascal for netware'); + WriteLn ('This is open source, FreePascal for netware'); END. Hints on using freepascal for nlm's @@ -118,7 +113,8 @@ 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 NONE : no output at all (do not use this, writeln, + even from a runtime error may crash the sever) $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) @@ -180,31 +176,4 @@ 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 diff --git a/rtl/netware/nwserv.pp b/rtl/netware/nwserv.pp index 1cce6dce0b..2fb3bb24e3 100644 --- a/rtl/netware/nwserv.pp +++ b/rtl/netware/nwserv.pp @@ -1509,25 +1509,24 @@ type { Resource tag signatures for AllocateResourceTag } const - AllocSignature = $54524C41; - AESProcessSignature = $50534541; + AllocSignature = $54524C41; + AESProcessSignature = $50534541; CacheNonMovableMemorySignature = $544D4E43; - ConsoleCommandSignature = $4D4F4343; - HardwareInterruptSignature = $50544E49; + ConsoleCommandSignature = $4D4F4343; + HardwareInterruptSignature = $50544E49; InterruptTimeCallBackSignature = $524D4954; - SemiPermMemorySignature = $454D5053; - DebuggerSignature = $47554244; - BreakpointSignature = $54504B42; -{ Data structure for RegisterConsoleCommand } -{ set by RegisterConsoleCommand } -{ parsing routing (user defined) } -{ set to resource tag } + SemiPermMemorySignature = $454D5053; + DebuggerSignature = $47554244; + BreakpointSignature = $54504B42; + type + TCommandParserFunc = function (screenID : scr_t; + commandLine : PChar):longint;cdecl; PcommandParserStructure = ^TcommandParserStructure; - TcommandParserStructure = record - Link : PcommandParserStructure; - parseRoutine : function (screenID:longint; commandLine:PBYTE):longint;cdecl; - RTag : longint; + TcommandParserStructure = record // Data structure for RegisterConsoleCommand + Link : PcommandParserStructure; // set by RegisterConsoleCommand + parseRoutine : TCommandParserFunc; // parsing routing (user defined) + RTag : longint; // set to resource tag end; { @@ -1962,6 +1961,8 @@ const ECDetachedBit = $00000008; ECDirectFileSystemBit = $00000020; ECFileWriteThroughBit = $00000040; + HANDLEDCOMMAND = 0; + NOTMYCOMMAND = 1; {$include npackoff.inc} function AllocateResourceTag (NLMHandle:TNlmHandle; @@ -2000,6 +2001,7 @@ function NWGetSearchPathElement (searchPathNumber:longint; searchPath:PChar):longint;cdecl;external 'clib' name 'NWGetSearchPathElement'; function NWInsertSearchPath(searchPathNumber:longint; path:PChar):longint;cdecl;external 'clib' name 'NWInsertSearchPath'; function RegisterConsoleCommand(newCommandParser:PcommandParserStructure):longint;cdecl;external 'clib' name 'RegisterConsoleCommand'; +function RegisterConsoleCommand(var newCommandParser:TcommandParserStructure):longint;cdecl;external 'clib' name 'RegisterConsoleCommand'; function RegisterForEvent (eventType:longint; reportProcedure:TreportProcedure; warnProcedure:TwarnProcedure):longint;cdecl;external 'clib' name 'RegisterForEvent'; @@ -2032,6 +2034,7 @@ procedure SynchronizeStart;cdecl;external 'clib' name 'SynchronizeStart'; function UnimportSymbol (NLMHandle:TNlmHandle; symbolName:Pchar):longint;cdecl;external 'clib' name 'UnimportSymbol'; function UnRegisterConsoleCommand (commandParserToDelete:PcommandParserStructure):longint;cdecl;external 'clib' name 'UnRegisterConsoleCommand'; +function UnRegisterConsoleCommand (var commandParserToDelete:TcommandParserStructure):longint;cdecl;external 'clib' name 'UnRegisterConsoleCommand'; function UnregisterForEvent (eventHandle:longint):longint;cdecl;external 'clib' name 'UnregisterForEvent'; {-nwfileio.h-------------------------------------------------------------------} type @@ -5374,7 +5377,10 @@ end. { $Log$ - Revision 1.5 2004-12-16 12:42:55 armin + Revision 1.6 2004-12-29 13:01:42 armin + * made commandParser more compatible between clib and libc + + Revision 1.5 2004/12/16 12:42:55 armin * added NetWare Alert * added sysutils.sleep diff --git a/rtl/netwlibc/libc.pp b/rtl/netwlibc/libc.pp index 1caa3f968e..3e804192ce 100644 --- a/rtl/netwlibc/libc.pp +++ b/rtl/netwlibc/libc.pp @@ -41,7 +41,7 @@ Type void = pointer; cint = longint; TNLMHandle = Pointer; - + const NullNlmHandle = nil; @@ -4523,22 +4523,28 @@ function RegisterCommand(NLMHandle:TNLMHandle; rTag:rtag_t; keywordFlags:dword; { legacy command parsing; uses ConsoleCommandSignature... } type - Parser_t = function (scrID:scr_t; commandline:Pchar):longint;cdecl; + TCommandParserFunc = function (scrID:scr_t; commandline:Pchar):longint;cdecl; + { allocate with ConsoleCommandSignature } - PCommandParser_t = ^TCommandParser; - TCommandParser = record + PCommandParserStructure = ^TCommandParserStructure; + TCommandParserStructure = record link : pointer; - parser : Parser_t; - rTag : rtag_t; + case longint of + 0 : (parser : TCommandParserFunc; rTag : rtag_t); + 1 : (parseRoutine : TCommandParserFunc; rTag2 : rtag_t); end; - PCommandParser = PCommandParser_t; + TCommandParser = TCommandParserStructure; + PCommandParser = PCommandParserStructure; +const + HANDLEDCOMMAND = 0; + NOTMYCOMMAND = 1; function ParseCommand(commandLine:Pchar):longint;cdecl;external system_nlm name 'ParseCommand'; -function RegisterConsoleCommand(cmdParser:PCommandParser_t):longint;cdecl;external system_nlm name 'RegisterConsoleCommand'; +function RegisterConsoleCommand(cmdParser:PCommandParser):longint;cdecl;external system_nlm name 'RegisterConsoleCommand'; function RegisterConsoleCommand(var cmdParser:TCommandParser):longint;cdecl;external system_nlm name 'RegisterConsoleCommand'; -function UnRegisterConsoleCommand(cmdParser:PCommandParser_t):longint;cdecl;external libc_nlm name 'UnRegisterConsoleCommand'; +function UnRegisterConsoleCommand(cmdParser:PCommandParser):longint;cdecl;external libc_nlm name 'UnRegisterConsoleCommand'; function UnRegisterConsoleCommand(var cmdParser:TCommandParser):longint;cdecl;external libc_nlm name 'UnRegisterConsoleCommand'; const @@ -9111,7 +9117,10 @@ end. { $Log$ - Revision 1.7 2004-12-16 12:42:55 armin + Revision 1.8 2004-12-29 13:01:43 armin + * made commandParser more compatible between clib and libc + + Revision 1.7 2004/12/16 12:42:55 armin * added NetWare Alert * added sysutils.sleep