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