|
|
1.1 root 1: /****************************************************************************
2: *
3: * initc.c
4: *
5: * Copyright (c) 1991-1992 Microsoft Corporation. All Rights Reserved.
6: *
7: ***************************************************************************/
8:
9: #include <windows.h>
10: #include <mmsystem.h>
11: #include <mmddk.h>
12: #define NOSTR /* to avoid redefining strings */
13: #include "registry.h" // Local registry access functions
14: #include "sndblst.h"
15:
16: /****************************************************************************
17:
18: strings
19:
20: ***************************************************************************/
21:
22: /* non-localized strings */
23: TCHAR STR_DRIVERNAME[] = TEXT("sndblst");
24: TCHAR STR_PRODUCTNAME[] = TEXT("Sound Blaster");
25:
26: /****************************************************************************
27:
28: public data
29:
30: ***************************************************************************/
31:
32: WORD gwErrorStringId = 0; /* if initialization fails, string id */
33:
34: #ifdef DEBUG
35: WORD wDebugLevel = 0; /* debug level */
36: #endif
37:
38:
39: /***************************************************************************
40: * @doc INTERNAL
41: *
42: * @api WORD | ConfigGetPortBase |
43: *
44: * @rdesc Returns the port base from the registry
45: ***************************************************************************/
46: DWORD ConfigGetPortBase(void)
47: {
48: DWORD Port;
49:
50: /* read registry and get the board configuration information. */
51:
52: if (ERROR_SUCCESS !=
53: DrvQueryDeviceParameter(&RegAccess, SOUND_REG_PORT, &Port)) {
54:
55: Port = (DWORD)SOUND_DEF_PORT;
56: }
57:
58: switch (Port) {
59: case 0x200:
60: case 0x210:
61: case 0x220:
62: case 0x230:
63: case 0x240:
64: case 0x250:
65: case 0x260:
66: case 0x270:
67: break;
68:
69: default:
70: Port = (DWORD)-1;
71: D1("driver PORT not configured");
72: }
73:
74: return (Port);
75: }
76:
77:
78: /***************************************************************************
79: * @doc INTERNAL
80: *
81: * @api WORD | ConfigGetIRQ |
82: *
83: * @rdesc Returns the IRQ ('int') from the registry
84: ***************************************************************************/
85: DWORD ConfigGetIRQ(void)
86: {
87: DWORD Int;
88:
89: if (ERROR_SUCCESS !=
90: DrvQueryDeviceParameter(&RegAccess, SOUND_REG_INTERRUPT, &Int)) {
91:
92: Int = (DWORD)SOUND_DEF_INT;
93: }
94:
95: switch (Int) {
96: case 3:
97: case 5:
98: case 7:
99: case 9:
100: case 10:
101: break;
102:
103: case 2:
104: Int = 9;
105: break;
106:
107: default:
108: Int = (DWORD)-1;
109: D1("driver INT not configured");
110: break;
111: }
112:
113: return (Int);
114: }
115:
116:
117: /***************************************************************************
118: * @doc INTERNAL
119: *
120: * @api WORD | ConfigGetDMAChannel |
121: *
122: * @rdesc Returns the DMA channel from the registry
123: ***************************************************************************/
124: DWORD ConfigGetDMAChannel(void)
125: {
126: DWORD DMAChannel;
127:
128: /* get the DMA channel that the card is using... */
129: if (ERROR_SUCCESS !=
130: DrvQueryDeviceParameter(&RegAccess, SOUND_REG_DMACHANNEL, &DMAChannel)) {
131:
132: DMAChannel = (DWORD)-1;
133: }
134:
135: switch (DMAChannel) {
136: case 0:
137: case 1:
138: case 3:
139: break;
140:
141: default:
142: DMAChannel = 1;
143: }
144:
145: return (DMAChannel);
146: }
147:
148:
149: /***************************************************************************/
150:
151: static void NEAR PASCAL HardErrorMsgBox(WORD wStringId)
152: {
153: TCHAR szErrorBuffer[MAX_ERR_STRING]; /* buffer for error messages */
154:
155: LoadString(ghModule, wStringId, szErrorBuffer, sizeof(szErrorBuffer));
156: MessageBox(NULL, szErrorBuffer, STR_PRODUCTNAME, MB_OK|MB_SYSTEMMODAL|MB_ICONHAND);
157: }
158:
159:
160:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.