source: trunk/src/dsound/initterm.cpp@ 2013

Last change on this file since 2013 was 1744, checked in by hugh, 26 years ago

Implemented fake soundcard
The Bufferpos will be advanced based on the elapsed time
since start playing

File size: 4.2 KB
Line 
1/* $Id: initterm.cpp,v 1.8 1999-11-14 22:12:15 hugh Exp $ */
2
3/*
4 * DLL entry point
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Peter Fitzsimmons
8 *
9 *
10 * Project Odin Software License can be found in LICENSE.TXT
11 *
12 */
13
14/*-------------------------------------------------------------*/
15/* INITERM.C -- Source for a custom dynamic link library */
16/* initialization and termination (_DLL_InitTerm) */
17/* function. */
18/* */
19/* When called to perform initialization, this sample function */
20/* gets storage for an array of integers, and initializes its */
21/* elements with random integers. At termination time, it */
22/* frees the array. Substitute your own special processing. */
23/*-------------------------------------------------------------*/
24
25
26/* Include files */
27#define INCL_DOSMODULEMGR
28#define INCL_DOSPROCESS
29#include <os2wrap.h> //Odin32 OS/2 api wrappers
30#include <stdlib.h>
31#include <stdio.h>
32#include <string.h>
33#include <odin.h>
34#include <win32type.h>
35#include <odinlx.h>
36#include <misc.h> /*PLF Wed 98-03-18 23:18:15*/
37#include "initterm.h"
38
39extern "C" {
40void CDECL _ctordtorInit( void );
41void CDECL _ctordtorTerm( void );
42}
43
44char dsoundPath[CCHMAXPATH] = "";
45
46/*-------------------------------------------------------------------*/
47/* A clean up routine registered with DosExitList must be used if */
48/* runtime calls are required and the runtime is dynamically linked. */
49/* This will guarantee that this clean up routine is run before the */
50/* library DLL is terminated. */
51/*-------------------------------------------------------------------*/
52static void APIENTRY cleanup(ULONG reason);
53
54
55/****************************************************************************/
56/* _DLL_InitTerm is the function that gets called by the operating system */
57/* loader when it loads and frees this DLL for each process that accesses */
58/* this DLL. However, it only gets called the first time the DLL is loaded */
59/* and the last time it is freed for a particular process. The system */
60/* linkage convention MUST be used because the operating system loader is */
61/* calling this function. */
62/****************************************************************************/
63unsigned long SYSTEM _DLL_InitTerm(unsigned long hModule, unsigned long
64 ulFlag)
65{
66 size_t i;
67 APIRET rc;
68
69 /*-------------------------------------------------------------------------*/
70 /* If ulFlag is zero then the DLL is being loaded so initialization should */
71 /* be performed. If ulFlag is 1 then the DLL is being freed so */
72 /* termination should be performed. */
73 /*-------------------------------------------------------------------------*/
74
75 switch (ulFlag) {
76 case 0 :
77 {
78 _ctordtorInit();
79
80 DosQueryModuleName(hModule, CCHMAXPATH, dsoundPath);
81 char *endofpath = strrchr(dsoundPath, '\\');
82 if(endofpath) *(endofpath+1) = 0;
83
84 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/
85
86 /*******************************************************************/
87 /* A DosExitList routine must be used to clean up if runtime calls */
88 /* are required and the runtime is dynamically linked. */
89 /*******************************************************************/
90
91 if(RegisterLxDll(hModule, 0, 0) == FALSE)
92 return 0UL;
93
94 rc = DosExitList(0x0000F000|EXLST_ADD, cleanup);
95 if(rc)
96 return 0UL;
97
98 break;
99 }
100 case 1 :
101 UnregisterLxDll(hModule);
102 break;
103 default :
104 return 0UL;
105 }
106
107 /***********************************************************/
108 /* A non-zero value must be returned to indicate success. */
109 /***********************************************************/
110 return 1UL;
111}
112
113
114static void APIENTRY cleanup(ULONG ulReason)
115{
116 _ctordtorTerm();
117 DosExitList(EXLST_EXIT, cleanup);
118 return ;
119}
Note: See TracBrowser for help on using the repository browser.