source: trunk/dll/shadow.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 18 years ago

Indentation cleanup

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