source: trunk/dll/shadow.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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