source: trunk/dll/shadow.c@ 766

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

format cleanup

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