source: trunk/dll/key.c@ 1036

Last change on this file since 1036 was 907, checked in by Steven Levine, 18 years ago

Avoid out of memory traps in Compare Directories
Rework Compare Directories progress display for 2 second update rate
Start refactoring to reduce dependence on fm3dll.h
Add timer services (IsITimerExpired etc.)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.8 KB
Line 
1
2/***********************************************************************
3
4 $Id: key.c 907 2008-01-06 07:26:17Z stevenhl $
5
6 About dialogs
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004 Steven H. Levine
10
11 Revisions
12 01 Nov 04 SHL Rename SKULL? defines to avoid rc issues
13 06 Aug 07 GKY Reduce DosSleep times (ticket 148)
14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
15
16
17***********************************************************************/
18
19#include <string.h>
20
21#define INCL_DOS
22#define INCL_WIN
23#define INCL_LONGLONG // dircnrs.h
24
25#include "fm3dlg.h"
26#include "fm3str.h"
27#include "version.h"
28#include "errutil.h" // Dos_Error...
29#include "strutil.h" // GetPString
30#include "fm3dll.h"
31
32#pragma data_seg(DATA1)
33
34MRESULT EXPENTRY AuthorDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
35{
36 return WinDefDlgProc(hwnd, msg, mp1, mp2);
37}
38
39MRESULT EXPENTRY AboutDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
40{
41 SWP swp;
42 static HAB hab = 0;
43 BOOL no = FALSE;
44 static BOOL pause = FALSE;
45 static INT width, direction, ticktock, counter = 0;
46 static HPOINTER stick1, stick2, stick3, stick4, stick12, stick22, stick32,
47 stick42, stick5, stick52;
48
49 switch (msg) {
50 case WM_INITDLG:
51 if (hab) {
52 WinDismissDlg(hwnd, 0);
53 break;
54 }
55 if (mp2)
56 pause = TRUE;
57 else
58 pause = FALSE;
59 AboutBox = hwnd;
60 hab = WinQueryAnchorBlock(hwnd);
61 WinQueryWindowPos(hwnd, &swp);
62 width = swp.cx;
63 {
64 CHAR s[81];
65
66 sprintf(s,
67 "%s %d.%02d%s",
68 GetPString(IDS_VERSIONTEXT), VERMAJOR, VERMINOR, VERREALMINOR);
69 WinSetDlgItemText(hwnd, ABT_VERSION, s);
70 }
71 if (!strcmp(realappname, "FM/4"))
72 WinSetDlgItemText(hwnd, ABT_PROGNAME, GetPString(IDS_FM2LITETEXT));
73 if (!pause) {
74 stick1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK1);
75 stick2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK2);
76 stick3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK3);
77 stick4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK4);
78 stick5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK5);
79 stick12 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK12);
80 stick22 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK22);
81 stick32 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK32);
82 stick42 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK42);
83 stick52 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK52);
84 direction = 2;
85 ticktock = 0;
86 WinStartTimer(hab, hwnd, ID_TIMER, 164);
87 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
88 }
89 break;
90
91 case UM_SETUP:
92 if (counter++ > 1) {
93
94 HPOINTER hbm, sk0, sk1, sk2, sk3, sk4, sk5, sk6, sk7, sk8, sk9;
95
96 hbm = (HPOINTER) WinSendDlgItemMsg(hwnd,
97 ABT_ICON,
98 SM_QUERYHANDLE, MPVOID, MPVOID);
99 if (hbm) {
100 sk0 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL0_ICON);
101 sk1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL1_ICON);
102 sk2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL2_ICON);
103 sk3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL3_ICON);
104 sk4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL4_ICON);
105 sk5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL5_ICON);
106 sk6 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL6_ICON);
107 sk7 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL7_ICON);
108 sk8 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL8_ICON);
109 sk9 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL9_ICON);
110 if (sk0 && sk1 && sk2 && sk3 && sk4 && sk5 && sk6 && sk7 &&
111 sk8 && sk9) {
112 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE);
113 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
114 MPFROMLONG(sk0), MPVOID);
115 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE);
116 DosSleep(16);
117 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
118 MPFROMLONG(sk1), MPVOID);
119 DosSleep(16);//05 Aug 07 GKY 33
120 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
121 MPFROMLONG(sk2), MPVOID);
122 DosSleep(16);//05 Aug 07 GKY 33
123 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
124 MPFROMLONG(sk3), MPVOID);
125 DosSleep(16);//05 Aug 07 GKY 33
126 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
127 MPFROMLONG(sk4), MPVOID);
128 DosSleep(16);//05 Aug 07 GKY 33
129 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
130 MPFROMLONG(sk5), MPVOID);
131 DosSleep(16);//05 Aug 07 GKY 33
132 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
133 MPFROMLONG(sk6), MPVOID);
134 DosSleep(16);//05 Aug 07 GKY 33
135 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
136 MPFROMLONG(sk7), MPVOID);
137 DosSleep(16);//05 Aug 07 GKY 33
138 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
139 MPFROMLONG(sk8), MPVOID);
140 DosSleep(16);//05 Aug 07 GKY 33
141 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
142 MPFROMLONG(sk9), MPVOID);
143 DosSleep(100);//05 Aug 07 GKY 257
144 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
145 MPFROMLONG(sk8), MPVOID);
146 DosSleep(16);//05 Aug 07 GKY 33
147 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
148 MPFROMLONG(sk7), MPVOID);
149 DosSleep(16);//05 Aug 07 GKY 33
150 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
151 MPFROMLONG(sk6), MPVOID);
152 DosSleep(16);//05 Aug 07 GKY 33
153 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
154 MPFROMLONG(sk5), MPVOID);
155 DosSleep(16);//05 Aug 07 GKY 33
156 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
157 MPFROMLONG(sk4), MPVOID);
158 DosSleep(16);//05 Aug 07 GKY 33
159 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
160 MPFROMLONG(sk3), MPVOID);
161 DosSleep(16);//05 Aug 07 GKY 33
162 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
163 MPFROMLONG(sk2), MPVOID);
164 DosSleep(16);//05 Aug 07 GKY 33
165 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
166 MPFROMLONG(sk1), MPVOID);
167 DosSleep(16);//05 Aug 07 GKY 33
168 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
169 MPFROMLONG(sk0), MPVOID);
170 DosSleep(16);//05 Aug 07 GKY 33
171 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE);
172 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
173 MPFROMLONG(hbm), MPVOID);
174 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE);
175 }
176 if (sk0)
177 WinDestroyPointer(sk0);
178 if (sk1)
179 WinDestroyPointer(sk1);
180 if (sk2)
181 WinDestroyPointer(sk2);
182 if (sk3)
183 WinDestroyPointer(sk3);
184 if (sk4)
185 WinDestroyPointer(sk4);
186 if (sk5)
187 WinDestroyPointer(sk5);
188 if (sk6)
189 WinDestroyPointer(sk6);
190 if (sk7)
191 WinDestroyPointer(sk7);
192 if (sk8)
193 WinDestroyPointer(sk8);
194 if (sk9)
195 WinDestroyPointer(sk9);
196 }
197 }
198 if (counter > 4)
199 WinDlgBox(HWND_DESKTOP,
200 hwnd, AuthorDlgProc, FM3ModHandle, AUTHOR_FRAME, NULL);
201 return 0;
202
203 case UM_SETDIR:
204 WinSetFocus(HWND_DESKTOP, HWND_DESKTOP);
205 DosSleep(250);//05 Aug 07 GKY 2500
206 return 0;
207
208 case WM_TIMER:
209 WinQueryWindowPos(WinWindowFromID(hwnd, ABT_STICK1), &swp);
210 if (swp.x + (swp.cx * 3) > width - 3) {
211 direction = -2;
212 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
213 WinSendDlgItemMsg(hwnd,
214 ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID);
215 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
216 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
217 WinSendDlgItemMsg(hwnd,
218 ABT_STICK2,
219 SM_SETHANDLE, MPFROMLONG(stick32), MPVOID);
220 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
221 no = TRUE;
222 }
223 else if (swp.x < 3) {
224 direction = 2;
225 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
226 WinSendDlgItemMsg(hwnd, ABT_STICK2,
227 SM_SETHANDLE, MPFROMLONG(stick32), MPVOID);
228 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
229 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
230 WinSendDlgItemMsg(hwnd,
231 ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID);
232 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
233 no = TRUE;
234 }
235 swp.x += direction;
236 WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK1),
237 HWND_TOP, swp.x, swp.y, swp.cx, swp.cy, SWP_MOVE);
238 WinSetWindowPos(WinWindowFromID(hwnd, ABT_ICON),
239 HWND_TOP,
240 swp.x + swp.cx, swp.y, swp.cx, swp.cy, SWP_MOVE);
241 WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK2),
242 HWND_TOP,
243 swp.x + (swp.cx * 2), swp.y, swp.cx, swp.cy, SWP_MOVE);
244 if (!no) {
245 if (direction > 0) {
246 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
247 WinSendDlgItemMsg(hwnd,
248 ABT_STICK1,
249 SM_SETHANDLE,
250 MPFROMLONG((ticktock) ? stick1 : stick2), MPVOID);
251 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
252 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
253 WinSendDlgItemMsg(hwnd,
254 ABT_STICK2,
255 SM_SETHANDLE,
256 MPFROMLONG((ticktock) ? stick42 : stick52), MPVOID);
257 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
258 }
259 else {
260 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
261 WinSendDlgItemMsg(hwnd,
262 ABT_STICK2,
263 SM_SETHANDLE,
264 MPFROMLONG((ticktock) ? stick12 : stick22), MPVOID);
265 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
266 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
267 WinSendDlgItemMsg(hwnd,
268 ABT_STICK1,
269 SM_SETHANDLE,
270 MPFROMLONG((ticktock) ? stick4 : stick5), MPVOID);
271 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
272 }
273 }
274 ticktock = (ticktock) ? 0 : 1;
275 break;
276
277 case WM_COMMAND:
278 switch (SHORT1FROMMP(mp1)) {
279 case ABT_VERSION:
280 case DID_CANCEL:
281 WinDismissDlg(hwnd, 0);
282 break;
283 }
284 return 0;
285
286 case WM_CLOSE:
287 WinDestroyWindow(hwnd);
288 return 0;
289
290 case WM_DESTROY:
291 if (hab) {
292 if (!pause) {
293 WinStopTimer(hab, hwnd, ID_TIMER);
294 WinDestroyPointer(stick1);
295 WinDestroyPointer(stick2);
296 WinDestroyPointer(stick3);
297 WinDestroyPointer(stick4);
298 WinDestroyPointer(stick5);
299 WinDestroyPointer(stick12);
300 WinDestroyPointer(stick22);
301 WinDestroyPointer(stick32);
302 WinDestroyPointer(stick42);
303 WinDestroyPointer(stick52);
304 }
305 hab = 0;
306 }
307 AboutBox = (HWND) 0;
308 break;
309 }
310 return WinDefDlgProc(hwnd, msg, mp1, mp2);
311}
312
313#pragma alloc_text(ABOUT,AboutDlgProc,AuthorDlgProc)
Note: See TracBrowser for help on using the repository browser.