/*********************************************************************** $Id: key.c 551 2007-02-28 01:33:51Z gyoung $ About dialogs Copyright (c) 1993-98 M. Kimes Copyright (c) 2004 Steven H. Levine Revisions 01 Nov 04 SHL Rename SKULL? defines to avoid rc issues ***********************************************************************/ #define INCL_DOS #define INCL_WIN #include #include #include #include #include #include #include "fm3dll.h" #include "fm3dlg.h" #include "fm3str.h" #include "version.h" #pragma data_seg(DATA1) #pragma alloc_text(ABOUT,AboutDlgProc,AuthorDlgProc) MRESULT EXPENTRY AuthorDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { return WinDefDlgProc(hwnd, msg, mp1, mp2); } MRESULT EXPENTRY AboutDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { SWP swp; static HAB hab = 0; BOOL no = FALSE; static BOOL pause = FALSE; static INT width, direction, ticktock, counter = 0; static HPOINTER stick1, stick2, stick3, stick4, stick12, stick22, stick32, stick42, stick5, stick52; switch (msg) { case WM_INITDLG: if (hab) { WinDismissDlg(hwnd, 0); break; } if (mp2) pause = TRUE; else pause = FALSE; AboutBox = hwnd; hab = WinQueryAnchorBlock(hwnd); WinQueryWindowPos(hwnd, &swp); width = swp.cx; { CHAR s[81]; sprintf(s, "%s %d.%02d%s", GetPString(IDS_VERSIONTEXT), VERMAJOR, VERMINOR, VERREALMINOR); WinSetDlgItemText(hwnd, ABT_VERSION, s); } if (!strcmp(realappname, "FM/4")) WinSetDlgItemText(hwnd, ABT_PROGNAME, GetPString(IDS_FM2LITETEXT)); if (!pause) { stick1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK1); stick2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK2); stick3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK3); stick4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK4); stick5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK5); stick12 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK12); stick22 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK22); stick32 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK32); stick42 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK42); stick52 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK52); direction = 2; ticktock = 0; WinStartTimer(hab, hwnd, ID_TIMER, 164); PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); } break; case UM_SETUP: if (counter++ > 1) { HPOINTER hbm, sk0, sk1, sk2, sk3, sk4, sk5, sk6, sk7, sk8, sk9; hbm = (HPOINTER) WinSendDlgItemMsg(hwnd, ABT_ICON, SM_QUERYHANDLE, MPVOID, MPVOID); if (hbm) { sk0 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL0_ICON); sk1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL1_ICON); sk2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL2_ICON); sk3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL3_ICON); sk4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL4_ICON); sk5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL5_ICON); sk6 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL6_ICON); sk7 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL7_ICON); sk8 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL8_ICON); sk9 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL9_ICON); if (sk0 && sk1 && sk2 && sk3 && sk4 && sk5 && sk6 && sk7 && sk8 && sk9) { WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk0), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk1), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk2), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk3), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk4), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk5), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk6), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk7), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk8), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk9), MPVOID); DosSleep(257L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk8), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk7), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk6), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk5), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk4), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk3), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk2), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk1), MPVOID); DosSleep(33L); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(sk0), MPVOID); DosSleep(33L); WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE); WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE, MPFROMLONG(hbm), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE); } if (sk0) WinDestroyPointer(sk0); if (sk1) WinDestroyPointer(sk1); if (sk2) WinDestroyPointer(sk2); if (sk3) WinDestroyPointer(sk3); if (sk4) WinDestroyPointer(sk4); if (sk5) WinDestroyPointer(sk5); if (sk6) WinDestroyPointer(sk6); if (sk7) WinDestroyPointer(sk7); if (sk8) WinDestroyPointer(sk8); if (sk9) WinDestroyPointer(sk9); } } if (counter > 4) WinDlgBox(HWND_DESKTOP, hwnd, AuthorDlgProc, FM3ModHandle, AUTHOR_FRAME, NULL); return 0; case UM_SETDIR: WinSetFocus(HWND_DESKTOP, HWND_DESKTOP); DosSleep(2500L); return 0; case WM_TIMER: WinQueryWindowPos(WinWindowFromID(hwnd, ABT_STICK1), &swp); if (swp.x + (swp.cx * 3) > width - 3) { direction = -2; WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK2, SM_SETHANDLE, MPFROMLONG(stick32), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE); no = TRUE; } else if (swp.x < 3) { direction = 2; WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK2, SM_SETHANDLE, MPFROMLONG(stick32), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE); no = TRUE; } swp.x += direction; WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK1), HWND_TOP, swp.x, swp.y, swp.cx, swp.cy, SWP_MOVE); WinSetWindowPos(WinWindowFromID(hwnd, ABT_ICON), HWND_TOP, swp.x + swp.cx, swp.y, swp.cx, swp.cy, SWP_MOVE); WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK2), HWND_TOP, swp.x + (swp.cx * 2), swp.y, swp.cx, swp.cy, SWP_MOVE); if (!no) { if (direction > 0) { WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK1, SM_SETHANDLE, MPFROMLONG((ticktock) ? stick1 : stick2), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK2, SM_SETHANDLE, MPFROMLONG((ticktock) ? stick42 : stick52), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE); } else { WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK2, SM_SETHANDLE, MPFROMLONG((ticktock) ? stick12 : stick22), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE); WinSendDlgItemMsg(hwnd, ABT_STICK1, SM_SETHANDLE, MPFROMLONG((ticktock) ? stick4 : stick5), MPVOID); WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE); } } ticktock = (ticktock) ? 0 : 1; break; case WM_COMMAND: switch (SHORT1FROMMP(mp1)) { case ABT_VERSION: case DID_CANCEL: WinDismissDlg(hwnd, 0); break; } return 0; case WM_CLOSE: WinDestroyWindow(hwnd); return 0; case WM_DESTROY: if (hab) { if (!pause) { WinStopTimer(hab, hwnd, ID_TIMER); WinDestroyPointer(stick1); WinDestroyPointer(stick2); WinDestroyPointer(stick3); WinDestroyPointer(stick4); WinDestroyPointer(stick5); WinDestroyPointer(stick12); WinDestroyPointer(stick22); WinDestroyPointer(stick32); WinDestroyPointer(stick42); WinDestroyPointer(stick52); } hab = 0; } AboutBox = (HWND) 0; break; } return WinDefDlgProc(hwnd, msg, mp1, mp2); }