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
RevLine 
[2]1
[119]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
[793]11 Revisions
[775]12 01 Nov 04 SHL Rename SKULL? defines to avoid rc issues
13 06 Aug 07 GKY Reduce DosSleep times (ticket 148)
[793]14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[119]15
[775]16
[119]17***********************************************************************/
18
[2]19#define INCL_DOS
20#define INCL_WIN
21
22#include <os2.h>
[119]23
[2]24#include <stdlib.h>
25#include <stdio.h>
26#include <string.h>
27#include <time.h>
28#include <ctype.h>
[119]29
[2]30#include "fm3dll.h"
31#include "fm3dlg.h"
32#include "fm3str.h"
33#include "version.h"
34
35#pragma data_seg(DATA1)
36
[551]37MRESULT EXPENTRY AuthorDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[119]38{
[551]39 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]40}
41
[551]42MRESULT EXPENTRY AboutDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[119]43{
[551]44 SWP swp;
45 static HAB hab = 0;
46 BOOL no = FALSE;
[2]47 static BOOL pause = FALSE;
[551]48 static INT width, direction, ticktock, counter = 0;
49 static HPOINTER stick1, stick2, stick3, stick4, stick12, stick22, stick32,
50 stick42, stick5, stick52;
[2]51
[551]52 switch (msg) {
53 case WM_INITDLG:
54 if (hab) {
55 WinDismissDlg(hwnd, 0);
[2]56 break;
[551]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];
[2]68
[551]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;
[2]93
[551]94 case UM_SETUP:
95 if (counter++ > 1) {
[2]96
[551]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);
[771]119 DosSleep(16);
[551]120 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
121 MPFROMLONG(sk1), MPVOID);
[814]122 DosSleep(16);//05 Aug 07 GKY 33
[551]123 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
124 MPFROMLONG(sk2), MPVOID);
[771]125 DosSleep(16);//05 Aug 07 GKY 33
[551]126 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
127 MPFROMLONG(sk3), MPVOID);
[771]128 DosSleep(16);//05 Aug 07 GKY 33
[551]129 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
130 MPFROMLONG(sk4), MPVOID);
[771]131 DosSleep(16);//05 Aug 07 GKY 33
[551]132 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
133 MPFROMLONG(sk5), MPVOID);
[771]134 DosSleep(16);//05 Aug 07 GKY 33
[551]135 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
136 MPFROMLONG(sk6), MPVOID);
[771]137 DosSleep(16);//05 Aug 07 GKY 33
[551]138 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
139 MPFROMLONG(sk7), MPVOID);
[771]140 DosSleep(16);//05 Aug 07 GKY 33
[551]141 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
142 MPFROMLONG(sk8), MPVOID);
[771]143 DosSleep(16);//05 Aug 07 GKY 33
[551]144 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
145 MPFROMLONG(sk9), MPVOID);
[771]146 DosSleep(100);//05 Aug 07 GKY 257
[551]147 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
148 MPFROMLONG(sk8), MPVOID);
[771]149 DosSleep(16);//05 Aug 07 GKY 33
[551]150 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
151 MPFROMLONG(sk7), MPVOID);
[771]152 DosSleep(16);//05 Aug 07 GKY 33
[551]153 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
154 MPFROMLONG(sk6), MPVOID);
[771]155 DosSleep(16);//05 Aug 07 GKY 33
[551]156 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
157 MPFROMLONG(sk5), MPVOID);
[771]158 DosSleep(16);//05 Aug 07 GKY 33
[551]159 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
160 MPFROMLONG(sk4), MPVOID);
[771]161 DosSleep(16);//05 Aug 07 GKY 33
[551]162 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
163 MPFROMLONG(sk3), MPVOID);
[771]164 DosSleep(16);//05 Aug 07 GKY 33
[551]165 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
166 MPFROMLONG(sk2), MPVOID);
[771]167 DosSleep(16);//05 Aug 07 GKY 33
[551]168 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
169 MPFROMLONG(sk1), MPVOID);
[771]170 DosSleep(16);//05 Aug 07 GKY 33
[551]171 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
172 MPFROMLONG(sk0), MPVOID);
[771]173 DosSleep(16);//05 Aug 07 GKY 33
[551]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);
[2]199 }
[551]200 }
201 if (counter > 4)
202 WinDlgBox(HWND_DESKTOP,
203 hwnd, AuthorDlgProc, FM3ModHandle, AUTHOR_FRAME, NULL);
204 return 0;
[2]205
[551]206 case UM_SETDIR:
207 WinSetFocus(HWND_DESKTOP, HWND_DESKTOP);
[771]208 DosSleep(250);//05 Aug 07 GKY 2500
[551]209 return 0;
[2]210
[551]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);
[2]261 }
[551]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);
[2]275 }
[551]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);
[2]285 break;
[551]286 }
287 return 0;
[2]288
[551]289 case WM_CLOSE:
290 WinDestroyWindow(hwnd);
291 return 0;
[2]292
[551]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);
[2]307 }
[551]308 hab = 0;
309 }
310 AboutBox = (HWND) 0;
311 break;
[2]312 }
[551]313 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]314}
[793]315
316#pragma alloc_text(ABOUT,AboutDlgProc,AuthorDlgProc)
Note: See TracBrowser for help on using the repository browser.