source: trunk/dll/key.c@ 1209

Last change on this file since 1209 was 1209, checked in by John Small, 17 years ago

Ticket 187: Move data declarations/definitions out of fm3dll.h

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