|
|
1.1 ! root 1: /* BioDlg() - Dialog Box routine. ! 2: * ! 3: * Created by Microsoft, IBM Corporation, 1990 ! 4: * ! 5: * Purpose: ! 6: * Allow setting of birthdate and viewing date for biorhythm display. ! 7: * ! 8: * Arguments: ! 9: * hDlg - Handle of Dialog Box owning message ! 10: * message - Message itself ! 11: * mp1 - Extra message-dependent info ! 12: * mp2 - Extra message-dependent info ! 13: * ! 14: * Globals (modified): ! 15: * Born - Birthdate in julian days. Read from OS2.INI. ! 16: * SelectDay - Current day being tracked, day is highlighted. ! 17: * This is stored as # days from birthdate. ! 18: * This is initialized to the current date in WM_CREATE. ! 19: * Day - Day number from date born which is top line being ! 20: * displayed. Initially three days before SelectDay. ! 21: * bBorn - Boolean indicating whether valid birtdate entered or ! 22: * defined in OS2.INI. Nothing graphed until valid. ! 23: * ! 24: * Globals (referenced): ! 25: * hAB - Handle to the Anchor Block ! 26: * szAppName[] - RC file program name (Biorhythm). ! 27: * ! 28: * Description: ! 29: * Biorythm cycles start on the date of birth and the state of ! 30: * of these cycles may be viewed on the selected date. A check ! 31: * box is provided to update (record) the birthdate in the WIN.INI ! 32: * file so that it will be automatically available in subsequent ! 33: * sessions. ! 34: * ! 35: * Limits: ! 36: * Minor error checking is provided when OK is selected to make ! 37: * sure that the dates specified fall in the 20th and 21st ! 38: * centuries. No error checking is attempted to verify correct ! 39: * month or day of month entries. ! 40: * ! 41: */ ! 42: ! 43: #define INCL_WIN ! 44: #include <os2.h> ! 45: ! 46: #include "bio.h" ! 47: #include <math.h> ! 48: #include <stdio.h> ! 49: ! 50: /* Read-only global variables */ ! 51: extern HAB hAB; ! 52: extern char szAppName[]; ! 53: ! 54: /* Global variables (modified) */ ! 55: extern long SelectDay, Day; ! 56: extern double Born; ! 57: extern BOOL bBorn; ! 58: ! 59: MRESULT EXPENTRY BioDlg( hDlg, message, mp1, mp2 ) ! 60: HWND hDlg; ! 61: USHORT message; ! 62: MPARAM mp1; ! 63: MPARAM mp2; ! 64: { ! 65: switch( message ) { ! 66: case WM_INITDLG: ! 67: InitBioDlg(hDlg); ! 68: break; ! 69: ! 70: case WM_COMMAND: ! 71: BioDlgCmd(hDlg, mp1); ! 72: break; ! 73: ! 74: default: ! 75: return( WinDefDlgProc( hDlg, message, mp1, mp2 ) ); ! 76: ! 77: } ! 78: return 0L; ! 79: } ! 80: ! 81: ! 82: /* About() - General purpose About dialog box. ! 83: * ! 84: * Purpose: ! 85: * Provide program propoganda. ! 86: * ! 87: * Arguments: ! 88: * hDlg - Handle of Dialog Box owning message ! 89: * message - Message itself ! 90: * mp1 - Extra message-dependent info ! 91: * mp2 - Extra message-dependent info ! 92: */ ! 93: ! 94: MRESULT EXPENTRY About( hWndDlg, message, mp1, mp2 ) ! 95: HWND hWndDlg; ! 96: USHORT message; ! 97: MPARAM mp1; ! 98: MPARAM mp2; ! 99: { ! 100: switch( message ) ! 101: { ! 102: case WM_COMMAND: ! 103: switch( LOUSHORT( mp1 ) ) ! 104: { ! 105: case DID_OK: ! 106: WinDismissDlg( hWndDlg, TRUE ); ! 107: break; ! 108: ! 109: default: ! 110: break; ! 111: } ! 112: break; ! 113: ! 114: default: ! 115: return( WinDefDlgProc( hWndDlg, message, mp1, mp2 ) ); ! 116: } ! 117: return( FALSE ); ! 118: } ! 119: /* ! 120: */ ! 121: ! 122: VOID InitBioDlg(HWND hDlg) ! 123: { ! 124: /* ! 125: If valid OS2.INI info, fill in birthdate edit fields ! 126: */ ! 127: USHORT year, month; ! 128: double day; ! 129: ! 130: if (bBorn) { ! 131: calendar( Born, (SHORT *)&year, (SHORT *)&month, &day ); ! 132: WinSetDlgItemShort( hDlg, ID_BDYEAR, year, FALSE ); ! 133: WinSetDlgItemShort( hDlg, ID_BDMONTH, month, FALSE ); ! 134: WinSetDlgItemShort( hDlg, ID_BDDAY, (int)day, FALSE ); ! 135: } ! 136: /* Display current date or date highlighted */ ! 137: calendar( Born+SelectDay, (SHORT *)&year, (SHORT *)&month, &day ); ! 138: WinSetDlgItemShort( hDlg, ID_YEAR, year, FALSE ); ! 139: WinSetDlgItemShort( hDlg, ID_MONTH, month, FALSE ); ! 140: WinSetDlgItemShort( hDlg, ID_DAY, (int)day, FALSE ); ! 141: } ! 142: /* ! 143: */ ! 144: ! 145: VOID BioDlgCmd( HWND hDlg, MPARAM mp1 ) ! 146: { ! 147: /* ! 148: Bio Dialog Box routine WM_COMMAND processor ! 149: */ ! 150: USHORT year, month, iDay; ! 151: double day; ! 152: char szBuf[10]; ! 153: ! 154: switch( LOUSHORT( mp1 ) ) { ! 155: case DID_OK: ! 156: /* Get the birthday edit field values */ ! 157: WinQueryDlgItemShort( hDlg, ID_BDYEAR, &year, FALSE ); ! 158: WinQueryDlgItemShort( hDlg, ID_BDMONTH, &month, FALSE ); ! 159: WinQueryDlgItemShort( hDlg, ID_BDDAY, &iDay, FALSE ); ! 160: day = (double)iDay; ! 161: /* Check that date is within acceptable range */ ! 162: if (year<1900 || year>2100) { ! 163: WinMessageBox( HWND_DESKTOP, hDlg, ! 164: "Dates valid from 1900-2100", ! 165: "Birthday!", NULL, ! 166: MB_OK | MB_ICONEXCLAMATION ); ! 167: break; ! 168: } ! 169: /* Get julian date of birth date */ ! 170: Born = julian( year, month, day ); ! 171: ! 172: /* Write birth date to OS2.INI if check box checked */ ! 173: if (WinSendDlgItemMsg(hDlg, ID_OS2INI, BM_QUERYCHECK, 0L, 0L)) { ! 174: sprintf(szBuf, "%d", year); ! 175: PrfWriteProfileString( HINI_USERPROFILE, szAppName, "Year", szBuf ); ! 176: sprintf(szBuf, "%d", month); ! 177: PrfWriteProfileString( HINI_USERPROFILE, szAppName, "Month", szBuf ); ! 178: sprintf(szBuf, "%d", (int)day); ! 179: PrfWriteProfileString( HINI_USERPROFILE, szAppName, "Day", szBuf ); ! 180: } ! 181: ! 182: /* Get selected day of interest edit field values */ ! 183: WinQueryDlgItemShort( hDlg, ID_YEAR, &year, FALSE ); ! 184: WinQueryDlgItemShort( hDlg, ID_MONTH, &month, FALSE ); ! 185: WinQueryDlgItemShort( hDlg, ID_DAY, &iDay, FALSE ); ! 186: day = (double)iDay; ! 187: /* Check that date is within acceptable range */ ! 188: if (year<1900 || year>2100) { ! 189: WinMessageBox( HWND_DESKTOP, hDlg, ! 190: "Dates valid from 1900-2100", ! 191: "Display Date!", NULL, ! 192: MB_OK | MB_ICONEXCLAMATION ); ! 193: break; ! 194: } ! 195: ! 196: /* Compute number of days since birth */ ! 197: SelectDay = (long)(julian( year, month, day ) - Born); ! 198: /* Top date of display is 3 days before selected day */ ! 199: Day = SelectDay - 3; ! 200: /* Got a valid birthdate, enable all routines */ ! 201: bBorn = TRUE; ! 202: WinDismissDlg( hDlg, TRUE ); ! 203: break; ! 204: ! 205: case DID_CANCEL: ! 206: /* Exit and ignore entries */ ! 207: WinDismissDlg( hDlg, FALSE ); ! 208: break; ! 209: ! 210: default: ! 211: break; ! 212: } ! 213: } ! 214: /* ! 215: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.