Changeset 4 for trunk/classes/mm-progs/mmfind
- Timestamp:
- Jul 13, 2017, 5:17:57 AM (8 years ago)
- Location:
- trunk/classes/mm-progs/mmfind
- Files:
-
- 9 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/classes/mm-progs/mmfind/image.c
r2 r4 92 92 } 93 93 94 95 96 97 94 MRESULT EXPENTRY bmpPreviewProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 98 95 { … … 116 113 117 114 115 #if 0 118 116 /* 119 117 Load an image file using IO-Procs … … 378 376 return(hbm); 379 377 } 378 #endif -
trunk/classes/mm-progs/mmfind/makefile
r2 r4 2 2 3 3 include ../../../make.inc 4 include ../mmprog.inc 4 5 5 CC = gcc 6 LIB_DIR = $d:/emx/lib 7 #CPPFLAGS = -Ge- /Gm+ -G4 -Gl /O+ -Oc+ -Ol 8 #CPPFLAGS = -O -Zomf -Zcrtdll -Zmtd -s 9 CPPFLAGS = -O -Wall -Zomf -Zmt -Zsys -s 10 INC = ../include -I ../../../classes/inc -I ../../../common_functions/include 11 DEFS = 12 PROGS = 13 ODIR = . 14 CPPDIR = . 15 LIBDIR = ../lib 16 OBJECTS = $(LIBDIR)/helper.obj $(LIBDIR)/message.obj $(LIBDIR)/sys_funcs.obj 17 # $(LIBDIR)/menu_funcs.obj 18 OBJS2 = image.obj 19 #customprocs.obj playaudio.obj display.obj 6 LIBOBJECTS = $(LIBDIR)/helper.obj \ 7 $(LIBDIR)/message.obj \ 8 $(LIBDIR)/sys_funcs.obj \ 9 $(LIBDIR)/window_funcs.obj \ 10 $(LIBDIR)/img_funcs.obj \ 11 $(LIBDIR)/ini_funcs.obj 12 13 14 OBJECTS = image.obj 20 15 21 16 22 17 all: mmfind.exe 23 18 24 $(LIBDIR)/%.obj: $(COMMONSRC)/%.c 25 gcc -c -Wall -o$@ -Zomf -I$(INC) $< 26 27 %.obj: %.c 28 gcc -c -Wall -o$@ -Zomf -I$(INC) $< 29 30 mmfind.exe: mmfind.c $(OBJECTS) $(OBJS2) makefile 19 mmfind.exe: mmfind.c $(LIBOBJECTS) $(OBJECTS) makefile mmfind.rc def.tpl 31 20 #Use this command to link dynamicaly 32 gcc $(CPPFLAGS) -I$(INC) mmfind.c $(OBJECTS) $(OBJS2) -los2memmfind.def33 # rc mmfind.rc mmfind.exe 34 21 cmd /C $(TOOLDIR)\create_MMPROG_def.cmd mmfind.def 22 gcc $(CPPFLAGS) -I$(INC) mmfind.c $(LIBOBJECTS) $(OBJECTS) -los2me mmfind.def 23 rc mmfind.rc mmfind.exe 35 24 36 25 clean: … … 45 34 -rm *.flc 46 35 36 47 37 distribution: 48 -
trunk/classes/mm-progs/mmfind/mmfind.c
r2 r4 1 1 /* 2 * mm player.c (C) Chris Wohlgemuth 20042 * mmfind.c (C) Chris Wohlgemuth 2004-2005 3 3 * 4 4 */ … … 37 37 #define INCL_GPI 38 38 #define INCL_PM 39 39 #define INCL_REXXSAA 40 41 /* OS/2 and compiler includes */ 40 42 #include <os2.h> 41 43 #include <sys\types.h> … … 45 47 #include <stdlib.h> 46 48 #include "os2me.h" 47 #include "common.h" 48 #include "mmres.h" 49 #include "mmprogs_defaults.h" 49 /* CW toolkit includes */ 50 50 #include "sys_funcs.h" 51 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 52 #include "window_funcs.h" 53 #include "img_funcs.h" 54 #include "ini_funcs.h" 55 /* Program includes */ 56 #include "common.h" 57 #include "mmres.h" /* Ressource IDs */ 58 #include "mmprogs_defaults.h" 69 59 //#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"; 60 #include "mmfind.h" /* mmfind specific defines */ 61 62 char logName[]="mmfind.log"; /* To keep some (unused) helpers in helper.c happy */ 95 63 96 64 char chrIniFile[CCHMAXPATH]; 65 char chrInstallDir[CCHMAXPATH]; 66 67 char chrLastAudioDir[CCHMAXPATH]; 68 char chrLastVideoDir[CCHMAXPATH]; 69 char chrLastImageDir[CCHMAXPATH]; 70 71 /***** For previewing audio tracks *****/ 72 char chrSourceName[CCHMAXPATH]; /* The audio file to be played */ 73 BOOL bIsMidi=FALSE; /* No MIDI support atm */ 74 BOOL bIsPlaying=FALSE; /* TRUE if currently playing */ 75 BOOL bPaused=FALSE; 76 ULONG ulPos; 77 ULONG ulTotalLength; 78 HWND hwndPlayer; /* HWND of the player object window used for async coommunication */ 79 80 /***************************************/ 97 81 98 82 #define NUMPARAMS 1 … … 105 89 HMODULE RESSOURCEHANDLE=0; 106 90 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", 91 char chrMediaFileTypes[NUMMEDIATYPES][100]; 92 93 char chrMediaFileExt[NUMMEDIATYPES][EXT_STRING_LENGTH]= {"*.AIF;*.AU;*.FLA;*.FLAC;*.IFF;*.MID;*.MP3;*.OGG;*.SND;*.VOC;*.WAV;*._AU", 94 /* The image extensions are queried using the imageext.rx and imageadd.rx scripts */ 115 95 "*.BMP;*.DIB;*.GIF;*.JPG;*.PCX;*.PNG;*.PCD;*.TIF;*.TGA;*.VID;*._IM", 116 96 "*.AVI;*.MPG;*.FLI;*.FLC;*.MOV;*.QT;*.VBS"}; 97 /* Additional audio extensions to be queried during runtime */ 98 char chrAdditionalExt[200]; 99 /* This holds the template used when building the audio information text */ 100 char audioText[255]; 101 117 102 int iMediaType=MT_AUDIO; 118 103 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 */ 104 /* BMP stuff for preview */ 124 105 BITMAPINFOHEADER2 bmpInfoHeader2; 125 106 HBITMAP hBitmap; 126 107 108 /* HBITMAP for the play control buttons */ 109 HBITMAP hbmPlay; 110 HBITMAP hbmStop; 111 127 112 FILEDLG fd = { 0 }; 128 113 129 void loadStrings(void) 130 { 131 132 } 133 134 void showVideoControls(HWND hwnd, BOOL bShow) 114 static void _loadButtonBmps() 115 { 116 HPS hps; 117 HMODULE hResource; 118 119 hResource=NULLHANDLE; 120 hps=WinGetPS(HWND_DESKTOP); 121 122 /* Play */ 123 hbmPlay=GpiLoadBitmap(hps, hResource, IDBMP_PLAY, 0, 0); 124 125 /* Stop */ 126 hbmStop=GpiLoadBitmap(hps, hResource, IDBMP_STOP, 0, 0); 127 128 WinReleasePS(hps); 129 } 130 131 static void changeButtons(HWND hwnd) 132 { 133 HWND hwndTemp; 134 BTNCDATA btCtrl; 135 WNDPARAMS wndParams; 136 ULONG ulStyle; 137 138 if(hbmPlay) { 139 hwndTemp=WinWindowFromID(hwnd, IDPB_MMFINDPLAY); 140 141 /* Change Style to bitmap */ 142 ulStyle=WinQueryWindowULong(hwndTemp,QWL_STYLE); 143 ulStyle|=(BS_BITMAP); 144 ulStyle&=~BS_TEXT; 145 146 if(WinSetWindowULong(hwndTemp, QWL_STYLE, ulStyle)) { 147 memset(&btCtrl, 0, sizeof(btCtrl)); 148 btCtrl.cb=sizeof(btCtrl); 149 btCtrl.hImage=hbmPlay; 150 memset(&wndParams, 0, sizeof(wndParams)); 151 wndParams.fsStatus=WPM_CTLDATA; 152 wndParams.cbCtlData=btCtrl.cb; 153 wndParams.pCtlData=&btCtrl; 154 WinSendMsg(hwndTemp,WM_SETWINDOWPARAMS, 155 MPFROMP(&wndParams),0); 156 } 157 } 158 159 if(hbmStop) { 160 hwndTemp=WinWindowFromID(hwnd, IDPB_MMFINDSTOP); 161 /* Change Style to bitmap */ 162 ulStyle=WinQueryWindowULong(hwndTemp,QWL_STYLE); 163 ulStyle|=(BS_BITMAP); 164 ulStyle&=~BS_TEXT; 165 166 if(WinSetWindowULong(hwndTemp, QWL_STYLE, ulStyle)) { 167 memset(&btCtrl, 0, sizeof(btCtrl)); 168 btCtrl.cb=sizeof(btCtrl); 169 btCtrl.hImage=hbmStop; 170 memset(&wndParams, 0, sizeof(wndParams)); 171 wndParams.fsStatus=WPM_CTLDATA; 172 wndParams.cbCtlData=btCtrl.cb; 173 wndParams.pCtlData=&btCtrl; 174 WinSendMsg(hwndTemp,WM_SETWINDOWPARAMS, 175 MPFROMP(&wndParams),0); 176 } 177 } 178 } 179 180 static char* translateChars(char * chrString, char chrFrom, char chrTo) 181 { 182 char *chr=chrString; 183 184 if(chrTo == '\0' || chrFrom=='\0'|| chrString==NULLHANDLE) 185 return NULLHANDLE; 186 187 while(*chr) 188 { 189 if(*chr==chrFrom) 190 *chr=chrTo; 191 192 chr++; 193 } 194 return chrString; 195 } 196 197 static void loadStringsFromResourceDLL(HMODULE hResMod) 198 { 199 if(!MsgGetMessage(audioText, IDSTR_AUDIOINFOTEXT, sizeof(audioText), hResMod,HWND_DESKTOP)) 200 strcpy(audioText, TEXT_INFOTEXT); 201 if(!MsgGetMessage(chrMediaFileTypes[MT_AUDIO], IDSTR_TYPEAUDIO, 202 sizeof(chrMediaFileTypes[MT_AUDIO]), hResMod, HWND_DESKTOP)) 203 strcpy(chrMediaFileTypes[MT_AUDIO], TEXT_TYPEAUDIO); 204 if(!MsgGetMessage(chrMediaFileTypes[MT_IMAGE], IDSTR_TYPEIMAGE, 205 sizeof(chrMediaFileTypes[MT_IMAGE]), hResMod, HWND_DESKTOP)) 206 strcpy(chrMediaFileTypes[MT_AUDIO], TEXT_TYPEIMAGE); 207 if(!MsgGetMessage(chrMediaFileTypes[MT_VIDEO], IDSTR_TYPEVIDEO, 208 sizeof(chrMediaFileTypes[MT_VIDEO]), hResMod, HWND_DESKTOP)) 209 strcpy(chrMediaFileTypes[MT_VIDEO], TEXT_TYPEVIDEO); 210 } 211 212 static void showVideoControls(HWND hwnd, BOOL bShow) 135 213 { 136 214 /* Preview area */ … … 140 218 } 141 219 220 221 static void enableAudioPlayControls(HWND hwnd, BOOL bEnable) 222 { 223 WinEnableWindow(WinWindowFromID(hwnd, IDPB_MMFINDPAUSE), bEnable); 224 WinEnableWindow(WinWindowFromID(hwnd, IDPB_MMFINDPLAY), bEnable); 225 WinEnableWindow(WinWindowFromID(hwnd, IDPB_MMFINDSTOP), bEnable); 226 } 227 142 228 void showAudioControls(HWND hwnd, BOOL bShow) 143 229 { … … 146 232 /* Group box */ 147 233 WinShowWindow(WinWindowFromID(hwnd, IDGB_AUDIOINFO), bShow); 148 } 149 150 151 ULONG mmIdentifyFile(char* chrFile) 234 /* Playcontrols */ 235 WinShowWindow(WinWindowFromID(hwnd, IDPB_MMFINDPLAY), bShow); 236 WinShowWindow(WinWindowFromID(hwnd, IDPB_MMFINDSTOP), bShow); 237 WinShowWindow(WinWindowFromID(hwnd, IDPB_MMFINDPAUSE), bShow); 238 if(bShow) { 239 WinSetWindowToTop(WinWindowFromID(hwnd, IDPB_MMFINDPAUSE)); 240 WinSetWindowToTop(WinWindowFromID(hwnd, IDPB_MMFINDPLAY)); 241 WinSetWindowToTop(WinWindowFromID(hwnd, IDPB_MMFINDSTOP)); 242 enableAudioPlayControls(hwnd, FALSE); 243 } 244 } 245 246 BOOL pauseAudioFile(HWND hwndNotify) 247 { 248 #if 0 249 char chrCommand[50]; 250 char retMsg[100]; 251 ULONG rc; 252 253 iWavePriv=ulPid; 254 255 if(bPaused) { 256 sprintf(chrCommand,"RESUME wave%d wait", hwndNotify); 257 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 258 bPaused=FALSE; 259 showPlayTimeDisplay( hwndFrame, TRUE); 260 } 261 else { 262 sprintf(chrCommand,"PAUSE wave%d wait", iWavePriv); 263 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 264 bPaused=TRUE; 265 } 266 #endif 267 return TRUE; 268 } 269 270 BOOL stopAudioFile(HWND hwndNotify) 271 { 272 char chrCommand[50]; 273 char retMsg[100]; 274 ULONG rc; 275 276 if(bIsPlaying) { 277 sprintf(chrCommand,"stop wave%ld wait", hwndNotify); 278 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 279 280 sprintf(chrCommand,"close wave%ld wait", hwndNotify); 281 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 282 283 #if 0 284 _resetDisplay(hwndFrame); 285 showPlayTimeDisplay( hwndFrame, TRUE); 286 WinStopTimer(WinQueryAnchorBlock(hwndFrame), hwndFrame, IDTIMER_PLAY); 287 #endif 288 bIsPlaying=FALSE; 289 bPaused=FALSE; 290 } 291 292 return TRUE; 293 } 294 295 ULONG playAudioFile(HWND hwndFrame) 296 { 297 char chrCommand[CCHMAXPATH*2]; 298 char chrDevice[30]; 299 char retMsg[20]; 300 ULONG rc; 301 int iTime2; 302 HWND hwndNotify; 303 304 hwndNotify=hwndFrame;//WinWindowFromID(hwndTop, IDDLG_TOPMIDDLE); 305 306 if(bPaused) 307 { 308 pauseAudioFile(hwndFrame); 309 return 1; 310 } 311 312 ulPos=0; 313 314 stopAudioFile(hwndFrame); 315 316 if(bIsMidi) 317 strncpy(chrDevice,"SEQUENCER", sizeof(chrDevice)); 318 else 319 strncpy(chrDevice,"WAVEAUDIO", sizeof(chrDevice)); 320 321 /* Start audio file */ 322 sprintf(chrCommand,"open \"%s\" type %s alias wave%ld SHAREABLE wait", chrSourceName, chrDevice, hwndNotify); 323 324 325 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), hwndNotify, 0); 326 if((rc & 0x0000ffff)!=MCIERR_SUCCESS) 327 return 0; 328 329 /* Set time format */ 330 sprintf(chrCommand,"SET wave%ld TIME FORMAT MILLISECONDS wait", hwndNotify); 331 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 332 if((rc & 0x0000ffff)!=MCIERR_SUCCESS) { 333 sprintf(chrCommand,"close wave%ld wait", hwndNotify); 334 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 335 return 0; 336 } 337 338 #if 0 339 sprintf(chrCommand,"SETPOSITIONADVISE wave%d ON EVERY 1000 notify", iWavePriv); 340 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg),hwndNotify, 0); 341 if((rc & 0x0000ffff)!=MCIERR_SUCCESS) { 342 sprintf(chrCommand,"close wave%d wait",iWavePriv); 343 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 344 return 0; 345 } 346 #endif 347 348 /* Get wave length in ms */ 349 iTime2=0; 350 sprintf(chrCommand,"STATUS wave%ld LENGTH WAIT", hwndNotify); 351 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 352 if((rc & 0x0000ffff)==MCIERR_SUCCESS) { 353 iTime2=atoi(retMsg); 354 sprintf(chrCommand,"%d:%02d %d:%02d -%d:%02d",iTime2/1000/60,(iTime2/1000)%60, 355 0, 0, 356 iTime2/1000/60,(iTime2/1000)%60); 357 } 358 ulTotalLength=iTime2; 359 360 #if 0 361 /* Set volume */ 362 sprintf(chrCommand,"SET wave%ld AUDIO VOLUME %ld wait", hwndFrame, ulVolume); 363 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 364 if((rc & 0x0000ffff)!=MCIERR_SUCCESS) { 365 sprintf(chrCommand,"close wave%d",iWavePriv); 366 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 367 return 0; 368 } 369 #endif 370 371 sprintf(chrCommand,"play wave%ld FROM 0", hwndNotify); 372 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 373 if((rc & 0x0000ffff)!=MCIERR_SUCCESS) { 374 sprintf(chrCommand,"close wave%ld", hwndNotify); 375 rc = mciSendString(chrCommand, retMsg, sizeof(retMsg), 0, 0); 376 return 0; 377 } 378 379 #if 0 380 WinStartTimer(WinQueryAnchorBlock(hwndFrame), hwndFrame, IDTIMER_PLAY, PLAYTIMER_DELAY); 381 #endif 382 383 bIsPlaying=TRUE; 384 385 return 1; 386 } 387 388 static MRESULT EXPENTRY playObjectProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 389 { 390 switch (msg) 391 { 392 case WM_APPTERMINATENOTIFY: 393 { 394 395 HWND hwndFrame=HWNDFROMMP(mp2); 396 switch(LONGFROMMP(mp1)) 397 { 398 case PLAY_FILE: 399 playAudioFile(hwndFrame); 400 break; 401 case STOP_TRACK: 402 stopAudioFile(hwndFrame); 403 break; 404 case PAUSE_TRACK: 405 pauseAudioFile(hwndFrame); 406 break; 407 default: 408 break; 409 } 410 return (MRESULT)0; 411 } 412 case WM_CLOSE: 413 414 break; 415 default: 416 break; 417 } 418 return WinDefWindowProc( hwnd, msg, mp1, mp2); 419 } 420 421 /* Every folder has one running play thread to handle play commands */ 422 void _Optlink playThreadFunc (void *arg) 423 { 424 HAB hab; 425 HMQ hmq; 426 QMSG qmsg; 427 HWND hwndNotify=(HWND)arg; 428 429 hab=WinInitialize(0); 430 if(hab) { 431 hmq=WinCreateMsgQueue(hab,0); 432 if(hmq) { 433 HWND hwndPlayObject; 434 hwndPlayObject=WinCreateWindow(HWND_OBJECT,WC_STATIC,"MMAudioPlayObj", 435 0,0,0,0,0,NULLHANDLE,HWND_BOTTOM,13343,NULL,NULL); 436 if(hwndPlayObject) { 437 WinSubclassWindow(hwndPlayObject,&playObjectProc); 438 /* Window created. */ 439 WinPostMsg(hwndNotify, WM_APPTERMINATENOTIFY, MPFROMSHORT(MMAUDIO_PLAYER_CREATED), 440 MPFROMHWND(hwndPlayObject)); 441 while(WinGetMsg(hab,&qmsg,(HWND)NULL,0,0)) 442 WinDispatchMsg(hab,&qmsg); 443 444 WinDestroyWindow(hwndPlayObject); 445 } 446 WinDestroyMsgQueue(hmq); 447 } 448 WinTerminate(hab); 449 } 450 } 451 452 453 void MMAudioPlayFile(HWND hwndPlayer, HWND hwndNotify, char* chrFile) 454 { 455 WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(PLAY_FILE), MPFROMHWND(hwndNotify)); 456 } 457 458 void MMAudioStop(HWND hwndPlayer, HWND hwndNotify) 459 { 460 WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(STOP_TRACK), MPFROMHWND(hwndNotify)); 461 } 462 463 void MMAudioPause(HWND hwndPlayer, HWND hwndNotify) 464 { 465 WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(PAUSE_TRACK), MPFROMHWND(hwndNotify)); 466 } 467 468 BOOL MMAudioOpenPlayer(HWND hwndNotify) 469 { 470 if(-1==_beginthread(playThreadFunc,NULL,8192*16, (void*)hwndNotify)) 471 return FALSE; /* Error occured */ 472 473 return TRUE; 474 } 475 476 void MMAudioClosePlayer(HWND hwndPlayer) 477 { 478 WinSendMsg(hwndPlayer, WM_QUIT, 0, 0); 479 return; 480 } 481 482 static ULONG mmIdentifyFile(char* chrFile) 152 483 { 153 484 MMIOINFO mmioInfo={0}; … … 155 486 FOURCC fourCC; 156 487 157 // SysWriteToTrapLog("%s\n", chrFile);158 488 if(MMIO_SUCCESS!=mmioIdentifyFile(chrFile, &mmioInfo, &mmFormatInfo, &fourCC, 0,0)) 159 489 { … … 178 508 } 179 509 510 static PSZ queryExeDir(const char *chrEXE) 511 { 512 if(chrInstallDir[0]==0) 513 { 514 char * chr; 515 strlcpy(chrInstallDir, chrEXE, sizeof(chrInstallDir)); 516 if((chr=strrchr(chrInstallDir, '\\'))!=NULLHANDLE) 517 *chr='\0'; 518 } 519 return chrInstallDir; 520 } 521 180 522 181 523 MRESULT findFileDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) … … 187 529 { 188 530 int a; 531 SWCNTRL swctl; 532 PID pid; 189 533 190 534 /* Set dialog font */ … … 195 539 } 196 540 /* Fill combo box with media types (audio, image, video) */ 197 for(a=0;a< numMediaType;a++)541 for(a=0;a<NUMMEDIATYPES;a++) 198 542 WinSendMsg(WinWindowFromID(hwnd, IDCB_TYPEOFFILE), LM_INSERTITEM, MRFROMSHORT(LIT_SORTASCENDING), 199 543 MPFROMP(chrMediaFileTypes[a])); … … 202 546 /* Subclass preview area */ 203 547 WinSubclassWindow(WinWindowFromID(hwnd, IDSR_IMGPREVIEW), bmpPreviewProc); 548 549 /* Add switch entry */ 550 memset(&swctl,0,sizeof(swctl)); 551 WinQueryWindowProcess(hwnd,&pid,NULL); 552 swctl.hwnd=hwnd; 553 swctl.uchVisibility=SWL_VISIBLE; 554 swctl.idProcess=pid; 555 swctl.bProgType=PROG_DEFAULT; 556 swctl.fbJump=SWL_JUMPABLE; 557 WinAddSwitchEntry(&swctl); 558 559 /* Add bitmap to play control buttons */ 560 changeButtons(hwnd); 561 562 /* Start an audio player thread */ 563 MMAudioOpenPlayer(hwnd); 204 564 break; 565 } 566 case WM_APPTERMINATENOTIFY: 567 { 568 /* Posted from player object window */ 569 switch(SHORT1FROMMP(mp1)) 570 { 571 case MMAUDIO_PLAYER_CREATED: 572 /* Player object window */ 573 hwndPlayer=HWNDFROMMP(mp2); 574 break; 575 default: 576 break; 577 } 578 return MRFALSE; 205 579 } 206 580 case WM_CONTROL: … … 215 589 WinQueryWindowText(HWNDFROMMP(mp2), sizeof(chrText), chrText); 216 590 /* Find Index */ 217 for(a=0; a< numMediaType;a++) {591 for(a=0; a<NUMMEDIATYPES;a++) { 218 592 if(!stricmp(chrMediaFileTypes[a], chrText)) 219 593 break; … … 234 608 showVideoControls(hwnd, FALSE); 235 609 showImageControls(hwnd, TRUE); 236 610 iMediaType=MT_IMAGE; 237 611 break; 238 612 case 2: … … 249 623 WinSendMsg(WinWindowFromID(hwnd, 258), WM_CHAR, 250 624 MPFROM2SHORT(KC_VIRTUALKEY , 0), MPFROM2SHORT(0, VK_NEWLINE)); 251 252 625 } 253 626 break; … … 256 629 { 257 630 if(SHORT2FROMMP(mp1)==EN_CHANGE) 258 WinStartTimer( globalHab, hwnd, TIMERID_SELECTION, 100);631 WinStartTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, TIMERID_SELECTION, 100); 259 632 break; 260 633 } … … 272 645 char chrFullName[CCHMAXPATH*2]; 273 646 274 WinStopTimer( globalHab, hwnd, TIMERID_SELECTION);647 WinStopTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, TIMERID_SELECTION); 275 648 WinQueryWindowText(WinWindowFromID(hwnd, 258), sizeof(chrName), chrName); 276 649 strcpy(chrFullName, fd.szFullFile); 650 switch(iMediaType) 651 { 652 case MT_AUDIO: 653 strlcpy(chrLastAudioDir, fd.szFullFile, sizeof(chrLastAudioDir)); 654 break; 655 case MT_IMAGE: 656 strlcpy(chrLastImageDir, fd.szFullFile, sizeof(chrLastImageDir)); 657 break; 658 case MT_VIDEO: 659 strlcpy(chrLastImageDir, fd.szFullFile, sizeof(chrLastImageDir)); 660 break; 661 default: 662 break; 663 } 277 664 strcat(chrFullName, chrName); 278 665 strlcpy(chrSourceName, chrFullName, sizeof(chrSourceName)); 279 666 switch(iMediaType) 280 667 { … … 289 676 ULONG ulPlaySecs; 290 677 678 MMAudioStop(hwndPlayer, hwnd); 679 291 680 memset(&mmio,0, sizeof(mmio)); 292 681 mmio.ulFlags=MMIO_READ; … … 304 693 if(rc!=MMIO_SUCCESS) { 305 694 WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), ""); 695 enableAudioPlayControls(hwnd, FALSE); 306 696 break; 307 697 } 308 698 309 699 ulPlaySecs=mmAudioHeader.mmXWAVHeader.XWAVHeaderInfo.ulAudioLengthInMS/1000; 310 sprintf(text, audioText, 311 ulPlaySecs/60, ulPlaySecs%60, 700 sprintf(text, audioText, ulPlaySecs/60, ulPlaySecs%60, 312 701 mmAudioHeader.mmXWAVHeader.WAVEHeader.ulSamplesPerSec, 313 702 mmAudioHeader.mmXWAVHeader.WAVEHeader.usBitsPerSample, 314 703 mmAudioHeader.mmXWAVHeader.WAVEHeader.usChannels); 315 704 WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), text); 316 705 enableAudioPlayControls(hwnd, TRUE); 317 706 break; 318 707 } … … 320 709 if(hBitmap) { 321 710 HBITMAP hBitmapTemp; 322 hBitmapTemp=loadBitmap (chrFullName, &bmpInfoHeader2); 711 // hBitmapTemp=loadBitmap (chrFullName, &bmpInfoHeader2); 712 hBitmapTemp=ImgLoadImageFileAndHeader(chrFullName, &bmpInfoHeader2); 323 713 GpiDeleteBitmap(hBitmap); 324 714 hBitmap=hBitmapTemp; 325 715 } 326 716 else 327 hBitmap=loadBitmap (chrFullName, &bmpInfoHeader2); 717 hBitmap=ImgLoadImageFileAndHeader(chrFullName, &bmpInfoHeader2); 718 // hBitmap=loadBitmap (chrFullName, &bmpInfoHeader2); 328 719 /* Force redraw of preview area */ 329 720 WinInvalidateRect(WinWindowFromID(hwnd, IDSR_IMGPREVIEW), NULLHANDLE, FALSE); … … 342 733 switch(SHORT1FROMMP(mp1)) 343 734 { 735 case IDPB_MMFINDPLAY: 736 { 737 MMAudioPlayFile(hwndPlayer, hwnd, NULLHANDLE); 738 return MRFALSE; 739 } 740 case IDPB_MMFINDSTOP: 741 { 742 MMAudioStop(hwndPlayer, hwnd); 743 return MRFALSE; 744 } 745 case IDPB_MMFINDPAUSE: 746 { 747 MMAudioPause(hwndPlayer, hwnd); 748 return MRFALSE; 749 } 344 750 case IDPB_NEWFILE: /* New */ 345 751 { 346 752 HOBJECT hObject; 753 754 MMAudioStop(hwndPlayer, hwnd); 755 MMAudioClosePlayer(hwndPlayer); 756 757 /* Open the MM templates folder */ 347 758 if((hObject=WinQueryObject("<MMPM2_MMTEMPLATEFOLDER>"))!=NULLHANDLE) { 348 759 WinOpenObject(hObject, OPEN_DEFAULT, TRUE); … … 350 761 } 351 762 else 352 showMessageBox2(hwnd, IDSTR_NOMMTEMPLATEFLDRTITLE, IDSTR_NOMMTEMPLATEFLDR, RESSOURCEHANDLE, MB_MOVEABLE|MB_OK);353 763 MsgShowMessageBox(hwnd, IDSTR_NOMMTEMPLATEFLDRTITLE, IDSTR_NOMMTEMPLATEFLDR, 764 RESSOURCEHANDLE, MB_MOVEABLE|MB_OK); 354 765 return MRFALSE; 355 766 } 356 767 default: 768 // MMAudioStop(hwndPlayer, hwnd); 769 stopAudioFile(hwnd); 770 MMAudioClosePlayer(hwndPlayer); 771 // DosSleep(1000); 357 772 break; 358 773 } … … 363 778 } 364 779 780 BOOL getStringFromRexxScript(PSZ pszBinDir, PSZ rexxFile, char* chrResult, ULONG ulSize) 781 { 782 783 RXSTRING arg[1]; /* argument string for REXX */ 784 RXSTRING rexxretval; /* return value from REXX */ 785 APIRET rc; /* return code from REXX */ 786 SHORT rexxrc = 0; /* return code from function */ 787 char theScript[CCHMAXPATH]; 788 /* By setting the strlength of the output RXSTRING to zero, we */ 789 /* force the interpreter to allocate memory and return it to us. */ 790 /* We could provide a buffer for the interpreter to use instead. */ 791 rexxretval.strlength = 0L; /* initialize return to empty*/ 792 793 sprintf(theScript, "%s\\%s", pszBinDir, rexxFile); 794 795 /* Here we call the interpreter. We don't really need to use */ 796 /* all the casts in this call; they just help illustrate */ 797 /* the data types used. */ 798 rc=RexxStart((LONG) 0, /* number of arguments */ 799 (PRXSTRING) &arg, /* array of arguments */ 800 (PSZ) theScript, /* name of REXX file */ 801 (PRXSTRING) 0, /* No INSTORE used */ 802 (PSZ) "CWRXX", /* Command env. name */ 803 (LONG) RXSUBROUTINE, /* Code for how invoked */ 804 (PRXSYSEXIT) 0, /* No EXITs on this call */ 805 (PSHORT) &rexxrc, /* Rexx program output */ 806 (PRXSTRING) &rexxretval ); /* Rexx program output */ 807 #if 0 808 if(rc) { 809 sprintf(text,"Error in the Rexx skript %s\n\n Get more information with 'help REX%04d'.\n", 810 tPt->rexxSkript, rc*-1); 811 WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, text, "", 1234, MB_OK|MB_MOVEABLE|MB_ERROR); 812 } 813 #endif 814 if(!rc) { 815 if(ulSize>rexxretval.strlength) { 816 strncpy(chrResult, rexxretval.strptr, rexxretval.strlength); 817 chrResult[rexxretval.strlength]=0; 818 } 819 else 820 strncpy(chrResult, rexxretval.strptr, ulSize); 821 chrResult[ulSize-1]=0; 822 } 823 if(rexxretval.strptr) 824 DosFreeMem(rexxretval.strptr); /* Release storage given to us by REXX. */ 825 if(!rc) 826 return TRUE; 827 else 828 return FALSE; 829 } 830 /* 831 This function checks the installed image IO procs and adds extensions which are not yet handled 832 to the list of known extensions. 833 */ 834 static BOOL getMissingExtFromImageIOProc(char *chrMMImageKnownExt, ULONG ulSize) 835 { 836 MMFORMATINFO mmFormatInfo; 837 PMMFORMATINFO pmmFormatInfoArray; 838 void * memPtr; 839 ULONG ulReturnCode; 840 LONG lFormatsRead; 841 LONG index; 842 LONG lNumIOProcs; 843 844 memset( &mmFormatInfo, 845 '\0', 846 sizeof(MMFORMATINFO) ); 847 848 mmFormatInfo.ulMediaType |= MMIO_MEDIATYPE_IMAGE; 849 mmFormatInfo.ulFlags|=MMIO_CANREADTRANSLATED;/* Read !!!*/ 850 ulReturnCode = mmioQueryFormatCount ( &mmFormatInfo, 851 &lNumIOProcs, 852 0, 853 0 ); 854 855 if( ulReturnCode != MMIO_SUCCESS ) 856 { 857 /* 858 * Error - mmioQueryFormatCount failed. 859 */ 860 return FALSE; 861 } 862 863 /* 864 * Allocate enough memory for n number of FormatInfo blocks 865 */ 866 pmmFormatInfoArray = malloc (lNumIOProcs * sizeof( MMFORMATINFO ) ); 867 memPtr=pmmFormatInfoArray; 868 if( pmmFormatInfoArray == NULL ) 869 { 870 /* 871 * Could not allocate enough memory for mmFormatInfo array. 872 */ 873 return FALSE; 874 } 875 876 /* 877 * call mmioGetFormats to get info on the formats supported. 878 */ 879 ulReturnCode = mmioGetFormats( &mmFormatInfo, 880 lNumIOProcs, 881 pmmFormatInfoArray, 882 &lFormatsRead, 883 0, 884 0 ); 885 if( ulReturnCode != MMIO_SUCCESS ) 886 { 887 /* 888 * mmioGetFormats failed. 889 */ 890 free(pmmFormatInfoArray); 891 return FALSE; 892 } 893 894 if( lFormatsRead != lNumIOProcs ) 895 { 896 /* 897 * Error in MMIO - number of formats read in by 898 * mmioGetFormats is not equal to number of formats 899 * found by mmioQueryFormatCount. 900 */ 901 free(pmmFormatInfoArray); 902 return FALSE; 903 } 904 905 for ( index = 0; index <lNumIOProcs; index++ ) 906 { 907 /* Now scan the whole image proc array */ 908 if(!strstr(chrMMImageKnownExt, pmmFormatInfoArray->szDefaultFormatExt)) { 909 /* This extension is yet unknown */ 910 if(chrMMImageKnownExt[0]==0) { 911 /* It's the first one */ 912 sprintf(chrMMImageKnownExt,"*.%s", pmmFormatInfoArray->szDefaultFormatExt); 913 } 914 else { 915 /* Check if the extension is not already added (e.g. TIF has a lot of subformats) */ 916 if(!strstr(chrMMImageKnownExt, pmmFormatInfoArray->szDefaultFormatExt)) { 917 strlcat(chrMMImageKnownExt,";*.", ulSize); 918 strlcat(chrMMImageKnownExt, pmmFormatInfoArray->szDefaultFormatExt, ulSize); 919 } 920 } 921 } 922 /* 923 * advance to next entry in mmFormatInfo array 924 */ 925 pmmFormatInfoArray++; 926 } 927 free(memPtr); 928 return FALSE; 929 } 930 931 365 932 int main (int argc, char *argv[]) 366 933 { … … 370 937 short a; 371 938 372 // FILEDLG fd = { 0 };373 374 939 /* Create a copy of the args */ 375 940 /* argv[0]: progname 376 * argv[1]: audio file377 941 */ 378 942 … … 394 958 } 395 959 else { 396 HWND hwndDlg; 960 HWND hwndDlg; 397 961 398 962 /* Get our ressource dll */ 399 963 RESSOURCEHANDLE=queryResModuleHandle(argv[0]); 964 /* Load NLV strings */ 965 loadStringsFromResourceDLL(RESSOURCEHANDLE); 966 400 967 /* Get data from INI file */ 401 968 HlpBuildMMProgIniFileName(argv[0], chrIniFile, sizeof(chrIniFile)); 402 969 403 globalHab=WinQueryAnchorBlock(HWND_DESKTOP); 404 970 /* Get additional audio extensions from mmpm2.ini */ 971 getStringFromRexxScript(queryExeDir(argv[0]), "audioext.rx", 972 chrAdditionalExt, sizeof(chrAdditionalExt)); 973 if(strlen(chrAdditionalExt)!=0) { 974 translateChars(chrAdditionalExt, ',', ';'); 975 strlcat(chrMediaFileExt[MT_AUDIO], ";", sizeof(chrMediaFileExt[MT_AUDIO])); 976 strlcat(chrMediaFileExt[MT_AUDIO], chrAdditionalExt, sizeof(chrMediaFileExt[MT_AUDIO])); 977 } 978 979 /* Get image extensions */ 980 getStringFromRexxScript(queryExeDir(argv[0]), "imageext.rx", 981 chrMediaFileExt[MT_IMAGE], sizeof(chrMediaFileExt[MT_IMAGE])); 982 if(strlen(chrMediaFileExt[MT_IMAGE])!=0) 983 translateChars(chrMediaFileExt[MT_IMAGE], ',', ';'); 984 /* Get additional image extensions supplied by the user in imageadd.rx */ 985 chrAdditionalExt[0]=0; 986 getStringFromRexxScript(queryExeDir(argv[0]), "imageadd.rx", 987 chrAdditionalExt, sizeof(chrAdditionalExt)); 988 if(strlen(chrAdditionalExt)!=0) { 989 translateChars(chrAdditionalExt, ',', ';'); 990 strlcat(chrMediaFileExt[MT_IMAGE], ";", sizeof(chrMediaFileExt[MT_IMAGE])); 991 strlcat(chrMediaFileExt[MT_IMAGE], chrAdditionalExt, sizeof(chrMediaFileExt[MT_IMAGE])); 992 } 993 /* Get extensions handled by installed IO procs */ 994 getMissingExtFromImageIOProc(chrMediaFileExt[MT_IMAGE], sizeof(chrMediaFileExt[MT_IMAGE])); 995 996 #if 0 997 sprintf(chrInstallDir, "%d!%s!", strlen(chrMediaFileExt[MT_IMAGE]), chrMediaFileExt[MT_IMAGE]); 998 WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, chrInstallDir, chrMediaFileExt[MT_IMAGE], 1234, MB_OK); 999 #endif 1000 1001 /* Restore recent visited directories */ 1002 PrfQueryString(NULLHANDLE, chrIniFile, "mmfind", "lastaudiodir", "", chrLastAudioDir, sizeof(chrLastAudioDir)); 1003 PrfQueryString(NULLHANDLE, chrIniFile, "mmfind", "lastvideodir", "", chrLastVideoDir, sizeof(chrLastVideoDir)); 1004 PrfQueryString(NULLHANDLE, chrIniFile, "mmfind", "lastimagedir", "", chrLastImageDir, sizeof(chrLastImageDir)); 1005 1006 _loadButtonBmps(); 405 1007 fd.cbSize = sizeof( fd ); 406 1008 /* It's an centered 'Open'-dialog */ 407 1009 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 1010 fd.hMod=RESSOURCEHANDLE; 416 1011 fd.usDlgId=IDDLG_MMFIND; 417 1012 fd.pfnDlgProc=findFileDlgProc; 418 //SysWriteToTrapLog("%x\n", fd.hMod); 1013 1014 1015 switch(iMediaType) 1016 { 1017 case MT_AUDIO: 1018 strlcpy(fd.szFullFile, chrLastAudioDir, sizeof(fd.szFullFile)); 1019 break; 1020 case MT_IMAGE: 1021 strlcpy(fd.szFullFile, chrLastImageDir, sizeof(fd.szFullFile)); 1022 break; 1023 case MT_VIDEO: 1024 strlcpy(fd.szFullFile, chrLastVideoDir, sizeof(fd.szFullFile)); 1025 break; 1026 default: 1027 break; 1028 } 1029 419 1030 if( (hwndDlg=WinFileDlg( HWND_DESKTOP, HWND_DESKTOP, &fd )) != NULLHANDLE ) 420 1031 { 421 /* Set dialog font to WarpSans for Warp 4 and above */422 1032 if(hBitmap) 423 GpiDeleteBitmap(hBitmap); 424 1033 GpiDeleteBitmap(hBitmap); 425 1034 if( fd.lReturn == DID_OK ) 426 1035 { … … 437 1046 { 438 1047 HOBJECT hObject; 439 char *chr; 1048 1049 /* Open the audio file in the editor */ 440 1050 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 } 1051 WinOpenObject(hObject, ID_MENU_EDITOR, TRUE); 1052 // WinOpenObject(hObject, OPEN_DEFAULT, TRUE); 447 1053 break; 448 1054 } … … 452 1058 char *chr; 453 1059 if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE) 454 WinOpenObject(hObject, OPEN_DEFAULT, TRUE); 1060 WinOpenObject(hObject, ID_MENU_PLAYER /* OPEN_DEFAULT */, TRUE); 1061 #if 0 1062 /* Open folder */ 455 1063 if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) { 456 1064 *chr=0; … … 458 1066 WinOpenObject(hObject, OPEN_CONTENTS, TRUE); 459 1067 } 1068 #endif 460 1069 break; 461 1070 } … … 464 1073 HOBJECT hObject; 465 1074 char *chr; 466 //if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)467 // WinOpenObject(hObject, OPEN_DEFAULT, TRUE);468 1075 if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) { 469 1076 *chr=0; … … 475 1082 }/* switch()*/ 476 1083 }/* DID_OK */ 477 } 478 // freeResHandle(); 1084 /* Save the last visited directories */ 1085 PrfWriteString(NULLHANDLE, chrIniFile, "mmfind", "lastaudiodir", chrLastAudioDir); 1086 PrfWriteString(NULLHANDLE, chrIniFile, "mmfind", "lastvideodir", chrLastVideoDir); 1087 PrfWriteString(NULLHANDLE, chrIniFile, "mmfind", "lastimagedir", chrLastImageDir); 1088 } 1089 freeResHandle(); 479 1090 } 480 1091 WinDestroyMsgQueue(hmq); -
trunk/classes/mm-progs/mmfind/mmfind.rc
r2 r4 2 2 #include <os2.h> 3 3 #endif 4 #include "mmfind.h" 4 5 5 rcinclude mmfind.dlg 6 BITMAP IDBMP_PLAY "./bmp/play.bmp" 7 BITMAP IDBMP_STOP "./bmp/stop.bmp"
Note:
See TracChangeset
for help on using the changeset viewer.