1 | /*
|
---|
2 | * mmplayer.c (C) Chris Wohlgemuth 2004
|
---|
3 | *
|
---|
4 | */
|
---|
5 | /*
|
---|
6 | * This program is free software; you can redistribute it and/or modify
|
---|
7 | * it under the terms of the GNU General Public License as published by
|
---|
8 | * the Free Software Foundation; either version 2, or (at your option)
|
---|
9 | * any later version.
|
---|
10 | *
|
---|
11 | * This program is distributed in the hope that it will be useful,
|
---|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
14 | * GNU General Public License for more details.
|
---|
15 | *
|
---|
16 | * You should have received a copy of the GNU General Public License
|
---|
17 | * along with this program; see the file COPYING. If not, write to
|
---|
18 | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
19 | */
|
---|
20 | /*
|
---|
21 | * If you need another license for your project/product (commercial,
|
---|
22 | * noncommercial, whatever) contact me at
|
---|
23 | *
|
---|
24 | * http://www.os2world.com/cdwriting
|
---|
25 | * http://www.geocities.com/SiliconValley/Sector/5785/
|
---|
26 | *
|
---|
27 | */
|
---|
28 |
|
---|
29 | #define INCL_DOS
|
---|
30 | #define INCL_DOSFILEMGR
|
---|
31 | #define INCL_DOSERRORS
|
---|
32 | #define INCL_WIN
|
---|
33 | #define INCL_WINWORKPLACE
|
---|
34 | #define INCL_OS2MM
|
---|
35 | #define INCL_MMIOOS2
|
---|
36 | #define INCL_MCIOS2
|
---|
37 | #define INCL_GPI
|
---|
38 | #define INCL_PM
|
---|
39 |
|
---|
40 | #include <os2.h>
|
---|
41 | #include <sys\types.h>
|
---|
42 | #include <sys\stat.h>
|
---|
43 | #include <stdio.h>
|
---|
44 | #include <string.h>
|
---|
45 | #include <stdlib.h>
|
---|
46 | #include "os2me.h"
|
---|
47 | #include "common.h"
|
---|
48 | #include "mmres.h"
|
---|
49 | #include "mmprogs_defaults.h"
|
---|
50 | #include "sys_funcs.h"
|
---|
51 | #include "message_funcs.h"
|
---|
52 |
|
---|
53 | #ifndef OPEN_DEFAULT
|
---|
54 | /* Open views for the wpOpen() method */
|
---|
55 |
|
---|
56 | #define OPEN_UNKNOWN -1
|
---|
57 | #define OPEN_DEFAULT 0
|
---|
58 | #define OPEN_CONTENTS 1
|
---|
59 | #define OPEN_SETTINGS 2
|
---|
60 | #define OPEN_HELP 3
|
---|
61 | #define OPEN_RUNNING 4
|
---|
62 | #define OPEN_PROMPTDLG 5
|
---|
63 | #define OPEN_PALETTE 121 /*SPLIT*/
|
---|
64 | #define OPEN_USER 0x6500
|
---|
65 | #endif
|
---|
66 |
|
---|
67 | #define TIMERID_SELECTION 1
|
---|
68 |
|
---|
69 | //#define DEBUG
|
---|
70 | #ifdef DEBUG
|
---|
71 | void HlpWriteToTrapLog(const char* chrFormat, ...);
|
---|
72 | #endif
|
---|
73 |
|
---|
74 | BOOL IniSaveWindowPos(char * iniFile, char* chrApp, char *chrKey, HWND hwnd);
|
---|
75 | BOOL IniRestoreWindowPos(char * iniFile, char* chrApp, char *chrKey, HWND hwnd);
|
---|
76 | int IniRestoreInt(char * iniFile, char* chrApp, char *chrKey, int defaultInt);
|
---|
77 | BOOL IniSaveInt(char * iniFile, char* chrApp, char *chrKey, int theInt);
|
---|
78 | BOOL HlpBuildMMProgIniFileName(char* chrProgname, char * chrBuffer, ULONG ulBufferSize);
|
---|
79 | void freeResHandle();
|
---|
80 | HMODULE queryResModuleHandle(char *chrExePath);
|
---|
81 | BOOL getMessage(char* text,ULONG ulID, LONG lSizeText, HMODULE hResource,HWND hwnd);
|
---|
82 | MRESULT menuInsertMenuSeparator(HWND hwndMenu, HWND hwndSubMenu, SHORT sPosition );
|
---|
83 | SHORT menuInsertMenuItem( HWND hwndMenu, HWND hwndSubMenu, SHORT sPosition, int iID, char * chrText);
|
---|
84 | void pmUsage();
|
---|
85 | ULONG messageBox( char* text, ULONG ulTextID , LONG lSizeText,
|
---|
86 | char* title, ULONG ulTitleID, LONG lSizeTitle,
|
---|
87 | HMODULE hResource, HWND hwnd, ULONG ulFlags);
|
---|
88 |
|
---|
89 | HBITMAP loadBitmap ( PSZ pszFileName, PBITMAPINFOHEADER2 pBMPInfoHeader2);
|
---|
90 | VOID DrawBitmap ( HWND hwnd );
|
---|
91 | MRESULT EXPENTRY bmpPreviewProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
|
---|
92 | void showImageControls(HWND hwnd, BOOL bShow);
|
---|
93 |
|
---|
94 | char logName[]="mmfind.log";
|
---|
95 |
|
---|
96 | char chrIniFile[CCHMAXPATH];
|
---|
97 |
|
---|
98 | #define NUMPARAMS 1
|
---|
99 | /*
|
---|
100 | argv[0]: progname
|
---|
101 | */
|
---|
102 | int numArgs;
|
---|
103 | char* params[NUMPARAMS];
|
---|
104 |
|
---|
105 | HMODULE RESSOURCEHANDLE=0;
|
---|
106 |
|
---|
107 | #define numMediaType 3
|
---|
108 | #define MT_AUDIO 0
|
---|
109 | #define MT_IMAGE 1
|
---|
110 | #define MT_VIDEO 2
|
---|
111 | #define MT_UNKNOWN 100
|
---|
112 |
|
---|
113 | char chrMediaFileTypes[numMediaType][100]= {"Audio","Image","Video"};
|
---|
114 | char chrMediaFileExt[numMediaType][300]= {"*.AIF;*.AU;*.FLA;*.FLAC;*.IFF;*.MID;*.MP3;*.OGG;*.SND;*.VOC;*.WAV;*._AU",
|
---|
115 | "*.BMP;*.DIB;*.GIF;*.JPG;*.PCX;*.PNG;*.PCD;*.TIF;*.TGA;*.VID;*._IM",
|
---|
116 | "*.AVI;*.MPG;*.FLI;*.FLC;*.MOV;*.QT;*.VBS"};
|
---|
117 | int iMediaType=MT_AUDIO;
|
---|
118 |
|
---|
119 | char audioText[1000]={"Play time:\t%02d:%02d\n\nSamplerate:\t%d\n\nBits per sample:\t%d\n\nChannels:\t%d"};
|
---|
120 |
|
---|
121 | HAB globalHab;
|
---|
122 |
|
---|
123 | /* BMP info for preview */
|
---|
124 | BITMAPINFOHEADER2 bmpInfoHeader2;
|
---|
125 | HBITMAP hBitmap;
|
---|
126 |
|
---|
127 | FILEDLG fd = { 0 };
|
---|
128 |
|
---|
129 | void loadStrings(void)
|
---|
130 | {
|
---|
131 |
|
---|
132 | }
|
---|
133 |
|
---|
134 | void showVideoControls(HWND hwnd, BOOL bShow)
|
---|
135 | {
|
---|
136 | /* Preview area */
|
---|
137 | WinShowWindow(WinWindowFromID(hwnd, IDST_NOPREVIEWAVAILABLE), bShow);
|
---|
138 | /* Group box */
|
---|
139 | WinShowWindow(WinWindowFromID(hwnd, IDGB_PREVIEW), bShow);
|
---|
140 | }
|
---|
141 |
|
---|
142 | void showAudioControls(HWND hwnd, BOOL bShow)
|
---|
143 | {
|
---|
144 | /* Preview area */
|
---|
145 | WinShowWindow(WinWindowFromID(hwnd, IDST_AUDIOINFO), bShow);
|
---|
146 | /* Group box */
|
---|
147 | WinShowWindow(WinWindowFromID(hwnd, IDGB_AUDIOINFO), bShow);
|
---|
148 | }
|
---|
149 |
|
---|
150 |
|
---|
151 | ULONG mmIdentifyFile(char* chrFile)
|
---|
152 | {
|
---|
153 | MMIOINFO mmioInfo={0};
|
---|
154 | MMFORMATINFO mmFormatInfo={0};
|
---|
155 | FOURCC fourCC;
|
---|
156 |
|
---|
157 | // SysWriteToTrapLog("%s\n", chrFile);
|
---|
158 | if(MMIO_SUCCESS!=mmioIdentifyFile(chrFile, &mmioInfo, &mmFormatInfo, &fourCC, 0,0))
|
---|
159 | {
|
---|
160 | return MT_UNKNOWN;
|
---|
161 | }
|
---|
162 |
|
---|
163 | switch(mmFormatInfo.ulMediaType)
|
---|
164 | {
|
---|
165 | case MMIO_MEDIATYPE_MIDI: /* Midi */
|
---|
166 | case MMIO_MEDIATYPE_AUDIO: /* Any other audio file */
|
---|
167 | return MT_AUDIO;
|
---|
168 | case MMIO_MEDIATYPE_IMAGE:
|
---|
169 | return MT_IMAGE;
|
---|
170 | case MMIO_MEDIATYPE_DIGITALVIDEO:
|
---|
171 | case MMIO_MEDIATYPE_MOVIE:
|
---|
172 | return MT_VIDEO;
|
---|
173 | default:
|
---|
174 | return MT_UNKNOWN;
|
---|
175 | }
|
---|
176 |
|
---|
177 | return 0;
|
---|
178 | }
|
---|
179 |
|
---|
180 |
|
---|
181 | MRESULT findFileDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
|
---|
182 | {
|
---|
183 |
|
---|
184 | switch(msg)
|
---|
185 | {
|
---|
186 | case WM_INITDLG:
|
---|
187 | {
|
---|
188 | int a;
|
---|
189 |
|
---|
190 | /* Set dialog font */
|
---|
191 | if(SysQueryOSRelease()>=40) {
|
---|
192 | WinSetPresParam(hwnd,
|
---|
193 | PP_FONTNAMESIZE,(ULONG)sizeof(DEFAULT_DIALOG_FONT),
|
---|
194 | DEFAULT_DIALOG_FONT );
|
---|
195 | }
|
---|
196 | /* Fill combo box with media types (audio, image, video) */
|
---|
197 | for(a=0;a<numMediaType;a++)
|
---|
198 | WinSendMsg(WinWindowFromID(hwnd, IDCB_TYPEOFFILE), LM_INSERTITEM, MRFROMSHORT(LIT_SORTASCENDING),
|
---|
199 | MPFROMP(chrMediaFileTypes[a]));
|
---|
200 | WinSetWindowText(WinWindowFromID(hwnd, IDCB_TYPEOFFILE), chrMediaFileTypes[0]);
|
---|
201 |
|
---|
202 | /* Subclass preview area */
|
---|
203 | WinSubclassWindow(WinWindowFromID(hwnd, IDSR_IMGPREVIEW), bmpPreviewProc);
|
---|
204 | break;
|
---|
205 | }
|
---|
206 | case WM_CONTROL:
|
---|
207 | {
|
---|
208 | switch(SHORT1FROMMP(mp1))
|
---|
209 | {
|
---|
210 | case IDCB_TYPEOFFILE:
|
---|
211 | {
|
---|
212 | if(SHORT2FROMMP(mp1)==CBN_EFCHANGE) {
|
---|
213 | char chrText[100];
|
---|
214 | int a;
|
---|
215 | WinQueryWindowText(HWNDFROMMP(mp2), sizeof(chrText), chrText);
|
---|
216 | /* Find Index */
|
---|
217 | for(a=0; a<numMediaType;a++) {
|
---|
218 | if(!stricmp(chrMediaFileTypes[a], chrText))
|
---|
219 | break;
|
---|
220 | }
|
---|
221 | /* Error!??!*/
|
---|
222 | switch(a)
|
---|
223 | {
|
---|
224 | case 0: /* Audio */
|
---|
225 | {
|
---|
226 | showVideoControls(hwnd, FALSE);
|
---|
227 | showImageControls(hwnd, FALSE);
|
---|
228 | showAudioControls(hwnd, TRUE);
|
---|
229 | iMediaType=MT_AUDIO;
|
---|
230 | break;
|
---|
231 | }
|
---|
232 | case 1: /* Image */
|
---|
233 | showAudioControls(hwnd, FALSE);
|
---|
234 | showVideoControls(hwnd, FALSE);
|
---|
235 | showImageControls(hwnd, TRUE);
|
---|
236 | iMediaType=MT_IMAGE;
|
---|
237 | break;
|
---|
238 | case 2:
|
---|
239 | showAudioControls(hwnd, FALSE);
|
---|
240 | showImageControls(hwnd, FALSE);
|
---|
241 | showVideoControls(hwnd, TRUE);
|
---|
242 | iMediaType=MT_VIDEO;
|
---|
243 | break;
|
---|
244 | default:
|
---|
245 | return WinDefFileDlgProc(hwnd, msg, mp1, mp2);
|
---|
246 | }
|
---|
247 | WinSetWindowText(WinWindowFromID(hwnd, 258), chrMediaFileExt[a]);
|
---|
248 | WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, 258));
|
---|
249 | WinSendMsg(WinWindowFromID(hwnd, 258), WM_CHAR,
|
---|
250 | MPFROM2SHORT(KC_VIRTUALKEY , 0), MPFROM2SHORT(0, VK_NEWLINE));
|
---|
251 |
|
---|
252 | }
|
---|
253 | break;
|
---|
254 | }
|
---|
255 | case 258:
|
---|
256 | {
|
---|
257 | if(SHORT2FROMMP(mp1)==EN_CHANGE)
|
---|
258 | WinStartTimer(globalHab, hwnd, TIMERID_SELECTION, 100);
|
---|
259 | break;
|
---|
260 | }
|
---|
261 | default:
|
---|
262 | break;
|
---|
263 | }
|
---|
264 | break;
|
---|
265 | }
|
---|
266 | case WM_TIMER:
|
---|
267 | switch(SHORT1FROMMP(mp1))
|
---|
268 | {
|
---|
269 | case TIMERID_SELECTION:
|
---|
270 | {
|
---|
271 | char chrName[CCHMAXPATH];
|
---|
272 | char chrFullName[CCHMAXPATH*2];
|
---|
273 |
|
---|
274 | WinStopTimer(globalHab, hwnd, TIMERID_SELECTION);
|
---|
275 | WinQueryWindowText(WinWindowFromID(hwnd, 258), sizeof(chrName), chrName);
|
---|
276 | strcpy(chrFullName, fd.szFullFile);
|
---|
277 | strcat(chrFullName, chrName);
|
---|
278 |
|
---|
279 | switch(iMediaType)
|
---|
280 | {
|
---|
281 | case MT_AUDIO:
|
---|
282 | {
|
---|
283 | char text[500];
|
---|
284 | MMIOINFO mmio;
|
---|
285 | HMMIO hmmio;
|
---|
286 | MMAUDIOHEADER mmAudioHeader={0};
|
---|
287 | LONG lBytesRead=0;
|
---|
288 | ULONG rc;
|
---|
289 | ULONG ulPlaySecs;
|
---|
290 |
|
---|
291 | memset(&mmio,0, sizeof(mmio));
|
---|
292 | mmio.ulFlags=MMIO_READ;
|
---|
293 | mmio.ulTranslate=MMIO_TRANSLATEHEADER;
|
---|
294 |
|
---|
295 | hmmio = mmioOpen(chrFullName, &mmio, MMIO_READ);
|
---|
296 | if(!hmmio)
|
---|
297 | break;
|
---|
298 |
|
---|
299 | memset(&mmAudioHeader,0,sizeof(MMAUDIOHEADER));
|
---|
300 | rc = mmioGetHeader(hmmio, &mmAudioHeader,sizeof(MMAUDIOHEADER),
|
---|
301 | &lBytesRead, 0, 0);
|
---|
302 |
|
---|
303 | mmioClose(hmmio, 0);
|
---|
304 | if(rc!=MMIO_SUCCESS) {
|
---|
305 | WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), "");
|
---|
306 | break;
|
---|
307 | }
|
---|
308 |
|
---|
309 | ulPlaySecs=mmAudioHeader.mmXWAVHeader.XWAVHeaderInfo.ulAudioLengthInMS/1000;
|
---|
310 | sprintf(text, audioText,
|
---|
311 | ulPlaySecs/60, ulPlaySecs%60,
|
---|
312 | mmAudioHeader.mmXWAVHeader.WAVEHeader.ulSamplesPerSec,
|
---|
313 | mmAudioHeader.mmXWAVHeader.WAVEHeader.usBitsPerSample,
|
---|
314 | mmAudioHeader.mmXWAVHeader.WAVEHeader.usChannels);
|
---|
315 | WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), text);
|
---|
316 |
|
---|
317 | break;
|
---|
318 | }
|
---|
319 | case MT_IMAGE:
|
---|
320 | if(hBitmap) {
|
---|
321 | HBITMAP hBitmapTemp;
|
---|
322 | hBitmapTemp=loadBitmap (chrFullName, &bmpInfoHeader2);
|
---|
323 | GpiDeleteBitmap(hBitmap);
|
---|
324 | hBitmap=hBitmapTemp;
|
---|
325 | }
|
---|
326 | else
|
---|
327 | hBitmap=loadBitmap (chrFullName, &bmpInfoHeader2);
|
---|
328 | /* Force redraw of preview area */
|
---|
329 | WinInvalidateRect(WinWindowFromID(hwnd, IDSR_IMGPREVIEW), NULLHANDLE, FALSE);
|
---|
330 | break;
|
---|
331 | case MT_VIDEO:
|
---|
332 | break;
|
---|
333 | default:
|
---|
334 | break;
|
---|
335 | }
|
---|
336 | return MRFALSE;
|
---|
337 | }
|
---|
338 | default:
|
---|
339 | break;
|
---|
340 | }
|
---|
341 | case WM_COMMAND:
|
---|
342 | switch(SHORT1FROMMP(mp1))
|
---|
343 | {
|
---|
344 | case IDPB_NEWFILE: /* New */
|
---|
345 | {
|
---|
346 | HOBJECT hObject;
|
---|
347 | if((hObject=WinQueryObject("<MMPM2_MMTEMPLATEFOLDER>"))!=NULLHANDLE) {
|
---|
348 | WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
|
---|
349 | WinDismissDlg(hwnd, DID_CANCEL);
|
---|
350 | }
|
---|
351 | else
|
---|
352 | showMessageBox2(hwnd, IDSTR_NOMMTEMPLATEFLDRTITLE, IDSTR_NOMMTEMPLATEFLDR, RESSOURCEHANDLE, MB_MOVEABLE|MB_OK);
|
---|
353 |
|
---|
354 | return MRFALSE;
|
---|
355 | }
|
---|
356 | default:
|
---|
357 | break;
|
---|
358 | }
|
---|
359 | default:
|
---|
360 | break;
|
---|
361 | }
|
---|
362 | return WinDefFileDlgProc(hwnd, msg, mp1, mp2);
|
---|
363 | }
|
---|
364 |
|
---|
365 | int main (int argc, char *argv[])
|
---|
366 | {
|
---|
367 | HAB hab;
|
---|
368 | HMQ hmq;
|
---|
369 | char text[CCHMAXPATH];
|
---|
370 | short a;
|
---|
371 |
|
---|
372 | // FILEDLG fd = { 0 };
|
---|
373 |
|
---|
374 | /* Create a copy of the args */
|
---|
375 | /* argv[0]: progname
|
---|
376 | * argv[1]: audio file
|
---|
377 | */
|
---|
378 |
|
---|
379 | numArgs=argc;
|
---|
380 |
|
---|
381 | strcpy(text,"");
|
---|
382 | for(a=0;a<argc;a++)
|
---|
383 | {
|
---|
384 | params[a]=argv[a];
|
---|
385 | }
|
---|
386 |
|
---|
387 | hab=WinInitialize(0);
|
---|
388 | if(hab) {
|
---|
389 | hmq=WinCreateMsgQueue(hab,0);
|
---|
390 | if(hmq) {
|
---|
391 | /* Check if user started prog by hand */
|
---|
392 | if(argc!=NUMPARAMS) {/* Not the right num of params */
|
---|
393 | pmUsage();
|
---|
394 | }
|
---|
395 | else {
|
---|
396 | HWND hwndDlg;
|
---|
397 |
|
---|
398 | /* Get our ressource dll */
|
---|
399 | RESSOURCEHANDLE=queryResModuleHandle(argv[0]);
|
---|
400 | /* Get data from INI file */
|
---|
401 | HlpBuildMMProgIniFileName(argv[0], chrIniFile, sizeof(chrIniFile));
|
---|
402 |
|
---|
403 | globalHab=WinQueryAnchorBlock(HWND_DESKTOP);
|
---|
404 |
|
---|
405 | fd.cbSize = sizeof( fd );
|
---|
406 | /* It's an centered 'Open'-dialog */
|
---|
407 | fd.fl = FDS_OPEN_DIALOG|FDS_CENTER | FDS_CUSTOM;
|
---|
408 | /* Title: "Search CDRecord/2" */
|
---|
409 | //getMessage(text,IDSTR_FDLGSEARCHCDRDAOTITLE,sizeof(text), hSettingsResource,hwnd);
|
---|
410 | /* Set the title of the file dialog */
|
---|
411 | //fd.pszTitle = text;
|
---|
412 | // fd.pszTitle = "Find file";
|
---|
413 | /* Only show *.wav files */
|
---|
414 | sprintf(fd.szFullFile,"%s","*.wav");
|
---|
415 | fd.hMod=RESSOURCEHANDLE;
|
---|
416 | fd.usDlgId=IDDLG_MMFIND;
|
---|
417 | fd.pfnDlgProc=findFileDlgProc;
|
---|
418 | //SysWriteToTrapLog("%x\n", fd.hMod);
|
---|
419 | if( (hwndDlg=WinFileDlg( HWND_DESKTOP, HWND_DESKTOP, &fd )) != NULLHANDLE )
|
---|
420 | {
|
---|
421 | /* Set dialog font to WarpSans for Warp 4 and above */
|
---|
422 | if(hBitmap)
|
---|
423 | GpiDeleteBitmap(hBitmap);
|
---|
424 |
|
---|
425 | if( fd.lReturn == DID_OK )
|
---|
426 | {
|
---|
427 | switch(mmIdentifyFile(fd.szFullFile))
|
---|
428 | {
|
---|
429 | case MT_IMAGE:
|
---|
430 | {
|
---|
431 | HOBJECT hObject;
|
---|
432 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
433 | WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
|
---|
434 | break;
|
---|
435 | }
|
---|
436 | case MT_AUDIO:
|
---|
437 | {
|
---|
438 | HOBJECT hObject;
|
---|
439 | char *chr;
|
---|
440 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
441 | WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
|
---|
442 | if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) {
|
---|
443 | *chr=0;
|
---|
444 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
445 | WinOpenObject(hObject, OPEN_CONTENTS, TRUE);
|
---|
446 | }
|
---|
447 | break;
|
---|
448 | }
|
---|
449 | case MT_VIDEO:
|
---|
450 | {
|
---|
451 | HOBJECT hObject;
|
---|
452 | char *chr;
|
---|
453 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
454 | WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
|
---|
455 | if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) {
|
---|
456 | *chr=0;
|
---|
457 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
458 | WinOpenObject(hObject, OPEN_CONTENTS, TRUE);
|
---|
459 | }
|
---|
460 | break;
|
---|
461 | }
|
---|
462 | default:
|
---|
463 | {
|
---|
464 | HOBJECT hObject;
|
---|
465 | char *chr;
|
---|
466 | //if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
467 | // WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
|
---|
468 | if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) {
|
---|
469 | *chr=0;
|
---|
470 | if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
|
---|
471 | WinOpenObject(hObject, OPEN_CONTENTS, TRUE);
|
---|
472 | }
|
---|
473 | break;
|
---|
474 | }
|
---|
475 | }/* switch()*/
|
---|
476 | }/* DID_OK */
|
---|
477 | }
|
---|
478 | // freeResHandle();
|
---|
479 | }
|
---|
480 | WinDestroyMsgQueue(hmq);
|
---|
481 | }
|
---|
482 | WinTerminate(hab);
|
---|
483 | }
|
---|
484 | return 0;
|
---|
485 | }
|
---|
486 |
|
---|