167 lines
4 KiB
C
167 lines
4 KiB
C
|
/*
|
|||
|
init.c initialisation for MSVIDEO.DLL
|
|||
|
|
|||
|
Copyright (c) Microsoft Corporation 1992. All rights reserved
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#include <windows.h>
|
|||
|
#include <win32.h>
|
|||
|
#include <verinfo.h> // to get rup
|
|||
|
#include "mmsystem.h"
|
|||
|
#include "msviddrv.h"
|
|||
|
#include "msvideo.h"
|
|||
|
#include "msvideoi.h"
|
|||
|
|
|||
|
#ifdef WIN32
|
|||
|
|
|||
|
/* we have to allow the compman dll to perform load and unload
|
|||
|
* processing - it has a critsec that needs to be initialised and freed
|
|||
|
*/
|
|||
|
extern void IC_Load(void);
|
|||
|
extern void IC_Unload(void);
|
|||
|
#else
|
|||
|
#define IC_Load()
|
|||
|
#define IC_Unload()
|
|||
|
#endif
|
|||
|
|
|||
|
extern void FAR PASCAL videoCleanup(HTASK hTask);
|
|||
|
extern void FAR PASCAL DrawDibCleanup(HTASK hTask);
|
|||
|
extern void FAR PASCAL ICCleanup(HTASK hTask);
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @doc INTERNAL VIDEO
|
|||
|
*
|
|||
|
* DLLEntryPoint - common DLL entry point.
|
|||
|
*
|
|||
|
* this code is called on both Win16 and Win32, libentry.asm handles
|
|||
|
* this on Win16 and the system handles it on NT.
|
|||
|
*
|
|||
|
****************************************************************************/
|
|||
|
|
|||
|
#ifndef DLL_PROCESS_DETACH
|
|||
|
#define DLL_PROCESS_DETACH 0
|
|||
|
#define DLL_PROCESS_ATTACH 1
|
|||
|
#define DLL_THREAD_ATTACH 2
|
|||
|
#define DLL_THREAD_DETACH 3
|
|||
|
#endif
|
|||
|
|
|||
|
#ifndef NOTHUNKS
|
|||
|
VOID FAR PASCAL InitThunks(void);
|
|||
|
BOOL gfVideo32;
|
|||
|
BOOL gfICM32;
|
|||
|
#endif // NOTHUNKS
|
|||
|
|
|||
|
|
|||
|
BOOL WINAPI DLLEntryPoint(HINSTANCE hInstance, ULONG Reason, LPVOID pv)
|
|||
|
{
|
|||
|
switch (Reason)
|
|||
|
{
|
|||
|
case DLL_PROCESS_ATTACH:
|
|||
|
ghInst = hInstance;
|
|||
|
IC_Load();
|
|||
|
#ifndef NOTHUNKS
|
|||
|
DPF(("Setting up the thunk code\n"));
|
|||
|
InitThunks();
|
|||
|
DPF(("All thunks initialised: gfVideo32=%d, gfICM32=%d\n", gfVideo32, gfICM32));
|
|||
|
#endif // NOTHUNKS
|
|||
|
break;
|
|||
|
|
|||
|
case DLL_PROCESS_DETACH:
|
|||
|
DrawDibCleanup(NULL);
|
|||
|
ICCleanup(NULL);
|
|||
|
IC_Unload();
|
|||
|
videoCleanup(NULL);
|
|||
|
break;
|
|||
|
|
|||
|
case DLL_THREAD_DETACH:
|
|||
|
break;
|
|||
|
|
|||
|
case DLL_THREAD_ATTACH:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @doc EXTERNAL VIDEO
|
|||
|
*
|
|||
|
* @api DWORD | VideoForWindowsVersion | This function returns the version
|
|||
|
* of the Microsoft Video for Windows software.
|
|||
|
*
|
|||
|
* @rdesc Returns a DWORD version, the hiword is the product version the
|
|||
|
* loword is the minor revision.
|
|||
|
*
|
|||
|
* @comm currently returns 0x010A00## (1.10.00.##) ## is the internal build
|
|||
|
* number.
|
|||
|
*
|
|||
|
****************************************************************************/
|
|||
|
#if 0
|
|||
|
#ifdef rup
|
|||
|
#define MSVIDEO_VERSION (0x01000000l+rup) // 1.00.00.##
|
|||
|
#else
|
|||
|
#define MSVIDEO_VERSION (0x01000000l) // 1.00.00.00
|
|||
|
#endif
|
|||
|
#else
|
|||
|
#define MSVIDEO_VERSION (0x0L+(((DWORD)MMVERSION)<<24)+(((DWORD)MMREVISION)<<16)+((DWORD)MMRELEASE))
|
|||
|
#endif
|
|||
|
|
|||
|
DWORD FAR PASCAL VideoForWindowsVersion(void)
|
|||
|
{
|
|||
|
return MSVIDEO_VERSION;
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
*
|
|||
|
* dprintf() is called by the DPF macro if DEBUG is defined at compile time.
|
|||
|
*
|
|||
|
* The messages will be send to COM1: like any debug message. To
|
|||
|
* enable debug output, add the following to WIN.INI :
|
|||
|
*
|
|||
|
* [debug]
|
|||
|
* MSVIDEO=1
|
|||
|
*
|
|||
|
****************************************************************************/
|
|||
|
|
|||
|
#ifdef DEBUG
|
|||
|
|
|||
|
#define MODNAME "MSVIDEO"
|
|||
|
|
|||
|
#ifndef WIN32
|
|||
|
#define lstrcatA lstrcat
|
|||
|
#define lstrcpyA lstrcpy
|
|||
|
#define lstrlenA lstrlen
|
|||
|
#define wvsprintfA wvsprintf
|
|||
|
#define GetProfileIntA GetProfileInt
|
|||
|
#define OutputDebugStringA OutputDebugString
|
|||
|
#endif
|
|||
|
|
|||
|
#define _WINDLL
|
|||
|
#include <stdarg.h>
|
|||
|
|
|||
|
void FAR CDECL dprintf(LPSTR szFormat, ...)
|
|||
|
{
|
|||
|
char ach[128];
|
|||
|
va_list va;
|
|||
|
|
|||
|
static BOOL fDebug = -1;
|
|||
|
|
|||
|
if (fDebug == -1)
|
|||
|
fDebug = GetProfileIntA("Debug", MODNAME, FALSE);
|
|||
|
|
|||
|
if (!fDebug)
|
|||
|
return;
|
|||
|
|
|||
|
lstrcpyA(ach, MODNAME ": ");
|
|||
|
va_start(va, szFormat);
|
|||
|
wvsprintfA(ach+lstrlenA(ach),szFormat,(LPSTR)va);
|
|||
|
va_end(va);
|
|||
|
lstrcatA(ach, "\r\n");
|
|||
|
|
|||
|
OutputDebugStringA(ach);
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|