Use new XP_TriEnable type; begin work to support bluetooth by tracking

connType and adding choice how to connect.  Bt connect dialog is
invoked, but the fields won't be populated.  Pass conn type into
socket constructor, assuming socket code doesn't change much to use BT
rather than TCP.
This commit is contained in:
ehouse 2006-10-28 14:56:04 +00:00
parent 189b2ec0ff
commit e5e36f0fa4
10 changed files with 211 additions and 62 deletions

View file

@ -28,12 +28,14 @@ MINGW_INC_PATH ?= /usr/i586-mingw32msvc/include
HAVE_COMMCTRL = 1
ifeq ($(TARGET_OS),wince)
BLUETOOTH = -DXWFEATURE_BLUETOOTH
RELAY = -DXWFEATURE_RELAY
CC = arm-wince-pe-gcc
WINDRES = arm-wince-pe-windres
STRIP = arm-wince-pe-strip
CELIBS = -L/usr/arm-wince-pe/lib
TARGET_OS_DEF = -DTARGET_OS_WINCE
STANDALONE = -DXWFEATURE_STANDALONE_ONLY
#STANDALONE = -DXWFEATURE_STANDALONE_ONLY
CFLAGS += -D_WIN32_WCE=400 -DUNDER_CE -DMY_COLOR_SEL \
$(STANDALONE) -DDRAW_LINK_DIRECT \
-fdollars-in-identifiers -D__W32API_USE_DLLIMPORT__
@ -42,16 +44,18 @@ LFLAGS += -Wl,--major-subsystem-version,4,--minor-subsystem-version,20
ifdef HAVE_COMMCTRL
CELIBS += -lcommctrl -laygshell
else
CFLAGS += -DCANT_DO_CMDBAR -DXWFEATURE_RELAY
CFLAGS += -DCANT_DO_CMDBAR
endif
else # ifeq ($(TARGET_OS),wince)
ifeq ($(TARGET_OS),win32)
BLUETOOTH = -DXWFEATURE_BLUETOOTH
RELAY = -DXWFEATURE_RELAY
CC = i586-mingw32msvc-gcc
WINDRES = i586-mingw32msvc-windres
STRIP = i586-mingw32msvc-strip
TARGET_OS_DEF = -DTARGET_OS_WIN32
CELIBS += -lws2_32
CFLAGS += -DCANT_DO_CMDBAR -DXWFEATURE_RELAY -DDRAW_LINK_DIRECT
CFLAGS += -DCANT_DO_CMDBAR -DDRAW_LINK_DIRECT
#CFLAGS += -DFORCE_HEIGHT=240 -DFORCE_WIDTH=320
endif
endif
@ -60,6 +64,8 @@ CFLAGS += -DARM -I$(MINGW_INC_PATH) -I./ -I../common -I../relay
CFLAGS += -Wall -Wunused-parameter
CFLAGS += $(BLUETOOTH) $(RELAY)
SVNDEF = -DSVN_REV='\"$(SVNREV)\"'
CFLAGS += $(SVNDEF)
RESFLAGS += $(SVNDEF)
@ -121,7 +127,7 @@ XW_BOTH_DEFINES = \
$(DEBUG_FLAG) $(MEM_DEBUG_FLAG) \
CFLAGS += $(XW_BOTH_DEFINES) -DARM
RESFLAGS += $(XW_BOTH_DEFINES) $(STANDALONE) \
RESFLAGS += $(XW_BOTH_DEFINES) $(STANDALONE) $(BLUETOOTH) $(RELAY) \
-D_WIN32 -D_WIN32_IE=0x0400
####################################################################

View file

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
#include "cecondlg.h"
#include "ceutil.h"
@ -28,39 +28,137 @@ ceControlsToAddrRec( HWND hDlg, CeConnDlgState* cState )
{
XP_U16 len;
len = sizeof(cState->addrRec.u.ip_relay.hostName);
ceGetDlgItemText( hDlg, RELAYNAME_EDIT,
cState->addrRec.u.ip_relay.hostName, &len );
cState->addrRec.u.ip_relay.port =
(XP_U16)ceGetDlgItemNum( hDlg, RELAYPORT_EDIT );
len = sizeof(cState->addrRec.u.ip_relay.cookie);
ceGetDlgItemText( hDlg, COOKIE_EDIT, cState->addrRec.u.ip_relay.cookie,
&len );
if ( cState->addrRec.conType == COMMS_CONN_RELAY ) {
#ifdef XWFEATURE_RELAY
len = sizeof(cState->addrRec.u.ip_relay.hostName);
ceGetDlgItemText( hDlg, RELAYNAME_EDIT,
cState->addrRec.u.ip_relay.hostName, &len );
cState->addrRec.u.ip_relay.port =
(XP_U16)ceGetDlgItemNum( hDlg, RELAYPORT_EDIT );
len = sizeof(cState->addrRec.u.ip_relay.cookie);
ceGetDlgItemText( hDlg, COOKIE_EDIT, cState->addrRec.u.ip_relay.cookie,
&len );
#endif
} else if ( cState->addrRec.conType == COMMS_CONN_BT ) {
#ifdef XWFEATURE_BLUETOOTH
if ( cState->role == SERVER_ISCLIENT ) {
len = sizeof(cState->addrRec.u.bt.hostName);
ceGetDlgItemText( hDlg, IDC_BLUET_ADDR_EDIT,
cState->addrRec.u.bt.hostName, &len );
}
#endif
} else {
XP_ASSERT(0);
}
} /* ceControlsToAddrRec */
static void
adjustForConnType( HWND hDlg, const CeConnDlgState* cState )
{
XP_U16 relayIds[] = {
IDC_COOKIE_LAB,
#ifdef XWFEATURE_RELAY
COOKIE_EDIT,IDC_CRELAYHINT_LAB,IDC_CRELAYNAME_LAB,RELAYNAME_EDIT,
IDC_CRELAYPORT_LAB, RELAYPORT_EDIT,
#endif
0 };
XP_U16 btIds[] = {
IDC_BLUET_ADDR_LAB,
#ifdef XWFEATURE_BLUETOOTH
IDC_BLUET_ADDR_EDIT, IDC_BLUET_ADDR_BROWSE,
#endif
0 };
XP_U16* allIDs[] = { relayIds, btIds };
XP_U16* on = NULL;
XP_U16 i;
if ( cState->addrRec.conType == COMMS_CONN_RELAY ) {
on = relayIds;
} else if ( cState->addrRec.conType == COMMS_CONN_BT ) {
on =
#ifdef XWFEATURE_BLUETOOTH
cState->role != SERVER_ISCLIENT ? NULL:
#endif
btIds; /* we want the "disabled" message */
}
for ( i = 0; i < sizeof(allIDs)/sizeof(allIDs[0]); ++i ) {
XP_U16* ids = allIDs[i];
XP_Bool enable = ids == on;
while ( *ids != 0 ) {
ceShowOrHide( hDlg, *(ids++), enable );
}
}
} /* adjustForConnType */
static XP_U16
conTypeToIndex( CommsConnType conType )
{
XP_U16 index = 0;
switch( conType ) {
case COMMS_CONN_RELAY:
index = 1;
break;
case COMMS_CONN_BT:
index = 0;
break;
default:
XP_ASSERT(0);
}
return index;
}
static CommsConnType
indexToConType( XP_U16 index )
{
CommsConnType conType = COMMS_CONN_UNUSED;
switch( index ) {
case 0:
conType = COMMS_CONN_BT; break;
case 1:
conType = COMMS_CONN_RELAY; break;
default:
XP_ASSERT(0);
}
return conType;
}
static void
ceControlsFromAddrRec( HWND hDlg, const CeConnDlgState* cState )
{
XP_U16 i;
wchar_t* strs[] = { L"WiFi/Cellular data"
#ifdef XWFEATURE_BLUETOOTH
, L"Bluetooth"
#endif
wchar_t* strs[] = {
L"Bluetooth"
, L"WiFi/Cellular data"
};
for ( i = 0; i < sizeof(strs)/sizeof(strs[0]); ++i ) {
SendDlgItemMessage( hDlg, IDC_CONNECTCOMBO, CB_ADDSTRING,
0, (LPARAM)strs[i] );
}
XP_ASSERT( cState->addrRec.conType == COMMS_CONN_RELAY
|| cState->addrRec.conType == COMMS_CONN_BT );
SendDlgItemMessage( hDlg, IDC_CONNECTCOMBO, CB_SETCURSEL,
cState->addrRec.conType - COMMS_CONN_RELAY, 0L );
ceSetDlgItemText( hDlg, RELAYNAME_EDIT, cState->addrRec.u.ip_relay.hostName );
ceSetDlgItemNum( hDlg, RELAYPORT_EDIT, cState->addrRec.u.ip_relay.port );
ceSetDlgItemText( hDlg, COOKIE_EDIT, cState->addrRec.u.ip_relay.cookie );
SendDlgItemMessage( hDlg, IDC_CONNECTCOMBO, CB_SETCURSEL,
conTypeToIndex(cState->addrRec.conType), 0L );
if ( cState->addrRec.conType == COMMS_CONN_RELAY ) {
#ifdef XWFEATURE_RELAY
ceSetDlgItemText( hDlg, RELAYNAME_EDIT,
cState->addrRec.u.ip_relay.hostName );
ceSetDlgItemNum( hDlg, RELAYPORT_EDIT,
cState->addrRec.u.ip_relay.port );
ceSetDlgItemText( hDlg, COOKIE_EDIT,
cState->addrRec.u.ip_relay.cookie );
#endif
} else if ( cState->addrRec.conType == COMMS_CONN_BT ) {
#ifdef XWFEATURE_BLUETOOTH
if ( cState->role == SERVER_ISCLIENT ) {
ceSetDlgItemText( hDlg, IDC_BLUET_ADDR_EDIT,
cState->addrRec.u.bt.hostName );
}
#endif
} else {
XP_ASSERT(0);
}
}
static LRESULT CALLBACK
@ -76,6 +174,8 @@ ConnsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
cState = (CeConnDlgState*)lParam;
globals = cState->globals;
adjustForConnType( hDlg, cState );
ceControlsFromAddrRec( hDlg, cState );
ceStackButtonsRight( globals, hDlg );
@ -90,6 +190,18 @@ ConnsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
XP_U16 id = LOWORD(wParam);
switch( id ) {
case IDC_CONNECTCOMBO:
if ( HIWORD(wParam) == CBN_SELCHANGE ) {
XP_S16 sel;
sel = SendDlgItemMessage( hDlg, IDC_CONNECTCOMBO,
CB_GETCURSEL, 0, 0L );
cState->addrRec.conType = indexToConType( sel );
adjustForConnType( hDlg, cState );
result = TRUE;
}
break;
case IDOK:
ceControlsToAddrRec( hDlg, cState );
case IDCANCEL:
@ -106,19 +218,17 @@ ConnsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
XP_Bool
WrapConnsDlg( HWND hDlg, CEAppGlobals* globals, const CommsAddrRec* addrRec,
CeConnDlgState* state )
Connectedness role, CeConnDlgState* state )
{
XP_Bool result;
XP_MEMSET( state, 0, sizeof( *state ) );
XP_LOGF( "WrapConnsDlg" );
state->globals = globals;
state->role = role;
XP_MEMCPY( &state->addrRec, addrRec, sizeof(state->addrRec) );
DialogBoxParam( globals->hInst, (LPCTSTR)IDD_CONNSSDLG, hDlg,
(DLGPROC)ConnsDlg, (long)state );
(DLGPROC)ConnsDlg, (long)state );
result = !state->userCancelled;
return result;

View file

@ -25,11 +25,13 @@
typedef struct CeConnDlgState {
CommsAddrRec addrRec;
Connectedness role;
CEAppGlobals* globals;
XP_Bool userCancelled;
} CeConnDlgState;
XP_Bool WrapConnsDlg( HWND hDlg, CEAppGlobals* globals,
const CommsAddrRec* addrRec, CeConnDlgState* state );
const CommsAddrRec* addrRec,
Connectedness role, CeConnDlgState* state );
#endif

View file

@ -156,7 +156,7 @@ loadFromGameInfo( HWND hDlg, CEAppGlobals* globals, GameInfoState* giState )
XP_U16 i;
CurGameInfo* gi = &globals->gameInfo;
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
wchar_t* roles[] = { L"Standalone", L"Host", L"Guest" };
for ( i = 0; i < (sizeof(roles)/sizeof(roles[0])); ++i ) {
SendDlgItemMessage( hDlg, IDC_ROLECOMBO, CB_ADDSTRING, 0,
@ -258,15 +258,15 @@ handlePrefsButton( HWND hDlg, CEAppGlobals* globals, GameInfoState* giState )
}
} /* handlePrefsButton */
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
static void
handleConnOptionsButton( HWND hDlg, CEAppGlobals* globals,
GameInfoState* giState )
Connectedness role, GameInfoState* giState )
{
CeConnDlgState state;
if ( WrapConnsDlg( hDlg, globals, &giState->prefsPrefs.addrRec,
&state ) ) {
role, &state ) ) {
XP_MEMCPY( &giState->prefsPrefs.addrRec, &state.addrRec,
sizeof(giState->prefsPrefs.addrRec) );
giState->addrChanged = XP_TRUE;
@ -306,7 +306,7 @@ resIDForAttr( NewGameAttr attr )
case NG_ATTR_NPLAYERS:
resID = IDC_NPLAYERSCOMBO;
break;
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
case NG_ATTR_ROLE:
resID = IDC_ROLECOMBO;
break;
@ -320,24 +320,26 @@ resIDForAttr( NewGameAttr attr )
case NG_ATTR_CANJUGGLE:
resID = GIJUGGLE_BUTTON;
break;
default:
break;
}
XP_ASSERT( resID != 0 );
return resID;
} /* resIDForAttr */
static void
doForNWEnable( HWND hDlg, XP_U16 resID, NewGameEnable enable )
doForNWEnable( HWND hDlg, XP_U16 resID, XP_TriEnable enable )
{
XP_Bool makeVisible = enable != NGEnableHidden;
XP_Bool makeVisible = enable != TRI_ENAB_HIDDEN;
ceShowOrHide( hDlg, resID, makeVisible );
if ( makeVisible ) {
ceEnOrDisable( hDlg, resID, enable == NGEnableEnabled );
ceEnOrDisable( hDlg, resID, enable == TRI_ENAB_ENABLED );
}
} /* doForNWEnable */
static void
ceEnableColProc( void* closure, XP_U16 player, NewGameColumn col,
NewGameEnable enable )
XP_TriEnable enable )
{
GameInfoState* giState = (GameInfoState*)closure;
XP_U16 resID = resIDForCol( player, col );
@ -345,7 +347,7 @@ ceEnableColProc( void* closure, XP_U16 player, NewGameColumn col,
}
static void
ceEnableAttrProc( void* closure, NewGameAttr attr, NewGameEnable enable )
ceEnableAttrProc( void* closure, NewGameAttr attr, XP_TriEnable enable )
{
GameInfoState* giState = (GameInfoState*)closure;
XP_U16 resID = resIDForAttr( attr );
@ -565,7 +567,7 @@ GameInfo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
}
break;
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
case IDC_ROLECOMBO:
if ( HIWORD(wParam) == CBN_SELCHANGE ) {
if ( giState->isNewGame ) { /* ignore if in info
@ -582,6 +584,7 @@ GameInfo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
connecting */
if ( value.ng_role != SERVER_STANDALONE ) {
handleConnOptionsButton( hDlg, globals,
value.ng_role,
giState );
}
}

View file

@ -76,7 +76,7 @@ typedef struct FileWriteState {
} FileWriteState;
/* forward util function decls */
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
static XP_S16 ce_send_proc( const XP_U8* buf, XP_U16 len,
const CommsAddrRec* addr,
void* closure );
@ -111,7 +111,7 @@ static void ce_util_setTimer( XW_UtilCtxt* uc, XWTimerReason why, XP_U16 when,
static void ce_util_requestTime( XW_UtilCtxt* uc );
static XP_U32 ce_util_getCurSeconds( XW_UtilCtxt* uc );
static DictionaryCtxt* ce_util_makeEmptyDict( XW_UtilCtxt* uc );
#ifndef XWFEATURE_STANDALONE_ONLY
#ifdef XWFEATURE_RELAY
static XWStreamCtxt* ce_util_makeStreamFromAddr( XW_UtilCtxt* uc,
XP_U16 channelNo );
#endif
@ -733,7 +733,7 @@ ceInitAndStartBoard( CEAppGlobals* globals, XP_Bool newGame, CeGamePrefs* gp,
globals->gameInfo.robotSmartness = gp->robotSmartness;
}
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
if ( !!addr ) {
XP_ASSERT( globals->game.comms != NULL );
comms_setAddr( globals->game.comms, addr );
@ -1383,7 +1383,7 @@ ceDoNewGame( CEAppGlobals* globals )
updateForColors( globals );
}
}
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
if ( giState.addrChanged ) {
addr = &giState.prefsPrefs.addrRec;
}
@ -2363,7 +2363,7 @@ wince_snprintf( XP_UCHAR* buf, XP_U16 len, XP_UCHAR* format, ... )
return strlen(buf);
} /* wince_snprintf */
#ifndef XWFEATURE_STANDALONE_ONLY
#ifdef XWFEATURE_RELAY
static void
got_data_proc( XP_U8* data, XP_U16 len, void* closure )
{
@ -2380,7 +2380,9 @@ got_data_proc( XP_U8* data, XP_U16 len, void* closure )
0, (DWORD)stream );
XP_ASSERT( posted );
} /* got_data_proc */
#endif
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
static XP_S16
ce_send_proc( const XP_U8* buf, XP_U16 len, const CommsAddrRec* addr,
void* closure )
@ -2390,6 +2392,7 @@ ce_send_proc( const XP_U8* buf, XP_U16 len, const CommsAddrRec* addr,
if ( !globals->socketWrap ) {
globals->socketWrap = ce_sockwrap_new( MPPARM(globals->mpool)
addr->conType,
got_data_proc, globals );
}
@ -2404,7 +2407,6 @@ ce_send_on_close( XWStreamCtxt* stream, void* closure )
XP_ASSERT( !!globals->game.comms );
comms_send( globals->game.comms, stream );
}
#endif
static VTableMgr*
@ -2639,7 +2641,8 @@ ce_util_engineProgressCallback( XW_UtilCtxt* XP_UNUSED(uc) )
} /* ce_util_engineProgressCallback */
static void
ce_util_setTimer( XW_UtilCtxt* uc, XWTimerReason why, XP_U16 when,
ce_util_setTimer( XW_UtilCtxt* uc, XWTimerReason why,
XP_U16 XP_UNUSED_RELAY(when),
TimerProc proc, void* closure)
{
CEAppGlobals* globals = (CEAppGlobals*)uc->closure;
@ -2824,7 +2827,7 @@ ce_util_warnIllegalWord( XW_UtilCtxt* uc, BadWordInfo* bwi,
return isOk;
} /* ce_util_warnIllegalWord */
#ifdef XWFEATURE_RELAY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
static void
ce_util_addrChange( XW_UtilCtxt* XP_UNUSED(uc),
const CommsAddrRec* XP_UNUSED(oldAddr),

View file

@ -130,7 +130,7 @@ loadStateFromCurPrefs( CEAppGlobals* globals, const CEAppPrefs* appPrefs,
XP_MEMCPY( &prefsPrefs->colors, &appPrefs->colors,
sizeof(prefsPrefs->colors) );
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
if ( globals->game.comms != NULL ) {
comms_getAddr( globals->game.comms, &prefsPrefs->addrRec );
} else {

View file

@ -361,7 +361,8 @@ ReaderThreadProc( LPVOID lpParameter )
CeSocketWrapper*
ce_sockwrap_new( MPFORMAL DataRecvProc proc, void* closure )
ce_sockwrap_new( MPFORMAL CommsConnType conType, DataRecvProc proc,
void* closure )
{
CeSocketWrapper* self = XP_MALLOC( mpool, sizeof(*self) );
XP_MEMSET( self, 0, sizeof(*self) );

View file

@ -27,7 +27,7 @@ typedef struct CeSocketWrapper CeSocketWrapper; /* forward */
typedef void (*DataRecvProc)( XP_U8* data, XP_U16 len, void* closure );
CeSocketWrapper* ce_sockwrap_new( MPFORMAL DataRecvProc proc, void* closure );
CeSocketWrapper* ce_sockwrap_new( MPFORMAL CommsConnType conType, DataRecvProc proc, void* closure );
void ce_sockwrap_delete( CeSocketWrapper* self );
XP_U16 ce_sockwrap_send( CeSocketWrapper* self, const XP_U8* buf, XP_U16 len,

View file

@ -134,19 +134,26 @@
#define HC_MIN_COMBO 1087
#define HC_MAX_COMBO 1088
#ifndef XWFEATURE_STANDALONE_ONLY
# define IDC_CCONVIA_LAB 1089
# define IDC_CRELAYNAME_LAB 1090
# define IDC_CRELAYPORT_LAB 1091
# define IDC_COOKIE_LAB 1092
#define IDC_CCONVIA_LAB 1089
#define IDC_COOKIE_LAB 1090
#ifdef XWFEATURE_RELAY
# define IDC_CRELAYNAME_LAB 1091
# define IDC_CRELAYPORT_LAB 1092
# define IDC_CRELAYHINT_LAB 1093
# define IDC_CONNECTCOMBO 1094
# define RELAYNAME_EDIT 1095
# define RELAYPORT_EDIT 1096
# define COOKIE_EDIT 1097
#endif
#define IDC_BLUET_ADDR_LAB 1100
#ifdef XWFEATURE_BLUETOOTH
# define IDC_BLUET_ADDR_EDIT 1101
# define IDC_BLUET_ADDR_BROWSE 1102
#endif

View file

@ -106,7 +106,7 @@ BEGIN
MENUITEM "Game info", ID_GAME_GAMEINFO
MENUITEM "History", ID_GAME_HISTORY
MENUITEM "Final scores", ID_GAME_FINALSCORES
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
MENUITEM SEPARATOR
MENUITEM "Resend messages", ID_GAME_RESENDMSGS
#endif
@ -224,7 +224,7 @@ BEGIN
LABELS_ROW,19,8,SS_NOPREFIX
LTEXT "Robot",IDC_STATIC,GAME_ROBOTLABEL_LEFT,LABELS_ROW,20,8
LTEXT "Pwd",IDC_STATIC,GAME_PWDLABEL_LEFT,LABELS_ROW,16,8
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
LTEXT "Remote",IDC_REMOTE_LABEL,LEFT_COL,LABELS_ROW,25,8,SS_NOPREFIX
CONTROL "",REMOTE_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
GAME_REMOTE_LEFT, PLAYER_ROW_1,CHECK_WIDTH,ROW_HEIGHT
@ -397,7 +397,7 @@ BEGIN
REPOS_BUTTON_WIDTH,REPOS_BUTTON_HT
END
#ifndef XWFEATURE_STANDALONE_ONLY
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH
# define LAB_COL 8
# define LAB_COL_WIDTH 40
@ -419,7 +419,8 @@ BEGIN
LTEXT "Connect via",IDC_CCONVIA_LAB,LAB_COL,CONN_ROW_1,40,12
COMBOBOX IDC_CONNECTCOMBO,CTRL_COL,CONN_ROW_1,CTRL_COL_WIDTH,58,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
#ifdef XWFEATURE_RELAY
LTEXT "Cookie",IDC_COOKIE_LAB,LAB_COL,CONN_ROW_2,40,12
EDITTEXT COOKIE_EDIT,CTRL_COL,CONN_ROW_2,CTRL_COL_WIDTH,12,
ES_AUTOHSCROLL
@ -432,6 +433,22 @@ BEGIN
LTEXT "Relay port",IDC_CRELAYPORT_LAB,LAB_COL,CONN_ROW_4,40,12
EDITTEXT RELAYPORT_EDIT,CTRL_COL,CONN_ROW_4,CTRL_COL_WIDTH,12,
ES_AUTOHSCROLL | ES_NUMBER
#else
LTEXT "Relay connection not supported.",IDC_COOKIE_LAB,LAB_COL,CONN_ROW_2,40,12
#endif
#ifdef XWFEATURE_BLUETOOTH
LTEXT "Host name:",
IDC_BLUET_ADDR_LAB,LAB_COL,CONN_ROW_2,40,36
EDITTEXT IDC_BLUET_ADDR_EDIT,CTRL_COL,CONN_ROW_2,CTRL_COL_WIDTH,12,
ES_AUTOHSCROLL
PUSHBUTTON "Browse",IDC_BLUET_ADDR_BROWSE,CTRL_COL,CONN_ROW_HINT,
REPOS_BUTTON_WIDTH,REPOS_BUTTON_HT
#else
LTEXT "Bluetooth not supported.",
IDC_BLUET_ADDR_LAB,LAB_COL,CONN_ROW_2,40,12
#endif
PUSHBUTTON "OK",IDOK,9,BUTTON_ROW,REPOS_BUTTON_WIDTH,REPOS_BUTTON_HT
DEFPUSHBUTTON "Cancel",IDCANCEL,70,BUTTON_ROW,