Changeset 92 for trunk/dll/defview.c


Ignore:
Timestamp:
May 21, 2004, 5:16:36 PM (21 years ago)
Author:
root
Message:

ShowMultimedia: try to convince fmplay to not play exes (Gregg Young)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/defview.c

    r2 r92  
     1
     2/***********************************************************************
     3
     4  $Id$
     5
     6  Copyright (c) 1993-98 M. Kimes
     7  Copyright (c) 2003 Steven H.Levine
     8
     9  Archive containers
     10
     11  Revisions     20 Nov 03 SHL - ShowMultimedia: try to convince fmplay to not play exes (Gregg Young)
     12
     13***********************************************************************/
     14
    115#define INCL_DOS
    216#define INCL_WIN
     
    1630
    1731
    18 BOOL ShowMultimedia (CHAR *filename) {
    19 
    20   static BOOL       unavailable = FALSE;
    21   BOOL              ret = FALSE;
     32BOOL ShowMultimedia (CHAR *filename)
     33{
     34
     35  static BOOL       no_mmos2 = FALSE;
     36  BOOL              played = FALSE;
    2237  CHAR              loaderror[CCHMAXPATH];
    23   HMODULE           MMIOModHandle = (HMODULE)0;
    24   PMMIOIDENTIFYFILE MMIOIdentifyFile = (PMMIOIDENTIFYFILE)0;
    25   FOURCC            fccStorageSystem = (FOURCC)0;
     38  HMODULE           MMIOModHandle = NULLHANDLE;
     39  PMMIOIDENTIFYFILE pMMIOIdentifyFile = NULL;
     40  FOURCC            fccStorageSystem = 0;
    2641  MMFORMATINFO      mmFormatInfo;
    2742  APIRET            rc;
    2843
    29   if(unavailable ||
    30      !filename ||
    31      !*filename)
    32     return ret;
     44  if (no_mmos2 ||
     45      !filename ||
     46      !*filename)
     47    return played;
    3348
    3449  /* load MMPM/2, if available. */
    3550  *loaderror = 0;
    3651  rc = DosLoadModule(loaderror,
    37                      sizeof(loaderror),
    38                      "MMIO",
    39                      &MMIOModHandle);
    40   if(rc) {
    41     unavailable = TRUE;
    42     return ret;
     52                     sizeof(loaderror),
     53                     "MMIO",
     54                     &MMIOModHandle);
     55  if (rc) {
     56    no_mmos2 = TRUE;
     57    return played;
    4358  }
    4459  else {
    45     if(DosQueryProcAddr(MMIOModHandle,
    46                         0,
    47                         "mmioIdentifyFile",
    48                         (PFN *)&MMIOIdentifyFile)) {
     60    if (DosQueryProcAddr(MMIOModHandle,
     61                        0,
     62                        "mmioIdentifyFile",
     63                        (PFN *)&pMMIOIdentifyFile)) {
    4964      DosFreeModule(MMIOModHandle);
    50       unavailable = TRUE;
    51       return ret;
     65      no_mmos2 = TRUE;
     66      return played;
    5267    }
    5368  }
     
    5671  memset(&mmFormatInfo,0,sizeof(MMFORMATINFO));
    5772  mmFormatInfo.ulStructLen = sizeof(MMFORMATINFO);
    58   rc = MMIOIdentifyFile(filename,
    59                         0L,
    60                         &mmFormatInfo,
    61                         &fccStorageSystem,
    62                         0L,
    63                         MMIO_FORCE_IDENTIFY_FF);
     73  rc = pMMIOIdentifyFile(filename,
     74                        0L,
     75                        &mmFormatInfo,
     76                        &fccStorageSystem,
     77                        0L,
     78                        MMIO_FORCE_IDENTIFY_FF);
    6479  /* free module handle */
    6580  DosFreeModule(MMIOModHandle);
    6681
    67   /* check returns from MMPM/2's identification process */
    68   if(rc != MMIO_ERROR &&
    69      mmFormatInfo.fccIOProc != FOURCC_DOS) {
    70     if(mmFormatInfo.ulMediaType == MMIO_MEDIATYPE_IMAGE &&
    71        (mmFormatInfo.ulFlags & MMIO_CANREADTRANSLATED) != 0) {
    72       /* is an image */
     82  /* if identified and not FOURCC_DOS */
     83  if (!rc &&
     84      mmFormatInfo.fccIOProc != FOURCC_DOS) {
     85    if (mmFormatInfo.ulMediaType == MMIO_MEDIATYPE_IMAGE &&
     86       (mmFormatInfo.ulFlags & MMIO_CANREADTRANSLATED)) {
     87      /* is an image that can be translated */
    7388      runemf2(SEPARATE | WINDOWED,
    74               HWND_DESKTOP,
    75               NULL,
    76               NULL,
    77               "%sIMAGE.EXE \"%s\"",
    78               (fAddUtils) ? "UTILS\\" : NullStr,
    79               filename);
    80       ret = TRUE;
    81     }
    82     else {
    83       if(mmFormatInfo.ulMediaType != MMIO_MEDIATYPE_IMAGE)
    84         /* is a multimedia file (WAV, MID, AVI, etc.) */
    85         runemf2(SEPARATE | WINDOWED,
    86                 HWND_DESKTOP,
    87                 NULL,
    88                 NULL,
    89                 "%sFM2PLAY.EXE \"%s\"",
    90                 (fAddUtils) ? "UTILS\\" : NullStr,
    91                 filename);
    92       ret = TRUE;
    93     }
    94   }
    95 
    96   return ret;
     89              HWND_DESKTOP,
     90              NULL,
     91              NULL,
     92              "%sIMAGE.EXE \"%s\"",
     93              (fAddUtils) ? "UTILS\\" : NullStr,
     94              filename);
     95      played = TRUE;
     96    }
     97    else if (mmFormatInfo.ulMediaType != MMIO_MEDIATYPE_IMAGE) {
     98      /* is a multimedia file (WAV, MID, AVI, etc.) */
     99      runemf2(SEPARATE | WINDOWED,
     100              HWND_DESKTOP,
     101              NULL,
     102              NULL,
     103              "%sFM2PLAY.EXE \"%s\"",
     104              (fAddUtils) ? "UTILS\\" : NullStr,
     105              filename);
     106      played = TRUE;
     107    }
     108  }
     109
     110  return played;
    97111}
    98112
    99113
    100114VOID DefaultViewKeys (HWND hwnd,HWND hwndFrame,HWND hwndParent,
    101                       SWP *swp,CHAR *filename) {
     115                      SWP *swp,CHAR *filename) {
    102116
    103117  if((shiftstate & (KC_CTRL | KC_SHIFT)) ==
    104118     (KC_CTRL | KC_SHIFT))
    105119    DefaultView(hwnd,
    106                 hwndFrame,
    107                 hwndParent,
    108                 swp,
    109                 4,
    110                 filename);
     120                hwndFrame,
     121                hwndParent,
     122                swp,
     123                4,
     124                filename);
    111125  else if(shiftstate & KC_CTRL)
    112126    DefaultView(hwnd,
    113                 hwndFrame,
    114                 hwndParent,
    115                 swp,
    116                 2,
    117                 filename);
     127                hwndFrame,
     128                hwndParent,
     129                swp,
     130                2,
     131                filename);
    118132  else if(shiftstate & KC_SHIFT)
    119133    DefaultView(hwnd,
    120                 hwndFrame,
    121                 hwndParent,
    122                 swp,
    123                 1,
    124                 filename);
     134                hwndFrame,
     135                hwndParent,
     136                swp,
     137                1,
     138                filename);
    125139  else
    126140    DefaultView(hwnd,
    127                 hwndFrame,
    128                 hwndParent,
    129                 swp,
    130                 0,
    131                 filename);
     141                hwndFrame,
     142                hwndParent,
     143                swp,
     144                0,
     145                filename);
    132146}
    133147
    134148
    135149VOID DefaultView (HWND hwnd,HWND hwndFrame,HWND hwndParent,SWP *swp,
    136                   ULONG flags,CHAR *filename) {
     150                  ULONG flags,CHAR *filename) {
    137151
    138152  /*
     
    166180  if(flags & 2) {   /* open default WPS view of file */
    167181    OpenObject(filename,
    168                Default,
    169                hwnd);
     182               Default,
     183               hwnd);
    170184    return;
    171185  }
     
    173187  if(flags & 4) {   /* open WPS settings notebook for file */
    174188    OpenObject(filename,
    175                Settings,
    176                hwnd);
     189               Settings,
     190               hwnd);
    177191    return;
    178192  }
     
    185199    if(!IsFullName(filename)) {
    186200      if(!DosQueryPathInfo(filename,
    187                            FIL_QUERYFULLNAME,
    188                            fullname,
    189                            sizeof(fullname)))
    190         filename = fullname;
     201                           FIL_QUERYFULLNAME,
     202                           fullname,
     203                           sizeof(fullname)))
     204        filename = fullname;
    191205    }
    192206    if(IsFullName(filename) &&
    193207       !(driveflags[toupper(*filename) - 'A'] & DRIVE_INVALID)) {
    194208      if(!IsRoot(filename)) {
    195         dummy[0] = filename;
    196         dummy[1] = NULL;
    197         WinDlgBox(HWND_DESKTOP,
    198                   HWND_DESKTOP,
    199                   FileInfoProc,
    200                   FM3ModHandle,
    201                   FLE_FRAME,
    202                   (PVOID)dummy);
     209        dummy[0] = filename;
     210        dummy[1] = NULL;
     211        WinDlgBox(HWND_DESKTOP,
     212                  HWND_DESKTOP,
     213                  FileInfoProc,
     214                  FM3ModHandle,
     215                  FLE_FRAME,
     216                  (PVOID)dummy);
    203217      }
    204218      else
    205         WinDlgBox(HWND_DESKTOP,
    206                   HWND_DESKTOP,
    207                   DrvInfoProc,
    208                   FM3ModHandle,
    209                   INFO_FRAME,
    210                   (PVOID)filename);
     219        WinDlgBox(HWND_DESKTOP,
     220                  HWND_DESKTOP,
     221                  DrvInfoProc,
     222                  FM3ModHandle,
     223                  INFO_FRAME,
     224                  (PVOID)filename);
    211225    }
    212226    return;
     
    223237    switch(type) {
    224238      case IDM_EDITBINARY:
    225         if(*bined) {
    226           ExecOnList((HWND)0,
    227                      bined,
    228                      WINDOWED | SEPARATE,
    229                      NULL,
    230                      dummy,
    231                      NULL);
    232           break;
    233         }
     239        if(*bined) {
     240          ExecOnList((HWND)0,
     241                     bined,
     242                     WINDOWED | SEPARATE,
     243                     NULL,
     244                     dummy,
     245                     NULL);
     246          break;
     247        }
    234248      /* else intentional fallthru */
    235249      case IDM_EDITTEXT:
    236         if(*editor)
    237           ExecOnList((HWND)0,
    238                      editor,
    239                      WINDOWED | SEPARATE,
    240                      NULL,
    241                      dummy,
    242                      NULL);
    243         else {
    244           type = (type == IDM_EDITTEXT) ? 8 :
    245                   (type == IDM_EDITBINARY) ? 16 :
    246                    0;
    247           type |= 4;
    248           StartMLEEditor(hwndParent,
    249                         type,
    250                         filename,
    251                         hwndFrame);
    252         }
    253         break;
     250        if(*editor)
     251          ExecOnList((HWND)0,
     252                     editor,
     253                     WINDOWED | SEPARATE,
     254                     NULL,
     255                     dummy,
     256                     NULL);
     257        else {
     258          type = (type == IDM_EDITTEXT) ? 8 :
     259                  (type == IDM_EDITBINARY) ? 16 :
     260                   0;
     261          type |= 4;
     262          StartMLEEditor(hwndParent,
     263                        type,
     264                        filename,
     265                        hwndFrame);
     266        }
     267        break;
    254268    }
    255269    return;
     
    257271
    258272  if(ExecAssociation(hwnd,
    259                      filename) == -1) {
     273                     filename) == -1) {
    260274    hwndArc = StartArcCnr((fExternalArcboxes || !swp ||
    261                            strcmp(realappname,FM3Str)) ?
    262                           HWND_DESKTOP :
    263                           hwndParent,
    264                           hwndFrame,
    265                           filename,
    266                           4,
    267                           NULL);
     275                           strcmp(realappname,FM3Str)) ?
     276                          HWND_DESKTOP :
     277                          hwndParent,
     278                          hwndFrame,
     279                          filename,
     280                          4,
     281                          NULL);
    268282    if(!hwndArc) {
    269283      if(!fCheckMM ||
    270         !ShowMultimedia(filename)) {
    271         if(!IsExecutable(filename) ||
    272            !ExecFile(hwnd,filename)) {
    273           p = strrchr(filename,'.');
    274           if(!p)
    275             p = ".";
    276           if(stricmp(p,".INI") ||
    277              !StartIniEditor(hwndParent,
    278                              filename,
    279                              4)) {
    280             if(stricmp(p,".HLP") ||
    281                !ViewHelp(filename)) {
     284        !ShowMultimedia(filename)) {
     285        if(!IsExecutable(filename) ||
     286           !ExecFile(hwnd,filename)) {
     287          p = strrchr(filename,'.');
     288          if(!p)
     289            p = ".";
     290          if(stricmp(p,".INI") ||
     291             !StartIniEditor(hwndParent,
     292                             filename,
     293                             4)) {
     294            if(stricmp(p,".HLP") ||
     295               !ViewHelp(filename)) {
    282296ViewIt:
    283               if(*viewer) {
    284                 dummy[0] = filename;
    285                 dummy[1] = NULL;
    286                 ExecOnList(hwnd,
    287                            viewer,
    288                            WINDOWED | SEPARATE |
    289                            ((fViewChild) ? CHILD : 0),
    290                            NULL,
    291                            dummy,
    292                            NULL);
    293               }
    294               else
    295                 StartMLEEditor(hwndParent,
    296                                5,
    297                                filename,
    298                                hwndFrame);
    299             }
    300           }
    301         }
     297              if(*viewer) {
     298                dummy[0] = filename;
     299                dummy[1] = NULL;
     300                ExecOnList(hwnd,
     301                           viewer,
     302                           WINDOWED | SEPARATE |
     303                           ((fViewChild) ? CHILD : 0),
     304                           NULL,
     305                           dummy,
     306                           NULL);
     307              }
     308              else
     309                StartMLEEditor(hwndParent,
     310                               5,
     311                               filename,
     312                               hwndFrame);
     313            }
     314          }
     315        }
    302316      }
    303317    }
    304318    else {
    305319      if((swp &&
    306           !fExternalArcboxes &&
    307           !strcmp(realappname,FM3Str)) &&
    308         !ParentIsDesktop(hwnd,hwndParent))
    309         WinSetWindowPos(hwndArc,
    310                         HWND_TOP,
    311                         swp->x,
    312                         swp->y,
    313                         swp->cx,
    314                         swp->cy,
    315                         SWP_MOVE   | SWP_SIZE     | SWP_SHOW |
    316                         SWP_ZORDER | SWP_ACTIVATE);
     320          !fExternalArcboxes &&
     321          !strcmp(realappname,FM3Str)) &&
     322        !ParentIsDesktop(hwnd,hwndParent))
     323        WinSetWindowPos(hwndArc,
     324                        HWND_TOP,
     325                        swp->x,
     326                        swp->y,
     327                        swp->cx,
     328                        swp->cy,
     329                        SWP_MOVE   | SWP_SIZE     | SWP_SHOW |
     330                        SWP_ZORDER | SWP_ACTIVATE);
    317331    }
    318332  }
Note: See TracChangeset for help on using the changeset viewer.