/*---------------------------------------------------------------------------*/ /* */ /* WEDL(tm) - Windows Enhanced Dialog Library */ /* Copyright (c) 1991-1992, Nemisoft, Inc. */ /* All Rights Reserved */ /* Module: DEMO.C */ /* */ /*---------------------------------------------------------------------------*/ #include #include #include #include #include "wedl.h" #include "demo.h" #include "demohelp.h" /*---------------------------------------------------------------------------*/ /* general function prototypes */ int FAR PASCAL AboutDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ); int FAR PASCAL AlbumDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ); int FAR PASCAL EmployeeDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ); int FAR PASCAL check_date( HFORM hform, HFIELD hfield, LPSTR pbuf ); int FAR PASCAL check_file_name( HFORM hform, HFIELD hfield, LPSTR pbuf ); int FAR PASCAL check_state( HFORM hform, HFIELD hfield, LPSTR pbuf ); int FAR PASCAL check_zip_code( HFORM hform, HFIELD hfield, LPSTR pbuf ); BOOL FAR PASCAL error_func( HFORM hform, HFIELD hfield, int error_value, int error_position, int error_event ); static BOOL initialize_application( HANDLE hInstance ); static BOOL initialize_instance( HANDLE hInstance, int nCmdShow ); long FAR PASCAL MainWndProc( HWND hWnd, unsigned message, WORD wParam, LONG lParam ); int FAR PASCAL NumericDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ); int FAR PASCAL UploadDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ); /*---------------------------------------------------------------------------*/ /* static variables (global to this file) */ static HINSTANCE hInst; static HBITMAP hBitmap; static BITMAP bitmap; static char szClassName[] = "WEDL_DEMO"; static char tbuf[512]; static PVALFUNC pcheck_date, pcheck_state, pcheck_zip_code, pcheck_file_name; static PERRFUNC perror_func; /*---------------------------------------------------------------------------*/ int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; if( hPrevInstance == NULL ) if( !initialize_application( hInstance ) ) return( FALSE ); if( !initialize_instance( hInstance, nCmdShow ) ) return( FALSE ); while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } DeleteObject( hBitmap ); return( msg.wParam ); } /*---------------------------------------------------------------------------*/ long FAR PASCAL MainWndProc( HWND hWnd, unsigned message, WORD wParam, LONG lParam ) { FARPROC pdialog_proc; HDC hDC, hMemDC; PAINTSTRUCT paint; switch( message ) { case WM_PAINT: hDC = BeginPaint( hWnd, &paint ); hMemDC = CreateCompatibleDC( hDC ); SelectObject( hMemDC, hBitmap ); BitBlt( hDC, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hMemDC, 0, 0, SRCCOPY ); DeleteDC( hMemDC ); EndPaint( hWnd, &paint ); break; case WM_COMMAND: switch( wParam ) { case IDM_EMPLOYEE: pdialog_proc = MakeProcInstance( EmployeeDlgProc, hInst ); pcheck_date = (PVALFUNC) MakeProcInstance( check_date, hInst ); pcheck_state = (PVALFUNC) MakeProcInstance( check_state, hInst ); pcheck_zip_code = (PVALFUNC) MakeProcInstance( check_zip_code, hInst ); perror_func = (PERRFUNC) MakeProcInstance( error_func, hInst ); DialogBox( hInst, "EmployeeInfo", hWnd, pdialog_proc ); FreeProcInstance( perror_func ); FreeProcInstance( pcheck_zip_code ); FreeProcInstance( pcheck_state ); FreeProcInstance( pcheck_date ); FreeProcInstance( pdialog_proc ); break; case IDM_ALBUM: pdialog_proc = MakeProcInstance( AlbumDlgProc, hInst ); DialogBox( hInst, "AlbumDatabase", hWnd, pdialog_proc ); FreeProcInstance( pdialog_proc ); break; case IDM_UPLOAD: pdialog_proc = MakeProcInstance( UploadDlgProc, hInst ); pcheck_file_name = (PVALFUNC) MakeProcInstance( check_file_name, hInst ); perror_func = (PERRFUNC) MakeProcInstance( error_func, hInst ); DialogBox( hInst, "UploadFile", hWnd, pdialog_proc ); FreeProcInstance( perror_func ); FreeProcInstance( pcheck_file_name ); FreeProcInstance( pdialog_proc ); break; case IDM_NUMERIC: pdialog_proc = MakeProcInstance( NumericDlgProc, hInst ); DialogBox( hInst, "NumericFields", hWnd, pdialog_proc ); FreeProcInstance( pdialog_proc ); break; case IDM_EXIT: SendMessage( hWnd, WM_CLOSE, 0, 0 ); break; case IDM_ABOUT: pdialog_proc = MakeProcInstance( AboutDlgProc, hInst ); DialogBox( hInst, "AboutWEDL", hWnd, pdialog_proc ); FreeProcInstance( pdialog_proc ); break; } break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return( DefWindowProc( hWnd, message, wParam, lParam ) ); } return( 0 ); } /*---------------------------------------------------------------------------*/ int FAR PASCAL AboutDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ) { switch( message ) { case WM_INITDIALOG: return( TRUE ); case WM_COMMAND: if( wParam == IDOK || wParam == IDCANCEL ) { EndDialog( hDlg, TRUE ); return( TRUE ); } break; } return( FALSE ); } /*---------------------------------------------------------------------------*/ static BOOL initialize_application( HANDLE hInstance ) { WNDCLASS wc; wc.style = NULL; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( hInstance, "WEDL" ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = GetStockObject( NULL_BRUSH ); wc.lpszMenuName = "MainMenu"; wc.lpszClassName = szClassName; return( RegisterClass( &wc ) ); } /*---------------------------------------------------------------------------*/ static BOOL initialize_instance( HANDLE hInstance, int nCmdShow ) { HWND hWnd; int ht_border, ht_caption, ht_menu, wd_border; hInst = hInstance; wd_border = GetSystemMetrics( SM_CXBORDER ); ht_border = GetSystemMetrics( SM_CYBORDER ); ht_caption = GetSystemMetrics( SM_CYCAPTION ); ht_menu = GetSystemMetrics( SM_CYMENU ); hBitmap = LoadBitmap( hInstance, "WEDL" ); GetObject( hBitmap, sizeof( BITMAP ), (LPSTR) &bitmap ); hWnd = CreateWindow( szClassName, "WEDL Demonstration Program", WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 65, 35, bitmap.bmWidth + wd_border + wd_border, bitmap.bmHeight + ht_border + ht_border + ht_caption + ht_menu, NULL, NULL, hInstance, NULL ); if( hWnd == NULL ) return( FALSE ); ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); return( TRUE ); } /*---------------------------------------------------------------------------*/ BOOL FAR PASCAL error_func( HFORM hform, HFIELD hfield, int error_value, int error_position, int error_event ) { HWND hDlg; hDlg = form_get_hdlg( hform ); switch( error_value ) { case BAD_DATE: MessageBox( hDlg, "Date Is Invalid", NULL, MB_OK ); break; case BAD_STATE: MessageBox( hDlg, "Invalid State Code", NULL, MB_OK ); break; case BAD_ZIP: MessageBox( hDlg, error_position > 1 ? "Zip Code is incomplete" : "Zip code is invalid for given State", NULL, MB_OK ); break; case BAD_FILENAME: MessageBox( hDlg, "File Not In Directory", NULL, MB_OK ); break; default: return( FALSE ); /* error wasn't handled */ } return( TRUE ); /* error was handled */ } /*****************************************************************************/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*------------------------/ \----------------------*/ /*------------------------ Employee Information Dialog ----------------------*/ /*------------------------\ /----------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*****************************************************************************/ #define IDHELP 998 /*---------------------------------------------------------------------------*/ /* state/ZIP code table */ struct states_t { PSTR state_code; int zip_low; int zip_high; }; static struct states_t states[] = { { "AK", 995, 999 }, /* Alaska */ { "AL", 350, 369 }, /* Alabama */ { "AR", 716, 729 }, /* Arkansas */ { "AZ", 850, 865 }, /* Arizona */ { "CA", 900, 961 }, /* California */ { "CO", 800, 816 }, /* Colorado */ { "CT", 60, 69 }, /* Connecticut */ { "DE", 197, 199 }, /* Delaware */ { "FL", 320, 349 }, /* Florida */ { "GA", 300, 319 }, /* Georgia */ { "HI", 967, 968 }, /* Hawaii */ { "IA", 500, 528 }, /* Iowa */ { "ID", 832, 847 }, /* Idaho */ { "IL", 600, 629 }, /* Illinois */ { "IN", 460, 479 }, /* Indiana */ { "KS", 641, 679 }, /* Kansas */ { "KY", 400, 427 }, /* Kentucky */ { "LA", 700, 714 }, /* Louisiana */ { "MA", 10, 27 }, /* Massachusetts */ { "MD", 206, 219 }, /* Maryland */ { "ME", 39, 49 }, /* Maine */ { "MI", 480, 499 }, /* Michigan */ { "MN", 550, 567 }, /* Minnesota */ { "MO", 630, 658 }, /* Missouri */ { "MS", 386, 397 }, /* Mississippi */ { "MT", 590, 599 }, /* Montana */ { "NC", 270, 289 }, /* North Carolina */ { "ND", 580, 588 }, /* North Dakota */ { "NE", 680, 693 }, /* Nebraska */ { "NH", 30, 38 }, /* New Hampshire */ { "NJ", 70, 89 }, /* New Jersey */ { "NM", 870, 884 }, /* New Mexico */ { "NV", 889, 898 }, /* Nevada */ { "NY", 100, 149 }, /* New York */ { "OH", 430, 458 }, /* Ohio */ { "OK", 730, 749 }, /* Oklahoma */ { "OR", 970, 979 }, /* Oregon */ { "PA", 150, 196 }, /* Pennsylvania */ { "RI", 27, 29 }, /* Rhode Island */ { "SC", 290, 299 }, /* South Carolina */ { "SD", 570, 577 }, /* South Dakota */ { "TN", 370, 385 }, /* Tennessee */ { "TX", 750, 885 }, /* Texas */ { "UT", 840, 847 }, /* Utah */ { "VA", 220, 246 }, /* Virginia */ { "VT", 50, 59 }, /* Vermont */ { "WA", 980, 994 }, /* Washington */ { "WI", 530, 549 }, /* Wisconsin */ { "WV", 247, 268 }, /* West Virginia */ { "WY", 820, 831 }, /* Wyoming */ { "DC", 200, 205 }, /* District of Columbia */ { "GU", 0, 999 }, /* Guam */ { "PR", 0, 999 }, /* Puerto Rico */ { "VI", 0, 999 }, /* Virgin Islands */ { "ON", 0, 999 }, /* Ontario */ { "PQ", 0, 999 }, /* Quebec */ { "BC", 0, 999 }, /* British Columbia */ { "AB", 0, 999 }, /* Alberta */ { "SK", 0, 999 }, /* Saskatchewan */ { "MB", 0, 999 }, /* Manitoba */ { "NS", 0, 999 }, /* Nova Scotia */ { "NB", 0, 999 }, /* New Brunswick */ { "NF", 0, 999 }, /* Newfoundland */ { "PE", 0, 999 }, /* Prince Edward Island */ { NULL, 0, 0 } /* --- end of table --- */ }; /*---------------------------------------------------------------------------*/ int FAR PASCAL EmployeeDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ) { static HFORM hform = NULL; static char first_name[16]="", mid_init[2]="", last_name[21]=""; static char address[31]="", city[16]="", state[3]="", zip_code[10]=""; static char soc_sec_no[10]="", phone_num[11]="", hire_date[9]=""; static double wage = 0.0; switch( message ) { case WM_INITDIALOG: hform = form_begin( hDlg, FMF_NOSELECT | FMF_VKEYPRES | FMF_VLEAVFLD | FMF_UPDATE | FMF_OVERTYPE, perror_func ); form_set_help( hform, "demohelp.hlp", 0 ); field_define( hform, IDD_SSN, soc_sec_no, FDT_STRING, "<0..7>99'-'99'-'9(4)", FDF_NOTBLANK | FDF_COMPLETE, NULL, 0, IDH_SSN ); field_define( hform, IDD_FNAME, first_name, FDT_STRING, "A(15)", FDF_PROPER, NULL, 0, IDH_FNAME ); field_define( hform, IDD_MIDINIT, mid_init, FDT_STRING, "A(1)'.'", FDF_UPPER, NULL, 0, IDH_MIDINIT ); field_define( hform, IDD_LNAME, last_name, FDT_STRING, "A(19)", FDF_PROPER, NULL, 0, IDH_LNAME ); field_define( hform, IDD_ADDRESS, address, FDT_STRING, "?(30)", FDF_PROPER, NULL, 0, IDH_ADDRESS ); field_define( hform, IDD_CITY, city, FDT_STRING, "?(15)", FDF_PROPER, NULL, 0, IDH_CITY ); field_define( hform, IDD_STATE, state, FDT_STRING, "A(2)", FDF_COMPLETE | FDF_UPPER, pcheck_state, BAD_STATE, IDH_STATE ); field_define( hform, IDD_ZIP, zip_code, FDT_STRING, "<0..9>(5)'-'9(4)", FDF_NONE, pcheck_zip_code, BAD_ZIP, IDH_ZIP ); field_define( hform, IDD_PHONE, phone_num, FDT_STRING, "'('999') '999'-'9999", FDF_COMPLETE, NULL, 0, IDH_PHONE ); field_define( hform, IDD_HIREDATE, hire_date, FDT_STRING, " <01> 9 / <0123> 9 / <89> 9 ", FDF_COMPLETE | FDF_PHYSICAL, pcheck_date, BAD_DATE, IDH_HIREDATE ); field_define( hform, IDD_WAGE, &wage, FDT_DOUBLE, "'$'999999.99", FDF_NUMERIC | FDF_BLNKZERO | FDF_BLNKNEZ, NULL, 0, IDH_WAGE ); keystat_define( hform, IDD_INSERT, KSM_INSERT, "Insert: On", "Insert: Off" ); generic_define( hform, IDHELP, 0 ); form_end( hform ); return( TRUE ); case WM_COMMAND: switch( wParam ) { case IDOK: form_ok( hform ); EndDialog( hDlg, TRUE ); sprintf( tbuf, "Soc Sec No.\t= %s\n" "Name\t\t= %s %s. %s\nAddress\t\t= %s\n" "\t\t= %s, %s %.5s-%s\nPhone No.\t= %s\n" "Hire Date\t= %s\nWage/Salary\t= %.2lf", soc_sec_no, first_name, mid_init, last_name, address, city, state, zip_code, zip_code+5, phone_num, hire_date, wage ); MessageBox( NULL, tbuf, "Field Contents", MB_OK ); return( TRUE ); case IDCANCEL: form_cancel( hform ); EndDialog( hDlg, TRUE ); return( TRUE ); case IDHELP: WinHelp( hDlg, "demohelp.hlp", HELP_INDEX, NULL ); return( TRUE ); } break; case WM_CLOSE: SendMessage( hDlg, WM_COMMAND, IDCANCEL, 0 ); return( TRUE ); } return( FALSE ); } /*---------------------------------------------------------------------------*/ int FAR PASCAL check_date( HFORM hform, HFIELD hfield, LPSTR pbuf ) { char date[10]; int month, day, year; if( !str_is_blank( pbuf ) ) { /* parse year, day, and month from buffer */ lstrcpy( date, pbuf ); year = 1900 + atoi( date+4 ); *( date+4 ) = '\0'; day = atoi( date+2 ); *( date+2 ) = '\0'; month = atoi( date ); /* validate month */ if( month > 12 ) return( 1 ); /* validate day and month */ if( day < 1 ) return( 3 ); switch( month ) { case 2: if( year%4 ) { if( day > 29 ) return( 3 ); } else { if( day > 28 ) return( 3 ); } break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: if( day > 31 ) return( 3 ); break; case 4: case 6: case 9: case 11: if( day > 30 ) return( 3 ); break; default: return( 1 ); } } /* return zero indicating no error */ return( 0 ); } /*---------------------------------------------------------------------------*/ int FAR PASCAL check_state( HFORM hform, HFIELD hfield, LPSTR pbuf ) { int i; /* allow state to be blank */ if( str_is_blank( pbuf ) ) return( 0 ); /* do for all state codes in the table */ for( i = 0 ; states[i].state_code != NULL ; i++ ) /* if state code was found, then no error */ if( !lstrcmp( states[i].state_code, pbuf ) ) return( 0 ); /* not a legal 2-letter state code */ return( 1 ); } /*---------------------------------------------------------------------------*/ int FAR PASCAL check_zip_code( HFORM hform, HFIELD hfield, LPSTR pbuf ) { LPSTR p; int i, num_spaces; long zip, zip_low, zip_high; /* allow zip code to be blank */ if( str_is_blank( pbuf ) ) return( 0 ); /* count spaces in the extended portion of the 9-digit zip code */ num_spaces = 0; for( p = pbuf + 5 ; *p != '\0' ; p++ ) if( *p == ' ' ) num_spaces++; /* if zip code isn't exactly 5 or 9 digits, then there's an error */ if( num_spaces != 0 && num_spaces != 4 ) return( 6 ); *( pbuf+5 ) = '\0'; field_log_to_data( hfield, pbuf, &zip, FDT_LONG ); /* find matching state */ hfield = field_get_from_ctrl_id( hform, IDD_STATE ); field_get_text( hfield, tbuf, FALSE ); for( i = 0 ; states[i].state_code != NULL ; i++ ) { if( !lstrcmp( tbuf, states[i].state_code ) ) break; } if( states[i].state_code == NULL ) return( 0 ); /* test zip code */ zip_low = ( (long) ( states[i].zip_low ) ) * 100L; zip_high = ( (long) ( states[i].zip_high ) ) * 100L; if( zip >= zip_low && zip <= zip_high ) return( 0 ); return( 1 ); } /*****************************************************************************/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*------------------------/ \-----------------------*/ /*------------------------ Album Database Dialog -----------------------*/ /*------------------------\ /-----------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*****************************************************************************/ /* prototypes for Album Database dialog */ static void fill_media_list_box( HWND hDlg ); static int get_record( int recno ); static BOOL okay_to_save_changes( HWND hDlg ); static void update_record( int recno ); /*---------------------------------------------------------------------------*/ /* albums "file" */ struct albums_t { char artist[25+1]; char title[30+1]; char label[15+1]; int copyright; char media[15+1]; }; static struct albums_t albums[] = { { "Aerosmith", "Pump", "Geffen", 1989, "Compact Disc" }, { "Bell Biv Devoe", "Poison", "MCA", 1990, "Cassette" }, { "The Cure", "Disintegration", "Elektra", 1989, "Compact Disc" }, { "Front 242", "Front by Front", "Wax Trax", 1988, "Compact Disc" }, { "INXS", "Kick", "Atlantic", 1987, "Cassette" }, { "Janet Jackson", "Control", "A&M", 1986, "Cassette" }, { "Kenny G", "Live", "Arista", 1989, "Compact Disc" }, { "R.E.M.", "Out of Time", "Warner Bros.", 1991, "Cassette" }, { "Sex Pistols", "Never Mind the Bollocks", "Warner Bros.", 1977, "Record" }, { "Van Halen", "OU812", "Warner Bros.", 1988, "Compact Disc" }, }; /*---------------------------------------------------------------------------*/ /* buffer area to use for editing Albums "file" */ static char artist[25+1]; static char title[30+1]; static char label[15+1]; static int copyright; static char media[15+1]; /*---------------------------------------------------------------------------*/ /* media type table */ static PSTR media_types[] = { "Compact Disc", "Cassette", "Record", "DAT", "Mini Disc", "DCC", "Open Reel", "8-Track", NULL }; /*---------------------------------------------------------------------------*/ int FAR PASCAL AlbumDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ) { static HFORM hform = NULL; static int curr_rec = 0; int new_rec; switch( message ) { case WM_INITDIALOG: curr_rec = get_record( 1 ); hform = form_begin( hDlg, FMF_UPDATE, NULL ); form_set_help( hform, "demohelp.hlp", 0 ); field_define( hform, IDD_RECNO, &curr_rec, FDT_INTEGER, "999", FDF_NOTEDIT, NULL, 0, IDH_RECNO ); field_define( hform, IDD_ARTIST, artist, FDT_STRING, "?(25)", FDF_NOTBLANK, NULL, 0, IDH_ARTIST ); field_define( hform, IDD_TITLE, title, FDT_STRING, "?(30)", FDF_NONE, NULL, 0, IDH_TITLE ); field_define( hform, IDD_LABEL, label, FDT_STRING, "?(15)", FDF_NONE, NULL, 0, IDH_LABEL ); field_define( hform, IDD_COPYRIGHT, ©right, FDT_INTEGER, "<1><9>99", FDF_COMPLETE, NULL, 0, IDH_COPR ); field_define( hform, IDD_MEDIA, media, FDT_STRING, "?(15)", FDF_COMBO | FDF_NOTBLANK, NULL, 0, IDH_MEDIA ); keystat_define( hform, IDD_INSERT, KSM_INSERT, "[Ins]", "" ); keystat_define( hform, IDD_CAPSLOCK, KSM_CAPSLOCK, "[Caps]", "" ); keystat_define( hform, IDD_NUMLOCK, KSM_NUMLOCK, "[Num]", "" ); form_end( hform ); fill_media_list_box( hDlg ); return( TRUE ); case WM_COMMAND: switch( wParam ) { case IDOK: form_ok( hform ); EndDialog( hDlg, TRUE ); return( TRUE ); case IDCANCEL: form_cancel( hform ); EndDialog( hDlg, TRUE ); return( TRUE ); case IDD_PREVIOUS: case IDD_NEXT: if( form_validate( hform ) != NULL ) return( TRUE ); if( form_has_changed( hform ) ) { if( okay_to_save_changes( hDlg ) ) { form_save( hform ); update_record( curr_rec ); } } new_rec = ( wParam == IDD_PREVIOUS ) ? ( curr_rec - 1 ) : ( curr_rec + 1 ); new_rec = get_record( new_rec ); if( new_rec == -1 ) MessageBeep( 0 ); else curr_rec = new_rec; form_load( hform ); PostMessage( hDlg, WM_COMMAND, GOTO_ARTIST, 0 ); return( TRUE ); case GOTO_ARTIST: SetFocus( GetDlgItem( hDlg, IDD_ARTIST ) ); return( TRUE ); } break; case WM_CLOSE: SendMessage( hDlg, WM_COMMAND, IDCANCEL, 0 ); return( TRUE ); } return( FALSE ); } /*---------------------------------------------------------------------------*/ static void fill_media_list_box( HWND hDlg ) { int i; for( i = 0 ; media_types[i] != NULL ; i++ ) { SendMessage( GetDlgItem( hDlg, IDD_MEDIA ), CB_ADDSTRING, 0, (LONG) ( (LPSTR) media_types[i] ) ); } } /*---------------------------------------------------------------------------*/ /* gets a record from the Albums "file" */ static int get_record( int recno ) { int last_rec, ofs; last_rec = sizeof( albums ) / sizeof( albums[0] ); if( recno < 1 || recno > last_rec ) return( -1 ); ofs = recno - 1; lstrcpy( artist, albums[ofs].artist ); lstrcpy( title, albums[ofs].title ); lstrcpy( label, albums[ofs].label ); copyright = albums[ofs].copyright; lstrcpy( media, albums[ofs].media ); return( recno ); } /*---------------------------------------------------------------------------*/ static BOOL okay_to_save_changes( HWND hDlg ) { return( MessageBox( hDlg, "Record has changed. Save changes?", "Record Has Changed", MB_ICONQUESTION | MB_YESNO ) == IDYES ); } /*---------------------------------------------------------------------------*/ /* updates a record in the Albums "file" */ static void update_record( int recno ) { int ofs; ofs = recno - 1; lstrcpy( albums[ofs].artist, artist ); lstrcpy( albums[ofs].title, title ); lstrcpy( albums[ofs].label, label ); albums[ofs].copyright = copyright; lstrcpy( albums[ofs].media, media ); } /*****************************************************************************/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*------------------------/ \-----------------------*/ /*------------------------ Upload File Dialog -----------------------*/ /*------------------------\ /-----------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*****************************************************************************/ /* prototypes for Upload File dialog */ static void fill_list_boxes( HWND hDlg, PSTR pathspec ); /*---------------------------------------------------------------------------*/ /* protocol name table */ static PSTR protocols[] = { "Xmodem", "Ymodem", "Zmodem" }; /*---------------------------------------------------------------------------*/ int FAR PASCAL UploadDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ) { static HFORM hform = NULL; static int protocol = 0, hangup; static char path_spec[81], file_name[13]; static HFIELD hfile_name; switch( message ) { case WM_INITDIALOG: hform = form_begin( hDlg, FMF_NONE, perror_func ); form_set_help( hform, "demohelp.hlp", 0 ); hfile_name = field_define( hform, IDD_FILENAME, file_name, FDT_STRING, "F(12)", FDF_NOTBLANK, pcheck_file_name, BAD_FILENAME, IDH_FILENAME ); form_set_enable_link( hform, (HANDLE) hfile_name, ELC_BLANK, IDOK, FALSE ); generic_define( hform, IDD_FILEBOX, IDH_FILEBOX ); generic_define( hform, IDD_DIRBOX, IDH_DIRBOX ); button_define( hform, IDD_XMODEM, &protocol, 1, 0, 0, BTF_UPDATE, IDH_XMODEM ); button_define( hform, IDD_YMODEM, &protocol, 1, 1, 0, BTF_UPDATE, IDH_YMODEM ); button_define( hform, IDD_ZMODEM, &protocol, 1, 2, 0, BTF_UPDATE, IDH_ZMODEM ); button_define( hform, IDD_HANGUP, &hangup, 0, TRUE, FALSE, BTF_NONE, IDH_HANGUP ); form_end( hform ); fill_list_boxes( hDlg, "*.*" ); return( TRUE ); case WM_COMMAND: switch( wParam ) { case IDOK: form_ok( hform ); GetDlgItemText( hDlg, IDD_PATHSPEC, path_spec, 80 ); EndDialog( hDlg, TRUE ); wsprintf( tbuf, "Uploading the file: %s%s%s\n" "Using the %s protocol.\n" "Will %shang up after transfer.", (LPSTR) path_spec, *( path_spec + lstrlen( path_spec ) - 1 ) == '\\' ? (LPSTR) "" : (LPSTR) "\\", (LPSTR) file_name, (LPSTR) protocols[protocol], hangup ? (LPSTR) "" : (LPSTR) "not " ); MessageBox( NULL, tbuf, "Upload File", MB_OK ); return( TRUE ); case IDCANCEL: form_cancel( hform ); EndDialog( hDlg, TRUE ); return( TRUE ); case IDD_FILEBOX: if( HIWORD( lParam ) == LBN_SELCHANGE ) { SendDlgItemMessage( hDlg, IDD_FILEBOX, LB_GETTEXT, (int) SendDlgItemMessage( hDlg, IDD_FILEBOX, LB_GETCURSEL, 0, 0 ), (LONG) ( (LPSTR) tbuf ) ); field_set_text( hfile_name, tbuf, TRUE ); return( TRUE ); } if( HIWORD( lParam ) == LBN_DBLCLK ) { PostMessage( hDlg, WM_COMMAND, IDOK, (LONG) GetDlgItem( hDlg, IDOK ) ); return( TRUE ); } break; case IDD_DIRBOX: if( HIWORD( lParam ) == LBN_DBLCLK ) { DlgDirSelect( hDlg, path_spec, IDD_DIRBOX ); field_set_text( hfile_name, "", TRUE ); lstrcat( path_spec, "*.*" ); fill_list_boxes( hDlg, path_spec ); return( TRUE ); } break; } break; case WM_CLOSE: SendMessage( hDlg, WM_COMMAND, IDCANCEL, 0 ); return( TRUE ); } return( FALSE ); } /*---------------------------------------------------------------------------*/ int FAR PASCAL check_file_name( HFORM hform, HFIELD hfield, LPSTR pbuf ) { char file_name[13]; lstrcpy( file_name, pbuf ); str_trim_spaces( file_name ); return( ( SendDlgItemMessage( GetParent( GetFocus() ), IDD_FILEBOX, LB_FINDSTRING, (WPARAM) -1, (LONG) ( (LPSTR) file_name ) ) == LB_ERR ) ? 1 : 0 ); } /*---------------------------------------------------------------------------*/ static void fill_list_boxes( HWND hDlg, PSTR pathspec ) { DlgDirList( hDlg, pathspec, IDD_FILEBOX, 0, 0x0001 | 0x0020 ); DlgDirList( hDlg, pathspec, IDD_DIRBOX, IDD_PATHSPEC, 0x0010 | 0x4000 | 0x8000 ); } /*****************************************************************************/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*------------------------/ \-----------------------*/ /*------------------------ Numeric Fields Dialog ----------------------*/ /*------------------------\ /-----------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*****************************************************************************/ int FAR PASCAL NumericDlgProc( HWND hDlg, unsigned message, WORD wParam, LONG lParam ) { static HFORM hform = NULL; static long std = 0; static unsigned long zerofill = 0; static unsigned int calc = 0; static double stddec = 0.0, calcdec = 0.0, real= 0.0; switch( message ) { case WM_INITDIALOG: hform = form_begin( hDlg, FMF_OVERTYPE | FMF_NOSELECT | FMF_UPDATE, NULL ); field_define( hform, IDD_STD, &std, FDT_LONG, "N(7)", FDF_NUMERIC, NULL, 0, 0 ); field_define( hform, IDD_STDDEC, &stddec, FDT_DOUBLE, "9(5).99", FDF_NUMERIC, NULL, 0, 0 ); field_define( hform, IDD_ZEROFILL, &zerofill, FDT_ULONG, "9(9)", FDF_NUMERIC | FDF_ZEROFILL, NULL, 0, 0 ); field_define( hform, IDD_CALC, &calc, FDT_UNSIGNED, "<0123456 >9(4)", FDF_CALCNUM | FDF_VLEAVFLD, NULL, 0, 0 ); field_define( hform, IDD_CALCDEC, &calcdec, FDT_DOUBLE, "N,NNN,NNN.NN", FDF_CALCNUM, NULL, 0, 0 ); field_define( hform, IDD_REAL, &real, FDT_DOUBLE, "#(9)", FDF_NUMERIC, NULL, 0, 0 ); keystat_define( hform, IDD_INSERT, KSM_INSERT, "(Ins)", "(Ovr)" ); form_end( hform ); return( TRUE ); case WM_COMMAND: switch( wParam ) { case IDOK: form_ok( hform ); EndDialog( hDlg, TRUE ); sprintf( tbuf, "%ld\t%.2lf\n%lu\t%u\n%.2lf\n%le\n", std, stddec, zerofill, calc, calcdec, real ); MessageBox( NULL, tbuf, "Field Contents", MB_OK ); return( TRUE ); case IDCANCEL: form_cancel( hform ); EndDialog( hDlg, TRUE ); return( TRUE ); } break; case WM_CLOSE: SendMessage( hDlg, WM_COMMAND, IDCANCEL, 0 ); return( TRUE ); } return( FALSE ); }