/* * Dialog box support for Win100 * * Copyright (c) 1990, 1991 by * William S. Hall * 3665 Benton Street #66 * Santa Clara, CA 95051 * */ #define NOBITMAP #define NOBRUSH #define NOKANJI #define NOATOM #define NOMINMAX #include #include #include #include #include #include #include #if defined(WIN2) #include #endif #ifdef COLUMBIA #include "wktsmt.h" #include "wkt100.h" #include "wktdlg.h" #else #include "smterm.h" #include "w600dg.h" #include "win600.h" #endif typedef struct _FONTDAT { HWND hDlg; int action; } FONTDAT; static void NEAR InitModemBox(HWND hDlg); // static int NEAR FindInitialPort(HWND hDlg, int index); static int NEAR FindXoffLimit(WORD val); static int FindParityIndex(BYTE parity, BYTE size); static int NEAR FindBaudIndex(WORD rate); static void NEAR SetModemBox(HWND hDlg); static void NEAR SaveModemBoxParams(HWND hDlg); static void NEAR SetDisplayBox(HWND hDlg); static void NEAR InitDisplayBox(HWND hDlg); static void NEAR SetGeneralBox(HWND hDlg); static void NEAR InitGeneralBox(HWND hDlg); static void NEAR InitMiniBox(HWND hDlg); static void NEAR SetMiniBox(HWND hDlg); static void NEAR InitCopyBox(HWND hDlg); static void NEAR RangeCopyBox(HWND hDlg); static void NEAR SetCopyBox(HWND hDlg); static void NEAR StringOp(HWND hDlg, WORD param); static void NEAR InitLogFileBox(HWND hDlg); static BOOL NEAR SetLogFileBox(HWND hDlg); static void NEAR InitKeyboardBox(HWND hDlg); static void NEAR SetKeyboardBox(HWND hDlg); static void NEAR InitFontsBoxProc(HWND hDlg); short FAR PASCAL GetFixedFontInfo(LPLOGFONT lf, LPTEXTMETRIC tm, short type, FONTDAT FAR *Data); static void NEAR ScrollCopyBox(HWND hDlg, WORD wParam, LONG lParam); static void NEAR SelectFontsBox(HWND hDlg); static void NEAR SizeFontsBox(HWND hDlg); static void NEAR SetFontsBox(HWND hDlg); CBInsertString(HWND hDlg, int id, int index, char * buf); CBSetCursel(HWND hDlg, int id, int index); CBGetCursel(HWND hDlg, int id); static void NEAR SaveInitData(int id, int val); static char *format = "%2d %2d"; static char *black = "Black"; static char *dgray = "Dark Gray"; static char *lgray = "Light Gray"; static char *white = "White"; BOOL OpenDlgBox(HWND hWnd, FARPROC fpProc, WORD boxnum) { FARPROC fp; BOOL result; /* make a proc instance for the about box window function */ fp = MakeProcInstance(fpProc, hInst); /* create a modal dialog box */ result = DialogBox(hInst, MAKEINTRESOURCE(boxnum),hWnd,fp); FreeProcInstance(fp); return result; } /* This is the window proc for the about box when it is displayed */ BOOL FAR PASCAL AboutBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { /* nothing to initialize */ case WM_INITDIALOG: break; /* this dialog box has only an OK button */ case WM_COMMAND: switch (wParam) { case IDOK: case IDCANCEL: /* destroy the dialog box */ EndDialog(hDlg,TRUE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } BOOL FAR PASCAL FontsBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { case WM_INITDIALOG: InitFontsBoxProc(hDlg); break; case WM_COMMAND: switch (wParam) { /* case IDD_SAVE: if (IsDlgButtonChecked(hDlg, wParam)) CheckDlgButton(hDlg, wParam, FALSE); else CheckDlgButton(hDlg, wParam, TRUE); break; */ case IDD_FONTFACE: SelectFontsBox(hDlg); break; case IDD_NORMALFONT: case IDD_SMALLFONT: SizeFontsBox(hDlg); break; case IDOK: SetFontsBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg,FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } short FAR PASCAL GetFixedFontInfo(LPLOGFONT lf, LPTEXTMETRIC tm, short type, FONTDAT FAR *pfd) { HWND hdlg = pfd->hDlg; WORD boxid = pfd->action; char buf[20]; switch(boxid) { case IDD_FONTFACE: if ((lf->lfPitchAndFamily & FIXED_PITCH) && (lf->lfWeight == FW_NORMAL) && (lf->lfItalic == 0) && (lf->lfStrikeOut == 0) && (lf->lfUnderline == 0) && (lf->lfCharSet == ANSI_CHARSET)) SendDlgItemMessage(hdlg,boxid,LB_ADDSTRING,0, (LONG)(LPSTR)lf->lfFaceName); break; case IDD_NORMALFONT: if ((lf->lfPitchAndFamily & FIXED_PITCH) && (lf->lfWeight == FW_NORMAL) && (lf->lfItalic == 0) && (lf->lfStrikeOut == 0) && (lf->lfUnderline == 0) && (lf->lfCharSet == ANSI_CHARSET)) { sprintf(buf, format, lf->lfWidth, lf->lfHeight); SendDlgItemMessage(hdlg, boxid, LB_INSERTSTRING, -1, (LONG)(LPSTR)buf); SendDlgItemMessage(hdlg, boxid + 1, LB_INSERTSTRING,-1,(LONG)(LPSTR)buf); } break; } return TRUE; } static void NEAR SizeFontsBox(HWND hDlg) { WORD index, index1; HWND hctl = GetDlgItem(hDlg, IDOK); index = (WORD)SendDlgItemMessage(hDlg,IDD_NORMALFONT,LB_GETCURSEL,0,0L); index1 = (WORD)SendDlgItemMessage(hDlg,IDD_SMALLFONT,LB_GETCURSEL,0,0L); if ((index == LB_ERR) || (index1 == LB_ERR)) EnableWindow(hctl, FALSE); else EnableWindow(hctl, TRUE); } static void NEAR SelectFontsBox(HWND hDlg) { FARPROC fp; HDC hDC; char curfont[LF_FACESIZE]; WORD index, index1; FONTDAT fd; index = (WORD)SendDlgItemMessage(hDlg, IDD_FONTFACE, LB_GETCURSEL, 0, 0L); if (index != LB_ERR) { SendDlgItemMessage(hDlg, IDD_FONTFACE, LB_GETTEXT, index, (LONG)(LPSTR)curfont); SendDlgItemMessage(hDlg, IDD_SMALLFONT, WM_SETREDRAW, 0, 0L); SendDlgItemMessage(hDlg, IDD_NORMALFONT, WM_SETREDRAW, 0, 0L); SendDlgItemMessage(hDlg, IDD_NORMALFONT, LB_RESETCONTENT, 0, 0L); SendDlgItemMessage(hDlg, IDD_SMALLFONT, LB_RESETCONTENT, 0, 0L); hDC = GetDC(hDlg); fp = MakeProcInstance((FARPROC)GetFixedFontInfo, hInst); fd.hDlg = hDlg; fd.action = IDD_NORMALFONT; EnumFonts(hDC, curfont, fp, (LPSTR)&fd); FreeProcInstance(fp); ReleaseDC(hDlg, hDC); SendDlgItemMessage(hDlg, IDD_SMALLFONT, WM_SETREDRAW, TRUE, 0L); SendDlgItemMessage(hDlg, IDD_NORMALFONT, WM_SETREDRAW, TRUE, 0L); InvalidateRect(GetDlgItem(hDlg,IDD_SMALLFONT), NULL, TRUE); InvalidateRect(GetDlgItem(hDlg,IDD_NORMALFONT), NULL, TRUE); } index = (WORD)SendDlgItemMessage(hDlg,IDD_NORMALFONT,LB_GETCURSEL,0,0L); index1 = (WORD)SendDlgItemMessage(hDlg,IDD_SMALLFONT,LB_GETCURSEL,0,0L); if ((index == LB_ERR) || (index1 == LB_ERR)) EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); } static void NEAR SetFontsBox(HWND hDlg) { WORD index, index1, index2; char curfont[LF_FACESIZE]; char nfont[10], sfont[10]; short nfontwidth, nfontheight; short sfontwidth, sfontheight; char szKeyStr[80]; SETFONT sf; index = (WORD)SendDlgItemMessage(hDlg, IDD_FONTFACE, LB_GETCURSEL, 0, 0L); index1 = (WORD)SendDlgItemMessage(hDlg,IDD_NORMALFONT,LB_GETCURSEL, 0, 0L); index2 = (WORD)SendDlgItemMessage(hDlg,IDD_SMALLFONT,LB_GETCURSEL,0,0L); if ((index != LB_ERR) && (index1 != LB_ERR) && (index2 != LB_ERR)) { SendDlgItemMessage(hDlg, IDD_FONTFACE, LB_GETTEXT, index, (LONG)(LPSTR)curfont); SendDlgItemMessage(hDlg, IDD_NORMALFONT, LB_GETTEXT, index1, (LONG)(LPSTR)nfont); SendDlgItemMessage(hDlg, IDD_SMALLFONT, LB_GETTEXT, index2, (LONG)(LPSTR)sfont); sscanf(nfont, format, &nfontwidth, &nfontheight); sscanf(sfont, format, &sfontwidth, &sfontheight); sf.nwidth = nfontwidth; sf.nheight = nfontheight; sf.swidth = sfontwidth; sf.sheight = sfontheight; strcpy(sf.FaceName, curfont); SendMessage(hWndActive,SMT_COMMAND,SM_SETFONT, (LONG)(SETFONT FAR *)&sf); if (IsDlgButtonChecked(hDlg, IDD_SAVE)) { LoadString(hInst,IDS_FONTFACE,(LPSTR)szKeyStr,sizeof(szKeyStr)); WritePrivateProfileString(szAppName,szKeyStr,curfont,szIniName); SaveInitData(IDS_NORMALWIDTH, nfontwidth); SaveInitData(IDS_NORMALHEIGHT, nfontheight); SaveInitData(IDS_SMALLWIDTH, sfontwidth); SaveInitData(IDS_SMALLHEIGHT, sfontheight); } } } static void NEAR InitFontsBoxProc(HWND hDlg) { FARPROC fp; HDC hDC; char curfont[LF_FACESIZE]; long len; FONTDAT fd; CheckDlgButton(hDlg, IDD_SAVE, FALSE); // EnableWindow(GetDlgItem(hDlg, IDD_SAVE), FALSE); hDC = GetDC(hDlg); fp = MakeProcInstance((FARPROC)GetFixedFontInfo, hInst); fd.hDlg = hDlg; fd.action = IDD_FONTFACE; EnumFonts(hDC, NULL, fp, (LPSTR)&fd); SendDlgItemMessage(hDlg,IDD_FONTFACE,LB_ADDSTRING,0,(LONG)(LPSTR)"System"); len = SendMessage(hWndText,SMT_GETATTRIBUTE,SM_FONTFACE, (LONG)(LPSTR)curfont); if (len) { SendDlgItemMessage(hDlg,IDD_FONTFACE,LB_SELECTSTRING, -1, (LONG)(LPSTR)curfont); fd.action = IDD_NORMALFONT; EnumFonts(hDC, curfont, fp, (LPSTR)&fd); len = SendMessage(hWndText, SMT_GETATTRIBUTE, SM_NORMALFONT, 0L); sprintf(curfont, format, LOWORD(len), HIWORD(len)); SendDlgItemMessage(hDlg,IDD_NORMALFONT,LB_SELECTSTRING, -1, (LONG)(LPSTR)curfont); len = SendMessage(hWndText, SMT_GETATTRIBUTE, SM_SMALLFONT, 0L); sprintf(curfont, format, LOWORD(len), HIWORD(len)); SendDlgItemMessage(hDlg,IDD_SMALLFONT,LB_SELECTSTRING, -1, (LONG)(LPSTR)curfont); } FreeProcInstance(fp); ReleaseDC(hDlg, hDC); } BOOL FAR PASCAL LogFileBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { int count; switch (message) { case WM_INITDIALOG: InitLogFileBox(hDlg); break; case WM_COMMAND: switch (wParam) { case IDD_GETFILE: if (HIWORD(lParam) == EN_CHANGE) { count = (int)SendDlgItemMessage(hDlg, wParam,WM_GETTEXTLENGTH,0,0L); EnableWindow(GetDlgItem(hDlg, IDOK), count); } break; case IDOK: if (SetLogFileBox(hDlg)) EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg,FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static char namebuf[14]; static BOOL NEAR SetLogFileBox(HWND hDlg) { char buf[132]; int hfile; int reply; WORD style; GetDlgItemText(hDlg, IDD_GETFILE, buf, sizeof(buf)); if ((hfile = OpenFile(buf, &ofLogFile, OF_EXIST)) > 0) { if (strpbrk(buf, ":\\")) { // path specified reply = ShowMessage(hDlg,IDS_FILEEXISTS, MB_YESNOCANCEL | MB_ICONQUESTION); if (reply == IDCANCEL) return FALSE; style = reply == IDNO ? OF_WRITE | OF_CREATE : OF_WRITE; } else { // not a path // reply = GetDlgItemText(hDlg,IDD_LOGFILEPATH,buf,sizeof(buf)); getcwd(buf, sizeof(buf)); if (buf[reply - 1] == '\\') buf[reply - 1] = 0; strcat(buf, strrchr(ofLogFile.szPathName,'\\')); if (strcmp(buf, ofLogFile.szPathName)) //file not in this directory style = OF_WRITE | OF_CREATE; else { // yes, in this directory, so append or clear ? reply = ShowMessage(hDlg,IDS_FILEEXISTS, MB_YESNOCANCEL | MB_ICONQUESTION); if (reply == IDCANCEL) return FALSE; style = reply == IDNO ? OF_WRITE | OF_CREATE : OF_WRITE; } } } else style = OF_WRITE | OF_CREATE; hLogFile = OpenFile(buf, &ofLogFile, style); if (hLogFile > 0) { lseek(hLogFile, 0L, SEEK_END); strcpy(namebuf, strrchr(ofLogFile.szPathName,'\\') + 1); return TRUE; } ShowMessage(hDlg, IDS_OPENFILEERROR, MB_OK | MB_ICONASTERISK); return FALSE; } static void NEAR InitLogFileBox(HWND hDlg) { static namelen = 0; HWND hctl; LONG style; hctl = GetDlgItem(hDlg, IDD_GETFILE); style = GetWindowLong(hctl, GWL_STYLE); style |= ES_OEMCONVERT; SetWindowLong(hctl, GWL_STYLE, style); // set limits SendDlgItemMessage(hDlg,IDD_GETFILE,EM_LIMITTEXT,128,0L); // show current directory DlgDirList(hDlg, (LPSTR)0, 0, IDD_LOGFILEPATH, 0); // get default name if (namelen == 0) namelen = LoadString(hInst,IDS_LOGFILENAME,namebuf,sizeof(namebuf)); // set the name SetDlgItemText(hDlg, IDD_GETFILE, namebuf); } static short Start, End; BOOL FAR PASCAL CopyBoxProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam) { switch (message) { case WM_VSCROLL: ScrollCopyBox(hDlg, wParam, lParam); break; case WM_INITDIALOG: InitCopyBox(hDlg); break; case WM_COMMAND: switch (wParam) { case IDD_STARTLINE: case IDD_ENDLINE: if (HIWORD(lParam) == EN_CHANGE) RangeCopyBox(hDlg); break; case IDOK: SetCopyBox(hDlg); EndDialog(hDlg, TRUE); SendMessage(hWndText, SMT_INVERT, 0, MAKELONG(Start - 1,End - 1)); Start = End = 0; break; case IDCANCEL: EndDialog(hDlg,FALSE); SendMessage(hWndText, SMT_INVERT, 0, MAKELONG(Start - 1,End - 1)); Start = End = 0; break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR ScrollCopyBox(HWND hDlg, WORD wParam, LONG lParam) { BOOL change = FALSE; int size = LOWORD(SendMessage(hWndText,SMT_GETATTRIBUTE,SM_SCREENSIZE,0L)); int startline = GetDlgItemInt(hDlg, IDD_STARTLINE, NULL, FALSE); int endline = GetDlgItemInt(hDlg, IDD_ENDLINE, NULL, FALSE); if (HIWORD(lParam) == GetDlgItem(hDlg, IDD_STARTSCROLL)) { SetFocus(GetDlgItem(hDlg,IDD_STARTLINE)); switch(wParam) { case SB_LINEUP: if (startline > 1) { startline -= 1; change = TRUE; } break; case SB_LINEDOWN: if (startline < endline) { startline += 1; change = TRUE; } break; } } else { SetFocus(GetDlgItem(hDlg,IDD_ENDLINE)); switch(wParam) { case SB_LINEUP: if (endline > startline) { endline -= 1; change = TRUE; } break; case SB_LINEDOWN: if (endline < size) { endline += 1; change = TRUE; } break; } } if (change) { SetDlgItemInt(hDlg, IDD_STARTLINE, startline, FALSE); SetDlgItemInt(hDlg, IDD_ENDLINE, endline, FALSE); } } static void NEAR RangeCopyBox(HWND hDlg) { int size = LOWORD(SendMessage(hWndText,SMT_GETATTRIBUTE,SM_SCREENSIZE,0L)); int startline = GetDlgItemInt(hDlg, IDD_STARTLINE, NULL, FALSE); int endline = GetDlgItemInt(hDlg, IDD_ENDLINE, NULL, FALSE); BOOL enable = (startline >= 1) && (endline <= size) && (startline <= endline); EnableWindow(GetDlgItem(hDlg, IDOK), enable); if (enable) { if (startline > Start) SendMessage(hWndText,SMT_INVERT,0,MAKELONG(Start-1,startline-2)); else if (startline < Start) SendMessage(hWndText,SMT_INVERT,0,MAKELONG(startline-1,Start-2)); if (endline > End) SendMessage(hWndText,SMT_INVERT,0,MAKELONG(End,endline-1)); else if (endline < End) SendMessage(hWndText,SMT_INVERT,0,MAKELONG(endline,End-1)); Start = startline; End = endline; } } static void NEAR SetCopyBox(HWND hDlg) { HANDLE hText; LPSTR pText; BYTE startline = (BYTE)GetDlgItemInt(hDlg, IDD_STARTLINE, NULL, FALSE); BYTE endline = (BYTE)GetDlgItemInt(hDlg, IDD_ENDLINE, NULL, FALSE); long size = SendMessage(hWndText,SMT_GETATTRIBUTE,SM_SCREENSIZE,0L); long alloc = (LONG)(16 + (HIWORD(size) + 2) * LOWORD(size)); WORD wParam = 256 * (endline - 1) + startline - 1; if (hText = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, alloc)) { if (pText = GlobalLock(hText)) { SendMessage(hWndText,SMT_COPYLINES, wParam, (LONG)pText); GlobalUnlock(hText); if (OpenClipboard(MWnd.hWnd)) { EmptyClipboard(); SetClipboardData(CF_TEXT, hText); CloseClipboard(); } else GlobalFree(hText); } else GlobalFree(hText); } } static void NEAR InitCopyBox(HWND hDlg) { long size = SendMessage(hWndText, SMT_GETATTRIBUTE, SM_SCREENSIZE, 0L); int maxrows = LOWORD(size); Start = 1; End = maxrows; SendMessage(hWndText,SMT_INVERT,0, MAKELONG(Start - 1, End - 1)); SetDlgItemInt(hDlg, IDD_STARTLINE, 1, FALSE); SetDlgItemInt(hDlg, IDD_ENDLINE, maxrows, FALSE); } BOOL FAR PASCAL MiniBoxProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam) { switch (message) { case WM_INITDIALOG: InitMiniBox(hDlg); break; /* this dialog box has only an OK button */ case WM_COMMAND: switch (wParam) { case IDOK: SetMiniBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg,TRUE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR InitMiniBox(HWND hDlg) { register int val; char buf[80]; val = (LineState & LINE_ON ? 0 : 1); CheckRadioButton(hDlg, IDD_LINE, IDD_LOCAL, IDD_LINE + val); val = MWnd.Reverse ? 1 : 0; CheckRadioButton(hDlg, IDD_NORMAL, IDD_REVERSE, IDD_NORMAL + val); for (val = IDS_JUMP; val <= IDS_SMOOTH8; val++) { LoadString(hInst, val, buf, sizeof(buf)); CBInsertString(hDlg, IDD_SCROLL, -1, buf); } val = (BOOL)SendMessage(hWndText, SMT_GETATTRIBUTE, SM_SMOOTHSCROLL, 0L); if (val) { val = (BOOL)SendMessage(hWndText,SMT_GETATTRIBUTE,SM_SCROLLUNITS,0L); CBSetCursel(hDlg,IDD_SCROLL, val == 1 ? 1: val == 2 ? 2: val == 4 ? 3: 4); } else CBSetCursel(hDlg, IDD_SCROLL, 0); val = HIWORD(SendMessage(hWndText, SMT_GETATTRIBUTE, SM_SCREENSIZE, 0L)); val = (val == 80 ? 0 : 1); CheckRadioButton(hDlg, IDD_80COL, IDD_132COL, IDD_80COL + val); CheckDlgButton(hDlg, IDD_SAVE, FALSE); } static void NEAR SetMiniBox(HWND hDlg) { int val; register int i; register BOOL save = IsDlgButtonChecked(hDlg, IDD_SAVE); for (i = IDD_LINE; i < IDD_LOCAL; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; if (i == IDD_LINE) { LineState = LINE_ON + LocalEcho; DoMessage = DoPeekMessage; } else { LineState = LOCAL_ON; DoMessage = DoGetMessage; } if (save) { Initdata.LocalMode = (LineState == LOCAL_ON ? TRUE : FALSE); SaveInitData(IDS_LOCALMODE, Initdata.LocalMode); } for (i = IDD_NORMAL; i < IDD_REVERSE; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; val = MWnd.Reverse; MWnd.Reverse = i - IDD_NORMAL; if (val != MWnd.Reverse) InvertScreen(MWnd.Reverse); /* does this take care of graph window? */ if (save) { Initdata.ReverseVideo = MWnd.Reverse; SaveInitData(IDS_REVERSEVIDEO, Initdata.ReverseVideo); } val = CBGetCursel(hDlg, IDD_SCROLL); SendMessage(hWndText, SMT_SETATTRIBUTE, SM_SMOOTHSCROLL, val ? (LONG)TRUE : (LONG)FALSE); if (val) SendMessage(hWndText, SMT_SETATTRIBUTE, SM_SCROLLUNITS, val == 1 ? 1: val == 2 ? 2 : val == 3 ? 4 : 8); if (save) { Initdata.SmoothScroll = val ? TRUE : FALSE; SaveInitData(IDS_SMOOTHSCROLL, Initdata.SmoothScroll); Initdata.ScrollUnits = val == 1 ? 1: val == 2 ? 2 : val == 3 ? 4 : 8; SaveInitData(IDS_SCROLLUNITS, Initdata.ScrollUnits); } for (i = IDD_80COL; i < IDD_132COL; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; val = (i == IDD_80COL ? 80 : 132); if (val != (int)HIWORD(SendMessage(hWndText,SMT_GETATTRIBUTE, SM_SCREENSIZE,0L))) SetCols(val); if (save) { Initdata.TermCols = val; SaveInitData(IDS_COLS, val); } if (save) BroadcastWinIniChange(); } BOOL FAR PASCAL ModemBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { case WM_INITDIALOG: InitModemBox(hDlg); break; case WM_COMMAND: switch (wParam) { case IDD_SAVE: if (IsDlgButtonChecked(hDlg, wParam)) { EnableWindow(GetDlgItem(hDlg, IDD_DEFPORT), FALSE); SendDlgItemMessage(hDlg, IDD_DEFPORT, CB_SHOWDROPDOWN, FALSE, 0L); CheckDlgButton(hDlg, wParam, FALSE); } else { EnableWindow(GetDlgItem(hDlg, IDD_DEFPORT), TRUE); SendDlgItemMessage(hDlg, IDD_DEFPORT, CB_SHOWDROPDOWN, TRUE, 0L); CheckDlgButton(hDlg, wParam, TRUE); } break; case IDOK: SetModemBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR SetModemBox(HWND hDlg) { register int i; WORD oldbaud = CommData.BaudRate; BYTE oldparity = CommData.Parity; BYTE oldbytesize = CommData.ByteSize; BYTE oldstopbits = CommData.StopBits; BYTE oldparitycheck = CommData.fParity; BYTE oldxonxoff = CommData.fOutX & CommData.fInX; WORD oldxofflim = CommData.XoffLim; BYTE oldport = CommData.Id; BYTE newport; int result; // read selected port newport = (BYTE)CBGetCursel(hDlg, IDD_PORT); if (newport != oldport) { char comstr[10]; char wintitle[50]; LoadString(hInst,IDS_COM1 + newport, comstr, sizeof(comstr)); result = OpenComm(comstr, DEFRXQUE, DEFTXQUE); if (result >= 0) { CloseComm(cid); cid = result; CommData.Id = (BYTE)cid; LoadString(hInst, IDS_TITLE, wintitle, sizeof(wintitle)); strcat(wintitle, comstr); SetWindowText(MWnd.hWnd, wintitle); } else { ShowMessage(hDlg, result, MB_OK | MB_ICONASTERISK); return; } } // set local echo LocalEcho = (IsDlgButtonChecked(hDlg, IDD_LOCALECHO) ? 1 : 0); if (LineState != LOCAL_ON) LineState = LINE_ON + LocalEcho; // read the baud rate selected for (i = IDD_110BAUD; i < IDD_19200BAUD; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; CommData.BaudRate = BaudRateTable[i - IDD_110BAUD]; // read parity/wordsize for (i = IDD_8BITNONE; i < IDD_7BITSPACE; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; CommData.ByteSize = ParityTable[i - IDD_8BITNONE].ByteSize; CommData.Parity = ParityTable[i - IDD_8BITNONE].Parity; // read parity check enabled CommData.fParity = (BYTE)(IsDlgButtonChecked(hDlg, IDD_PARCHECK) ? 1 : 0); CommData.fPeChar = CommData.fParity; // read stopbits for (i = IDD_ONESTOPBIT; i < IDD_TWOSTOPBITS; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; CommData.StopBits = (BYTE)(i == IDD_ONESTOPBIT ? ONESTOPBIT : TWOSTOPBITS); // read flow control CommData.fOutX = (BYTE)(IsDlgButtonChecked(hDlg, IDD_XONXOFF) ? TRUE : FALSE); CommData.fInX = CommData.fOutX; // read xofflimit for (i = IDD_XOFF64; i < IDD_XOFF768; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; CommData.XoffLim = DEFRXQUE - XoffSizeTable[i - IDD_XOFF64]; // set the state of the comm DCB result = SetCommState((DCB FAR *)&CommData); if (result == 0) { if (IsDlgButtonChecked(hDlg, IDD_SAVE)) SaveModemBoxParams(hDlg); } else { CommData.BaudRate = oldbaud; CommData.Parity = oldparity; CommData.ByteSize = oldbytesize; CommData.StopBits = oldstopbits; CommData.fParity = CommData.fPeChar = oldparitycheck; CommData.fOutX = CommData.fInX = oldxonxoff; CommData.XoffLim = oldxofflim; SetCommState((DCB FAR *)&CommData); ShowMessage(hDlg, result, MB_OK | MB_ICONASTERISK); } } static void NEAR SaveModemBoxParams(HWND hDlg) { char szKeyStr[80]; char szValStr[80]; int i, v[MAXCOMPORTS]; int defport; defport = CBGetCursel(hDlg, IDD_DEFPORT); switch(defport) { case 0: v[0] = IDS_COM1; v[1] = IDS_COM2; v[2] = IDS_COM3; v[3] = IDS_COM4; break; case 1: v[0] = IDS_COM2; v[1] = IDS_COM1; v[2] = IDS_COM3; v[3] = IDS_COM4; break; case 2: v[0] = IDS_COM3; v[1] = IDS_COM1; v[2] = IDS_COM2; v[3] = IDS_COM4; break; case 3: v[0] = IDS_COM4; v[1] = IDS_COM1; v[2] = IDS_COM2; v[3] = IDS_COM3; break; } for (i = 0; i < MAXCOMPORTS; i++) { LoadString(hInst,IDS_FIRSTPORT + i,szKeyStr,sizeof(szKeyStr)); LoadString(hInst,v[i],szValStr,sizeof(szValStr)); strcpy(Initdata.portname[i], szValStr); WritePrivateProfileString(szAppName,szKeyStr,szValStr,szIniName); } Initdata.LocalEcho = LocalEcho; SaveInitData(IDS_LOCALECHO, Initdata.LocalEcho); Initdata.BaudRate = CommData.BaudRate; SaveInitData(IDS_BAUD, Initdata.BaudRate); Initdata.Parity = CommData.Parity; SaveInitData(IDS_PARITY, Initdata.Parity); Initdata.ByteSize = CommData.ByteSize; SaveInitData(IDS_BYTESIZE, Initdata.ByteSize); Initdata.StopBits = (BYTE)(CommData.StopBits == ONESTOPBIT ? 1 : 2); SaveInitData(IDS_STOPBITS, Initdata.StopBits); Initdata.fParity = CommData.fParity; SaveInitData(IDS_PARCHECK, Initdata.fParity); Initdata.XonXoff = CommData.fOutX & CommData.fInX; SaveInitData(IDS_XONXOFF, Initdata.XonXoff); Initdata.XoffLim = DEFRXQUE - CommData.XoffLim; SaveInitData(IDS_XOFFLIM, Initdata.XoffLim); BroadcastWinIniChange(); } static void NEAR InitModemBox(HWND hDlg) { char buf[80]; register int i; // set baud rate int index; index = FindBaudIndex(CommData.BaudRate); CheckRadioButton(hDlg, IDD_110BAUD, IDD_19200BAUD, IDD_110BAUD + index); // set parity index = FindParityIndex(CommData.Parity, CommData.ByteSize); CheckRadioButton(hDlg, IDD_8BITNONE, IDD_7BITSPACE, IDD_8BITNONE + index); // set parity flag CheckDlgButton(hDlg, IDD_PARCHECK, CommData.fParity); // set stop bits if (CommData.StopBits == ONESTOPBIT) index = 0; else index = 1; CheckRadioButton(hDlg,IDD_ONESTOPBIT,IDD_TWOSTOPBITS,IDD_ONESTOPBIT+index); // set xonxoff index = CommData.fOutX & CommData.fInX; CheckDlgButton(hDlg, IDD_XONXOFF, index); // set xofflimit index = FindXoffLimit(DEFRXQUE - CommData.XoffLim); CheckRadioButton(hDlg, IDD_XOFF64, IDD_XOFF768, IDD_XOFF64 + index); // set port and initial port for (i = 0; i < MAXCOMPORTS; i++) { LoadString(hInst, IDS_COM1 + i, buf, sizeof(buf)); CBInsertString(hDlg, IDD_PORT, i, buf); CBInsertString(hDlg, IDD_DEFPORT, i, buf); if (strcmp(Initdata.portname[0], buf) == 0) CBSetCursel(hDlg, IDD_DEFPORT, i); } CBSetCursel(hDlg, IDD_PORT, CommData.Id); // set local echo CheckDlgButton(hDlg, IDD_LOCALECHO, LocalEcho); // set save CheckDlgButton(hDlg, IDD_SAVE, FALSE); // disable default port choices EnableWindow(GetDlgItem(hDlg, IDD_DEFPORT), FALSE); } /* static int NEAR FindInitialPort(HWND hDlg, int index) { int i; char buf[10]; for (i = 0; i < MAXCOMPORTS; i++) { LoadString(hInst, IDS_COM1+i, buf, sizeof(buf)); if (strcmp(Initdata.portname[index], buf) == 0) break; } return i; } */ static int NEAR FindXoffLimit(WORD val) { int i; for (i = 0; i < XOFFLIMSIZE; i++) if (val == XoffSizeTable[i]) break; return i; } static int FindParityIndex(BYTE parity, BYTE size) { int i; for (i = 0; i < PARITYTABLESIZE; i++) if ((parity == ParityTable[i].Parity) && (size == ParityTable[i].ByteSize)) break; return i; } static int NEAR FindBaudIndex(WORD rate) { int i; for (i = 0; i < BAUDRATETABLESIZE; i++) if (rate == BaudRateTable[i]) break; return i; } BOOL FAR PASCAL DisplayBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { /* nothing to initialize */ case WM_INITDIALOG: InitDisplayBox(hDlg); break; /* this dialog box has only an OK button */ case WM_COMMAND: switch (wParam) { case IDOK: SetDisplayBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR InitDisplayBox(HWND hDlg) { register int val; CheckDlgButton(hDlg, IDD_AUTOWRAP, MWnd.Wrap); CheckDlgButton(hDlg, IDD_AUTOLFCR, MWnd.LFCR); val = (BOOL)SendMessage(hWndActive, SMT_GETATTRIBUTE, SM_MARGINBELL, 0L); CheckDlgButton(hDlg, IDD_MARGINBELL, val); val = MWnd.Cursor; CheckRadioButton(hDlg,IDD_CURSOROFF,IDD_CURSORON,IDD_CURSOROFF + val); val = MWnd.CursorType; CheckRadioButton(hDlg,IDD_CURSORULINE,IDD_CURSORBLOCK,IDD_CURSORULINE+val); CheckDlgButton(hDlg, IDD_CONTROLREP, MWnd.ControlRep); CheckDlgButton(hDlg, IDD_SAVE, FALSE); } static void NEAR SetDisplayBox(HWND hDlg) { WORD val; register int i; register BOOL save = IsDlgButtonChecked(hDlg, IDD_SAVE); val = (IsDlgButtonChecked(hDlg, IDD_AUTOWRAP) ? 1 : 0); SendMessage(hWndActive, SMT_SETATTRIBUTE, SM_AUTOWRAP, (LONG)val); MWnd.Wrap = val; if (save) { Initdata.Wrap = val; SaveInitData(IDS_WRAP, val); } val = (IsDlgButtonChecked(hDlg, IDD_CONTROLREP) ? 1 : 0); MWnd.ControlRep = val; if (val) { if (curproto.atype == 52) vt52SetState(-1); else vt100SetState(-1); SendMessage(hWndActive, SMT_SETATTRIBUTE, SM_AUTOWRAP, (LONG)TRUE); } else { if (curproto.atype == 52) vt52SetState(0); else vt100SetState(0); SendMessage(hWndActive,SMT_SETATTRIBUTE,SM_AUTOWRAP,(LONG)MWnd.Wrap); } if (save) { Initdata.ControlRep = val; SaveInitData(IDS_CONTROLREP, val); } val = (IsDlgButtonChecked(hDlg, IDD_AUTOLFCR) ? 1 : 0); MWnd.LFCR = val; if (save) { Initdata.LFCR = val; SaveInitData(IDS_AUTOLFCR, val); } val = (IsDlgButtonChecked(hDlg, IDD_MARGINBELL) ? 1 : 0); SendMessage(hWndActive, SMT_SETATTRIBUTE, SM_MARGINBELL, (LONG)val); if (save) { Initdata.MarginBell = val; SaveInitData(IDS_MARGINBELL, val); } for (i = IDD_CURSOROFF; i < IDD_CURSORON; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; MWnd.Cursor = i - IDD_CURSOROFF; if (save) { Initdata.Cursor = MWnd.Cursor; SaveInitData(IDS_CURSOR, Initdata.Cursor); } for (i = IDD_CURSORULINE; i < IDD_CURSORBLOCK; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; MWnd.CursorType = i - IDD_CURSORULINE; if (save) { Initdata.CursorType = MWnd.CursorType; SaveInitData(IDS_CURSORTYPE, Initdata.CursorType); } if (save) BroadcastWinIniChange(); } BOOL FAR PASCAL GeneralBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { case WM_INITDIALOG: InitGeneralBox(hDlg); break; case WM_COMMAND: switch (wParam) { case IDD_SCREENCOLOR: if (HIWORD(lParam) == CBN_SELCHANGE) { int scrcolor, textcolor; scrcolor = (int)SendDlgItemMessage(hDlg, IDD_SCREENCOLOR, CB_GETCURSEL, 0, 0L); textcolor = (int)SendDlgItemMessage(hDlg,IDD_TEXTCOLOR, CB_GETCURSEL, 0, 0L); if (scrcolor == textcolor) { int mask; if (MWnd.PelSize == 1) mask = 1; else mask = COLORTABLESIZE - 1; SendDlgItemMessage(hDlg,IDD_TEXTCOLOR,CB_SETCURSEL, ~textcolor & mask, 0L); } } break; case IDD_TEXTCOLOR: if (HIWORD(lParam) == CBN_SELCHANGE) { int scrcolor, textcolor; scrcolor = (int)SendDlgItemMessage(hDlg, IDD_SCREENCOLOR, CB_GETCURSEL, 0, 0L); textcolor = (int)SendDlgItemMessage(hDlg,IDD_TEXTCOLOR, CB_GETCURSEL, 0, 0L); if (scrcolor == textcolor) { int mask; if (MWnd.PelSize == 1) mask = 1; else mask = COLORTABLESIZE - 1; SendDlgItemMessage(hDlg,IDD_SCREENCOLOR, CB_SETCURSEL, ~scrcolor & mask, 0L); } } break; case IDD_VT52: CheckRadioButton(hDlg, IDD_7BITS, IDD_8BITS, IDD_7BITS); EnableWindow(GetDlgItem(hDlg, IDD_8BITS), FALSE); break; case IDD_VT100: EnableWindow(GetDlgItem(hDlg, IDD_8BITS), TRUE); break; case IDOK: SetGeneralBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR InitGeneralBox(HWND hDlg) { register int val; register int i; char buf[80]; for (i = 0; i < COLORTABLESIZE; i++) { if ((MWnd.PelSize == 1) && (i > 0) && (i < COLORTABLESIZE - 1)) continue; LoadString(hInst, IDS_BLACK + i, buf, sizeof(buf)); SendDlgItemMessage(hDlg, IDD_SCREENCOLOR, CB_INSERTSTRING, -1, (LONG)(LPSTR)buf); SendDlgItemMessage(hDlg, IDD_TEXTCOLOR, CB_INSERTSTRING, -1, (LONG)(LPSTR)buf); } val = MWnd.BGColor; if (MWnd.PelSize == 1) val = MWnd.BGColor ? 1 : 0; SendDlgItemMessage(hDlg, IDD_SCREENCOLOR, CB_SETCURSEL, val, 0L); val = MWnd.TextColor; if (MWnd.PelSize == 1) val = MWnd.TextColor ? 1 : 0; SendDlgItemMessage(hDlg, IDD_TEXTCOLOR, CB_SETCURSEL, val, 0L); val = curproto.atype == 52 ? 0 : 1; CheckRadioButton(hDlg, IDD_VT52, IDD_VT100, IDD_VT52 + val); val = curproto.mask == 0x7f ? 0 : 1; CheckRadioButton(hDlg, IDD_7BITS, IDD_8BITS, IDD_7BITS + val); val = MWnd.WarningBell; CheckDlgButton(hDlg, IDD_WARNINGBELL, val); } static void NEAR SetGeneralBox(HWND hDlg) { register int i; int val; register BOOL save = IsDlgButtonChecked(hDlg, IDD_SAVE); val = (IsDlgButtonChecked(hDlg, IDD_WARNINGBELL) ? 1 : 0); MWnd.WarningBell = val; if (save) { Initdata.WarningBell = val; SaveInitData(IDS_WARNINGBELL, val); } for (i = IDD_VT52; i < IDD_VT100; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; SetAlphaParams(i == IDD_VT52 ? 52 : 100); if (save) { Initdata.AlphaEmulation = curproto.atype; SaveInitData(IDS_TERMTYPE, Initdata.AlphaEmulation); } for (i = IDD_7BITS; i < IDD_8BITS; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; curproto.mask = (BYTE)(i == IDD_7BITS ? 0x7f : 0xff); if (save) { Initdata.EWidth = i == IDD_7BITS ? 7 : 8; SaveInitData(IDS_EMULATIONWIDTH, Initdata.EWidth); } MWnd.BGColor = (int)SendDlgItemMessage(hDlg, IDD_SCREENCOLOR, CB_GETCURSEL, 0, 0L); MWnd.TextColor = (int)SendDlgItemMessage(hDlg, IDD_TEXTCOLOR, CB_GETCURSEL, 0, 0L); if (MWnd.PelSize == 1) { MWnd.BGColor = MWnd.BGColor ? COLORTABLESIZE - 1 : 0; MWnd.TextColor = MWnd.TextColor ? COLORTABLESIZE - 1 : 0; } if (save) { Initdata.TextColor = MWnd.TextColor; SaveInitData(IDS_TEXTCOLOR, Initdata.TextColor); Initdata.BGColor = MWnd.BGColor; SaveInitData(IDS_BGCOLOR, Initdata.BGColor); } InvertScreen(MWnd.Reverse); if (save) BroadcastWinIniChange(); } /* dialog box function to edit function key strings */ BOOL FAR PASCAL EditFunctionKeys(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { register int i; switch (message) { case WM_INITDIALOG: CheckRadioButton(hDlg, IDD_F1, IDD_F12, IDD_F6); CheckRadioButton(hDlg,IDD_UNSHIFTED,IDD_CTRLSHIFT,IDD_UNSHIFTED); for (i = IDD_F1; i <= IDD_F12; i++) { if ((i <= IDD_F5) || (i == IDD_F10)) EnableWindow(GetDlgItem(hDlg, i), FALSE); else EnableWindow(GetDlgItem(hDlg, i), TRUE); } SendDlgItemMessage(hDlg,IDD_STRINGEDIT,EM_LIMITTEXT,80,0L); StringOp(hDlg, IDOK+1); break; case WM_COMMAND: switch (wParam) { case IDD_F1: case IDD_F2: case IDD_F3: case IDD_F4: case IDD_F5: case IDD_F6: case IDD_F7: case IDD_F8: case IDD_F9: case IDD_F10: case IDD_F11: case IDD_F12: CheckRadioButton(hDlg, IDD_F1, IDD_F12, wParam); StringOp(hDlg, wParam); break; case IDD_UNSHIFTED: CheckRadioButton(hDlg, IDD_F1, IDD_F12, IDD_F6); CheckRadioButton(hDlg,IDD_UNSHIFTED,IDD_CTRLSHIFT,wParam); for (i = IDD_F1; i <= IDD_F12; i++) { if ((i <= IDD_F5) || (i == IDD_F10)) EnableWindow(GetDlgItem(hDlg, i), FALSE); else EnableWindow(GetDlgItem(hDlg, i), TRUE); } StringOp(hDlg, wParam); break; case IDD_SHIFT: case IDD_CONTROL: case IDD_CTRLSHIFT: CheckRadioButton(hDlg, IDD_F1, IDD_F12, IDD_F1); CheckRadioButton(hDlg,IDD_UNSHIFTED,IDD_CTRLSHIFT,wParam); for (i = IDD_F1; i <= IDD_F12; i++) { if ((i == IDD_F5) || (i == IDD_F10)) EnableWindow(GetDlgItem(hDlg, i), FALSE); else EnableWindow(GetDlgItem(hDlg, i), TRUE); } if (wParam == IDD_CTRLSHIFT) EnableWindow(GetDlgItem(hDlg, IDD_F5), TRUE); StringOp(hDlg, wParam); break; /* case IDD_STRINGEDIT: if (HIWORD(lParam) == EN_CHANGE) { i = (int)SendDlgItemMessage(hDlg,wParam, WM_GETTEXTLENGTH,0,0L); EnableWindow(GetDlgItem(hDlg, IDOK), i); } break; */ case IDOK: StringOp(hDlg, wParam); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; default: return FALSE; } break; default: return FALSE; } return TRUE; } /* support function for function key edit dialog box */ static void NEAR StringOp(HWND hDlg, WORD param) { register int index, i; char fstring[80]; char *ptr; index = 0; for (i = IDD_F1; i <= IDD_F12; i++) if (SendDlgItemMessage(hDlg,i,BM_GETCHECK,0,0L)) { index = i - IDD_F1; break; } for (i = IDD_UNSHIFTED; i <= IDD_CTRLSHIFT; i++) if (SendDlgItemMessage(hDlg,i,BM_GETCHECK,0,0L)) { switch (i) { default: case IDD_UNSHIFTED: ptr = szFKey[index]; break; case IDD_SHIFT: ptr = szSFKey[index]; break; case IDD_CONTROL: ptr = szCFKey[index]; break; case IDD_CTRLSHIFT: ptr = szCSFKey[index]; break; } break; } if (param == IDOK) { SetFocus(GetDlgItem(hDlg,IDOK)); GetDlgItemText(hDlg, IDD_STRINGEDIT, (LPSTR)fstring, 80); WritePrivateProfileString(szAppName,ptr,fstring,szIniName); BroadcastWinIniChange(); SetDlgItemText(hDlg,IDD_STRINGEDIT,(LPSTR)fstring); SetFocus(GetDlgItem(hDlg,IDD_STRINGEDIT)); } else { GetPrivateProfileString((LPSTR)szAppName,(LPSTR)ptr, (LPSTR)"",(LPSTR)fstring,80, szIniName); SetDlgItemText(hDlg,IDD_STRINGEDIT,(LPSTR)fstring); SendDlgItemMessage(hDlg,IDD_STRINGEDIT,EM_SETSEL,0,MAKELONG(0,32767)); } } BOOL FAR PASCAL KeyboardBoxProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam) { switch (message) { case WM_INITDIALOG: InitKeyboardBox(hDlg); break; case WM_COMMAND: switch (wParam) { case IDD_KEYPADNUMERIC: case IDD_KEYPADAPPL: CheckRadioButton(hDlg,IDD_KEYPADNUMERIC, IDD_KEYPADAPPL,wParam); break; case IDD_CURKEYSNORMAL: case IDD_CURKEYSAPPL: CheckRadioButton(hDlg,IDD_CURKEYSNORMAL, IDD_CURKEYSAPPL,wParam); break; case IDD_BKSPNORMAL: case IDD_BKSPDELETE: CheckRadioButton(hDlg,IDD_BKSPNORMAL, IDD_BKSPDELETE,wParam); break; case IDD_AUTOANSWER: case IDD_BREAKKEY: case IDD_SAVE: if (IsDlgButtonChecked(hDlg, wParam)) CheckDlgButton(hDlg, wParam, FALSE); else CheckDlgButton(hDlg, wParam, TRUE); break; case IDOK: SetKeyboardBox(hDlg); EndDialog(hDlg,TRUE); break; case IDCANCEL: EndDialog(hDlg,FALSE); break; default: return FALSE; /* we did not process */ } break; default: return FALSE; } return TRUE; /* we processed message */ } static void NEAR InitKeyboardBox(HWND hDlg) { register int val; char buf[80]; char key[20]; val = MWnd.ApplMode + IDD_KEYPADNUMERIC; CheckRadioButton(hDlg,IDD_KEYPADNUMERIC,IDD_KEYPADAPPL, val); val = IDD_CURKEYSNORMAL + MWnd.CurKeyMode; CheckRadioButton(hDlg,IDD_CURKEYSNORMAL,IDD_CURKEYSAPPL, val); val = IDD_BKSPNORMAL + MWnd.DeleteKey; CheckRadioButton(hDlg,IDD_BKSPNORMAL,IDD_BKSPDELETE, val); CheckDlgButton(hDlg, IDD_BREAKKEY, MWnd.BreakEnabled); CheckDlgButton(hDlg, IDD_AUTOANSWER, MWnd.AutoAnswer); SendDlgItemMessage(hDlg,IDD_ANSWERBACK,EM_LIMITTEXT,80,0L); LoadString(hInst,IDS_ANSWERBACKKEY,(LPSTR)key,sizeof(key)); GetPrivateProfileString((LPSTR)szAppName,(LPSTR)key, (LPSTR)"",buf, sizeof(buf),szIniName); SetDlgItemText(hDlg, IDD_ANSWERBACK, buf); } static void NEAR SetKeyboardBox(HWND hDlg) { register int i, val; BOOL save = IsDlgButtonChecked(hDlg, IDD_SAVE); char szKeyStr[80]; char szValStr[80]; for (i = IDD_KEYPADNUMERIC; i < IDD_KEYPADAPPL; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; MWnd.ApplMode = i - IDD_KEYPADNUMERIC; if (save) { Initdata.AltKeypad = MWnd.ApplMode; SaveInitData(IDS_ALTKEYPAD, Initdata.AltKeypad); } for (i = IDD_CURKEYSNORMAL; i < IDD_CURKEYSAPPL; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; MWnd.CurKeyMode = i - IDD_CURKEYSNORMAL; if (save) { Initdata.CursorKeys = MWnd.CurKeyMode; SaveInitData(IDS_CURSORKEYS, Initdata.CursorKeys); } for (i = IDD_BKSPNORMAL; i < IDD_BKSPDELETE; i++) if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) break; MWnd.DeleteKey = i - IDD_BKSPNORMAL; if (save) { Initdata.DeleteKey = MWnd.DeleteKey; SaveInitData(IDS_DELETEKEY, Initdata.DeleteKey); } val = (IsDlgButtonChecked(hDlg, IDD_BREAKKEY) ? 1 : 0); MWnd.BreakEnabled = val; if (save) { Initdata.BreakEnabled = val; SaveInitData(IDS_BREAKKEYENABLED, val); } val = (IsDlgButtonChecked(hDlg, IDD_AUTOANSWER) ? 1 : 0); MWnd.AutoAnswer = val; if (save) { Initdata.AutoAnswer = val; SaveInitData(IDS_AUTOANSWER, val); } LoadString(hInst,IDS_ANSWERBACKKEY,(LPSTR)szKeyStr,sizeof(szKeyStr)); GetDlgItemText(hDlg, IDD_ANSWERBACK, (LPSTR)szValStr, sizeof(szValStr)); WritePrivateProfileString(szAppName, szKeyStr, szValStr, szIniName); BroadcastWinIniChange(); } CBInsertString(HWND hDlg, int id, int index, char * buf) { return (int)SendDlgItemMessage(hDlg, (unsigned)id, CB_INSERTSTRING, (WORD)index, (LONG)(LPSTR)buf); } CBSetCursel(HWND hDlg, int id, int index) { return (int)SendDlgItemMessage(hDlg,(unsigned)id, CB_SETCURSEL,(WORD)index,0L); } CBGetCursel(HWND hDlg, int id) { return (int)SendDlgItemMessage(hDlg,(unsigned)id,CB_GETCURSEL,0,0L); } static void NEAR SaveInitData(int id, int val) { char szKeyStr[80]; char buf[40]; LoadString(hInst, id, szKeyStr, sizeof(szKeyStr)); WritePrivateProfileString(szAppName,szKeyStr,itoa(val,buf,10),szIniName); }