source: trunk/dll/shadow.c@ 847

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

Removed large file APIs from code where hey are not needed.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.2 KB
RevLine 
[334]1
2/***********************************************************************
3
4 $Id: shadow.c 847 2007-09-29 18:45:16Z gyoung $
5
6 Desktop shadows
7
8 Copyright (c) 1993-97 M. Kimes
[697]9 Copyright (c) 2006, 2007 Steven H. Levine
[334]10
11 22 Jul 06 SHL Check more run time errors
[697]12 16 Jun 07 SHL Update for OpenWatcom
[773]13 06 Aug 07 SHL Use BldFullPathName
[793]14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[334]15
16***********************************************************************/
17
[2]18#define INCL_DOS
19#define INCL_WIN
[841]20#define INCL_LONGLONG
[334]21#include <os2.h>
[2]22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
[334]26
[2]27#include "fm3dll.h"
28#include "fm3dlg.h"
29#include "fm3str.h"
30
31#pragma data_seg(DATA1)
[334]32
33static PSZ pszSrcFile = __FILE__;
34
[551]35HOBJECT CreateProgramObject(CHAR * objtitle, CHAR * location, CHAR * path,
36 CHAR * cnr)
[334]37{
[551]38 HOBJECT obj = (HOBJECT) 0;
39 CHAR *s;
[2]40
[551]41 if (!cnr)
[2]42 return obj;
43 obj = WinCreateObject(WPProgram,
[551]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__);
[334]49 if (s) {
[2]50 sprintf(s,
[551]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);
[2]57 free(s);
58 }
59 }
60 return obj;
61}
62
[551]63HOBJECT CreateDataObject(CHAR * objtitle, CHAR * location, CHAR * path,
64 CHAR * cnr)
65{
[2]66
[551]67 HOBJECT obj = (HOBJECT) 0;
68 CHAR s[1050], s2[1050], *p,
69 *type[] = { "WPDataFile", "WPIcon", "WPBitmap" };
[2]70
[551]71 if (!cnr)
[2]72 return obj;
[773]73 BldFullPathName(s, path, objtitle);
74 // sprintf(s, "%s%s%s", (path) ? path : "", (path) ? "\\" : "", objtitle);
[551]75 p = strrchr(objtitle, '.');
76 if (p) {
77 if (!stricmp(p, ".ICO"))
[2]78 p = type[1];
[551]79 else if (!stricmp(p, ".BMP"))
[2]80 p = type[2];
81 else
82 p = type[0];
83 }
84 else
85 p = type[0];
86 obj = WinCreateObject(p,
[551]87 s,
88 "NODELETE=NO;TEMPLATE=NO;NOCOPY=NO;NOMOVE=NO",
89 (location) ? location : cnr, CO_FAILIFEXISTS);
90 if (obj) {
[2]91 sprintf(s2,
[551]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);
[2]97 }
98 return obj;
99}
100
[551]101HOBJECT CreateFolderObject(CHAR * objtitle, CHAR * cnr)
[334]102{
[551]103 HOBJECT obj = (HOBJECT) 0;
104 CHAR s[1050];
[2]105
[551]106 if (!cnr)
[2]107 return obj;
108 obj = WinCreateObject("WPFolder",
[551]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);
[2]115 }
116 return obj;
117}
118
[551]119HOBJECT CreateShadowObject(CHAR * objtitle, CHAR * location, CHAR * path,
120 BOOL executable, CHAR * cnr)
121{
[2]122
[551]123 HOBJECT obj = (HOBJECT) 0;
124 CHAR *s;
[2]125
[551]126 if (!cnr)
[2]127 return obj;
[551]128 s = xmalloc(5192, pszSrcFile, __LINE__);
[334]129 if (s) {
[2]130 sprintf(s,
[551]131 "SHADOWID=%s%s%s",
132 (path) ? path : "", (path) ? "\\" : "", objtitle);
133 { /* find an icon for it if possible */
134 CHAR *p, temp[CCHMAXPATH + 1];
[2]135
[773]136 BldFullPathName(temp, path, objtitle);
137 // sprintf(temp,
138 // "%s%s%s", (path) ? path : "", (path) ? "\\" : "", objtitle);
[551]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);
[2]145 }
146 }
[551]147 if (executable)
[2]148 sprintf(&s[strlen(s)],
[551]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);
[2]155 obj = WinCreateObject("WPShadow",
[551]156 objtitle,
157 s, (location) ? location : cnr, CO_FAILIFEXISTS);
[2]158 free(s);
159 }
160 return obj;
161}
162
[551]163VOID MakeShadows(HWND hwnd, CHAR ** list, ULONG Shadows, CHAR * cnr,
164 CHAR * foldername)
[334]165{
[551]166 INT x = 0;
167 CHAR szBuff[CCHMAXPATH + 8];
168 HOBJECT obj = (HOBJECT) 0;
[847]169 FILESTATUS3 fsa;
[2]170
171 *szBuff = 0;
[551]172 if (foldername)
173 strcpy(szBuff, foldername);
174 if (list) {
175 if ((list[0] && list[1]) || Shadows > 1) {
[2]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);
[551]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 }
[2]196 }
197 else
[551]198 return;
[2]199 }
[551]200 while (list[x]) {
201 if (!DosQueryPathInfo(list[x],
[847]202 FIL_STANDARD, &fsa,
203 (ULONG) sizeof(FILESTATUS3))) {
[2]204
[551]205 ULONG apt;
206 CHAR *p, *pp, szDir[CCHMAXPATH + 1], szBuffer[CCHMAXPATH + 1];
[2]207
[697]208 if (DosQueryAppType(list[x], &apt))
[551]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);
[2]247 }
248 x++;
[766]249 DosSleep(1);
[2]250 }
251 }
252}
253
[551]254VOID OpenObject(CHAR * filename, CHAR * type, HWND hwnd)
[334]255{
[2]256 HOBJECT hWPSObject;
257
[551]258 if (!type)
[2]259 type = Default;
[551]260 if ((*filename == '<' &&
261 filename[strlen(filename) - 1] == '>') || IsFile(filename) != -1) {
[2]262 hWPSObject = WinQueryObject(filename);
[551]263 if (hWPSObject != NULLHANDLE) { /* got something; try to to open it */
[2]264
265 CHAR s[CCHMAXPATH];
266 HWND hwndDesktop;
267
[551]268 if (hwnd) {
269 hwndDesktop = WinQueryDesktopWindow((HAB) 0, NULLHANDLE);
270 WinSetFocus(HWND_DESKTOP, hwndDesktop);
[2]271 }
[551]272 sprintf(s, "OPEN=%s", type);
273 if (!WinSetObjectData(hWPSObject, s) && hwnd)
274 WinSetFocus(HWND_DESKTOP, hwnd);
[2]275 }
276 }
277}
278
[551]279BOOL RunSeamless(CHAR * exename, CHAR * args, HWND hwnd)
[334]280{
[2]281 CHAR settings[1024 + CCHMAXPATH + 80];
282 BOOL ret;
283
284 sprintf(settings,
[551]285 "EXENAME=%s;PROGTYPE=SEAMLESS;PARAMETERS=%s;OPEN=DEFAULT",
286 exename, args);
287 if (hwnd)
288 WinSetFocus(HWND_DESKTOP, HWND_DESKTOP);
[2]289 ret = WinCreateObject(WPProgram,
[551]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);
[2]294 return ret;
295}
[793]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.