Ignore:
Timestamp:
Jul 13, 2017, 5:17:57 AM (8 years ago)
Author:
stevenhl
Message:

Import modifications from cwmm-0_2_9-work-01_10_2006.zip dated 2006-08-27

Location:
trunk/classes/mm-progs/mmfind
Files:
9 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/classes/mm-progs/mmfind/image.c

    r2 r4  
    9292}
    9393
    94 
    95 
    96 
    9794MRESULT EXPENTRY bmpPreviewProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    9895{
     
    116113
    117114
     115#if 0
    118116/*
    119117  Load an image file using IO-Procs
     
    378376    return(hbm);
    379377}
     378#endif
  • trunk/classes/mm-progs/mmfind/makefile

    r2 r4  
    22
    33include ../../../make.inc
     4include ../mmprog.inc
    45
    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
     6LIBOBJECTS      =       $(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
     14OBJECTS         =       image.obj       
    2015
    2116
    2217all:    mmfind.exe
    2318
    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
     19mmfind.exe:     mmfind.c $(LIBOBJECTS) $(OBJECTS) makefile mmfind.rc def.tpl
    3120#Use this command to link dynamicaly
    32         gcc $(CPPFLAGS) -I$(INC) mmfind.c $(OBJECTS) $(OBJS2) -los2me mmfind.def
    33 #       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
    3524
    3625clean:
     
    4534        -rm *.flc
    4635
     36
    4737distribution:
    48        
  • trunk/classes/mm-progs/mmfind/mmfind.c

    r2 r4  
    11/*
    2  * mmplayer.c (C) Chris Wohlgemuth 2004
     2 * mmfind.c (C) Chris Wohlgemuth 2004-2005
    33 *
    44 */
     
    3737#define INCL_GPI
    3838#define INCL_PM
    39 
     39#define INCL_REXXSAA
     40
     41/* OS/2 and compiler includes */
    4042#include <os2.h>
    4143#include <sys\types.h>
     
    4547#include <stdlib.h>
    4648#include "os2me.h"
    47 #include "common.h"
    48 #include "mmres.h"
    49 #include "mmprogs_defaults.h"
     49/* CW toolkit includes */
    5050#include "sys_funcs.h"
    5151#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"
    6959//#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
     62char logName[]="mmfind.log"; /* To keep some (unused) helpers in helper.c happy */
    9563
    9664char chrIniFile[CCHMAXPATH];
     65char chrInstallDir[CCHMAXPATH];
     66
     67char chrLastAudioDir[CCHMAXPATH];
     68char chrLastVideoDir[CCHMAXPATH];
     69char chrLastImageDir[CCHMAXPATH];
     70
     71/***** For previewing audio tracks *****/
     72char chrSourceName[CCHMAXPATH]; /* The audio file to be played */
     73BOOL bIsMidi=FALSE;             /* No MIDI support atm */
     74BOOL bIsPlaying=FALSE;          /* TRUE if currently playing */
     75BOOL bPaused=FALSE;             
     76ULONG ulPos;
     77ULONG ulTotalLength;
     78HWND hwndPlayer;                /* HWND of the player object window used for async coommunication */
     79
     80/***************************************/
    9781
    9882#define NUMPARAMS  1
     
    10589HMODULE RESSOURCEHANDLE=0;
    10690
    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",
     91char chrMediaFileTypes[NUMMEDIATYPES][100];
     92
     93char 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 */
    11595                                          "*.BMP;*.DIB;*.GIF;*.JPG;*.PCX;*.PNG;*.PCD;*.TIF;*.TGA;*.VID;*._IM",
    11696                                          "*.AVI;*.MPG;*.FLI;*.FLC;*.MOV;*.QT;*.VBS"};
     97/* Additional audio extensions to be queried during runtime */
     98char chrAdditionalExt[200];
     99/* This holds the template used when building the audio information text */
     100char audioText[255];
     101
    117102int iMediaType=MT_AUDIO;
    118103
    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 */
    124105BITMAPINFOHEADER2 bmpInfoHeader2;
    125106HBITMAP hBitmap;
    126107
     108/* HBITMAP for the play control buttons */
     109HBITMAP hbmPlay;
     110HBITMAP hbmStop;
     111
    127112FILEDLG fd = { 0 };
    128113
    129 void loadStrings(void)
    130 {
    131 
    132 }
    133 
    134 void showVideoControls(HWND hwnd, BOOL bShow)
     114static 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
     131static 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
     180static 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
     197static 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
     212static void showVideoControls(HWND hwnd, BOOL bShow)
    135213{
    136214  /* Preview area */
     
    140218}
    141219
     220
     221static 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
    142228void showAudioControls(HWND hwnd, BOOL bShow)
    143229{
     
    146232  /* Group box */
    147233  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
     246BOOL 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
     270BOOL 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
     295ULONG 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
     388static 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 */
     422void _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
     453void MMAudioPlayFile(HWND hwndPlayer, HWND hwndNotify, char* chrFile)
     454{
     455  WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(PLAY_FILE), MPFROMHWND(hwndNotify));
     456}
     457
     458void MMAudioStop(HWND hwndPlayer, HWND hwndNotify)
     459{
     460  WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(STOP_TRACK), MPFROMHWND(hwndNotify));
     461}
     462
     463void MMAudioPause(HWND hwndPlayer, HWND hwndNotify)
     464{
     465  WinPostMsg(hwndPlayer, WM_APPTERMINATENOTIFY, MPFROMSHORT(PAUSE_TRACK), MPFROMHWND(hwndNotify));
     466}
     467
     468BOOL 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
     476void MMAudioClosePlayer(HWND hwndPlayer)
     477{
     478  WinSendMsg(hwndPlayer, WM_QUIT, 0, 0);
     479  return;
     480}
     481
     482static ULONG mmIdentifyFile(char* chrFile)
    152483{
    153484  MMIOINFO mmioInfo={0};
     
    155486  FOURCC fourCC;
    156487
    157   //  SysWriteToTrapLog("%s\n", chrFile);
    158488  if(MMIO_SUCCESS!=mmioIdentifyFile(chrFile, &mmioInfo, &mmFormatInfo, &fourCC, 0,0))
    159489    {
     
    178508}
    179509
     510static 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
    180522
    181523MRESULT findFileDlgProc(HWND hwnd, ULONG  msg, MPARAM mp1, MPARAM mp2)
     
    187529      {
    188530        int a;
     531        SWCNTRL swctl;
     532        PID pid;
    189533
    190534        /* Set dialog font */
     
    195539        }
    196540        /* Fill combo box with media types (audio, image, video) */
    197         for(a=0;a<numMediaType;a++)
     541        for(a=0;a<NUMMEDIATYPES;a++)
    198542          WinSendMsg(WinWindowFromID(hwnd, IDCB_TYPEOFFILE), LM_INSERTITEM, MRFROMSHORT(LIT_SORTASCENDING),
    199543                     MPFROMP(chrMediaFileTypes[a]));
     
    202546        /* Subclass preview area */
    203547        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);
    204564        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;
    205579      }
    206580    case WM_CONTROL:
     
    215589                WinQueryWindowText(HWNDFROMMP(mp2), sizeof(chrText), chrText);
    216590                /* Find Index */
    217                 for(a=0; a<numMediaType;a++) {
     591                for(a=0; a<NUMMEDIATYPES;a++) {
    218592                  if(!stricmp(chrMediaFileTypes[a], chrText))
    219593                    break;
     
    234608                    showVideoControls(hwnd, FALSE);
    235609                    showImageControls(hwnd, TRUE);
    236                       iMediaType=MT_IMAGE;
     610                    iMediaType=MT_IMAGE;
    237611                    break;
    238612                  case 2:
     
    249623                WinSendMsg(WinWindowFromID(hwnd, 258), WM_CHAR,
    250624                           MPFROM2SHORT(KC_VIRTUALKEY , 0), MPFROM2SHORT(0, VK_NEWLINE));
    251 
    252625              }
    253626            break;
     
    256629            {
    257630              if(SHORT2FROMMP(mp1)==EN_CHANGE)
    258                 WinStartTimer(globalHab, hwnd, TIMERID_SELECTION, 100);
     631                WinStartTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, TIMERID_SELECTION, 100);
    259632              break;
    260633            }
     
    272645            char chrFullName[CCHMAXPATH*2];
    273646
    274             WinStopTimer(globalHab, hwnd, TIMERID_SELECTION);
     647            WinStopTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, TIMERID_SELECTION);
    275648            WinQueryWindowText(WinWindowFromID(hwnd, 258), sizeof(chrName), chrName);
    276649            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              }
    277664            strcat(chrFullName, chrName);
    278 
     665            strlcpy(chrSourceName, chrFullName, sizeof(chrSourceName));
    279666            switch(iMediaType)
    280667              {
     
    289676                  ULONG ulPlaySecs;
    290677
     678                  MMAudioStop(hwndPlayer, hwnd);
     679
    291680                  memset(&mmio,0, sizeof(mmio));
    292681                  mmio.ulFlags=MMIO_READ;
     
    304693                  if(rc!=MMIO_SUCCESS) {
    305694                    WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), "");
     695                    enableAudioPlayControls(hwnd, FALSE);
    306696                    break;
    307697                  }
    308698
    309699                  ulPlaySecs=mmAudioHeader.mmXWAVHeader.XWAVHeaderInfo.ulAudioLengthInMS/1000;
    310                   sprintf(text, audioText,
    311                           ulPlaySecs/60, ulPlaySecs%60,
     700                  sprintf(text, audioText,  ulPlaySecs/60, ulPlaySecs%60,
    312701                          mmAudioHeader.mmXWAVHeader.WAVEHeader.ulSamplesPerSec,
    313702                          mmAudioHeader.mmXWAVHeader.WAVEHeader.usBitsPerSample,
    314703                          mmAudioHeader.mmXWAVHeader.WAVEHeader.usChannels);
    315704                  WinSetWindowText(WinWindowFromID(hwnd, IDST_AUDIOINFO), text);
    316                  
     705                  enableAudioPlayControls(hwnd, TRUE);
    317706                  break;
    318707                }
     
    320709                if(hBitmap) {
    321710                  HBITMAP hBitmapTemp;
    322                   hBitmapTemp=loadBitmap (chrFullName, &bmpInfoHeader2);           
     711                  //                  hBitmapTemp=loadBitmap (chrFullName, &bmpInfoHeader2);
     712                  hBitmapTemp=ImgLoadImageFileAndHeader(chrFullName, &bmpInfoHeader2);
    323713                  GpiDeleteBitmap(hBitmap);
    324714                  hBitmap=hBitmapTemp;
    325715                }
    326716                else
    327                   hBitmap=loadBitmap (chrFullName, &bmpInfoHeader2);
     717                  hBitmap=ImgLoadImageFileAndHeader(chrFullName, &bmpInfoHeader2);
     718                  //                  hBitmap=loadBitmap (chrFullName, &bmpInfoHeader2);
    328719                /* Force redraw of preview area */
    329720                WinInvalidateRect(WinWindowFromID(hwnd, IDSR_IMGPREVIEW), NULLHANDLE, FALSE);
     
    342733      switch(SHORT1FROMMP(mp1))
    343734        {
     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          }
    344750        case IDPB_NEWFILE: /* New */
    345751          {
    346752            HOBJECT hObject;
     753
     754            MMAudioStop(hwndPlayer, hwnd);
     755            MMAudioClosePlayer(hwndPlayer);
     756
     757            /* Open the MM templates folder */
    347758            if((hObject=WinQueryObject("<MMPM2_MMTEMPLATEFOLDER>"))!=NULLHANDLE) {
    348759              WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
     
    350761            }
    351762            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);
    354765            return MRFALSE;
    355766          }
    356767        default:
     768          //          MMAudioStop(hwndPlayer, hwnd);
     769          stopAudioFile(hwnd);
     770          MMAudioClosePlayer(hwndPlayer);
     771          // DosSleep(1000);
    357772          break;
    358773        }
     
    363778}
    364779
     780BOOL 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 */
     834static 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
    365932int main (int argc, char *argv[])
    366933{
     
    370937  short a;
    371938
    372   //  FILEDLG fd = { 0 };
    373 
    374939  /* Create a copy of the args */
    375940  /* argv[0]: progname
    376    * argv[1]: audio file
    377941   */
    378942
     
    394958      }
    395959      else {
    396         HWND hwndDlg;
     960        HWND hwndDlg;       
    397961
    398962        /* Get our ressource dll */ 
    399963        RESSOURCEHANDLE=queryResModuleHandle(argv[0]);
     964        /* Load NLV strings */
     965        loadStringsFromResourceDLL(RESSOURCEHANDLE);
     966
    400967        /* Get data from INI file */
    401968        HlpBuildMMProgIniFileName(argv[0], chrIniFile, sizeof(chrIniFile));
    402969
    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();
    4051007        fd.cbSize = sizeof( fd );
    4061008        /* It's an centered 'Open'-dialog */
    4071009        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");
    4151010        fd.hMod=RESSOURCEHANDLE;
    4161011        fd.usDlgId=IDDLG_MMFIND;
    4171012        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
    4191030        if( (hwndDlg=WinFileDlg( HWND_DESKTOP, HWND_DESKTOP, &fd )) != NULLHANDLE )
    4201031          {
    421             /* Set dialog font to WarpSans for Warp 4 and above */
    4221032            if(hBitmap)
    423               GpiDeleteBitmap(hBitmap);
    424  
     1033              GpiDeleteBitmap(hBitmap); 
    4251034            if( fd.lReturn == DID_OK )
    4261035              {
     
    4371046                    {
    4381047                      HOBJECT hObject;
    439                       char *chr;
     1048
     1049                      /* Open the audio file in the editor */
    4401050                      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);
    4471053                      break;
    4481054                    }
     
    4521058                      char *chr;
    4531059                      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 */
    4551063                      if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) {
    4561064                        *chr=0;
     
    4581066                          WinOpenObject(hObject, OPEN_CONTENTS, TRUE);
    4591067                      }
     1068#endif
    4601069                      break;
    4611070                    }
     
    4641073                      HOBJECT hObject;
    4651074                      char *chr;
    466                       //if((hObject=WinQueryObject(fd.szFullFile))!=NULLHANDLE)
    467                       // WinOpenObject(hObject, OPEN_DEFAULT, TRUE);
    4681075                      if((chr=strrchr(fd.szFullFile, '\\'))!=NULLHANDLE) {
    4691076                        *chr=0;
     
    4751082                  }/* switch()*/
    4761083              }/* 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();
    4791090      }
    4801091      WinDestroyMsgQueue(hmq);
  • trunk/classes/mm-progs/mmfind/mmfind.rc

    r2 r4  
    22   #include <os2.h>
    33#endif
     4#include "mmfind.h"
    45
    5 rcinclude mmfind.dlg
     6BITMAP IDBMP_PLAY  "./bmp/play.bmp"
     7BITMAP IDBMP_STOP  "./bmp/stop.bmp"
Note: See TracChangeset for help on using the changeset viewer.