From 2cec8d9d6542ef8ac5c57131e4b74cbaf1e11d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 6 Apr 2005 11:14:57 +0000 Subject: [PATCH] Saveliy Tretiakov - Started serialui dll - Implemented drvCommConfigDialogA and drvCommConfigDialogW svn path=/trunk/; revision=14525 --- reactos/Makefile | 2 +- reactos/bootdata/packages/reactos.dff | 1 + reactos/lib/serialui/Makefile | 36 +++ reactos/lib/serialui/resource.h | 32 ++ reactos/lib/serialui/serialui.c | 440 ++++++++++++++++++++++++++ reactos/lib/serialui/serialui.def | 10 + reactos/lib/serialui/serialui.h | 74 +++++ reactos/lib/serialui/serialui.rc | 48 +++ 8 files changed, 642 insertions(+), 1 deletion(-) create mode 100644 reactos/lib/serialui/Makefile create mode 100644 reactos/lib/serialui/resource.h create mode 100644 reactos/lib/serialui/serialui.c create mode 100644 reactos/lib/serialui/serialui.def create mode 100644 reactos/lib/serialui/serialui.h create mode 100644 reactos/lib/serialui/serialui.rc diff --git a/reactos/Makefile b/reactos/Makefile index e823ac2cf65..7a3a455bece 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -61,7 +61,7 @@ DLLS_SHELLEXT = shellext DLLS = acledit aclui advapi32 advpack cabinet cards comctl32 crtdll comdlg32 d3d8thk dbghelp expat fmifs freetype \ gdi32 gdiplus glu32 hid imagehlp imm32 iphlpapi kernel32 lzexpand mesa32 midimap mmdrv mpr msacm msafd \ msgina msi msimg32 msvcrt20 msvideo mswsock netapi32 ntdll ole32 oleaut32 oledlg olepro32 opengl32 \ - packet psapi riched20 richedit rpcrt4 samlib secur32 setupapi shell32 shlwapi smlib smdll snmpapi \ + packet psapi riched20 richedit rpcrt4 samlib secur32 serialui setupapi shell32 shlwapi smlib smdll snmpapi \ syssetup twain user32 userenv version wininet winmm winspool ws2help ws2_32 wsock32 wshirda dnsapi \ urlmon shdocvw dinput dinput8 dxdiagn devenum dsound lsasrv $(DLLS_KBD) $(DLLS_CPL) $(DLLS_SHELLEXT) diff --git a/reactos/bootdata/packages/reactos.dff b/reactos/bootdata/packages/reactos.dff index b05c05f3f4c..5c5eb723e58 100755 --- a/reactos/bootdata/packages/reactos.dff +++ b/reactos/bootdata/packages/reactos.dff @@ -115,6 +115,7 @@ lib\richedit\riched32.dll 1 lib\rpcrt4\rpcrt4.dll 1 lib\samlib\samlib.dll 1 lib\secur32\secur32.dll 1 +lib\serialui\serialui.dll 1 lib\setupapi\setupapi.dll 1 lib\shdocvw\shdocvw.dll 1 lib\shell32\shell32.dll 1 diff --git a/reactos/lib/serialui/Makefile b/reactos/lib/serialui/Makefile new file mode 100644 index 00000000000..829ba3edd62 --- /dev/null +++ b/reactos/lib/serialui/Makefile @@ -0,0 +1,36 @@ + +PATH_TO_TOP = ../.. + +TARGET_TYPE = dynlink + +TARGET_NAME = serialui + +TARGET_BASE = $(TARGET_BASE_LIB_SERIALUI) + +TARGET_CFLAGS = \ + -I./include \ + -Wall \ + -Werror \ + -fno-builtin \ + -DUNICODE \ + -DLE \ + -DDBG \ + -D__USE_W32API + +TARGET_LFLAGS = -nostartfiles -nostdlib + +TARGET_SDKLIBS = kernel32.a user32.a shlwapi.a + +TARGET_OBJECTS = serialui.o + +DEP_OBJECTS := $(TARGET_OBJECTS) + +TARGET_CLEAN = $(DEP_FILES) + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +include $(TOOLS_PATH)/depend.mk + +# EOF diff --git a/reactos/lib/serialui/resource.h b/reactos/lib/serialui/resource.h new file mode 100644 index 00000000000..05402aa02a5 --- /dev/null +++ b/reactos/lib/serialui/resource.h @@ -0,0 +1,32 @@ +#define IDS_EVENPARITY 2001 +#define IDS_MARKPARITY 2002 +#define IDS_NOPARITY 2003 +#define IDS_ODDPARITY 2004 +#define IDS_SPACEPARITY 2005 + +#define IDS_ONESTOPBIT 2006 +#define IDS_ONE5STOPBITS 2007 +#define IDS_TWOSTOPBITS 2008 + +#define IDS_FC_NO 2009 +#define IDS_FC_CTSRTS 2010 +#define IDS_FC_XONXOFF 2011 + +#define IDS_TITLE 2012 + +#define IDD_COMMDLG 1000 +#define IDC_GRP1 1001 +#define IDC_OKBTN 1002 +#define IDC_CANCELBTN 1003 +#define IDC_BTN 1004 +#define IDC_STC1 1005 +#define IDC_STC2 1006 +#define IDC_STC3 1007 +#define IDC_STC4 1008 +#define IDC_STC5 1009 +#define IDC_BAUDRATE 1010 +#define IDC_BYTESIZE 1011 +#define IDC_PARITY 1012 +#define IDC_STOPBITS 1013 +#define IDC_FLOW 1014 +#define IDC_RESTOREBTN 1015 diff --git a/reactos/lib/serialui/serialui.c b/reactos/lib/serialui/serialui.c new file mode 100644 index 00000000000..7a9235bea52 --- /dev/null +++ b/reactos/lib/serialui/serialui.c @@ -0,0 +1,440 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS SerialUI DLL + * FILE: serialui.c + * PUROPSE: A dialog box to cunfigure COM port. + * Functions to set(and get too) default configuration. + * PROGRAMMERS: Saveliy Tretiakov (saveliyt@mail.ru) + * REVISIONS: + * ST (05/04/2005) Created. Implemented drvCommConfigDialog. + */ + +#include + +static HINSTANCE hDllInstance; + +/************************************ + * + * DATA + * + ************************************/ + +struct +{ + DWORD Baud; + CHAR *Str; +} Bauds[] = +{ + { CBR_110, "110" }, + { CBR_300, "300" }, + { CBR_600, "600" }, + { CBR_1200, "1200" }, + { CBR_2400, "2400" }, + { CBR_4800, "4800" }, + { CBR_9600, "9600" }, + { CBR_14400, "14400" }, + { CBR_19200, "19200" }, + { CBR_38400, "38400" }, + { CBR_56000, "56000" }, + { CBR_57600, "57600" }, + { CBR_115200, "115200" }, + { CBR_128000, "128000" }, + { CBR_256000, "256000" }, + { 0, 0 } +}; + +struct +{ + BYTE ByteSize; + CHAR *Str; +} ByteSizes[] = +{ + { 5, "5" }, + { 6, "6" }, + { 7, "7" }, + { 8, "8" }, + { 0, 0 } +}; + +struct +{ + BYTE Parity; + UINT StrId; +} Paritys[] = +{ + { EVENPARITY, IDS_EVENPARITY }, + { MARKPARITY, IDS_MARKPARITY }, + { NOPARITY, IDS_NOPARITY }, + { ODDPARITY, IDS_ODDPARITY }, + { SPACEPARITY, IDS_SPACEPARITY }, + { 0, 0 } +}; + +struct +{ + BYTE StopBit; + UINT StrId; +} StopBits[] = +{ + { ONESTOPBIT, IDS_ONESTOPBIT }, + { ONE5STOPBITS, IDS_ONE5STOPBITS }, + { TWOSTOPBITS, IDS_TWOSTOPBITS }, + { 0, 0 } +}; + + +/************************************ + * + * DLLMAIN + * + ************************************/ + +BOOL +STDCALL +DllMain(HINSTANCE hInstance, + DWORD dwReason, + LPVOID reserved) +{ + if(dwReason==DLL_PROCESS_ATTACH) + { + hDllInstance = hInstance; + } + else if(dwReason==DLL_THREAD_ATTACH) + { + DisableThreadLibraryCalls(hInstance); + } + + return TRUE; +} + + +/************************************ + * + * EXPORTS + * + ************************************/ + +/* + * @implemented + */ +BOOL WINAPI drvCommConfigDialogW(LPCWSTR lpszDevice, + HWND hWnd, + LPCOMMCONFIG lpCommConfig) +{ + DIALOG_INFO DialogInfo; + + if(!lpszDevice || !lpCommConfig) + { + return FALSE; + } + + DialogInfo.lpszDevice = lpszDevice; + DialogInfo.lpCC = lpCommConfig; + + return DialogBoxParamW(hDllInstance, MAKEINTRESOURCEW(IDD_COMMDLG), + hWnd, (DLGPROC)CommDlgProc, (LPARAM)&DialogInfo); +} + +/* + * @implemented + */ +BOOL WINAPI drvCommConfigDialogA(LPCSTR lpszDevice, + HWND hWnd, + LPCOMMCONFIG lpCommConfig) +{ + BOOL result; + UINT len; + WCHAR *wstr; + + len = MultiByteToWideChar(CP_ACP, 0, lpszDevice, -1, NULL, 0); + if((wstr = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)))) + { + MultiByteToWideChar(CP_ACP, 0, lpszDevice, -1, wstr, len); + result = drvCommConfigDialogW(wstr, hWnd, lpCommConfig); + HeapFree(GetProcessHeap(), 0, wstr); + return result; + } + else + return FALSE; +} + +/* + * @unimplemented + */ +BOOL WINAPI drvSetDefaultCommConfigW(LPCWSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + DWORD dwSize) +{ + UNIMPLEMENTED +} + +/* + * @unimplemented + */ +BOOL WINAPI drvSetDefaultCommConfigA(LPCSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + DWORD dwSize) +{ + UNIMPLEMENTED +} + +/* + * @unimplemented + */ +BOOL WINAPI drvGetDefaultCommConfigW(LPCWSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + LPDWORD lpdwSize) +{ + UNIMPLEMENTED +} + +/* + * @unimplemented + */ +BOOL WINAPI drvGetDefaultCommConfigA(LPCSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + LPDWORD lpdwSize) +{ + UNIMPLEMENTED +} + + +/************************************ + * + * INTERNALS + * + ************************************/ + +LRESULT CommDlgProc(HWND hDlg, + UINT Msg, + WPARAM wParam, + LPARAM lParam) +{ + LPDIALOG_INFO lpDlgInfo = NULL; + HWND hBox; + + switch (Msg) + { + + case WM_INITDIALOG: + { + WCHAR wstr[255], *format; + CHAR str[255]; + RECT rc, rcDlg, rcOwner; + HWND hOwner; + INT i, len; + + lpDlgInfo = (LPDIALOG_INFO)lParam; + SetWindowLong(hDlg, DWL_USER, (LONG)lpDlgInfo); + + /* Set title */ + LoadStringA(hDllInstance, IDS_TITLE, str, 254); + len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); + if((format = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)))) + { + MultiByteToWideChar(CP_ACP, 0, str, -1, format, len); + wnsprintfW(wstr, 254, format, lpDlgInfo->lpszDevice); + HeapFree(GetProcessHeap(), 0, format); + SetWindowTextW(hDlg, wstr); + } + + if(!(hOwner = GetParent(hDlg))) + hOwner = GetDesktopWindow(); + + /* Position dialog in the center of owner window */ + GetWindowRect(hOwner, &rcOwner); + GetWindowRect(hDlg, &rcDlg); + CopyRect(&rc, &rcOwner); + OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); + SetWindowPos(hDlg, HWND_TOP, + rcOwner.left + (rc.right / 2), + rcOwner.top + (rc.bottom / 2), + 0, 0, SWP_NOSIZE); + + /* Initialize baud rate combo */ + if(!(hBox = GetDlgItem(hDlg, IDC_BAUDRATE))) + EndDialog(hDlg, 0); + + for(i = 0; Bauds[i].Str; i++) + { + SendMessageA(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)Bauds[i].Str); + if(Bauds[i].Baud == lpDlgInfo->lpCC->dcb.BaudRate) + SendMessageA(hBox, CB_SETCURSEL, (WPARAM)i, 0); + } + + if(SendMessage(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) + SendMessageA(hBox, CB_SETCURSEL, DEFAULT_BAUD_INDEX, 0); + + /* Initialize byte size combo */ + if(!(hBox = GetDlgItem(hDlg, IDC_BYTESIZE))) + EndDialog(hDlg, 0); + + for(i = 0; ByteSizes[i].Str; i++) + { + SendMessageA(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)ByteSizes[i].Str); + if(ByteSizes[i].ByteSize == lpDlgInfo->lpCC->dcb.ByteSize) + SendMessageA(hBox, CB_SETCURSEL, (WPARAM)i, 0); + } + + if(SendMessage(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) + SendMessageA(hBox, CB_SETCURSEL, DEFAULT_BYTESIZE_INDEX, 0); + + /* Initialize parity combo */ + if(!(hBox = GetDlgItem(hDlg, IDC_PARITY))) + EndDialog(hDlg, 0); + + for(i = 0; Paritys[i].StrId; i++) + { + if(LoadStringA(hDllInstance, Paritys[i].StrId, str, 254)) + { + SendMessageA(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)str); + if(Paritys[i].Parity == lpDlgInfo->lpCC->dcb.Parity) + SendMessageA(hBox, CB_SETCURSEL, (WPARAM)i, 0); + } + } + + if(SendMessage(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) + SendMessageA(hBox, CB_SETCURSEL, DEFAULT_PARITY_INDEX, 0); + + /* Initialize stop bits combo */ + if(!(hBox = GetDlgItem(hDlg, IDC_STOPBITS))) + EndDialog(hDlg, 0); + + for(i = 0; StopBits[i].StrId; i++) + { + if(LoadStringA(hDllInstance,StopBits[i].StrId, str, 254)) + { + SendMessageA(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)str); + if(StopBits[i].StopBit == lpDlgInfo->lpCC->dcb.StopBits) + SendMessageA(hBox, CB_SETCURSEL, (WPARAM)i, 0); + } + } + + if(SendMessage(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) + SendMessageA(hBox, CB_SETCURSEL, DEFAULT_STOPBITS_INDEX, 0); + + /* Initialize flow control combo */ + if(!(hBox = GetDlgItem(hDlg, IDC_FLOW))) + EndDialog(hDlg, 0); + + if(LoadStringA(hDllInstance,IDS_FC_NO, str, 254)) + { + SendMessageA(hBox, CB_INSERTSTRING, 0, (LPARAM)str); + SendMessageA(hBox, CB_SETCURSEL, 0, 0); + lpDlgInfo->InitialFlowIndex = 0; + } + + + if(LoadStringA(hDllInstance,IDS_FC_CTSRTS, str, 254)) + { + SendMessageA(hBox, CB_INSERTSTRING, 1, (LPARAM)str); + if(lpDlgInfo->lpCC->dcb.fRtsControl == RTS_CONTROL_HANDSHAKE + || lpDlgInfo->lpCC->dcb.fOutxCtsFlow == TRUE) + { + SendMessageA(hBox, CB_SETCURSEL, 1, 0); + lpDlgInfo->InitialFlowIndex = 1; + } + } + + if(LoadStringA(hDllInstance,IDS_FC_XONXOFF, str, 254)) + { + SendMessageA(hBox, CB_INSERTSTRING, 2, (LPARAM)str); + if(lpDlgInfo->lpCC->dcb.fOutX || lpDlgInfo->lpCC->dcb.fInX) + { + SendMessageA(hBox, CB_SETCURSEL, 2, 0); + lpDlgInfo->InitialFlowIndex = 2; + } + } + + /* Set focus */ + SetFocus(GetDlgItem(hDlg, IDC_OKBTN)); + + return FALSE; + } /* WM_INITDIALOG */ + + case WM_COMMAND: + { + switch(wParam) + { + case IDC_CANCELBTN: + EndDialog(hDlg, FALSE); + break; + case IDC_OKBTN: + OkButton(hDlg); + EndDialog(hDlg, TRUE); + break; + } + return TRUE; + } /* WM_COMMAND */ + + case WM_CLOSE: + { + EndDialog(hDlg, FALSE); + return TRUE; + } /* WM_CLOSE */ + + default: + return FALSE; + } + +} + + +VOID OkButton(HWND hDlg) +{ + LPDIALOG_INFO lpDlgInfo; + UINT Index; + + lpDlgInfo = (LPDIALOG_INFO) GetWindowLong(hDlg, DWL_USER); + + /* Baud rate */ + Index = SendMessage(GetDlgItem(hDlg, IDC_BAUDRATE), CB_GETCURSEL, 0, 0); + lpDlgInfo->lpCC->dcb.BaudRate = Bauds[Index].Baud; + + /* Byte size */ + Index = SendMessage(GetDlgItem(hDlg, IDC_BYTESIZE), CB_GETCURSEL, 0, 0); + lpDlgInfo->lpCC->dcb.ByteSize = ByteSizes[Index].ByteSize; + + /* Parity */ + Index = SendMessage(GetDlgItem(hDlg, IDC_PARITY), CB_GETCURSEL, 0, 0); + lpDlgInfo->lpCC->dcb.Parity = Paritys[Index].Parity; + + /* Stop bits */ + Index = SendMessage(GetDlgItem(hDlg, IDC_STOPBITS), CB_GETCURSEL, 0, 0); + lpDlgInfo->lpCC->dcb.StopBits = StopBits[Index].StopBit; + + /* Flow Control */ + Index = SendMessage(GetDlgItem(hDlg, IDC_FLOW), CB_GETCURSEL, 0, 0); + if(lpDlgInfo->InitialFlowIndex != Index) + { + switch(Index) + { + case 0: /* NO */ + lpDlgInfo->lpCC->dcb.fDtrControl = DTR_CONTROL_DISABLE; + lpDlgInfo->lpCC->dcb.fRtsControl = RTS_CONTROL_DISABLE; + lpDlgInfo->lpCC->dcb.fOutxCtsFlow = FALSE; + lpDlgInfo->lpCC->dcb.fOutxDsrFlow = FALSE; + lpDlgInfo->lpCC->dcb.fOutX = FALSE; + lpDlgInfo->lpCC->dcb.fInX = FALSE; + break; + case 1: /* CTS/RTS */ + lpDlgInfo->lpCC->dcb.fDtrControl = DTR_CONTROL_DISABLE; + lpDlgInfo->lpCC->dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; + lpDlgInfo->lpCC->dcb.fOutxCtsFlow = TRUE; + lpDlgInfo->lpCC->dcb.fOutxDsrFlow = FALSE; + lpDlgInfo->lpCC->dcb.fOutX = FALSE; + lpDlgInfo->lpCC->dcb.fInX = FALSE; + break; + case 2: /* XON/XOFF */ + lpDlgInfo->lpCC->dcb.fDtrControl = DTR_CONTROL_DISABLE; + lpDlgInfo->lpCC->dcb.fRtsControl = RTS_CONTROL_DISABLE; + lpDlgInfo->lpCC->dcb.fOutxCtsFlow = FALSE; + lpDlgInfo->lpCC->dcb.fOutxDsrFlow = FALSE; + lpDlgInfo->lpCC->dcb.fOutX = TRUE; + lpDlgInfo->lpCC->dcb.fInX = TRUE; + break; + } + } +} diff --git a/reactos/lib/serialui/serialui.def b/reactos/lib/serialui/serialui.def new file mode 100644 index 00000000000..2b38aba9813 --- /dev/null +++ b/reactos/lib/serialui/serialui.def @@ -0,0 +1,10 @@ +LIBRARY serialui.dll + +EXPORTS +drvCommConfigDialogW@12 +drvCommConfigDialogA@12 +drvSetDefaultCommConfigW@12 +drvSetDefaultCommConfigA@12 +drvGetDefaultCommConfigW@12 +drvGetDefaultCommConfigA@12 + diff --git a/reactos/lib/serialui/serialui.h b/reactos/lib/serialui/serialui.h new file mode 100644 index 00000000000..753039a134e --- /dev/null +++ b/reactos/lib/serialui/serialui.h @@ -0,0 +1,74 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS SerialUI DLL + * FILE: serialui.h + * PURPOSE: header file + * PROGRAMMERS: Saveliy Tretiakov (saveliyt@mail.ru) + */ + +#include +#include +#include "resource.h" + +#define UNIMPLEMENTED \ + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ + return FALSE; + +#define DEFAULT_BAUD_INDEX 6 +#define DEFAULT_BYTESIZE_INDEX 3 +#define DEFAULT_PARITY_INDEX 2 +#define DEFAULT_STOPBITS_INDEX 0 + +typedef struct _DIALOG_INFO +{ + LPCWSTR lpszDevice; + UINT InitialFlowIndex; + LPCOMMCONFIG lpCC; +} DIALOG_INFO, *LPDIALOG_INFO; + + +/************************************ + * + * EXPORTS + * + ************************************/ + +BOOL WINAPI drvCommConfigDialogW(LPCWSTR lpszDevice, + HWND hWnd, + LPCOMMCONFIG lpCommConfig); + +BOOL WINAPI drvCommConfigDialogA(LPCSTR lpszDevice, + HWND hWnd, + LPCOMMCONFIG lpCommConfig); + +BOOL WINAPI drvSetDefaultCommConfigW(LPCWSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + DWORD dwSize); + +BOOL WINAPI drvSetDefaultCommConfigA(LPCSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + DWORD dwSize); + +BOOL WINAPI drvGetDefaultCommConfigW(LPCWSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + LPDWORD lpdwSize); + +BOOL WINAPI drvGetDefaultCommConfigA(LPCSTR lpszDevice, + LPCOMMCONFIG lpCommConfig, + LPDWORD lpdwSize); + + +/************************************ + * + * INTERNALS + * + ************************************/ + +LRESULT CommDlgProc(HWND hDlg, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + +VOID OkButton(HWND hDlg); + + diff --git a/reactos/lib/serialui/serialui.rc b/reactos/lib/serialui/serialui.rc new file mode 100644 index 00000000000..75adeb61db1 --- /dev/null +++ b/reactos/lib/serialui/serialui.rc @@ -0,0 +1,48 @@ +#include "resource.h" + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS SerialUI DLL\0" +#define REACTOS_STR_INTERNAL_NAME "serialui\0" +#define REACTOS_STR_ORIGINAL_FILENAME "serialui.dll\0" +#include + + +STRINGTABLE LOADONCALL DISCARDABLE +BEGIN + IDS_EVENPARITY, "Even" + IDS_MARKPARITY, "Mark" + IDS_NOPARITY, "No parity" + IDS_ODDPARITY, "Odd" + IDS_SPACEPARITY, "Space" + + IDS_ONESTOPBIT, "1 stop bit" + IDS_ONE5STOPBITS, "1.5 stop bits" + IDS_TWOSTOPBITS, "2 stop bits" + + IDS_FC_NO, "No" + IDS_FC_CTSRTS, "CTS/RTS" + IDS_FC_XONXOFF, "XON/XOFF" + + IDS_TITLE, "Properties for %s" +END + +IDD_COMMDLG DIALOGEX 6,5,222,175 +FONT 8,"MS Sans Serif" +STYLE 0x10C80080 +EXSTYLE 0x00000001 +BEGIN + CONTROL "",IDC_GRP1,"Button",0x50000007,6,5,210,146,0x00000000 + CONTROL "OK",IDC_OKBTN,"Button",0x50010000,98,156,56,13,0x00000000 + CONTROL "Cancel",IDC_CANCELBTN,"Button",0x50010000,158,156,56,13,0x00000000 + CONTROL "Baud rate:",IDC_STC1,"Static",0x50000000,24,31,42,9,0x00000000 + CONTROL "Byte size:",IDC_STC2,"Static",0x50000000,24,53,42,9,0x00000000 + CONTROL "Parity:",IDC_STC3,"Static",0x50000000,24,73,42,9,0x00000000 + CONTROL "Stop bits:",IDC_STC4,"Static",0x50000000,24,96,42,9,0x00000000 + CONTROL "Flow control:",IDC_STC5,"Static",0x50000000,24,120,42,9,0x00000000 + CONTROL "",IDC_BAUDRATE,"ComboBox",0x50210003,98,29,100,50,0x00000000 + CONTROL "",IDC_BYTESIZE,"ComboBox",0x50210003,98,49,100,50,0x00000000 + CONTROL "",IDC_PARITY,"ComboBox",0x50210003,98,72,100,50,0x00000000 + CONTROL "",IDC_STOPBITS,"ComboBox",0x50210003,98,94,100,50,0x00000000 + CONTROL "",IDC_FLOW,"ComboBox",0x50210003,98,116,100,50,0x00000000 +END +