|
|
1.1 root 1: /*
2: sound.c
3:
4: Sound menu stuff
5:
6: Puts up a list of all the sounds in the [sounds]
7: section of win.ini and plays the selected one
8:
9:
10: */
11:
12: #include <stdlib.h>
13: #include <string.h>
14: #include <windows.h>
15: #include "PlaySnd.h"
16:
17: #define KEYBUFSIZE 2048
18:
19: LONG SoundDlgProc(HWND hDlg, UINT msg, DWORD wParam, LONG lParam);
20:
21: typedef struct SoundNameAlias {
22: LPSTR pName;
23: UINT alias;
24: } SOUNDNAMEALIAS;
25:
26: static SOUNDNAMEALIAS sss[] = {"System"};
27:
28: static SOUNDNAMEALIAS SNA[] = {
29: "SystemAsterisk", sndAlias('S', '*') ,
30: "SystemQuestion", sndAlias('S', '?') ,
31: "SystemHand", sndAlias('S', 'H') ,
32: "SystemExit", sndAlias('S', 'E') ,
33: "SystemStartup", sndAlias('S', 'S') ,
34: "SystemWelcome", sndAlias('S', 'W') ,
35: "SystemExclamation", sndAlias('S', '!') ,
36: "SystemDefault", sndAlias('S', 'D') };
37:
38: #define NUMSYSTEMSOUNDS (sizeof(SNA)/sizeof(SOUNDNAMEALIAS))
39:
40: UINT TranslateNameToAlias(LPSTR name)
41: {
42: UINT n;
43:
44: for (n=0; n<NUMSYSTEMSOUNDS; ++n) {
45:
46: if (!lstrcmpi(name, SNA[n].pName)) {
47: return(SNA[n].alias);
48: }
49: }
50:
51: return(0);
52: }
53:
54: void Sounds(HWND hWnd)
55: {
56: WinEval(DialogBox(ghModule, MAKEINTRESOURCE(IDD_SOUNDDLG) // "SoundDlg"
57: , hWnd, (DLGPROC)SoundDlgProc) != -1);
58: }
59:
60: void PlaySelection(HWND hDlg)
61: {
62: DWORD dwSel;
63: DWORD dwFlags = SND_ASYNC | SND_NODEFAULT | SND_NOSTOP;
64: char name[40];
65: UINT alias;
66: LPSTR pName = name;
67: BOOL fSync;
68: BOOL fWait;
69:
70: dwSel = SendDlgItemMessage(hDlg, IDSND_LIST, LB_GETCURSEL, 0, 0);
71: if (dwSel != LB_ERR) {
72: SendDlgItemMessage(hDlg, IDSND_LIST,
73: LB_GETTEXT,
74: (WPARAM)dwSel,
75: (LPARAM)name);
76:
77: dwFlags = SND_ALIAS;
78:
79: fSync = (BOOL)SendDlgItemMessage(hDlg, IDSND_SYNC, BM_GETCHECK, 0, 0);
80:
81: if (fSync) {
82: // Turn off ASYNC
83: dwFlags &= ~SND_ASYNC;
84: } else {
85: dwFlags |= SND_ASYNC;
86: }
87:
88: fWait = (BOOL)SendDlgItemMessage(hDlg, IDSND_WAIT, BM_GETCHECK, 0, 0);
89: if (!fWait) dwFlags |= SND_NOWAIT;
90:
91: if (1 == SendDlgItemMessage(hDlg, IDSND_IDPLAY, BM_GETCHECK, 0, 0)) {
92: if (0 != (alias = TranslateNameToAlias(name))) {
93: dwFlags |= SND_ALIAS_ID;
94: pName = (LPSTR)alias;
95: }
96: }
97:
98: if (!PlaySound(pName, NULL, dwFlags)) {
99: Error("Failed to play alias: %s", name);
100: }
101: }
102:
103: }
104:
105: LONG SoundDlgProc(HWND hDlg, UINT msg, DWORD wParam, LONG lParam)
106: {
107: LPSTR lpBuf, lpKey;
108: DWORD dwChars;
109:
110: // dprintf4("SoundDlgProc: %8.8XH, %8.8XH, %8.8XH", msg, wParam, lParam);
111:
112: switch (msg) {
113: case WM_INITDIALOG:
114: // fill the listbox with the keys in the [sounds]
115: // section of win.ini
116:
117: // allocate a buffer to put the keys in
118: WinEval(lpBuf = (LPSTR) GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT, KEYBUFSIZE));
119:
120: // get the key list
121: dwChars = GetProfileString("sounds", NULL, "", lpBuf, KEYBUFSIZE);
122: dprintf4("%lu chars read from [sounds] section", dwChars);
123:
124: if (dwChars > 0) {
125: // add each entry to the list box
126: lpKey = lpBuf;
127: while (*lpKey) {
128: // TEMPORARY SECTION
129: if (lstrcmpi((LPCTSTR)lpKey, "enable")) // if not ENABLE
130: // END OF TEMPORARY SECTION
131: SendMessage(GetDlgItem(hDlg, IDSND_LIST),
132: LB_ADDSTRING,
133: 0,
134: (LONG)lpKey);
135: lpKey += strlen(lpKey) + 1;
136: }
137: } else {
138: // show there aren't any
139: SendMessage(GetDlgItem(hDlg, IDSND_LIST),
140: LB_ADDSTRING,
141: 0,
142: (LONG)(LPSTR)"[none]");
143: }
144:
145: if (bSync) {
146: // Set the initial state of the Sync checkbox from global flag
147: SendDlgItemMessage(hDlg, IDSND_SYNC, BM_SETCHECK, 1, 0);
148: }
149:
150: if (!bNoWait) {
151: // Set the initial state of the Wait checkbox from global flag
152: SendDlgItemMessage(hDlg, IDSND_WAIT, BM_SETCHECK, 1, 0);
153: }
154:
155: GlobalFree((HANDLE)lpBuf);
156:
157: // disable the play button till we get a selection
158: EnableWindow(GetDlgItem(hDlg, IDSND_PLAY), FALSE);
159:
160: break;
161:
162: case WM_COMMAND:
163: dprintf4("WM_COMMAND: %08lXH, %08lX", wParam, lParam);
164: switch (LOWORD(wParam)) {
165: case IDOK:
166: EndDialog(hDlg, TRUE);
167: break;
168:
169: case IDSND_PLAY:
170: // get the current selection and try to play it
171: PlaySelection(hDlg);
172: break;
173:
174: case IDSND_LIST:
175: switch (HIWORD(wParam)){
176: case LBN_SELCHANGE:
177: // enable the play button
178: EnableWindow(GetDlgItem(hDlg, IDSND_PLAY), TRUE);
179: dprintf3("Play button enabled");
180: break;
181:
182: case LBN_DBLCLK:
183: PlaySelection(hDlg);
184: break;
185:
186: default:
187: break;
188: }
189: break;
190:
191: default:
192: break;
193: }
194: break;
195:
196: default:
197: return FALSE; // say we didn't handle it
198: break;
199: }
200:
201: return TRUE; // say we handled it
202: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.