source: trunk/dll/shadow.c@ 841

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

This implements large file support; The wrappers to allow WARP3 compatibility are not done so this will not run on Warp3or Warp 4 pre fixpack 12(?)

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