source: trunk/dll/key.c@ 814

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

DosSleep(1) in loops changed to (0) to enhance performance

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