diff --git a/wince/Makefile b/wince/Makefile index 2d4e393db..e0b5e59e6 100644 --- a/wince/Makefile +++ b/wince/Makefile @@ -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 #################################################################### diff --git a/wince/cecondlg.c b/wince/cecondlg.c index 4c3eb5005..147196d15 100755 --- a/wince/cecondlg.c +++ b/wince/cecondlg.c @@ -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; diff --git a/wince/cecondlg.h b/wince/cecondlg.h index 0a2022537..ed20b4a25 100755 --- a/wince/cecondlg.h +++ b/wince/cecondlg.h @@ -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 diff --git a/wince/ceginfo.c b/wince/ceginfo.c index 9e24da1fa..7249718c7 100755 --- a/wince/ceginfo.c +++ b/wince/ceginfo.c @@ -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 ); } } diff --git a/wince/cemain.c b/wince/cemain.c index 5d03b0b44..bb555d3aa 100755 --- a/wince/cemain.c +++ b/wince/cemain.c @@ -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), diff --git a/wince/ceprefs.c b/wince/ceprefs.c index 19d4ad699..d78858f2a 100755 --- a/wince/ceprefs.c +++ b/wince/ceprefs.c @@ -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 { diff --git a/wince/cesockwr.c b/wince/cesockwr.c index ec66c37b8..a13fb93ed 100755 --- a/wince/cesockwr.c +++ b/wince/cesockwr.c @@ -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) ); diff --git a/wince/cesockwr.h b/wince/cesockwr.h index 32c894e6d..068599589 100755 --- a/wince/cesockwr.h +++ b/wince/cesockwr.h @@ -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, diff --git a/wince/resource.h b/wince/resource.h index 0f320eeb5..ca90ba57a 100755 --- a/wince/resource.h +++ b/wince/resource.h @@ -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 diff --git a/wince/xwords4.rc b/wince/xwords4.rc index 392ad8a7e..9974a08cc 100755 --- a/wince/xwords4.rc +++ b/wince/xwords4.rc @@ -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,