/*
 * dllinit.cpp - Initialization and termination routines.
 */


/* Headers
 **********/

#include "project.hpp"
#pragma hdrstop

#include "autodial.hpp"
#include "inetcpl.h"
#include "init.h"

#ifdef _X86_
BOOL g_bRunningOnNT = FALSE;
#endif

/* Module Prototypes
 ********************/

PRIVATE_CODE BOOL MyAttachProcess(HMODULE hmod);
PRIVATE_CODE BOOL MyDetachProcess(HMODULE hmod);


/* Global Variables
 *******************/

#pragma data_seg(DATA_SEG_READ_ONLY)

/* serialization control structure */

PUBLIC_DATA CSERIALCONTROL g_cserctrl =
{
   MyAttachProcess,
   MyDetachProcess,
   NULL,
   NULL
};

#pragma data_seg()

#ifdef DEBUG

#pragma data_seg(DATA_SEG_READ_ONLY)

/* .ini file name and section used by inifile.c!SetIniSwitches() */

PUBLIC_DATA PCSTR g_pcszIniFile = "ohare.ini";
PUBLIC_DATA PCSTR g_pcszIniSection = "URLDebugOptions";

/* module name used by debspew.c!SpewOut() */

PUBLIC_DATA PCSTR g_pcszSpewModule = "URL";

#pragma data_seg()

#endif


/***************************** Private Functions *****************************/


#pragma warning(disable:4100) /* "unreferenced formal parameter" warning */

PRIVATE_CODE BOOL MyAttachProcess(HMODULE hmod)
{
   BOOL bResult;

   ASSERT(IS_VALID_HANDLE(hmod, MODULE));

   DebugEntry(MyAttachProcess);

   bResult = (InitDataObjectModule());

#ifdef _X86_
   // Remember whether we're running on NT or not
   g_bRunningOnNT = (0 == (GetVersion() & 0x80000000));
#endif

#ifndef DEBUG

   // We don't need to get called on DLL_THREAD_ATTACH, etc.  This
   // is for perf gains.
   DisableThreadLibraryCalls(hmod);

#endif

   ASSERT(NULL == g_cserctrl.AttachThread &&
          NULL == g_cserctrl.DetachThread);

   DebugExitBOOL(MyAttachProcess, bResult);

   return(bResult);
}


PRIVATE_CODE BOOL MyDetachProcess(HMODULE hmod)
{
   BOOL bResult = TRUE;

   ASSERT(IS_VALID_HANDLE(hmod, MODULE));

   DebugEntry(MyDetachProcess);

   ExitInternetCPLModule();

   ExitDataObjectModule();

   DebugExitBOOL(MyDetachProcess, bResult);

   return(bResult);
}

#pragma warning(default:4100) /* "unreferenced formal parameter" warning */


/****************************** Public Functions *****************************/


#ifdef DEBUG

PUBLIC_CODE BOOL SetAllIniSwitches(void)
{
   BOOL bResult;

   bResult = SetDebugModuleIniSwitches();
   bResult = SetSerialModuleIniSwitches() && bResult;

   return(bResult);
}

#endif

