DEADSOFTWARE

lib: Replace the modified ENet header with the original and up-to-date one as a Git...
authorDmitry D. Chernov <blackdoomer@yandex.ru>
Sat, 11 Mar 2023 06:45:21 +0000 (16:45 +1000)
committerDmitry D. Chernov <blackdoomer@yandex.ru>
Sat, 11 Mar 2023 06:53:36 +0000 (16:53 +1000)
.gitmodules [new file with mode: 0644]
src/game/g_net.pas
src/lib/enet/ENet-Pascal [new submodule]
src/lib/enet/enet.pp

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..74bfcb3
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "src/lib/enet/ENet-Pascal"]
+       path = src/lib/enet/ENet-Pascal
+       url = https://github.com/cher-nov/ENet-Pascal.git
index 1c2e616d71c1d4cc745b6d4667f1d28cb0775025..a743fa1cfad95dbe8791937cb819c12f72a23ff0 100644 (file)
@@ -207,13 +207,13 @@ procedure g_Net_Flush();
 function  g_Net_Host(IPAddr: LongWord; Port: enet_uint16; MaxClients: Cardinal = 16): Boolean;
 procedure g_Net_Host_Die();
 procedure g_Net_Host_Send(ID: Integer; Reliable: Boolean; Chan: Byte = NET_CHAN_GAME);
-function  g_Net_Host_Update(): enet_size_t;
+procedure g_Net_Host_Update();
 
 function  g_Net_Connect(IP: string; Port: enet_uint16): Boolean;
 procedure g_Net_Disconnect(Forced: Boolean = False);
 procedure g_Net_Client_Send(Reliable: Boolean; Chan: Byte = NET_CHAN_GAME);
-function  g_Net_Client_Update(): enet_size_t;
-function  g_Net_Client_UpdateWhileLoading(): enet_size_t;
+procedure g_Net_Client_Update();
+procedure g_Net_Client_UpdateWhileLoading();
 
 function  g_Net_Client_ByName(Name: string): pTNetClient;
 function  g_Net_Client_ByPlayer(PID: Word): pTNetClient;
@@ -1748,7 +1748,7 @@ begin
 end;
 
 
-function g_Net_Host_Update(): enet_size_t;
+procedure g_Net_Host_Update();
 var
   IP: string;
   Port: Word;
@@ -1756,7 +1756,6 @@ var
   TC: pTNetClient;
 begin
   IP := '';
-  Result := 0;
 
   if NetUseMaster then g_Net_Slist_Pulse();
   g_Net_Host_CheckPings();
@@ -1941,9 +1940,8 @@ begin
   g_Net_Flush(); // FIXME: for now, send immediately
 end;
 
-function g_Net_Client_Update(): enet_size_t;
+procedure g_Net_Client_Update();
 begin
-  Result := 0;
   while (NetHost <> nil) and (enet_host_service(NetHost, @NetEvent, 0) > 0) do
   begin
     case NetEvent.kind of
@@ -1957,16 +1955,14 @@ begin
       ENET_EVENT_TYPE_DISCONNECT:
       begin
         g_Net_Disconnect(True);
-        Result := 1;
         Exit;
       end;
     end;
   end
 end;
 
-function g_Net_Client_UpdateWhileLoading(): enet_size_t;
+procedure g_Net_Client_UpdateWhileLoading();
 begin
-  Result := 0;
   while (enet_host_service(NetHost, @NetEvent, 0) > 0) do
   begin
     case NetEvent.kind of
@@ -1980,7 +1976,6 @@ begin
       ENET_EVENT_TYPE_DISCONNECT:
       begin
         g_Net_Disconnect(True);
-        Result := 1;
         Exit;
       end;
     end;
diff --git a/src/lib/enet/ENet-Pascal b/src/lib/enet/ENet-Pascal
new file mode 160000 (submodule)
index 0000000..87173dc
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 87173dcfe9955f16ae6d2022d3d6aab887720040
index cbb96b0f33d6d2cc3f444eaf5b87a79ebbccbf48..ad5ac887e05e30827becc26740a1f592d5820101 100644 (file)
@@ -1,18 +1,9 @@
 {.$DEFINE LIBENET_WINDOZE_STATIC}
 
-{$MODE OBJFPC}
-{$PACKRECORDS C}
-
 {$IFDEF WIN32}
   {$DEFINE MSWINDOWS}
 {$ENDIF}
 
-{$LONGSTRINGS ON}
-{$MACRO ON}
-
-{$Z4} // Force four-byte enums
-
-
 {$IFDEF MSWINDOWS}
   {$IFDEF LIBENET_WINDOZE_STATIC}
     {$LINKLIB libenet.a}
     {$LINKLIB libmingw32.a}
     {$LINKLIB libmsvcrt.a}
     {$LINKLIB libgcc.a}
-    {$DEFINE libraryLibENetDecl := cdecl}
-    {$DEFINE libraryLibENetImp := cdecl; external}
-    {$DEFINE libraryLibENetVar := cvar; external}
-  {$ELSE}
-    {$DEFINE libraryLibENetDecl := cdecl}
-    {$DEFINE libraryLibENetImp := cdecl; external 'enet.dll'}
-    {.$DEFINE libraryLibENetVar := cvar; external}
-    {$DEFINE libraryLibENetVar := external 'enet.dll'}
-    // external LIBNAME name 'var_name' would've been more correct here
-    // because just external is case insensitive, but fuck it
+    {$DEFINE libraryENet := cdecl; external}
   {$ENDIF}
 {$ELSE}
   {$IFDEF DARWIN}
     {$LINKLIB libenet}
-    {$DEFINE libraryLibENetDecl := cdecl}
-    {$DEFINE libraryLibENetImp := cdecl; external}
-    {$DEFINE libraryLibENetVar := cvar; external}
-  {$ELSE}
-    {$DEFINE libraryLibENetDecl := cdecl}
-    {$DEFINE libraryLibENetImp := cdecl; external 'enet'}
-    {$DEFINE libraryLibENetVar := cvar; external 'enet'}
+    {$DEFINE libraryENet := cdecl; external}
   {$ENDIF}
 {$ENDIF}
 
 
-unit ENet;
-
-{
-  ENet - Reliable UDP networking library
-  Copyright (c) 2002-2015 Lee Salzman
-
-  DLL header for Free Pascal
-  Version 3 for 1.3.13: 2016-08-24
-  Copyright (c) 2015-2016 Dmitry D. Chernov aka Black Doomer
-
-  Permission is hereby granted, free of charge, to any person obtaining a
-  copy of this software and associated documentation files (the "Software"),
-  to deal in the Software without restriction, including without limitation
-  the rights to use, copy, modify, merge, publish, distribute, sublicense,
-  and/or sell copies of the Software, and to permit persons to whom the
-  Software is furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in
-  all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-  DEALINGS IN THE SOFTWARE.
-}
-
-interface
-
-uses
-  ctypes,
-{$IFDEF WINDOWS}
-  WinSock2;
-{$ELSE}
-  BaseUnix, Sockets;
-{$ENDIF}
-
-////////////////////////////////////////////////////////////////////////////////
-// types.h
-////////////////////////////////////////////////////////////////////////////////
-
-type
-  enet_uint8 = cuchar;
-  penet_uint8 = ^enet_uint8;
-
-  enet_uint16 = cushort;
-  penet_uint16 = ^enet_uint16;
-
-  enet_uint32 = cuint;  // TODO: why 'int' instead of 'long'?
-  penet_uint32 = ^enet_uint32;
-
-  enet_size_t = NativeUInt;
-  penet_size_t = ^enet_size_t;
-
-////////////////////////////////////////////////////////////////////////////////
-// callbacks.h
-////////////////////////////////////////////////////////////////////////////////
-
-type
-  pENetCallbacks = ^TENetCallbacks;
-  TENetCallbacks = record
-    malloc    : function( size: csize_t ): Pointer; cdecl;
-    free      : procedure( memory: Pointer ); cdecl;
-    no_memory : procedure(); cdecl;
-  end;
-
-////////////////////////////////////////////////////////////////////////////////
-// protocol.h
-////////////////////////////////////////////////////////////////////////////////
-
-const
-  { unnamed enums }
-  ENET_PROTOCOL_MINIMUM_MTU             = 576;
-  ENET_PROTOCOL_MAXIMUM_MTU             = 4096;
-  ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32;
-  ENET_PROTOCOL_MINIMUM_WINDOW_SIZE     = 4096;
-  ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE     = 65536;
-  ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT   = 1;
-  ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT   = 255;
-  ENET_PROTOCOL_MAXIMUM_PEER_ID         = $FFF;
-  ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT  = 1024 * 1024;
-
-  { enum ENetProtocolFlag }
-  ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = 1 shl 7;
-  ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = 1 shl 6;
-  ENET_PROTOCOL_HEADER_FLAG_COMPRESSED   = 1 shl 14;
-  ENET_PROTOCOL_HEADER_FLAG_SENT_TIME    = 1 shl 15;
-  ENET_PROTOCOL_HEADER_FLAG_MASK         = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED or
-                                           ENET_PROTOCOL_HEADER_FLAG_SENT_TIME;
-  ENET_PROTOCOL_HEADER_SESSION_MASK      = 3 shl 12;
-  ENET_PROTOCOL_HEADER_SESSION_SHIFT     = 12;
-
-type
-  { enums }
-  ENetProtocolCommand = ( ENET_PROTOCOL_COMMAND_NONE,
-                          ENET_PROTOCOL_COMMAND_ACKNOWLEDGE,
-                          ENET_PROTOCOL_COMMAND_CONNECT,
-                          ENET_PROTOCOL_COMMAND_VERIFY_CONNECT,
-                          ENET_PROTOCOL_COMMAND_DISCONNECT,
-                          ENET_PROTOCOL_COMMAND_PING,
-                          ENET_PROTOCOL_COMMAND_SEND_RELIABLE,
-                          ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE,
-                          ENET_PROTOCOL_COMMAND_SEND_FRAGMENT,
-                          ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED,
-                          ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT,
-                          ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE,
-                          ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT,
-                          ENET_PROTOCOL_COMMAND_COUNT,
-                          ENET_PROTOCOL_COMMAND_MASK = $0F );
-
-  { structs / unions }
-  pENetProtocolHeader = ^ENetProtocolHeader;
-  ENetProtocolHeader = packed record
-    peerID   : enet_uint16;
-    sentTime : enet_uint16;
-  end;
-
-  pENetProtocolCommandHeader = ^ENetProtocolCommandHeader;
-  ENetProtocolCommandHeader = packed record
-    command                : enet_uint8;
-    channelID              : enet_uint8;
-    reliableSequenceNumber : enet_uint16;
-  end;
-
-  pENetProtocolAcknowledge = ^ENetProtocolAcknowledge;
-  ENetProtocolAcknowledge = packed record
-    header                         : ENetProtocolCommandHeader;
-    receivedReliableSequenceNumber : enet_uint16;
-    receivedSentTime               : enet_uint16;
-  end;
-
-  pENetProtocolConnect = ^ENetProtocolConnect;
-  ENetProtocolConnect = packed record
-    header                     : ENetProtocolCommandHeader;
-    outgoingPeerID             : enet_uint16;
-    incomingSessionID          : enet_uint8;
-    outgoingSessionID          : enet_uint8;
-    mtu                        : enet_uint32;
-    windowSize                 : enet_uint32;
-    channelCount               : enet_uint32;
-    incomingBandwidth          : enet_uint32;
-    outgoingBandwidth          : enet_uint32;
-    packetThrottleInterval     : enet_uint32;
-    packetThrottleAcceleration : enet_uint32;
-    packetThrottleDeceleration : enet_uint32;
-    connectID                  : enet_uint32;
-    data                       : enet_uint32;
-  end;
-
-  pENetProtocolVerifyConnect = ^ENetProtocolVerifyConnect;
-  ENetProtocolVerifyConnect = packed record
-    header                     : ENetProtocolCommandHeader;
-    outgoingPeerID             : enet_uint16;
-    incomingSessionID          : enet_uint8;
-    outgoingSessionID          : enet_uint8;
-    mtu                        : enet_uint32;
-    windowSize                 : enet_uint32;
-    channelCount               : enet_uint32;
-    incomingBandwidth          : enet_uint32;
-    outgoingBandwidth          : enet_uint32;
-    packetThrottleInterval     : enet_uint32;
-    packetThrottleAcceleration : enet_uint32;
-    packetThrottleDeceleration : enet_uint32;
-    connectID                  : enet_uint32;
-  end;
-
-  pENetProtocolBandwidthLimit = ^ENetProtocolBandwidthLimit;
-  ENetProtocolBandwidthLimit = packed record
-    header            : ENetProtocolCommandHeader;
-    incomingBandwidth : enet_uint32;
-    outgoingBandwidth : enet_uint32;
-  end;
-
-  pENetProtocolThrottleConfigure = ^ENetProtocolThrottleConfigure;
-  ENetProtocolThrottleConfigure = packed record
-    header                     : ENetProtocolCommandHeader;
-    packetThrottleInterval     : enet_uint32;
-    packetThrottleAcceleration : enet_uint32;
-    packetThrottleDeceleration : enet_uint32;
-  end;
-
-  pENetProtocolDisconnect = ^ENetProtocolDisconnect;
-  ENetProtocolDisconnect = packed record
-    header : ENetProtocolCommandHeader;
-    data   : enet_uint32;
-  end;
-
-  pENetProtocolPing = ^ENetProtocolPing;
-  ENetProtocolPing = packed record
-    header : ENetProtocolCommandHeader;
-  end;
-
-  pENetProtocolSendReliable = ^ENetProtocolSendReliable;
-  ENetProtocolSendReliable = packed record
-    header     : ENetProtocolCommandHeader;
-    dataLength : enet_uint16;
-  end;
-
-  pENetProtocolSendUnreliable = ^ENetProtocolSendUnreliable;
-  ENetProtocolSendUnreliable = packed record
-    header                   : ENetProtocolCommandHeader;
-    unreliableSequenceNumber : enet_uint16;
-    dataLength               : enet_uint16;
-  end;
-
-  pENetProtocolSendUnsequenced = ^ENetProtocolSendUnsequenced;
-  ENetProtocolSendUnsequenced = packed record
-    header           : ENetProtocolCommandHeader;
-    unsequencedGroup : enet_uint16;
-    dataLength       : enet_uint16;
-  end;
-
-  pENetProtocolSendFragment = ^ENetProtocolSendFragment;
-  ENetProtocolSendFragment = packed record
-    header              : ENetProtocolCommandHeader;
-    startSequenceNumber : enet_uint16;
-    dataLength          : enet_uint16;
-    fragmentCount       : enet_uint32;
-    fragmentNumber      : enet_uint32;
-    totalLength         : enet_uint32;
-    fragmentOffset      : enet_uint32;
-  end;
-
-  pENetProtocol = ^TENetProtocol;
-  TENetProtocol = packed record //union
-    case Byte of
-      0 : (header            : ENetProtocolCommandHeader);
-      1 : (acknowledge       : ENetProtocolAcknowledge);
-      2 : (connect           : ENetProtocolConnect);
-      3 : (verifyConnect     : ENetProtocolVerifyConnect);
-      4 : (disconnect        : ENetProtocolDisconnect);
-      5 : (ping              : ENetProtocolPing);
-      6 : (sendReliable      : ENetProtocolSendReliable);
-      7 : (sendUnreliable    : ENetProtocolSendUnreliable);
-      8 : (sendUnsequenced   : ENetProtocolSendUnsequenced);
-      9 : (sendFragment      : ENetProtocolSendFragment);
-      10: (bandwidthLimit    : ENetProtocolBandwidthLimit);
-      11: (throttleConfigure : ENetProtocolThrottleConfigure);
-  end;
-
-////////////////////////////////////////////////////////////////////////////////
-// win32.h / unix.h
-////////////////////////////////////////////////////////////////////////////////
-
-const
-{$IFDEF WINDOWS}
-  ENET_SOCKET_NULL = INVALID_SOCKET;
-{$ELSE}
-  ENET_SOCKET_NULL = -1;
-{$ENDIF}
-
-type
-{$IFDEF WINDOWS}
-  ENetSocket = TSocket;
-{$ELSE}
-  ENetSocket = cint;
-{$ENDIF}
-
-  ENetSocketSet = TFDSet;
-  pENetSocketSet = ^ENetSocketSet;
-
-  pENetBuffer = ^ENetBuffer;
-  ENetBuffer = record
-  {$IFDEF WINDOWS}
-    dataLength : csize_t;
-    data       : Pointer;
-  {$ELSE}
-    data       : Pointer;
-    dataLength : csize_t;
-  {$ENDIF}
-  end;
-
-{ inline macros }
-
-function ENET_HOST_TO_NET_16( value: cuint16 ): cuint16; inline;
-function ENET_HOST_TO_NET_32( value: cuint32 ): cuint32; inline;
-
-function ENET_NET_TO_HOST_16( value: cuint16 ): cuint16; inline;
-function ENET_NET_TO_HOST_32( value: cuint32 ): cuint32; inline;
-
-procedure ENET_SOCKETSET_EMPTY( var sockset: ENetSocketSet ); inline;
-procedure ENET_SOCKETSET_ADD( var sockset: ENetSocketSet; socket: ENetSocket ); inline;
-procedure ENET_SOCKETSET_REMOVE( var sockset: ENetSocketSet; socket: ENetSocket ); inline;
-function ENET_SOCKETSET_CHECK( var sockset: ENetSocketSet; socket: ENetSocket ): cbool; inline;
-
-////////////////////////////////////////////////////////////////////////////////
-// list.h
-////////////////////////////////////////////////////////////////////////////////
-
-type
-  pENetListNode = ^ENetListNode;
-  ENetListNode = record
-    next     : pENetListNode;
-    previous : pENetListNode;
-  end;
-
-  pENetList = ^TENetList;
-  TENetList = record
-    sentinel : ENetListNode;
-  end;
-
-  ENetListIterator = pENetListNode;
-
-{ inline macros }
-function enet_list_begin( list: pENetList ): ENetListIterator; inline;
-function enet_list_end( list: pENetList ): ENetListIterator; inline;
-
-function enet_list_empty( list: pENetList ): Boolean; inline;
-
-function enet_list_next( iterator: ENetListIterator ): ENetListIterator; inline;
-function enet_list_previous( iterator: ENetListIterator ): ENetListIterator; inline;
-
-function enet_list_front( list: pENetList ): Pointer; inline;
-function enet_list_back( list: pENetList ): Pointer; inline;
-
-////////////////////////////////////////////////////////////////////////////////
-// time.h
-////////////////////////////////////////////////////////////////////////////////
-
-const
-  ENET_TIME_OVERFLOW = 86400000;
-
-{ inline macros }
-function ENET_TIME_LESS( const a, b: cint ): cbool; inline;
-function ENET_TIME_GREATER( const a, b: cint ): cbool; inline;
-
-function ENET_TIME_LESS_EQUAL( const a, b: cint ): cbool; inline;
-function ENET_TIME_GREATER_EQUAL( const a, b: cint ): cbool; inline;
-
-function ENET_TIME_DIFFERENCE( const a, b: cint ): cint; inline;
-
-////////////////////////////////////////////////////////////////////////////////
-// enet.h
-////////////////////////////////////////////////////////////////////////////////
-
-const
-  { defines }
-  ENET_VERSION_MAJOR = 1;
-  ENET_VERSION_MINOR = 3;
-  ENET_VERSION_PATCH = 13;
-
-  ENET_HOST_ANY       = 0;
-  ENET_HOST_BROADCAST_ = $FFFFFFFF;  // "_" due to name conflict
-  ENET_PORT_ANY       = 0;
-
-  ENET_BUFFER_MAXIMUM = 1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS;
-
-  { unnamed enums }
-  ENET_HOST_RECEIVE_BUFFER_SIZE          = 256 * 1024;
-  ENET_HOST_SEND_BUFFER_SIZE             = 256 * 1024;
-  ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL  = 1000;
-  ENET_HOST_DEFAULT_MTU                  = 1400;
-  ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE  = 32 * 1024 * 1024;
-  ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024;
-
-  ENET_PEER_DEFAULT_ROUND_TRIP_TIME      = 500;
-  ENET_PEER_DEFAULT_PACKET_THROTTLE      = 32;
-  ENET_PEER_PACKET_THROTTLE_SCALE        = 32;
-  ENET_PEER_PACKET_THROTTLE_COUNTER      = 7;
-  ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2;
-  ENET_PEER_PACKET_THROTTLE_DECELERATION = 2;
-  ENET_PEER_PACKET_THROTTLE_INTERVAL     = 5000;
-  ENET_PEER_PACKET_LOSS_SCALE            = 1 shl 16;
-  ENET_PEER_PACKET_LOSS_INTERVAL         = 10000;
-  ENET_PEER_WINDOW_SIZE_SCALE            = 64 * 1024;
-  ENET_PEER_TIMEOUT_LIMIT                = 32;
-  ENET_PEER_TIMEOUT_MINIMUM              = 5000;
-  ENET_PEER_TIMEOUT_MAXIMUM              = 30000;
-  ENET_PEER_PING_INTERVAL_               = 500;  // "_" due to name conflict
-  ENET_PEER_UNSEQUENCED_WINDOWS          = 64;
-  ENET_PEER_UNSEQUENCED_WINDOW_SIZE      = 1024;
-  ENET_PEER_FREE_UNSEQUENCED_WINDOWS     = 32;
-  ENET_PEER_RELIABLE_WINDOWS             = 16;
-  ENET_PEER_RELIABLE_WINDOW_SIZE         = $1000;
-  ENET_PEER_FREE_RELIABLE_WINDOWS        = 8;
-
-  { enum ENetSocketWait }
-  ENET_SOCKET_WAIT_NONE       = 0;
-  ENET_SOCKET_WAIT_SEND       = 1 shl 0;
-  ENET_SOCKET_WAIT_RECEIVE    = 1 shl 1;
-  ENET_SOCKET_WAIT_INTERRUPT  = 1 shl 2;
-
-  { enum ENetPacketFlag }
-  ENET_PACKET_FLAG_RELIABLE            = 1 shl 0;
-  ENET_PACKET_FLAG_UNSEQUENCED         = 1 shl 1;
-  ENET_PACKET_FLAG_NO_ALLOCATE         = 1 shl 2;
-  ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = 1 shl 3;
-  ENET_PACKET_FLAG_SENT                = 1 shl 8;
-
-type
-  { enums }
-  ENetSocketType = ( ENET_SOCKET_TYPE_STREAM   = 1,
-                     ENET_SOCKET_TYPE_DATAGRAM = 2 );
-  
-  ENetSocketOption = ( ENET_SOCKOPT_NONBLOCK  = 1,
-                       ENET_SOCKOPT_BROADCAST = 2,
-                       ENET_SOCKOPT_RCVBUF    = 3,
-                       ENET_SOCKOPT_SNDBUF    = 4,
-                       ENET_SOCKOPT_REUSEADDR = 5,
-                       ENET_SOCKOPT_RCVTIMEO  = 6,
-                       ENET_SOCKOPT_SNDTIMEO  = 7,
-                       ENET_SOCKOPT_ERROR     = 8,
-                       ENET_SOCKOPT_NODELAY   = 9 );
-
-  ENetSocketShutdown = ( ENET_SOCKET_SHUTDOWN_READ,
-                         ENET_SOCKET_SHUTDOWN_WRITE,
-                         ENET_SOCKET_SHUTDOWN_READ_WRITE );
-
-  ENetPeerState = ( ENET_PEER_STATE_DISCONNECTED,
-                    ENET_PEER_STATE_CONNECTING,
-                    ENET_PEER_STATE_ACKNOWLEDGING_CONNECT,
-                    ENET_PEER_STATE_CONNECTION_PENDING,
-                    ENET_PEER_STATE_CONNECTION_SUCCEEDED,
-                    ENET_PEER_STATE_CONNECTED,
-                    ENET_PEER_STATE_DISCONNECT_LATER,
-                    ENET_PEER_STATE_DISCONNECTING,
-                    ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT,
-                    ENET_PEER_STATE_ZOMBIE );
-
-  ENetEventType = ( ENET_EVENT_TYPE_NONE,
-                    ENET_EVENT_TYPE_CONNECT,
-                    ENET_EVENT_TYPE_DISCONNECT,
-                    ENET_EVENT_TYPE_RECEIVE );
-
-  { typedefs }
-  ENetVersion = enet_uint32;
-
-  { pointers to structs }
-  pENetAddress         = ^ENetAddress;
-  pENetPacket          = ^ENetPacket;
-  pENetChannel         = ^ENetChannel;
-  pENetPeer            = ^ENetPeer;
-  pENetCompressor      = ^ENetCompressor;
-  pENetHost            = ^ENetHost;
-  pENetEvent           = ^ENetEvent;
-
-  { callbacks }
-  ENetPacketFreeCallback = procedure( packet: pENetPacket ); cdecl;
-  ENetChecksumCallback = function( const buffers: pENetBuffer;
-    bufferCount: csize_t ): enet_uint32; cdecl;
-  ENetInterceptCallback = function( host: pENetHost;
-    event: pENetEvent ): cint; cdecl;
-
-  { structs }
-  ENetAddress = record
-    host : enet_uint32;
-    port : enet_uint16;
-  end;
-  ENetPacket = record
-    referenceCount : csize_t;
-    flags          : enet_uint32;
-    data           : penet_uint8;
-    dataLength     : csize_t;
-    freeCallback   : ENetPacketFreeCallback;
-    userData       : Pointer;
-  end;
-  ENetChannel = record
-    outgoingReliableSequenceNumber   : enet_uint16;
-    outgoingUnreliableSequenceNumber : enet_uint16;
-    usedReliableWindows              : enet_uint16;
-    reliableWindows                  : array[ 0..ENET_PEER_RELIABLE_WINDOWS-1 ] of enet_uint16;
-    incomingReliableSequenceNumber   : enet_uint16;
-    incomingUnreliableSequenceNumber : enet_uint16;
-    incomingReliableCommands         : TENetList;
-    incomingUnreliableCommands       : TENetList;
-  end;
-  ENetPeer = record
-    dispatchList                   : ENetListNode;
-    host                           : pENetHost;
-    outgoingPeerID                 : enet_uint16;
-    incomingPeerID                 : enet_uint16;
-    connectID                      : enet_uint32;
-    outgoingSessionID              : enet_uint8;
-    incomingSessionID              : enet_uint8;
-    address                        : ENetAddress;
-    data                           : Pointer;
-    state                          : ENetPeerState;
-    channels                       : pENetChannel;
-    channelCount                   : csize_t;
-    incomingBandwidth              : enet_uint32;
-    outgoingBandwidth              : enet_uint32;
-    incomingBandwidthThrottleEpoch : enet_uint32;
-    outgoingBandwidthThrottleEpoch : enet_uint32;
-    incomingDataTotal              : enet_uint32;
-    outgoingDataTotal              : enet_uint32;
-    lastSendTime                   : enet_uint32;
-    lastReceiveTime                : enet_uint32;
-    nextTimeout                    : enet_uint32;
-    earliestTimeout                : enet_uint32;
-    packetLossEpoch                : enet_uint32;
-    packetsSent                    : enet_uint32;
-    packetsLost                    : enet_uint32;
-    packetLoss                     : enet_uint32;
-    packetLossVariance             : enet_uint32;
-    packetThrottle                 : enet_uint32;
-    packetThrottleLimit            : enet_uint32;
-    packetThrottleCounter          : enet_uint32;
-    packetThrottleEpoch            : enet_uint32;
-    packetThrottleAcceleration     : enet_uint32;
-    packetThrottleDeceleration     : enet_uint32;
-    packetThrottleInterval         : enet_uint32;
-    pingInterval                   : enet_uint32;
-    timeoutLimit                   : enet_uint32;
-    timeoutMinimum                 : enet_uint32;
-    timeoutMaximum                 : enet_uint32;
-    lastRoundTripTime              : enet_uint32;
-    lowestRoundTripTime            : enet_uint32;
-    lastRoundTripTimeVariance      : enet_uint32;
-    highestRoundTripTimeVariance   : enet_uint32;
-    roundTripTime                  : enet_uint32;
-    roundTripTimeVariance          : enet_uint32;
-    mtu                            : enet_uint32;
-    windowSize                     : enet_uint32;
-    reliableDataInTransit          : enet_uint32;
-    outgoingReliableSequenceNumber : enet_uint16;
-    acknowledgements               : TENetList;
-    sentReliableCommands           : TENetList;
-    sentUnreliableCommands         : TENetList;
-    outgoingReliableCommands       : TENetList;
-    outgoingUnreliableCommands     : TENetList;
-    dispatchedCommands             : TENetList;
-    needsDispatch                  : cint;
-    incomingUnsequencedGroup       : enet_uint16;
-    outgoingUnsequencedGroup       : enet_uint16;
-    unsequencedWindow              : array[ 0..(ENET_PEER_UNSEQUENCED_WINDOW_SIZE div 32)-1 ] of enet_uint32;
-    eventData                      : enet_uint32;
-    totalWaitingData               : csize_t;
-  end;
-  ENetCompressor = record
-    context    : Pointer;
-    compress   : function( context: Pointer; const inBuffers: pENetBuffer; inBufferCount, inLimit: csize_t; outData: penet_uint8; outLimit: csize_t ): csize_t; cdecl;
-    decompress : function( context: Pointer; const inData: penet_uint8; inLimit: csize_t; outData: penet_uint8; outLimit: csize_t ): csize_t; cdecl;
-    destroy    : procedure( context: Pointer ); cdecl;
-  end;
-  ENetHost = record
-    socket                     : ENetSocket;
-    address                    : ENetAddress;
-    incomingBandwidth          : enet_uint32;
-    outgoingBandwidth          : enet_uint32;
-    bandwidthThrottleEpoch     : enet_uint32;
-    mtu                        : enet_uint32;
-    randomSeed                 : enet_uint32;
-    recalculateBandwidthLimits : cint;
-    peers                      : pENetPeer;
-    peerCount                  : csize_t;
-    channelLimit               : csize_t;
-    serviceTime                : enet_uint32;
-    dispatchQueue              : TENetList;
-    continueSending            : cint;
-    packetSize                 : csize_t;
-    headerFlags                : enet_uint16;
-    commands                   : array[ 0..ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS-1 ] of TENetProtocol;
-    commandCount               : csize_t;
-    buffers                    : array[ 0..ENET_BUFFER_MAXIMUM-1 ] of ENetBuffer;
-    bufferCount                : csize_t;
-    checksum                   : ENetChecksumCallback;
-    compressor                 : ENetCompressor;
-    packetData                 : array[ 0..1, 0..ENET_PROTOCOL_MAXIMUM_MTU-1 ] of enet_uint8;
-    receivedAddress            : ENetAddress;
-    receivedData               : penet_uint8;
-    receivedDataLength         : csize_t;
-    totalSentData              : enet_uint32;
-    totalSentPackets           : enet_uint32;
-    totalReceivedData          : enet_uint32;
-    totalReceivedPackets       : enet_uint32;
-    intercept                  : ENetInterceptCallback;
-    connectedPeers             : csize_t;
-    bandwidthLimitedPeers      : csize_t;
-    duplicatePeers             : csize_t;
-    maximumPacketSize          : csize_t;
-    maximumWaitingData         : csize_t;
-  end;
-  ENetEvent = record
-    kind      : ENetEventType; //originally "type", which conflicts
-    peer      : pENetPeer;
-    channelID : enet_uint8;
-    data      : enet_uint32;
-    packet    : pENetPacket;
-  end;
-
-{ inline macros }
-function ENET_VERSION_CREATE( const major, minor, patch: cint ): ENetVersion; inline;
-function ENET_VERSION_GET_MAJOR( const version: ENetVersion ): cint; inline;
-function ENET_VERSION_GET_MINOR( const version: ENetVersion ): cint; inline;
-function ENET_VERSION_GET_PATCH( const version: ENetVersion ): cint; inline;
-function ENET_VERSION(): ENetVersion; inline;
-
-{ library functions }
-function enet_initialize(): cint; libraryLibENetImp;
-function enet_initialize_with_callbacks( version: ENetVersion; const inits: pENetCallbacks ): cint; libraryLibENetImp;
-procedure enet_deinitialize(); libraryLibENetImp;
-function enet_linked_version(): ENetVersion; libraryLibENetImp;
-
-function enet_time_get(): enet_uint32; libraryLibENetImp;
-procedure enet_time_set( newTimeBase: enet_uint32 ); libraryLibENetImp;
-
-function enet_socket_create( kind: ENetSocketType ): ENetSocket; libraryLibENetImp;
-function enet_socket_bind( socket: ENetSocket; const address: pENetAddress ): cint; libraryLibENetImp;
-function enet_socket_get_address( socket: ENetSocket; address: pENetAddress ): cint; libraryLibENetImp;
-function enet_socket_listen( socket: ENetSocket; backlog: cint ): cint; libraryLibENetImp;
-function enet_socket_accept( socket: ENetSocket; address: pENetAddress ): ENetSocket; libraryLibENetImp;
-function enet_socket_connect( socket: ENetSocket; const address: pENetAddress ): cint; libraryLibENetImp;
-function enet_socket_send( socket: ENetSocket; const address: pENetAddress; const buffers: pENetBuffer; bufferCount: csize_t ): cint; libraryLibENetImp;
-function enet_socket_receive( socket: ENetSocket; address: pENetAddress; buffers: pENetBuffer; bufferCount: csize_t ): cint; libraryLibENetImp;
-function enet_socket_wait( socket: ENetSocket; condition: penet_uint32; timeout: enet_uint32 ): cint; libraryLibENetImp;
-function enet_socket_set_option( socket: ENetSocket; option: ENetSocketOption; value: cint ): cint; libraryLibENetImp;
-function enet_socket_get_option( socket: ENetSocket; option: ENetSocketOption; value: pcint ): cint; libraryLibENetImp;
-function enet_socket_shutdown( socket: ENetSocket; how: ENetSocketShutdown ): cint; libraryLibENetImp;
-procedure enet_socket_destroy( socket: ENetSocket ); libraryLibENetImp;
-function enet_socketset_select( maxSocket: ENetSocket; readSet: pENetSocketSet; writeSet: pENetSocketSet; timeout: enet_uint32 ): cint; libraryLibENetImp;
-
-function enet_address_set_host( address: pENetAddress; const hostName: PChar ): cint; libraryLibENetImp;
-function enet_address_get_host_ip( const address: pENetAddress; hostName: PChar; nameLength: csize_t ): cint; libraryLibENetImp;
-function enet_address_get_host( const address: pENetAddress; hostName: PChar; nameLength: csize_t ): cint; libraryLibENetImp;
-
-function enet_packet_create( const data: Pointer; dataLength: csize_t; flags: enet_uint32 ): pENetPacket; libraryLibENetImp;
-procedure enet_packet_destroy( packet: pENetPacket ); libraryLibENetImp;
-function enet_packet_resize( packet: pENetPacket; dataLength: csize_t ): cint; libraryLibENetImp;
-function enet_crc32( const buffers: pENetBuffer; bufferCount: csize_t ): enet_uint32; libraryLibENetImp;
-
-function enet_host_create( const address: pENetAddress; peerCount, channelLimit: csize_t; incomingBandwidth, outgoingBandwidth: enet_uint32 ): pENetHost; libraryLibENetImp;
-procedure enet_host_destroy( host: pENetHost ); libraryLibENetImp;
-function enet_host_connect( host: pENetHost; const address: pENetAddress; channelCount: csize_t; data: enet_uint32 ): pENetPeer; libraryLibENetImp;
-function enet_host_check_events( host: pENetHost; event: pENetEvent ): cint; libraryLibENetImp;
-function enet_host_service( host: pENetHost; event: pENetEvent; timeout: enet_uint32 ): cint; libraryLibENetImp;
-procedure enet_host_flush( host: pENetHost ); libraryLibENetImp;
-procedure enet_host_broadcast( host: pENetHost; channelID: enet_uint8; packet: pENetPacket ); libraryLibENetImp;
-procedure enet_host_compress( host: pENetHost; const compressor: pENetCompressor ); libraryLibENetImp;
-function enet_host_compress_with_range_coder( host: pENetHost ): cint; libraryLibENetImp;
-procedure enet_host_channel_limit( host: pENetHost; channelLimit: csize_t ); libraryLibENetImp;
-procedure enet_host_bandwidth_limit( host: pENetHost; incomingBandwidth, outgoingBandwidth: enet_uint32 ); libraryLibENetImp;
-
-function enet_peer_send( peer: pENetPeer; channelID: enet_uint8; packet: pENetPacket ): cint; libraryLibENetImp;
-function enet_peer_receive( peer: pENetPeer; channelID: penet_uint8 ): pENetPacket; libraryLibENetImp;
-procedure enet_peer_ping( peer: pENetPeer ); libraryLibENetImp;
-procedure enet_peer_ping_interval( peer: pENetPeer; pingInterval: enet_uint32 ); libraryLibENetImp;
-procedure enet_peer_timeout( peer: pENetPeer; timeoutLimit, timeoutMinimum, timeoutMaximum: enet_uint32 ); libraryLibENetImp;
-procedure enet_peer_reset( peer: pENetPeer ); libraryLibENetImp;
-procedure enet_peer_disconnect( peer: pENetPeer; data: enet_uint32 ); libraryLibENetImp;
-procedure enet_peer_disconnect_now( peer: pENetPeer; data: enet_uint32 ); libraryLibENetImp;
-procedure enet_peer_disconnect_later( peer: pENetPeer; data: enet_uint32 ); libraryLibENetImp;
-procedure enet_peer_throttle_configure( peer: pENetPeer; interval, acceleration, deceleration: enet_uint32 ); libraryLibENetImp;
-
-function enet_range_coder_create(): Pointer; libraryLibENetImp;
-procedure enet_range_coder_destroy( context: Pointer ); libraryLibENetImp;
-function enet_range_coder_compress( context: Pointer; const inBuffers: pENetBuffer; inBufferCount, inLiit: csize_t; outData: penet_uint8; outLimit: csize_t ): csize_t; libraryLibENetImp;
-function enet_range_coder_decompress( context: Pointer; const inData: penet_uint8; inLimit: csize_t; outData: penet_uint8; outLimit: csize_t ): csize_t; libraryLibENetImp;
-
-implementation
-
-////////////////////////////////////////////////////////////////////////////////
-// win32.h / unix.h
-////////////////////////////////////////////////////////////////////////////////
-
-function ENET_HOST_TO_NET_16( value: cuint16 ): cuint16;
-begin
-  Result := htons(value);
-end;
-
-function ENET_HOST_TO_NET_32( value: cuint32 ): cuint32;
-begin
-  Result := htonl(value);
-end;
-
-function ENET_NET_TO_HOST_16( value: cuint16 ): cuint16;
-begin
-  Result := ntohs(value);
-end;
-
-function ENET_NET_TO_HOST_32( value: cuint32 ): cuint32;
-begin
-  Result := ntohl(value);
-end;
-
-procedure ENET_SOCKETSET_EMPTY( var sockset: ENetSocketSet );
-begin
-{$IFDEF WINDOWS}
-  FD_ZERO( sockset );
-{$ELSE}
-  fpFD_ZERO( sockset );
-{$ENDIF}
-end;
-
-procedure ENET_SOCKETSET_ADD( var sockset: ENetSocketSet; socket: ENetSocket );
-begin
-{$IFDEF WINDOWS}
-  FD_SET( socket, sockset );
-{$ELSE}
-  fpFD_SET( socket, sockset );
-{$ENDIF}
-end;
-
-procedure ENET_SOCKETSET_REMOVE( var sockset: ENetSocketSet; socket: ENetSocket );
-begin
-{$IFDEF WINDOWS}
-  FD_CLR( socket, sockset );
-{$ELSE}
-  fpFD_CLR( socket, sockset );
-{$ENDIF}
-end;
-
-function ENET_SOCKETSET_CHECK( var sockset: ENetSocketSet; socket: ENetSocket ): cbool;
-begin
-{$IFDEF WINDOWS}
-  Result := FD_ISSET( socket, sockset );
-{$ELSE}
-  Result := fpFD_ISSET( socket, sockset ) = 1;
-{$ENDIF}
-end;
-
-////////////////////////////////////////////////////////////////////////////////
-// list.h
-////////////////////////////////////////////////////////////////////////////////
-
-function enet_list_begin( list: pENetList ): ENetListIterator;
-begin
-  Result := list^.sentinel.next;
-end;
-
-function enet_list_end( list: pENetList ): ENetListIterator;
-begin
-  Result := @( list^.sentinel );
-end;
-
-function enet_list_empty( list: pENetList ): Boolean;
-begin
-  Result := enet_list_begin(list) = enet_list_end(list);
-end;
-
-function enet_list_next( iterator: ENetListIterator ): ENetListIterator;
-begin
-  Result := iterator^.next;
-end;
-
-function enet_list_previous( iterator: ENetListIterator ): ENetListIterator;
-begin
-  Result := iterator^.previous;
-end;
-
-function enet_list_front( list: pENetList ): Pointer;
-begin
-  Result := Pointer( list^.sentinel.next );
-end;
-
-function enet_list_back( list: pENetList ): Pointer;
-begin
-  Result := Pointer( list^.sentinel.previous );
-end;
-
-////////////////////////////////////////////////////////////////////////////////
-// time.h
-////////////////////////////////////////////////////////////////////////////////
-
-function ENET_TIME_LESS( const a, b: cint ): cbool;
-begin
-  Result := (a - b) >= ENET_TIME_OVERFLOW;
-end;
-
-function ENET_TIME_GREATER( const a, b: cint ): cbool;
-begin
-  Result := (b - a) >= ENET_TIME_OVERFLOW;
-end;
-
-function ENET_TIME_LESS_EQUAL( const a, b: cint ): cbool;
-begin
-  Result := not ENET_TIME_GREATER(a, b);
-end;
-
-function ENET_TIME_GREATER_EQUAL( const a, b: cint ): cbool;
-begin
-  Result := not ENET_TIME_LESS(a, b);
-end;
-
-function ENET_TIME_DIFFERENCE( const a, b: cint ): cint;
-begin
-  if (a - b) >= ENET_TIME_OVERFLOW then
-    Result := b - a
-  else
-    Result := a - b;
-end;
-
-////////////////////////////////////////////////////////////////////////////////
-// enet.h
-////////////////////////////////////////////////////////////////////////////////
-
-function ENET_VERSION_CREATE( const major, minor, patch: cint ): ENetVersion;
-begin
-  Result := (major shl 16) or (minor shl 8) or patch;
-end;
-
-function ENET_VERSION_GET_MAJOR( const version: ENetVersion ): cint;
-begin
-  Result := (version shr 16) and $FF;
-end;
-
-function ENET_VERSION_GET_MINOR( const version: ENetVersion ): cint;
-begin
-  Result := (version shr 8) and $FF;
-end;
-
-function ENET_VERSION_GET_PATCH( const version: ENetVersion ): cint;
-begin
-  Result := version and $FF;
-end;
-
-function ENET_VERSION(): ENetVersion;
-begin
-  Result := ENET_VERSION_CREATE( ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH );
-end;
-
-end.
+{$INCLUDE 'ENet-Pascal/enet.pp'}