source: trunk/dll/defview.c@ 904

Last change on this file since 904 was 901, checked in by Steven Levine, 18 years ago

Sanitize debug code bypass

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.7 KB
RevLine 
[92]1
2/***********************************************************************
3
4 $Id: defview.c 901 2008-01-03 23:11:11Z stevenhl $
5
6 Copyright (c) 1993-98 M. Kimes
[570]7 Copyright (c) 2003, 2007 Steven H.Levine
[92]8
[347]9 Default file viewer
[92]10
[347]11 20 Nov 03 SHL ShowMultimedia: try to convince fmplay to not play exes (Gregg Young)
12 14 Jul 06 SHL Use Runtime_Error
[570]13 18 Mar 07 GKY Fixed misindentifycation of nonmultimedia files by ShowMultiMedia
14 18 Mar 07 GKY Open mp3, ogg & flac files with OS2 object default since fm2play fails
[627]15 21 Apr 07 GKY Find FM2Utils by path or utils directory
[689]16 09 Jun 07 SHL ShowMultimedia: Initialize hwnd so that OpenObject might work
[793]17 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[888]18 20 Dec 07 GKY Open jpg files with OS2 object default since image.exe fails
[92]19
20***********************************************************************/
21
[2]22#define INCL_DOS
23#define INCL_WIN
24#define INCL_GPI
25#define INCL_MMIOOS2
26#include <os2.h>
27#include <os2me.h>
[347]28
[2]29#include <stdio.h>
30#include <stdlib.h>
31#include <string.h>
32#include <ctype.h>
[347]33
[2]34#include "fm3dll.h"
35#include "fm3dlg.h"
36
[347]37static PSZ pszSrcFile = __FILE__;
38
[551]39BOOL ShowMultimedia(CHAR * filename)
[92]40{
[2]41
[551]42 static BOOL no_mmos2 = FALSE;
43 BOOL played = FALSE;
44 CHAR loaderror[CCHMAXPATH];
45 HMODULE MMIOModHandle = NULLHANDLE;
[92]46 PMMIOIDENTIFYFILE pMMIOIdentifyFile = NULL;
[570]47 PMMIOGETINFO pMMIOGetInfo = NULL;
48 PMMIOCLOSE pMMIOClose = NULL;
49 PMMIOOPEN pMMIOOpen = NULL;
50 MMIOINFO mmioinfo;
[901]51 HMMIO hmmio;
[551]52 FOURCC fccStorageSystem = 0;
53 MMFORMATINFO mmFormatInfo;
[570]54 APIRET rc, rc1;
[689]55 HWND hwnd = HWND_DESKTOP;
[570]56 char *p;
[2]57
[551]58 if (no_mmos2 || !filename || !*filename)
[92]59 return played;
[2]60
61 /* load MMPM/2, if available. */
62 *loaderror = 0;
[551]63 rc = DosLoadModule(loaderror, sizeof(loaderror), "MMIO", &MMIOModHandle);
[92]64 if (rc) {
65 no_mmos2 = TRUE;
66 return played;
[2]67 }
68 else {
[92]69 if (DosQueryProcAddr(MMIOModHandle,
[551]70 0,
71 "mmioIdentifyFile", (PFN *) & pMMIOIdentifyFile)) {
[2]72 DosFreeModule(MMIOModHandle);
[92]73 no_mmos2 = TRUE;
74 return played;
[2]75 }
[570]76 if (DosQueryProcAddr(MMIOModHandle,
77 0,
78 "mmioGetInfo", (PFN *) & pMMIOGetInfo)) {
79 DosFreeModule(MMIOModHandle);
80 no_mmos2 = TRUE;
81 return played;
82 }
83 if (DosQueryProcAddr(MMIOModHandle,
84 0,
85 "mmioClose", (PFN *) & pMMIOClose)) {
86 DosFreeModule(MMIOModHandle);
87 no_mmos2 = TRUE;
88 return played;
89 }
90 if (DosQueryProcAddr(MMIOModHandle,
91 0,
92 "mmioOpen", (PFN *) & pMMIOOpen)) {
93 DosFreeModule(MMIOModHandle);
94 no_mmos2 = TRUE;
95 return played;
96 }
[2]97 }
98
99 /* attempt to identify the file using MMPM/2 */
[570]100 //printf("%s %d\n ", __FILE__, __LINE__); fflush(stdout);
101 memset( &mmioinfo, '\0', sizeof(MMIOINFO) );
102 /*Eliminate non multimedia files*/
103 hmmio = pMMIOOpen(filename,
[901]104 &mmioinfo,
105 MMIO_READ);
106#if 0
107 printf("%s %d %d %d %d %d\n",
108 __FILE__, __LINE__,mmioinfo.ulFlags, mmioinfo.ulErrorRet,
109 mmioinfo.pIOProc, mmioinfo.aulInfo); fflush(stdout);
110#endif
111 if (!hmmio) {
112 p = strrchr(filename, '.'); //Added to save mp3, ogg & flac which fail above test
[570]113 if (!p)
[901]114 p = ".";
115 /* printf("%s %d %s\n",
116 __FILE__, __LINE__, p); fflush(stdout);*/
117 if (!stricmp(p, ".OGG") || !stricmp(p, ".MP3") || !stricmp(p, ".FLAC") ||
118 !stricmp(p, ".JPG") || !stricmp(p, ".JPEG")){
119 hmmio = pMMIOOpen(filename,
120 &mmioinfo,
121 MMIO_READ | MMIO_NOIDENTIFY);
122 if (!hmmio){
123 DosFreeModule(MMIOModHandle);
124 printf("%s %d\n ", __FILE__, __LINE__); fflush(stdout);
125 return played;
126 }
127 }
128 else {
129 DosFreeModule(MMIOModHandle);
130 // printf("%s %d\n ", __FILE__, __LINE__); fflush(stdout);
131 return played;
132 }
133 }
134 if (!hmmio) {
135 DosFreeModule(MMIOModHandle);
136 // printf("%s %d\n ", __FILE__, __LINE__); fflush(stdout);
137 return played;
138 }
[570]139
[901]140 rc1 = pMMIOGetInfo(hmmio, &mmioinfo, 0L);
141 // printf("%s %d\n ", __FILE__, __LINE__); fflush(stdout);
[551]142 memset(&mmFormatInfo, 0, sizeof(MMFORMATINFO));
[2]143 mmFormatInfo.ulStructLen = sizeof(MMFORMATINFO);
[92]144 rc = pMMIOIdentifyFile(filename,
[570]145 &mmioinfo,
[92]146 &mmFormatInfo,
[901]147 &fccStorageSystem, 0L,
148 MMIO_FORCE_IDENTIFY_FF);
149#if 0
150 printf("%s %d %d %d %d\n %d %d %d %s\n",
151 __FILE__, __LINE__,mmioinfo.ulFlags,
152 mmioinfo.pIOProc, mmioinfo.aulInfo,
153 mmFormatInfo.fccIOProc, mmFormatInfo.fccIOProc,
154 mmFormatInfo.ulIOProcType, mmFormatInfo.szDefaultFormatExt); fflush(stdout);
155#endif
[2]156 /* free module handle */
[570]157 rc1 = pMMIOClose(hmmio, 0L);
[2]158 DosFreeModule(MMIOModHandle);
159
[92]160 /* if identified and not FOURCC_DOS */
[551]161 if (!rc && mmFormatInfo.fccIOProc != FOURCC_DOS) {
[92]162 if (mmFormatInfo.ulMediaType == MMIO_MEDIATYPE_IMAGE &&
[901]163 (mmFormatInfo.ulFlags & MMIO_CANREADTRANSLATED)) {
[887]164 p = strrchr(filename, '.');
165 if (!p)
[901]166 p = ".";
167 /* printf("%s %d %s\n",
168 __FILE__, __LINE__, p); fflush(stdout);*/
169 if (!stricmp(p, ".JPG") || !stricmp(p, ".JPEG"))
170 OpenObject(filename, Default, hwnd); //Image fails to display these
171 else // is an image that can be translated
172 RunFM2Util("IMAGE.EXE", filename);
173 played = TRUE;
[2]174 }
[92]175 else if (mmFormatInfo.ulMediaType != MMIO_MEDIATYPE_IMAGE) {
[901]176 /* is a multimedia file (WAV, MID, AVI, etc.) */
177 p = strrchr(filename, '.');
[570]178 if (!p)
[901]179 p = ".";
180 /* printf("%s %d %s\n",
181 __FILE__, __LINE__, p); fflush(stdout);*/
182 if (!stricmp(p, ".OGG") || !stricmp(p, ".MP3") || !stricmp(p, ".FLAC"))
183 OpenObject(filename, Default, hwnd); //FM2Play fails to play these
184 else
185 RunFM2Util("FM2PLAY.EXE", filename);
186 played = TRUE;
[2]187 }
188 }
189
[92]190 return played;
[2]191}
192
[551]193VOID DefaultViewKeys(HWND hwnd, HWND hwndFrame, HWND hwndParent,
194 SWP * swp, CHAR * filename)
[347]195{
[551]196 if ((shiftstate & (KC_CTRL | KC_SHIFT)) == (KC_CTRL | KC_SHIFT))
197 DefaultView(hwnd, hwndFrame, hwndParent, swp, 4, filename);
198 else if (shiftstate & KC_CTRL)
199 DefaultView(hwnd, hwndFrame, hwndParent, swp, 2, filename);
200 else if (shiftstate & KC_SHIFT)
201 DefaultView(hwnd, hwndFrame, hwndParent, swp, 1, filename);
[2]202 else
[551]203 DefaultView(hwnd, hwndFrame, hwndParent, swp, 0, filename);
[2]204}
205
[551]206VOID DefaultView(HWND hwnd, HWND hwndFrame, HWND hwndParent, SWP * swp,
207 ULONG flags, CHAR * filename)
[347]208{
[2]209 /*
210 * bitmapped flags:
211 * ---------------
212 * 1 = View directly
213 * 2 = Open WPS default view
214 * 4 = Open WPS settings view
215 * 8 = Edit
216 * 16 = Info
217 * 32 = No view info
218 */
219
[551]220 HWND hwndArc = (HWND) 0;
221 char *p, *dummy[3];
[2]222
[551]223 if (!hwndParent)
[2]224 hwndParent = HWND_DESKTOP;
225
[551]226 if (flags & 32) {
[2]227 flags &= (~16);
[551]228 if (!IsFile(filename)) {
[347]229 Runtime_Error(pszSrcFile, __LINE__, "%s not found", filename);
[2]230 return;
231 }
232 }
233
[551]234 if (flags & 1) /* directly view the file */
[2]235 goto ViewIt;
236
[551]237 if (flags & 2) { /* open default WPS view of file */
238 OpenObject(filename, Default, hwnd);
[2]239 return;
240 }
241
[551]242 if (flags & 4) { /* open WPS settings notebook for file */
243 OpenObject(filename, Settings, hwnd);
[2]244 return;
245 }
246
[551]247 if ((flags & 16) || !IsFile(filename)) { /* open info for directories */
[2]248
249 char fullname[CCHMAXPATH];
250
[551]251 if (!IsFullName(filename)) {
252 if (!DosQueryPathInfo(filename,
253 FIL_QUERYFULLNAME, fullname, sizeof(fullname)))
[92]254 filename = fullname;
[2]255 }
[551]256 if (IsFullName(filename) &&
257 !(driveflags[toupper(*filename) - 'A'] & DRIVE_INVALID)) {
258 if (!IsRoot(filename)) {
[92]259 dummy[0] = filename;
260 dummy[1] = NULL;
261 WinDlgBox(HWND_DESKTOP,
262 HWND_DESKTOP,
[551]263 FileInfoProc, FM3ModHandle, FLE_FRAME, (PVOID) dummy);
[2]264 }
265 else
[92]266 WinDlgBox(HWND_DESKTOP,
267 HWND_DESKTOP,
[551]268 DrvInfoProc, FM3ModHandle, INFO_FRAME, (PVOID) filename);
[2]269 }
270 return;
271 }
272
[551]273 if (flags & 8) { /* edit file */
[2]274
275 ULONG type = IDM_EDITTEXT;
276
277 dummy[0] = filename;
278 dummy[1] = NULL;
[551]279 if (TestBinary(filename))
[2]280 type = IDM_EDITBINARY;
[551]281 switch (type) {
282 case IDM_EDITBINARY:
283 if (*bined) {
[901]284 ExecOnList((HWND) 0, bined, WINDOWED | SEPARATE, NULL, dummy, NULL,
285 pszSrcFile, __LINE__);
[551]286 break;
287 }
[2]288 /* else intentional fallthru */
[551]289 case IDM_EDITTEXT:
290 if (*editor)
[901]291 ExecOnList((HWND) 0, editor, WINDOWED | SEPARATE, NULL, dummy, NULL,
292 pszSrcFile, __LINE__);
[551]293 else {
294 type = (type == IDM_EDITTEXT) ? 8 : (type == IDM_EDITBINARY) ? 16 : 0;
295 type |= 4;
296 StartMLEEditor(hwndParent, type, filename, hwndFrame);
297 }
298 break;
[2]299 }
300 return;
301 }
302
[551]303 if (ExecAssociation(hwnd, filename) == -1) {
[2]304 hwndArc = StartArcCnr((fExternalArcboxes || !swp ||
[551]305 strcmp(realappname, FM3Str)) ?
[92]306 HWND_DESKTOP :
[551]307 hwndParent, hwndFrame, filename, 4, NULL);
308 if (!hwndArc) {
309 if (!fCheckMM || !ShowMultimedia(filename)) {
310 if (!IsExecutable(filename) || !ExecFile(hwnd, filename)) {
311 p = strrchr(filename, '.');
312 if (!p)
[92]313 p = ".";
[551]314 if (stricmp(p, ".INI") || !StartIniEditor(hwndParent, filename, 4)) {
315 if (stricmp(p, ".HLP") || !ViewHelp(filename)) {
316 ViewIt:
317 if (*viewer) {
[92]318 dummy[0] = filename;
319 dummy[1] = NULL;
320 ExecOnList(hwnd,
321 viewer,
322 WINDOWED | SEPARATE |
[901]323 ((fViewChild) ? CHILD : 0), NULL, dummy, NULL,
324 pszSrcFile, __LINE__);
325 }
326 else if (fUseNewViewer) {
327 if (fExternalViewer || strcmp(realappname, FM3Str))
328 hwndParent = HWND_DESKTOP;
329 StartViewer(hwndParent, 5, filename, hwndFrame);
330 }
[92]331 else
[551]332 StartMLEEditor(hwndParent, 5, filename, hwndFrame);
[92]333 }
334 }
335 }
[2]336 }
337 }
338 else {
[551]339 if ((swp &&
340 !fExternalArcboxes &&
341 !strcmp(realappname, FM3Str)) &&
342 !ParentIsDesktop(hwnd, hwndParent))
[92]343 WinSetWindowPos(hwndArc,
344 HWND_TOP,
345 swp->x,
346 swp->y,
347 swp->cx,
348 swp->cy,
[551]349 SWP_MOVE | SWP_SIZE | SWP_SHOW |
[92]350 SWP_ZORDER | SWP_ACTIVATE);
[2]351 }
352 }
353}
[793]354
355#pragma alloc_text(DEFVIEW,DefaultView,ShowMultimedia,DefaultViewKeys)
Note: See TracBrowser for help on using the repository browser.