/* hosts/amiga/socket_tcp.c ** ** Implement the extra framework to use either the Commodore socket.library ** or the AmiTCP package for LPMud. ** ** Commodore support written by Martin Brenner. ** ** 13-Jan-93 [lars] Merged. ** 17-Jun-93 [lars] Added support for AmiTCP. ** 02-Aug-93 [lars] Adapted for AmiTCP-2.0 ** 11-Apr-95 [lars] Adapted for AmiTCP-3.0 netlib of SAS. ** 20-Aug-95 [lars] Patched around bogus netlib autoinitialisation. ** 11-Nov-95 [lars] amiga_sockinit/exit() renamed in amiga_tcpinit/exit(). */ /*-----------------------------------------------------------------------*/ #ifdef AS225 #include <clib/exec_protos.h> #include <sys/types.h> #include <sys/socket.h> struct Library *SockBase = NULL; /* int socket_error; */ /* this is the maximum number of sockets that you want */ #define MAXSOCKS 50 /* required for Initialization of socket.library */ void amiga_tcpinit ( void ) { if ((SockBase = OpenLibrary("socket.library", 1L)) == NULL) printf(" Can't open 'socket.library' - using simulated sockets instead.\n"); else { setup_sockets(MAXSOCKS, &errno); printf(" socket.library found and accessed.\n"); } } /* exit in a clean way (close remaining sockets */ void amiga_tcpexit ( void ) { if (SockBase != NULL) { cleanup_sockets(); CloseLibrary(SockBase); SockBase = NULL; } } #endif /* AS225 */ /*-----------------------------------------------------------------------*/ #ifdef AMITCP #include <exec/types.h> #include <clib/exec_protos.h> #include <clib/socket_protos.h> #include <sys/types.h> #include <stdio.h> struct Library *SocketBase = NULL; /* This prevents linking of autocode */ #if defined(__SASC) && AMITCP >= 3 /* AmiTCP's netlib implements an autoinit function _STI_200_openSockets() * to automagically open the bsdsocket.library. Unfortunately this function * exit()s out if the library can't be found, which we don't want as we * could use the socket simulation instead. * Therefore we have to remove this very function from the list of * autoinit function before it is called, using an autoinit function of * slightly higher priority. */ extern int (* far __ctors)[](void); /* Dummyfunction to take the place of the netlib function. */ static int netlib_dummy() { return 0; } void _STI_190_fudgeNetlib() { int i; for (i = 0; __ctors[i]; i++) if (__ctors[i] == _STI_200_openSockets) __ctors[i] = netlib_dummy; } #endif void amiga_tcpinit (void) { int rc, libversion; #ifdef __SASC # if AMITCP < 3 libversion = 2; rc = _STIopenSockets(); # else /* The provided ...openSockets() bogues out via exit() if AmiTCP * is not available, what we can't use. So check for the existance * of the bsdsocket.library first. */ libversion = AMITCP; SocketBase = OpenLibrary("bsdsocket.library", libversion); if (SocketBase) { CloseLibrary(SocketBase); SocketBase = NULL; rc = _STI_200_openSockets(); } else rc = 3; # endif #else /* _DCC */ libversion = 2; rc = _openSockets(); #endif if (rc) { printf(" Can't access AmiTCP-%d because ", libversion); switch (rc) { case 1: printf("of wrong OS version"); break; case 2: printf("outdated net.lib was used."); break; case 3: printf("OpenLibrary() failed"); break; default: printf("of an unknown failure"); break; } printf(".\n Socket simulation is used instead.\n"); } else printf(" AmiTCP found and accessed.\n"); } void amiga_tcpexit (void) { #ifdef __SASC # if AMITCP < 3 _STDcloseSockets(); # else _STD_200_closeSockets(); # endif #else /* _DCC */ #endif } #endif /* AMITCP */ /*-----------------------------------------------------------------------*/ /*************************************************************************/