* support for fcl, support for linking without debug info

* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
This commit is contained in:
armin 2003-03-25 18:17:54 +00:00
parent c6b7a67ca9
commit cc769a33ea
11 changed files with 312 additions and 185 deletions

View File

@ -1,8 +1,8 @@
#
# Don't edit, this file is generated by FPCMake Version 1.1 [2003/03/22]
# Don't edit, this file is generated by FPCMake Version 1.1 [2003/03/25]
#
default: all
MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos macosx emx
MAKEFILETARGETS=netware
override PATH:=$(subst \,/,$(PATH))
ifeq ($(findstring ;,$(PATH)),)
inUnix=1
@ -216,9 +216,9 @@ SYSTEMUNIT=sysnetwa
endif
override FPCOPT+=-Ur
override FPCOPT+=-dMT
CREATESMART=1
CREATESMART=0
OBJPASDIR=$(RTL)/objpas
override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas strings netware winsock2 dos crt objects sysutils typinfo math cpu mmx getopts heaptrc lineinfo sockets aio varutils video mouse keyboard types nwsnut nwserv nwnit nwprot
override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas strings winsock dos crt objects sysutils typinfo math cpu mmx getopts heaptrc lineinfo sockets aio varutils video mouse keyboard types nwsnut nwserv nwnit nwprot
override TARGET_LOADERS+=nwpre prelude
override TARGET_RSTS+=math typinfo varutils
override INSTALL_FPCPACKAGE=y
@ -545,8 +545,8 @@ ZIPSUFFIX=qnx
endif
ifeq ($(OS_TARGET),netware)
STATICLIBPREFIX=
PPUEXT=.ppn
OEXT=.on
PPUEXT=.ppu
OEXT=.o
ASMEXT=.s
SMARTEXT=.sl
STATICLIBEXT=.a
@ -1339,7 +1339,7 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
override INSTALLPPUFILES+=nwimp/aio.imp nwimp/aio.imp nwimp/audnlm32.imp \
nwimp/calnlm32.imp nwimp/ccs.imp nwimp/ccs-os.imp nwimp/clibaux.imp \
nwimp/clibctx.imp nwimp/clib.imp nwimp/clxnlm32.imp nwimp/dplsv386.imp \
nwimp/dsapi.imp nwimp/dsevent.imp nwimp/fpsm.imp nwimp/lib0.imp \
nwimp/dsapi.imp nwimp/dsevent.imp nwimp/lib0.imp \
nwimp/locnlm32.imp nwimp/ndpsrpc.imp nwimp/netnlm32.imp nwimp/nit.imp \
nwimp/nlmlib.imp nwimp/nwpsrv3x.imp nwimp/nwpsrv.imp nwimp/nwsnut.imp \
nwimp/requestr.imp nwimp/socklib.imp nwimp/streams.imp nwimp/threads.imp \

View File

@ -8,7 +8,7 @@ main=rtl
[target]
loaders=nwpre prelude
units=$(SYSTEMUNIT) systhrds objpas strings \
netware winsock2 \
winsock \
dos crt objects \
sysutils typinfo math \
cpu mmx getopts heaptrc lineinfo \
@ -53,6 +53,7 @@ endif
override FPCOPT+=-Ur
# endif
#debug, -a: dont delete asm, -al include lines
#override FPCOPT+=-a
#override FPCOPT+=-al
@ -61,7 +62,8 @@ override FPCOPT+=-Ur
override FPCOPT+=-dMT
# and alway use smartlinking
CREATESMART=1
#CREATESMART=1
CREATESMART=0
# Paths
OBJPASDIR=$(RTL)/objpas
@ -192,7 +194,7 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
override INSTALLPPUFILES+=nwimp/aio.imp nwimp/aio.imp nwimp/audnlm32.imp \
nwimp/calnlm32.imp nwimp/ccs.imp nwimp/ccs-os.imp nwimp/clibaux.imp \
nwimp/clibctx.imp nwimp/clib.imp nwimp/clxnlm32.imp nwimp/dplsv386.imp \
nwimp/dsapi.imp nwimp/dsevent.imp nwimp/fpsm.imp nwimp/lib0.imp \
nwimp/dsapi.imp nwimp/dsevent.imp nwimp/lib0.imp \
nwimp/locnlm32.imp nwimp/ndpsrpc.imp nwimp/netnlm32.imp nwimp/nit.imp \
nwimp/nlmlib.imp nwimp/nwpsrv3x.imp nwimp/nwpsrv.imp nwimp/nwsnut.imp \
nwimp/requestr.imp nwimp/socklib.imp nwimp/streams.imp nwimp/threads.imp \

View File

@ -1,38 +0,0 @@
@echo off
REM comile and install fpc rtl for netware under winnt/win2k
REM make seems to have a problem unter nt/w2k
REM
SET DEST=\compiler\fpc\units\netware
REM Compile and install system unit first
SET INC=-I../inc -I../i386 -I../objpas ../inc/strings.pp
SET OPT=-di386 -XX -O3 -Sg -Tnetware
del /Q *.ppn
del /Q *.on
ppc386 %OPT% -dSYSTEMDEBUG -FE. %INC%
copy *.ppn %DEST%
copy *.on %DEST%
REM copy the import files
copy nwimp\*.imp %DEST%
REM and build other stuff
#ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. nwpre.pp
asw nwpre.as -o nwpre.on
asw prelude.as -o prelude.on
ppc386 %OPT% %INC% dos.pp
ppc386 %OPT% %INC% crt.pp
ppc386 %OPT% %INC% ../objpas/objpas.pp
ppc386 %OPT% %INC% sysutils.pp
ppc386 %OPT% %INC% keyboard.pp
ppc386 %OPT% %INC% mouse.pp
ppc386 %OPT% %INC% video.pp
ppc386 %OPT% %INC% sockets.pp
ppc386 %OPT% %INC% netware.pp
ppc386 %OPT% %INC% winsock2.pp
ppc386 %OPT% %INC% aio.pp
copy *.on %DEST%
copy *.ppn %DEST%

View File

@ -219,7 +219,7 @@ end;
procedure textmode(mode : integer);
begin
Window (1,1,ScreenWidth,ScreenHeight);
Window (1,1,byte(ScreenWidth),byte(ScreenHeight));
ClrScr;
end;
@ -325,7 +325,7 @@ begin
rows := WinMaxY-WinMinY+1;
GetMem (p, rows * rowlen * 2);
FillWord (p^, rows * rowlen, fil);
_CopyToScreenMemory (rows,rowlen,p,WinMinX-1,WinMinY-1);
_CopyToScreenMemory (word(rows),word(rowlen),p,WinMinX-1,WinMinY-1);
FreeMem (p, rows * rowlen * 2);
end;
Gotoxy(1,1);
@ -455,8 +455,8 @@ begin
y:=WinMinY+y-1;
While (y<=WinMaxY) do
begin
_CopyFromScreenMemory (1,rowlen,p,WinMinX-1,y);
_CopyToScreenMemory (1,rowlen,p,WinMinX-1,y-1);
_CopyFromScreenMemory (1,rowlen,p,WinMinX-1,word(y));
_CopyToScreenMemory (1,rowlen,p,WinMinX-1,word(y-1));
inc(y);
end;
FillWord (p^,rowlen,fil);
@ -473,9 +473,10 @@ end;
procedure insline;
var
my,y : longint;
my : longint;
y : word;
fil : word;
rowlen,x : word;
rowlen : word;
p : pointer;
begin
fil:=32 or (textattr shl 8);
@ -485,12 +486,12 @@ begin
GetMem (p, rowlen*2);
while (my>=y) do
begin
_CopyFromScreenMemory (1,rowlen,p,WinMinX-1,my);
_CopyToScreenMemory (1,rowlen,p,WinMinX-1,my+1);
_CopyFromScreenMemory (1,rowlen,p,WinMinX-1,word(my));
_CopyToScreenMemory (1,rowlen,p,WinMinX-1,word(my+1));
dec(my);
end;
FillWord (p^,rowlen,fil);
_CopyToScreenMemory (1,rowlen,p,x,y);
_CopyToScreenMemory (1,rowlen,p,WinMinX-1,y);
FreeMem (p, rowlen*2);
end;

View File

@ -292,7 +292,7 @@ end;
function getvolnum (drive : byte) : longint;
var dir : STRING[255];
P,PS: BYTE;
P,PS,
V : LONGINT;
begin
if drive = 0 then
@ -389,10 +389,10 @@ VAR Buf : ARRAY [0..255] OF CHAR;
volumeNumber : LONGINT;
begin
volumeNumber := getvolnum (drive);
if volumeNumber >= 0 then
if (volumeNumber >= 0) and (volumeNumber <= 255) then
begin
{i think thats not the right function but for others i need a connection handle}
if _GetVolumeInfoWithNumber (volumeNumber,@Buf,
if _GetVolumeInfoWithNumber (byte(volumeNumber),@Buf,
TotalBlocks,
SectorsPerBlock,
availableBlocks,
@ -419,10 +419,10 @@ VAR Buf : ARRAY [0..255] OF CHAR;
volumeNumber : LONGINT;
begin
volumeNumber := getvolnum (drive);
if volumeNumber >= 0 then
if (volumeNumber >= 0) and (volumeNumber <= 255) then
begin
{i think thats not the right function but for others i need a connection handle}
if _GetVolumeInfoWithNumber (volumeNumber,@Buf,
if _GetVolumeInfoWithNumber (byte(volumeNumber),@Buf,
TotalBlocks,
SectorsPerBlock,
availableBlocks,
@ -858,7 +858,13 @@ end;
end.
{
$Log$
Revision 1.5 2002-09-07 16:01:20 peter
Revision 1.6 2003-03-25 18:17:54 armin
* support for fcl, support for linking without debug info
* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
Revision 1.5 2002/09/07 16:01:20 peter
* old logs removed and tabs fixed
}

View File

@ -45,17 +45,18 @@ _Prelude:
pushl %ebx
movl 0x14(%ebp),%edi
movl 0x18(%ebp),%esi
movl %esi, __uninitializedDataSize
movl 0x1c(%ebp),%ebx
movl 0x20(%ebp),%ecx
movl 0x28(%ebp),%eax
pushl $_pasStart_
pushl $_kNLMInfo
pushl %eax
movl 0x24(%ebp),%edx
movl 0x24(%ebp),%edx # 1b7f6
pushl %edx
pushl %ecx
pushl %ecx
pushl %ebx
pushl %esi
pushl %esi # uninitialized data size
pushl %edi
movl 0x10(%ebp),%edx
pushl %edx
@ -105,8 +106,37 @@ _Stop:
# LongDoubleSize : LONGINT; // gcc nwpre defines 12, watcom 8
# wchar_tSize : LONGINT;
# END;
.globl _kNLMInfo # will be used as data start
_kNLMInfo:
.ascii "NLMI"
.long 0,1,8,2
.text
.globl __getTextStart
__getTextStart:
movl $.text,%eax
ret
.text
.globl __getDataStart
__getDataStart:
movl $.data,%eax
ret
.text
.globl __getBssStart
__getBssStart:
movl $.bss,%eax
ret
.data
__uninitializedDataSize: .long
.text
.globl __getUninitializedDataSize
__getUninitializedDataSize:
movl __uninitializedDataSize, %eax
ret

View File

@ -20,13 +20,8 @@
2001/04/14 armin: additional functions for crt-unit
}
CONST Clib = 'clib.nlm';
NlmLib = 'nlmlib.nlm';
Threads = 'threads.nlm';
CalNlm = 'calnlm32.nlm';
ClxNlm = 'clxnlm32.nlm';
NitNlm = 'nit.nlm';
ThreadsNlm = 'threads.nlm';
CONST Clib = 'clib';
TYPE
dev_t = LONGINT;
@ -66,8 +61,8 @@ TYPE
st_spare : ARRAY [0..3] OF LONGINT;
END;
FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'stat_411';
FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'fstat_411';
FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL Clib NAME 'stat_411';
FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL CLib NAME 'fstat_411';
PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free';
@ -75,9 +70,9 @@ PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib;
PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib;
FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL Threads NAME 'BeginThread';
FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL NlmLib NAME 'GetThreadDataAreaPtr';
PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL NlmLib NAME 'SaveThreadDataAreaPtr';
FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL CLib NAME 'BeginThread';
FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL CLib NAME 'GetThreadDataAreaPtr';
PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL CLib NAME 'SaveThreadDataAreaPtr';
PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
@ -103,14 +98,14 @@ FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout';
FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr';
// FileIO by Fileno
FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'open';
FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'close';
FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'lseek';
FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chsize';
FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'tell';
FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'write';
FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'read';
FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'filelength';
FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'open';
FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'close';
FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'lseek';
FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'chsize';
FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'tell';
FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'write';
FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'read';
FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'filelength';
TYPE
NWModifyStructure =
@ -151,15 +146,15 @@ CONST MModifyNameBit = $0001;
MLastUpdatedInSecondsBit = $4000;
// Directory
FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chdir';
FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getcwd';
FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'mkdir';
FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'rmdir';
FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'ChangeDirectoryEntry';
FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'chdir';
FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL CLib NAME 'getcwd';
FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'mkdir';
FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'rmdir';
FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'ChangeDirectoryEntry';
// get fileno from stream
FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno';
FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'isatty';
FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'isatty';
(* values for 'o_flag' in open()... *)
CONST O_RDONLY = $0000; (* open for read only *)
@ -178,7 +173,7 @@ CONST O_RDONLY = $0000; (* open for read only *)
// File Utils
FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'unlink';
FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'unlink';
FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
// Error
@ -186,10 +181,10 @@ TYPE _PLONGINT = ^LONGINT;
FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib;
// Memory
FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'malloc';
FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'realloc';
PROCEDURE _free (what : POINTER); CDECL; EXTERNAL Threads NAME 'free';
FUNCTION _stackavail : LONGINT; CDECL; EXTERNAL Threads NAME 'stackavail';
FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'malloc';
FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'realloc';
PROCEDURE _free (what : POINTER); CDECL; EXTERNAL CLib NAME 'free';
FUNCTION _stackavail : LONGINT; CDECL; EXTERNAL CLib NAME 'stackavail';
// Debug
PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger';
@ -221,9 +216,9 @@ TYPE NWCONN_HANDLE = LONGINT;
Hour,Minute,Second,DayOfWeek : BYTE;
END;
PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL NitNlm NAME 'GetFileServerDateAndTime';
PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL CLib NAME 'GetFileServerDateAndTime';
FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD;
second:WORD):longint;cdecl; EXTERNAL NitNlm Name 'SetFileServerDateAndTime';
second:WORD):longint;cdecl; EXTERNAL CLib Name 'SetFileServerDateAndTime';
TYPE FILE_SERV_INFO = record
serverName : array[0..47] of char;
@ -250,7 +245,7 @@ TYPE FILE_SERV_INFO = record
end;
pFILE_SERV_INFO = ^FILE_SERV_INFO;
FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL NitNlm NAME 'GetServerInformation';
FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL CLib NAME 'GetServerInformation';
// Directory
TYPE NWDirEnt =
@ -277,17 +272,17 @@ TYPE NWDirEnt =
END;
PNWDirEnt = ^NWDirEnt;
FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'opendir_411';
FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'closedir';
FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'readdir';
FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL NlmLib NAME 'SetReaddirAttribute';
FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'opendir_411';
FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL CLib NAME 'closedir';
FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'readdir';
FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL CLib NAME 'SetReaddirAttribute';
// Environment
FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getenv';
FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL CLib NAME 'getenv';
// Volumes
FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeName';
FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeNumber';
FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeName';
FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeNumber';
FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE;
VolumeName : PCHAR;
VAR TotalBlocks : WORD;
@ -295,43 +290,43 @@ TYPE NWDirEnt =
VAR availableBlocks : WORD;
VAR totalDirectorySlots : WORD;
VAR availableDirSlots : WORD;
VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeInfoWithNumber';
FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetNumberOfVolumes';
VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeInfoWithNumber';
FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL CLib NAME 'GetNumberOfVolumes';
// Screen/Keyboad
PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyToScreenMemory';
PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyFromScreenMemory';
FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'DisplayInputCursor';
FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'HideInputCursor';
FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SetPositionOfInputCursor';
PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'gotoxy';
FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'GetSizeOfScreen';
FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'IsColorMonitor';
PROCEDURE _RingTheBell; CDECL; EXTERNAL ThreadsNlm NAME 'RingTheBell';
FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'SetCursorShape';
FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'GetCursorShape';
FUNCTION _wherex : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherex';
FUNCTION _wherey : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherey';
PROCEDURE _clrscr; CDECL; EXTERNAL ThreadsNlm NAME 'clrscr';
FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'kbhit';
FUNCTION _getch : CHAR; CDECL; EXTERNAL ThreadsNlm NAME 'getch';
PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL ThreadsNlm NAME 'delay';
FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetCtrlCharCheckMode';
FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetAutoScreenDestructionMode';
PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL Clib NAME 'CopyToScreenMemory';
PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL CLib NAME 'CopyFromScreenMemory';
FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'DisplayInputCursor';
FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'HideInputCursor';
FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL Clib NAME 'SetPositionOfInputCursor';
PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL Clib NAME 'gotoxy';
FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL CLib NAME 'GetSizeOfScreen';
FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL CLib NAME 'IsColorMonitor';
PROCEDURE _RingTheBell; CDECL; EXTERNAL CLib NAME 'RingTheBell';
FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'SetCursorShape';
FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'GetCursorShape';
FUNCTION _wherex : WORD; CDECL; EXTERNAL CLib NAME 'wherex';
FUNCTION _wherey : WORD; CDECL; EXTERNAL CLib NAME 'wherey';
PROCEDURE _clrscr; CDECL; EXTERNAL CLib NAME 'clrscr';
FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL Clib NAME 'kbhit';
FUNCTION _getch : CHAR; CDECL; EXTERNAL CLib NAME 'getch';
PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL Clib NAME 'delay';
FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetCtrlCharCheckMode';
FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetAutoScreenDestructionMode';
// Misc
FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL ThreadsNlm NAME 'memcpy';
FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL Clib NAME 'memcpy';
FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'OpenLocalSemaphore';
FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'WaitOnLocalSemaphore';
FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SignalLocalSemaphore';
FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'CloseLocalSemaphore';
FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'EnterCritSec';
FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'ExitCritSec';
FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'OpenLocalSemaphore';
FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'WaitOnLocalSemaphore';
FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'SignalLocalSemaphore';
FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'CloseLocalSemaphore';
FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'EnterCritSec';
FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'ExitCritSec';
FUNCTION _SetThreadGroupID (id : longint) : longint; CDecl; EXTERNAL ThreadsNlm NAME 'SetThreadGroupID';
FUNCTION _GetThreadGroupID : longint; CDecl; EXTERNAL ThreadsNlm NAME 'GetThreadGroupID';
FUNCTION _SetThreadGroupID (id : longint) : longint; CDecl; EXTERNAL CLib NAME 'SetThreadGroupID';
FUNCTION _GetThreadGroupID : longint; CDecl; EXTERNAL CLib NAME 'GetThreadGroupID';
CONST _SIGTERM = 6;
@ -340,7 +335,13 @@ PROCEDURE _Signal (Sig : longint; SigFunc : pointer); CDECL; EXTERNAL Clib NAME
{
$Log$
Revision 1.8 2003-02-16 17:46:11 armin
Revision 1.9 2003-03-25 18:17:54 armin
* support for fcl, support for linking without debug info
* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
Revision 1.8 2003/02/16 17:46:11 armin
* typo fixed
Revision 1.7 2002/09/07 16:01:20 peter

View File

@ -23,11 +23,15 @@
# it sets up the argc and argv and calls _nlm_main (in system.pp)
# This version uses the old _SetupArgv and not the newer _SetupArvV_411
#
.globl _pas_Start_
_pasStart_:
pushl $_nlm_main
call _SetupArgv
addl $4,%esp
ret
# this is a hack to avoid that FPC_NW_CHECKFUNCTION will be
# eleminated by the linker (with smartlinking)
call FPC_NW_CHECKFUNCTION
#
@ -43,6 +47,7 @@ _Prelude:
pushl %ebx
movl 0x14(%ebp),%edi
movl 0x18(%ebp),%esi
movl %esi, __uninitializedDataSize
movl 0x1c(%ebp),%ebx
movl 0x20(%ebp),%ecx
movl 0x28(%ebp),%eax
@ -97,3 +102,32 @@ _Stop:
_NLMID:
.long 0
.text
.globl __getTextStart
__getTextStart:
movl $.text,%eax
ret
.text
.globl __getDataStart
__getDataStart:
movl $.data,%eax
ret
.text
.globl __getBssStart
__getBssStart:
movl $.bss,%eax
ret
.data
__uninitializedDataSize: .long
.text
.globl __getUninitializedDataSize
__getUninitializedDataSize:
movl __uninitializedDataSize, %eax
ret

View File

@ -12,6 +12,7 @@
**********************************************************************}
{$mode objfpc}
{$R-}
unit Sockets;
Interface
@ -260,7 +261,13 @@ finalization
end.
{
$Log$
Revision 1.3 2003-03-23 17:47:15 armin
Revision 1.4 2003-03-25 18:17:54 armin
* support for fcl, support for linking without debug info
* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
Revision 1.3 2003/03/23 17:47:15 armin
* CloseSocket added
Revision 1.10 2003/01/01 14:34:22 peter

View File

@ -76,6 +76,7 @@ VAR
ArgV : ppchar;
NetwareCheckFunction : TNWCheckFunction;
NetwareMainThreadGroupID: longint;
NetwareCodeStartAddress : dword;
CONST
envp : ppchar = nil; {dummy to make heaptrc happy}
@ -140,9 +141,17 @@ procedure fpc_do_exit;external name 'FPC_DO_EXIT';
Startup
*****************************************************************************}
function __GetBssStart : pointer; external name '__getBssStart';
function __getUninitializedDataSize : longint; external name '__getUninitializedDataSize';
//function __getDataStart : longint; external name '__getDataStart';
function __GetTextStart : longint; external name '__getTextStart';
PROCEDURE nlm_main (_ArgC : LONGINT; _ArgV : ppchar); CDECL; [public,alias: '_nlm_main'];
BEGIN
// Initialize BSS
if __getUninitializedDataSize > 0 then
fillchar (__getBssStart^,__getUninitializedDataSize,0);
NetwareCodeStartAddress := __GetTextStart;
ArgC := _ArgC;
ArgV := _ArgV;
fpc_threadvar_relocate_proc := nil;
@ -168,7 +177,7 @@ begin
if not SigTermHandlerActive then
begin
if ExitCode <> 0 Then { otherwise we dont see runtime-errors }
PressAnyKeyToContinue;
_SetAutoScreenDestructionMode (false);
_exit (ExitCode);
end;
@ -790,10 +799,11 @@ Begin
{ Setup heap }
InitHeap;
SysInitExceptions;
SysInitStdIO;
{ Reset IO Error }
InOutRes:=0;
SysInitStdIO;
{Delphi Compatible}
IsLibrary := FALSE;
@ -805,7 +815,13 @@ Begin
End.
{
$Log$
Revision 1.16 2003-02-15 19:12:54 armin
Revision 1.17 2003-03-25 18:17:54 armin
* support for fcl, support for linking without debug info
* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
Revision 1.16 2003/02/15 19:12:54 armin
* changes for new threadvar support
Revision 1.15 2002/10/13 09:28:45 florian

View File

@ -4,7 +4,7 @@
This unit contains the declarations for the WinSock2
Socket Library for Netware and Win32
Copyright (c) 1999-2002 by the Free Pascal development team
Copyright (c) 1999-2003 by the Free Pascal development team
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
@ -19,18 +19,22 @@
**********************************************************************}
{$PACKRECORDS 1}
unit winsock2;
{$ifndef VER0_99_14}
{$ifndef NO_SMART_LINK}
{$define support_smartlink}
{$endif}
{$endif}
{$R-}
unit winsock;
{ ifndef VER0_99_14}
{ ifndef NO_SMART_LINK}
{ define support_smartlink}
{ endif}
{ endif}
{$ifdef support_smartlink}
{$smartlink on}
{$endif}
{ ifdef support_smartlink}
{ smartlink on}
{ endif}
{$smartlink off} {for now, there seems to be a problem with fpc or the linker !}
{$mode objfpc}
interface
@ -259,17 +263,20 @@ unit winsock2;
PInAddr = ^TInAddr;
sockaddr_in = record
sin_family : SmallInt; (* 2 byte *)
case integer of
0 : ( (* equals to sockaddr_in, size is 16 byte *)
sin_port : u_short; (* 2 byte *)
sin_addr : TInAddr; (* 4 byte *)
sin_zero : array[0..8-1] of char; (* 8 byte *)
sin_family : SmallInt; (* 2 byte *)
sin_port : u_short; (* 2 byte *)
sin_addr : TInAddr; (* 4 byte *)
sin_zero : array[0..7] of char; (* 8 byte *)
);
1 : ( (* equals to sockaddr, size is 16 byte *)
sin_data : array[0..14-1] of char; (* 14 byte *)
sa_family : SmallInt; (* 2 byte *)
sa_data : array[0..13] of char; (* 14 byte *)
);
end;
TSockAddrIn = sockaddr_in;
PSockAddrIn = ^TSockAddrIn;
TSockAddr = sockaddr_in;
@ -332,7 +339,7 @@ unit winsock2;
taken from the BSD file sys/socket.h.
}
const
INVALID_SOCKET = longint(not(1));
INVALID_SOCKET = u_long(not(1));
SOCKET_ERROR = -1;
SOCK_STREAM = 1;
SOCK_DGRAM = 2;
@ -1856,7 +1863,7 @@ unit winsock2;
function accept(s:TSocket; addr: PSockAddr; var addrlen : tOS_INT) : TSocket;stdcall;external winsockdll name 'accept';
{$endif}
function bind(s:TSocket; addr: PSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
function bind(s:TSocket; const addr: TSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
function bind(s:TSocket; var addr: TSockaddr;namelen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_Bind;
function closesocket(s:TSocket):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_closesocket;
{$ifdef netware}
function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
@ -1888,16 +1895,19 @@ unit winsock2;
function recv(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
function recv(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_recv;
function recvfrom(s:TSocket;buf:pchar; len:tOS_INT; flags:tOS_INT;from:PSockAddr; fromlen:ptOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;Const from:TSockAddr; var fromlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
function recvfrom(s:TSocket;var buf; len:tOS_INT; flags:tOS_INT;var from:TSockAddr; var fromlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif} external winsockdll name _fn_recvfrom;
function select(nfds:tOS_INT; readfds,writefds,exceptfds : PFDSet;timeout: PTimeVal):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_select;
function send(s:TSocket;Const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
function send(s:TSocket;const buf; len:tOS_INT; flags:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_send;
function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;Const toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
function sendto(s:TSocket; buf:pchar; len:tOS_INT; flags:tOS_INT;var toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_sendto;
function sendto(s:TSocket; const buf; len:tOS_INT; flags:tOS_INT;var toaddr:TSockAddr; tolen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_sendto;
function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pchar; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_setsockopt;
function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; Const optval; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; var optval; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_setsockopt;
function setsockopt(s:TSocket; level:tOS_INT; optname:tOS_INT; optval:pointer; optlen:tOS_INT):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name _fn_setsockopt;
@ -1916,9 +1926,8 @@ unit winsock2;
function getprotobyname(name:pchar):PProtoEnt;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name _fn_getprotobyname;
{ Microsoft Windows Extension function prototypes }
function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name 'WSAStartup';
function WSACleanup:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSACleanup';
function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
function WSACleanup:tOS_INT;
procedure WSASetLastError(iError:tOS_INT);{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSASetLastError';
function WSAGetLastError:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSAGetLastError';
{$ifndef netware}
@ -1952,6 +1961,11 @@ unit winsock2;
external winsockdll name '__WSAFDIsSet';
function __WSAFDIsSet_(s:TSocket; var FDSet:TFDSet):tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name '__WSAFDIsSet';
function FD_ISSET(s:TSocket; var FDSet:TFDSet):Bool;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name '__WSAFDIsSet';
{$ifndef netware}
function TransmitFile(hSocket:TSocket; hFile:THandle; nNumberOfBytesToWrite:dword;
nNumberOfBytesPerSend:DWORD; lpOverlapped:POverlapped;
@ -1978,7 +1992,7 @@ unit winsock2;
function WSAGetSelectEvent(Param:dword):Word;
function WSAGetSelectError(Param:dword):Word;
procedure FD_CLR(Socket:TSocket; var FDSet:TFDSet);
function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
{function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;}
procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
procedure FD_ZERO(var FDSet:TFDSet);
@ -2321,31 +2335,36 @@ unit winsock2;
end;
end;
function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
begin
FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
end;
{function FD_ISSET(Socket:TSocket; var FDSet:TFDSet):Boolean;
begin
FD_ISSET:=__WSAFDIsSet(Socket,FDSet);
end;}
procedure FD_SET(Socket:TSocket; var FDSet:TFDSet);
var i : integer;
begin
if FDSet.fd_count > FD_SETSIZE then
FDSet.fd_count := FD_SETSIZE;
for i := 1 to FDSet.fd_count do
if FDSet.fd_array[i-1] = Socket then exit; {this is what the c macro FD_SET does}
if FDSet.fd_count<FD_SETSIZE then
begin
if FDSet.fd_count<FD_SETSIZE then
begin
FDSet.fd_array[FDSet.fd_count]:=Socket;
Inc(FDSet.fd_count);
end;
FDSet.fd_array[FDSet.fd_count]:=Socket;
Inc(FDSet.fd_count);
end;
end;
procedure FD_ZERO(var FDSet:TFDSet);
begin
FDSet.fd_count:=0;
end;
var i : integer;
begin
for i := 0 to high (FDSet.fd_array) do
FDSet.fd_array[i] := INVALID_SOCKET;
FDSet.fd_count:=0;
end;
{$ifdef netware}
{windows has connect and accept in ws2_32.dll, netware has not, they
are defines as macros in ws2nlm.h}
are defined as macros in ws2nlm.h }
function connect(s:TSocket; addr:PSockAddr; namelen:tOS_INT):tOS_INT;
begin
connect := WSAConnect (s,addr,namelen,nil,nil,nil,nil);
@ -2369,8 +2388,57 @@ unit winsock2;
{$endif}
{AD 2003/03/25: Special for netware
if WSAStartup is called more than once, bad thinks will happen
on netware. This is not a problem under windows.
This happens with fcl because the unit initialization of SSockets and
resolve both calls WSAStartup, for the second startup we simply
return success without calling the WS2_32 WSAStartup }
function __WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
{$ifdef Netware}cdecl;{$else}stdcall;{$endif}
external winsockdll name 'WSAStartup';
function __WSACleanup:tOS_INT;{$ifdef Netware}cdecl;{$else}stdcall;{$endif}external winsockdll name 'WSACleanup';
var WSAstartupData : TWSADATA;
function WSACleanup:tOS_INT;
begin
if WSAstartupData.wVersion <> $ffff then
begin
Result := __WSACleanup;
if Result = 0 then WSAstartupData.wVersion := $ffff;
end else Result := WSANOTINITIALISED;
end;
function WSAStartup(wVersionRequired:word;var WSAData:TWSADATA):tOS_INT;
begin
if WSAstartupData.wVersion = $ffff then
begin
Result := __WSAStartup(wVersionRequired,WSAData);
if Result = 0 then WSAstartupData := WSAData;
Writeln (stderr,'WSAStartup called');
end else
begin
result := 0;
Writeln (stderr,'WSAStartup should be called only once !');
end;
end;
initialization
WSAstartupData.wVersion := $ffff;
finalization
WSACleanUp;
end.
{
$Log:
$Log$
Revision 1.1 2003-03-25 18:17:54 armin
* support for fcl, support for linking without debug info
* renamed winsock2 to winsock for win32 compatinility
* new sockets unit for netware
* changes for compiler warnings
}