archie/tcl-dp/win/dpInit.c
2024-05-27 16:13:40 +02:00

135 lines
3.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* dpInit.c --
*
* Perform UNIX-specific initialization of DP.
*
* Copyright (c) 1995-1996 The Regents of Cornell University.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
*/
#include "generic/dpPort.h"
#include "generic/dpInt.h"
/*
*----------------------------------------------------------------------
*
* DllEntryPoint --
*
* This wrapper function is used by Windows to invoke the
* initialization code for the DLL. If we are compiling
* with Visual C++, this routine will be renamed to DllMain.
* routine.
*
* Results:
* Returns TRUE;
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
BOOL APIENTRY
DllEntryPoint(hInst, reason, reserved)
HINSTANCE hInst; /* Library instance handle. */
DWORD reason; /* Reason this function is being called. */
LPVOID reserved; /* Not used. */
{
return TRUE;
}
/*
*----------------------------------------------------------------------
*
* DppInit --
*
* Performs Unix-specific interpreter initialization related to the
* dp_library variable.
*
* Results:
* Returns a standard Tcl result. Leaves an error message or result
* in interp->result.
*
* Side effects:
* Sets "dp_library" Tcl variable, runs "tk.tcl" script.
*
*----------------------------------------------------------------------
*/
int
DppInit(interp)
Tcl_Interp *interp;
{
int err;
char str[256];
/*
* (ToDo) Load in the TCL library
*/
/*
* Initialize the Windows Socket library
*/
err = WSAStartup(MAKEWORD(1, 1), &dpStartUpInfo);
switch (err) {
case 0:
/* All is well */
break;
case WSASYSNOTREADY:
Tcl_AppendResult (interp, "Error initializing Tcl-DP: ",
"network subsystem is not ready for network ",
"communication.", NULL);
return TCL_ERROR;
case WSAVERNOTSUPPORTED:
Tcl_AppendResult (interp, "Error initializing Tcl-DP: ",
"The version of Windows Sockets support requested ",
"is not provided by this particular Windows Sockets ",
"implementation.", NULL);
return TCL_ERROR;
case WSAEINVAL:
Tcl_AppendResult (interp, "Error initializing Tcl-DP: ",
"The Windows Sockets version specified by the ",
"application is not supported by this DLL.", NULL);
return TCL_ERROR;
default:
sprintf (str, "%d", err);
Tcl_AppendResult (interp, "Error initializing Tcl-DP: ",
"Unknown error from WSAStartup. Error code is ",
str, ". Please email this error message to ",
"tcl-dp@cs.cornell.edu", NULL);
return TCL_ERROR;
}
/*
* Confirm that the Windows Sockets DLL supports 1.1.
* Note that if the DLL supports versions greater
* than 1.1 in addition to 1.1, it will still return
* 1.1 in wVersion since that is the version we
* requested.
*/
if (LOBYTE(dpStartUpInfo.wVersion) != 1 ||
HIBYTE(dpStartUpInfo.wVersion) != 1 ) {
WSACleanup();
sprintf (str, "%d.%d", LOBYTE(dpStartUpInfo.wVersion),
HIBYTE(dpStartUpInfo.wVersion));
Tcl_AppendResult (interp, "Error initializing Tcl-DP: ",
"Tcl-DP requires at least winsock version 1.1. ",
"Installed winsock.dll has version ", str, NULL);
return TCL_ERROR;
}
return TCL_OK;
}