source: trunk/dll/shadow.c@ 334

Last change on this file since 334 was 334, checked in by root, 19 years ago

Check more run time errors

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.2 KB
RevLine 
[334]1
2/***********************************************************************
3
4 $Id: shadow.c 334 2006-07-25 19:02:00Z root $
5
6 Desktop shadows
7
8 Copyright (c) 1993-97 M. Kimes
9 Copyright (c) 2006 Steven H. Levine
10
11 22 Jul 06 SHL Check more run time errors
12
13***********************************************************************/
14
[2]15#define INCL_DOS
16#define INCL_WIN
[334]17#include <os2.h>
[2]18
19#include <stdlib.h>
20#include <stdio.h>
21#include <string.h>
[334]22
[2]23#include "fm3dll.h"
24#include "fm3dlg.h"
25#include "fm3str.h"
26
27#pragma data_seg(DATA1)
[334]28
29static PSZ pszSrcFile = __FILE__;
30
[2]31#pragma alloc_text(SHADOW,CreateProgramObject,CreateDataObject,CreateFolderObject,CreateShadowObject)
32
33HOBJECT CreateProgramObject (CHAR *objtitle,CHAR *location,CHAR *path,
[334]34 CHAR *cnr)
35{
[2]36 HOBJECT obj = (HOBJECT)0;
37 CHAR *s;
38
39 if(!cnr)
40 return obj;
41 obj = WinCreateObject(WPProgram,
42 objtitle,
43 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO",
44 (location) ? location : cnr,
45 CO_FAILIFEXISTS);
46 if(obj) {
[334]47 s = xmalloc(5192,pszSrcFile,__LINE__);
48 if (s) {
[2]49 sprintf(s,
50 "EXENAME=%s%s%s%s%s;PARAMETERS=%%*;OBJECTID=<FM2_%s>",
51 (path) ? path : "",
52 (path) ? "\\" : "",
53 objtitle,
54 (path) ? ";STARTUPDIR=" : "",
55 (path) ? path : "",objtitle);
56 WinSetObjectData(obj,
57 s);
58 free(s);
59 }
60 }
61 return obj;
62}
63
64
65HOBJECT CreateDataObject (CHAR *objtitle,CHAR *location,CHAR *path,
66 CHAR *cnr) {
67
68 HOBJECT obj = (HOBJECT)0;
69 CHAR s[1050],s2[1050],*p,
70 *type[] = {"WPDataFile","WPIcon","WPBitmap"};
71
72 if(!cnr)
73 return obj;
74 sprintf(s,
75 "%s%s%s",
76 (path) ? path : "",
77 (path) ? "\\" : "",
78 objtitle);
79 p = strrchr(objtitle,'.');
80 if(p) {
81 if(!stricmp(p,".ICO"))
82 p = type[1];
83 else if(!stricmp(p,".BMP"))
84 p = type[2];
85 else
86 p = type[0];
87 }
88 else
89 p = type[0];
90 obj = WinCreateObject(p,
91 s,
92 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO",
93 (location) ? location : cnr,
94 CO_FAILIFEXISTS);
95 if(obj) {
96 sprintf(s2,
97 "%s%s%sOBJECTID=<FM2_%s>",
98 objtitle,
99 (p == type[1]) ? "ICONFILE=" : "",
100 (p == type[1]) ? s : "",
101 (p == type[1]) ? ";" : "",
102 objtitle);
103 WinSetObjectData(obj,
104 s2);
105 }
106 return obj;
107}
108
109
[334]110HOBJECT CreateFolderObject (CHAR *objtitle,CHAR *cnr)
111{
[2]112 HOBJECT obj = (HOBJECT)0;
113 CHAR s[1050];
114
115 if(!cnr)
116 return obj;
117 obj = WinCreateObject("WPFolder",
118 objtitle,
119 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO",
120 cnr,
121 CO_FAILIFEXISTS);
122 if(obj) {
123 sprintf(s,
124 "OBJECTID=<FM2_%s>",
125 objtitle);
126 WinSetObjectData(obj,
127 s);
128 }
129 return obj;
130}
131
132
133HOBJECT CreateShadowObject (CHAR *objtitle,CHAR *location,CHAR *path,
134 BOOL executable,CHAR *cnr) {
135
136 HOBJECT obj = (HOBJECT)0;
137 CHAR *s;
138
139 if(!cnr)
140 return obj;
[334]141 s = xmalloc(5192,pszSrcFile,__LINE__);
142 if (s) {
[2]143 sprintf(s,
144 "SHADOWID=%s%s%s",
145 (path) ? path : "",
146 (path) ? "\\" : "",
147 objtitle);
148 { /* find an icon for it if possible */
149 CHAR *p,temp[CCHMAXPATH + 1];
150
151 sprintf(temp,
152 "%s%s%s",
153 (path) ? path : "",
154 (path) ? "\\" : "",
155 objtitle);
156 p = strrchr(temp,'.');
157 if(p) {
158 *p = 0;
159 strcat(p,".ICO");
160 if(IsFile(temp) == 1)
161 sprintf(&s[strlen(s)],
162 ";ICONFILE=%s",
163 temp);
164 }
165 }
166 if(executable)
167 sprintf(&s[strlen(s)],
168 ";EXENAME=%s%s%s%s%s;PARAMETERS=%%*",
169 (path) ? path : "",
170 (path) ? "\\" : "",
171 objtitle,
172 (path) ? ";STARTUPDIR=" : "",
173 (path) ? path : "");
174 strcat(s,
175 ";NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO");
176 sprintf(&s[strlen(s)],
177 ";OBJECTID=<FM2_%s>",
178 objtitle);
179 obj = WinCreateObject("WPShadow",
180 objtitle,
181 s,
182 (location) ? location : cnr,
183 CO_FAILIFEXISTS);
184 free(s);
185 }
186 return obj;
187}
188
189#pragma alloc_text(SHADOW2,MakeShadows,OpenObject)
190
[334]191VOID MakeShadows (HWND hwnd,CHAR **list,ULONG Shadows,CHAR *cnr, CHAR *foldername)
192{
[2]193 INT x = 0;
194 CHAR szBuff[CCHMAXPATH + 8];
195 HOBJECT obj = (HOBJECT)0;
196 FILESTATUS3 fsa;
197
198 *szBuff = 0;
199 if(foldername)
200 strcpy(szBuff,foldername);
201 if(list) {
202 if((list[0] && list[1]) || Shadows > 1) {
203
204 STRINGINPARMS sip;
205
206 sip.help = GetPString(IDS_MAKESHADOWHELPTEXT);
207 sip.ret = szBuff;
208 sip.prompt = GetPString(IDS_MAKESHADOWPROMPTTEXT);
209 sip.inputlen = CCHMAXPATHCOMP;
210 sip.title = GetPString(IDS_MAKESHADOWTITLETEXT);
211 if(WinDlgBox(HWND_DESKTOP,
212 hwnd,
213 InputDlgProc,
214 FM3ModHandle,
215 STR_FRAME,
216 &sip)) {
217 if(*szBuff) {
218 obj = CreateFolderObject(szBuff,cnr);
219 if(!obj) {
220 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
221 hwnd,
222 GetPString(IDS_ERRORTEXT),
223 GetPString(IDS_MAKESHADOWCREATEFAILEDTEXT),
224 szBuff);
225 return;
226 }
227 }
228 }
229 else
230 return;
231 }
232 while(list[x]) {
233 if(!DosQueryPathInfo(list[x],
234 FIL_STANDARD,&fsa,
235 (ULONG)sizeof(FILESTATUS3))) {
236
237 ULONG apt;
238 CHAR *p,*pp,szDir[CCHMAXPATH + 1],szBuffer[CCHMAXPATH + 1];
239
240 if(DosQAppType(list[x],
241 &apt))
242 apt = 0;
243 p = strrchr(list[x],'.');
244 if(p) {
245 if(!stricmp(p,".BAT") ||
246 !stricmp(p,".CMD"))
247 apt |= FAPPTYP_BOUND;
248 }
249 *szBuffer = 0;
250 p = strrchr(list[x],'\\');
251 if(!p)
252 p = strrchr(list[x],':');
253 if(p)
254 p++;
255 else
256 p = list[x];
257 strcpy(szDir,
258 list[x]);
259 pp = strrchr(szDir,'\\');
260 if(!pp) {
261 pp = strrchr(szDir,':');
262 if(pp) {
263 pp++;
264 *pp = '\\';
265 pp++;
266 }
267 }
268 if(pp)
269 *pp = 0;
270 else
271 *szDir = 0;
272 if(obj && *szBuff)
273 sprintf(szBuffer,
274 "<FM2_%s>",
275 szBuff);
276 else
277 *szBuffer = 0;
278 if((fsa.attrFile & FILE_DIRECTORY) ||
279 Shadows)
280 CreateShadowObject(p,
281 (obj) ? szBuffer : NULL,
282 szDir,
283 0,
284 cnr);
285 else if(!(apt & (FAPPTYP_NOTWINDOWCOMPAT |
286 FAPPTYP_WINDOWCOMPAT |
287 FAPPTYP_WINDOWAPI |
288 FAPPTYP_BOUND | FAPPTYP_DOS |
289 FAPPTYP_WINDOWSREAL |
290 FAPPTYP_WINDOWSPROT |
291 0x1000))) /* not an executable app? */
292 CreateDataObject(p,
293 (obj) ? szBuffer : NULL,
294 szDir,
295 cnr);
296 else
297 CreateProgramObject(p,
298 (obj) ? szBuffer : NULL,
299 szDir,
300 cnr);
301 }
302 x++;
303 DosSleep(1L);
304 }
305 }
306}
307
308
[334]309VOID OpenObject (CHAR *filename,CHAR *type,HWND hwnd)
310{
[2]311 HOBJECT hWPSObject;
312
313 if(!type)
314 type = Default;
315 if((*filename == '<' &&
316 filename[strlen(filename) - 1] == '>') ||
317 IsFile(filename) != -1) {
318 hWPSObject = WinQueryObject(filename);
319 if(hWPSObject != NULLHANDLE) { /* got something; try to to open it */
320
321 CHAR s[CCHMAXPATH];
322 HWND hwndDesktop;
323
324 if(hwnd) {
325 hwndDesktop = WinQueryDesktopWindow((HAB)0,
326 NULLHANDLE);
327 WinSetFocus(HWND_DESKTOP,
328 hwndDesktop);
329 }
330 sprintf(s,
331 "OPEN=%s",
332 type);
333 if(!WinSetObjectData(hWPSObject,
334 s) &&
335 hwnd)
336 WinSetFocus(HWND_DESKTOP,
337 hwnd);
338 }
339 }
340}
341
342
[334]343BOOL RunSeamless (CHAR *exename,CHAR *args,HWND hwnd)
344{
[2]345 CHAR settings[1024 + CCHMAXPATH + 80];
346 BOOL ret;
347
348 sprintf(settings,
349 "EXENAME=%s;PROGTYPE=SEAMLESS;PARAMETERS=%s;OPEN=DEFAULT",
350 exename,
351 args);
352 if(hwnd)
353 WinSetFocus(HWND_DESKTOP,
354 HWND_DESKTOP);
355 ret = WinCreateObject(WPProgram,
356 exename,
357 settings,
358 "<WP_NOWHERE>",
359 CO_REPLACEIFEXISTS);
360 if(!ret && hwnd)
361 WinSetWindowPos(hwnd,
362 HWND_TOP,
363 0,
364 0,
365 0,
366 0,
367 SWP_ZORDER | SWP_ACTIVATE);
368 return ret;
369}
Note: See TracBrowser for help on using the repository browser.