source: trunk/dll/defview.c@ 1138

Last change on this file since 1138 was 1138, checked in by Gregg Young, 17 years ago

comment out debugging printf

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