mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-28 09:58:30 +01:00
bdb06cbdf8
it's needed, removing those passed into _init and _send. When client is unable to connect to host, raise alert to user and give choice to continue trying. Clear 'suspendBT' flag when user manually resends or opens different game. Currently this happens only on guest's failure to find registered SDP; should also extend to remote device not running at all and to host failure to send to guest.
439 lines
11 KiB
C
439 lines
11 KiB
C
/* -*-mode: C; fill-column: 76; c-basic-offset: 4; -*- */
|
|
/*
|
|
* Copyright 1999 - 2007 by Eric House (xwords@eehouse.org). All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
#ifndef _PALMMAIN_H_
|
|
#define _PALMMAIN_H_
|
|
|
|
#define AppType APPID
|
|
#define PrefID 0
|
|
#define VERSION_NUM_405 1
|
|
#define VERSION_NUM 2 /* 1 to 2 moving to ARM */
|
|
|
|
#include <PalmTypes.h>
|
|
#include <DataMgr.h>
|
|
#include <Window.h>
|
|
#include <List.h>
|
|
#include <Form.h>
|
|
#include <IrLib.h>
|
|
#ifdef XWFEATURE_RELAY
|
|
# include <NetMgr.h>
|
|
#endif
|
|
|
|
#include "game.h"
|
|
#include "util.h"
|
|
#include "mempool.h"
|
|
#include "nwgamest.h"
|
|
|
|
/* #include "prefsdlg.h" */
|
|
#include "xwcolors.h"
|
|
|
|
#include "xwords4defines.h"
|
|
|
|
#ifdef MEM_DEBUG
|
|
# define MEMPOOL globals->mpool,
|
|
#else
|
|
# define MEMPOOL
|
|
#endif
|
|
|
|
|
|
enum { ONEBIT, /* GREYSCALE, */COLOR };
|
|
typedef unsigned char GraphicsAbility; /* don't let above be 4 bytes */
|
|
typedef struct PalmAppGlobals PalmAppGlobals;
|
|
|
|
typedef const XP_UCHAR* (*GetResStringFunc)( PalmAppGlobals* globals,
|
|
XP_U16 strID );
|
|
|
|
typedef struct {
|
|
XP_S16 topOffset; /* how many pixels from the top of the
|
|
drawing area is the first pixel set in
|
|
the glyph */
|
|
XP_U16 height; /* How many rows tall is the image? */
|
|
} PalmFontHtInfo;
|
|
|
|
typedef struct PalmDrawCtx {
|
|
DrawCtxVTable* vtable;
|
|
PalmAppGlobals* globals;
|
|
|
|
void (*drawBitmapFunc)( DrawCtx* dc, Int16 resID, Int16 x, Int16 y );
|
|
GetResStringFunc getResStrFunc;
|
|
|
|
DrawingPrefs* drawingPrefs;
|
|
|
|
RectangleType oldScoreClip;
|
|
RectangleType oldTrayClip;
|
|
|
|
XP_S16 trayOwner;
|
|
XP_U16 fntHeight;
|
|
|
|
GraphicsAbility able;
|
|
|
|
UInt16 oldCoord;
|
|
XP_Bool doHiRes;
|
|
XP_Bool oneDotFiveAvail;
|
|
XP_Bool topFocus;
|
|
|
|
XP_LangCode fontLangCode;
|
|
PalmFontHtInfo* fontHtInfo;
|
|
|
|
union {
|
|
struct {
|
|
XP_U8 reserved; /* make CW compiler happy */
|
|
} clr;
|
|
struct {
|
|
CustomPatternType valuePatterns[4];
|
|
} bnw;
|
|
} u;
|
|
MPSLOT
|
|
} PalmDrawCtx;
|
|
|
|
#define draw_drawBitmapAt(dc,id,x,y) \
|
|
(*((((PalmDrawCtx*)dc))->drawBitmapFunc))((dc),(id),(x),(y))
|
|
|
|
typedef struct ListData {
|
|
unsigned char** strings;
|
|
unsigned char* storage;
|
|
XP_U16 nItems;
|
|
XP_U16 storageLen;
|
|
XP_U16 nextIndex;
|
|
XP_S16 selIndex;
|
|
#ifdef DEBUG
|
|
XP_Bool choicesSet; /* ARM hack: don't use strings after PACE
|
|
swaps.... */
|
|
#endif
|
|
} ListData;
|
|
|
|
typedef struct XWords4PreferenceType {
|
|
Int16 versionNum;
|
|
|
|
Int16 curGameIndex; /* which game is currently open */
|
|
|
|
/* these are true global preferences */
|
|
Boolean showProgress;
|
|
Boolean showGrid;
|
|
Boolean showColors;
|
|
Boolean oneTimeShown;
|
|
Boolean reserved1[4]; /* pad out to 12 for ARM */
|
|
|
|
/* New for 0x0405 */
|
|
CommonPrefs cp;
|
|
|
|
Int16 focusItem;
|
|
} XWords4PreferenceType;
|
|
|
|
typedef struct MyIrConnect {
|
|
IrConnect irCon;
|
|
PalmAppGlobals* globals;
|
|
} MyIrConnect;
|
|
|
|
typedef XP_U8 IR_STATE; /* enums are in palmir.h */
|
|
|
|
#define IR_BUF_SIZE 256
|
|
|
|
typedef struct MyIrPacket MyIrPacket;
|
|
|
|
typedef struct ProgressCtxt {
|
|
RectangleType boundsRect;
|
|
XP_S16 curLine;
|
|
} ProgressCtxt;
|
|
|
|
/* I *hate* having to define these globally... */
|
|
typedef struct SavedGamesState {
|
|
struct PalmAppGlobals* globals;
|
|
FormPtr form;
|
|
ListPtr gamesList;
|
|
FieldPtr nameField;
|
|
char** stringPtrs;
|
|
Int16 nStrings;
|
|
Int16 displayGameIndex;
|
|
} SavedGamesState;
|
|
|
|
typedef struct PrefsDlgState {
|
|
ListPtr playerBdSizeList;
|
|
ListPtr phoniesList;
|
|
|
|
CommonPrefs cp;
|
|
|
|
XP_U16 gameSeconds;
|
|
XP_Bool stateTypeIsGlobal;
|
|
|
|
XP_U8 phoniesAction;
|
|
XP_U8 curBdSize;
|
|
XP_Bool showColors;
|
|
XP_Bool smartRobot;
|
|
XP_Bool showProgress;
|
|
XP_Bool showGrid;
|
|
XP_Bool hintsNotAllowed;
|
|
XP_Bool timerEnabled;
|
|
XP_Bool allowPickTiles;
|
|
XP_Bool allowHintRect;
|
|
} PrefsDlgState;
|
|
|
|
typedef struct DictState {
|
|
ListPtr dictList;
|
|
ListData sLd;
|
|
XP_U16 nDicts;
|
|
} DictState;
|
|
|
|
#define MAX_DISABLED 24 /* I've seen 19.... */
|
|
|
|
typedef struct PalmNewGameState {
|
|
FormPtr form;
|
|
ListPtr playerNumList;
|
|
NewGameCtx* ngc;
|
|
XP_UCHAR passwds[MAX_PASSWORD_LENGTH+1][MAX_NUM_PLAYERS];
|
|
XP_UCHAR* dictName;
|
|
XP_UCHAR shortDictName[32]; /* as long as a dict name can be */
|
|
|
|
XP_Bool forwardChange;
|
|
DeviceRole curServerHilite;
|
|
#if defined XWFEATURE_RELAY || defined XWFEATURE_BLUETOOTH || defined XWFEATURE_IR
|
|
CommsAddrRec addr;
|
|
XP_Bool connsSettingChanged;
|
|
#endif
|
|
} PalmNewGameState;
|
|
|
|
typedef struct PalmDictList PalmDictList;
|
|
|
|
#ifdef XWFEATURE_RELAY
|
|
typedef struct NetLibStuff {
|
|
UInt16 netLibRef;
|
|
NetSocketRef socket;
|
|
XP_Bool ipAddrInval;
|
|
} NetLibStuff;
|
|
#define ipSocketIsOpen(g) ((g)->nlStuff.socket != -1)
|
|
#endif
|
|
|
|
#define MAX_DLG_PARAMS 2
|
|
|
|
#ifdef XWFEATURE_BLUETOOTH
|
|
typedef enum {
|
|
BTUI_NOBT
|
|
, BTUI_NONE
|
|
, BTUI_LISTENING
|
|
, BTUI_CONNECTING
|
|
, BTUI_CONNECTED /* slave */
|
|
, BTUI_SERVING /* master */
|
|
} BtUIState;
|
|
#endif
|
|
|
|
#ifdef XWFEATURE_BLUETOOTH
|
|
# define TIMER_ACL_BACKOFF NUM_TIMERS_PLUS_ONE
|
|
# define NUM_PALM_TIMERS (NUM_TIMERS_PLUS_ONE + 1)
|
|
#else
|
|
# define NUM_PALM_TIMERS NUM_TIMERS_PLUS_ONE
|
|
#endif
|
|
|
|
struct PalmAppGlobals {
|
|
FormPtr mainForm;
|
|
PrefsDlgState* prefsDlgState;
|
|
SavedGamesState* savedGamesState;
|
|
XWGame game;
|
|
DrawCtx* draw;
|
|
XW_UtilCtxt util;
|
|
|
|
XP_U32 dlgParams[MAX_DLG_PARAMS];
|
|
|
|
VTableMgr* vtMgr;
|
|
|
|
XWords4PreferenceType gState;
|
|
|
|
DrawingPrefs drawingPrefs;
|
|
|
|
PalmDictList* dictList;
|
|
|
|
DmOpenRef boardDBP;
|
|
LocalID boardDBID;
|
|
|
|
DmOpenRef gamesDBP;
|
|
LocalID gamesDBID;
|
|
|
|
#ifdef XWFEATURE_RELAY
|
|
UInt16 exgLibraryRef; /* what library did user choose for sending? */
|
|
#endif
|
|
|
|
XP_UCHAR* stringsResPtr;
|
|
XP_U8* bonusResPtr[NUM_BOARD_SIZES];
|
|
Boolean penDown;
|
|
Boolean isNewGame;
|
|
Boolean stateTypeIsGlobal;
|
|
Boolean timeRequested;
|
|
Boolean hintPending;
|
|
Boolean isLefty;
|
|
Boolean dictuiForBeaming;
|
|
Boolean postponeDraw;
|
|
Boolean needsScrollbar;
|
|
Boolean msgReceivedDraw;
|
|
Boolean isFirstLaunch;
|
|
Boolean menuIsDown;
|
|
XP_Bool newGameIsNew;
|
|
XP_Bool runningOnPOSE; /* Needed for NetLibSelect */
|
|
#ifdef XWFEATURE_FIVEWAY
|
|
XP_Bool isTreo600;
|
|
#endif
|
|
#ifdef XWFEATURE_BLUETOOTH
|
|
XP_Bool userCancelledBT;
|
|
#endif
|
|
|
|
GraphicsAbility able;
|
|
XP_U16 prevScroll; /* for scrolling in 'ask' dialog */
|
|
UInt16 romVersion;
|
|
|
|
XP_U8 scrollValue; /* 0..2: scrolled position of board */
|
|
|
|
#ifdef SHOW_PROGRESS
|
|
ProgressCtxt progress;
|
|
#endif
|
|
|
|
XP_U16 width, height;
|
|
XP_U16 sonyLibRef;
|
|
XP_Bool doVSK;
|
|
XP_Bool hasHiRes;
|
|
XP_Bool oneDotFiveAvail;
|
|
XP_Bool useHiRes;
|
|
XP_Bool hasTreoFiveWay;
|
|
XP_Bool generatesKeyUp;
|
|
XP_Bool isZodiac;
|
|
XP_Bool keyDownReceived;
|
|
XP_Bool initialTakeDropped; /* work around apparent OS bug */
|
|
/* PalmOS seems pretty broken w.r.t. key events. If I put up a modal
|
|
dialog while in the process of handling a keyUp, that form gets a
|
|
keyDown (and not with the repeat bit set either.) Hack around it. */
|
|
XP_Bool handlingKeyEvent;
|
|
XP_Bool ignoreFirstKeyDown;
|
|
|
|
XP_U16 lastKeyDown;
|
|
|
|
#ifdef XWFEATURE_SEARCHLIMIT
|
|
XP_Bool askTrayLimits;
|
|
#endif
|
|
|
|
CurGameInfo gameInfo; /* for the currently open, or new, game */
|
|
|
|
/* dialog/forms state */
|
|
PalmNewGameState newGameState;
|
|
|
|
DictState dictState;
|
|
|
|
struct ConnsDlgState* connState;
|
|
|
|
XWTimerProc timerProcs[NUM_PALM_TIMERS];
|
|
void* timerClosures[NUM_PALM_TIMERS];
|
|
XP_U32 timerFireAt[NUM_PALM_TIMERS];
|
|
|
|
#ifdef XWFEATURE_RELAY
|
|
NetLibStuff nlStuff;
|
|
XP_U32 heartTimerFireAt;
|
|
#endif
|
|
|
|
#ifdef XWFEATURE_BLUETOOTH
|
|
struct PalmBTStuff* btStuff;
|
|
XP_U16 lastBTStatusRes;
|
|
BtUIState btUIState; /* For showing user what's up */
|
|
XP_Bool suspendBT;
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
UInt8 save_rLsap;
|
|
IR_STATE ir_state_prev;
|
|
XP_U16 yCount;
|
|
/* Boolean resetGame; */
|
|
#endif
|
|
MPSLOT
|
|
}; /* PalmAppGlobals */
|
|
|
|
/* custom events */
|
|
enum { dictSelectedEvent = firstUserEvent /* 0x6000 */
|
|
,newGameOkEvent
|
|
,newGameCancelEvent
|
|
,loadGameEvent
|
|
,prefsChangedEvent
|
|
,openSavedGameEvent
|
|
#ifdef XWFEATURE_FIVEWAY
|
|
,updateAfterFocusEvent
|
|
#endif
|
|
#if defined XWFEATURE_BLUETOOTH || defined XWFEATURE_RELAY
|
|
,connsSettingChgEvent
|
|
#endif
|
|
#if defined XWFEATURE_BLUETOOTH
|
|
,closeBtLibEvent
|
|
#endif
|
|
#ifdef FEATURE_SILK
|
|
,doResizeWinEvent
|
|
#endif
|
|
};
|
|
|
|
enum {
|
|
PNOLET_STORE_FEATURE = 1 /* where FtrPtr to pnolet code lives */
|
|
, GLOBALS_FEATURE /* for passing globals to form handlers */
|
|
, LOG_FILE_FEATURE /* these three for debugging */
|
|
, LOG_MEMO_FEATURE
|
|
, LOG_SCREEN_FEATURE
|
|
#ifdef FEATURE_DUALCHOOSE
|
|
, FEATURE_WANTS_68K /* support for (pre-ship) ability to choose
|
|
armlet or 68K */
|
|
#endif
|
|
#ifdef XWFEATURE_COMBINEDAWG
|
|
, DAWG_STORE_FEATURE
|
|
#endif
|
|
, PACE_BT_CBK_FEATURE
|
|
};
|
|
enum { WANTS_68K, WANTS_ARM };
|
|
|
|
|
|
/* If we're calling the old PilotMain (in palmmain.c) from from the one in
|
|
enter68k.c it needs a different name. But if this is the 68K-only app
|
|
then that is the entry point. */
|
|
#ifdef FEATURE_PNOAND68K
|
|
# define PM2(pm) pm2_ ## pm
|
|
UInt32 PM2(PilotMain)(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags);
|
|
#else
|
|
# define PM2(pm) pm
|
|
#endif
|
|
|
|
DrawCtx* palm_drawctxt_make( MPFORMAL GraphicsAbility able,
|
|
PalmAppGlobals* globals,
|
|
GetResStringFunc getRSF,
|
|
DrawingPrefs* drawprefs );
|
|
void palm_drawctxt_destroy( DrawCtx* dctx );
|
|
|
|
void palm_warnf( char* format, ... );
|
|
|
|
XP_Bool askPassword( PalmAppGlobals* globals, const XP_UCHAR* name,
|
|
XP_Bool isNew, XP_UCHAR* retbuf, XP_U16* len );
|
|
XP_Bool palmaskFromStrId( PalmAppGlobals* globals, XP_U16 strId,
|
|
XP_S16 titleID );
|
|
void freeSavedGamesData( MPFORMAL SavedGamesState* state );
|
|
|
|
void writeNameToGameRecord( PalmAppGlobals* globals, XP_S16 index,
|
|
char* newName, XP_U16 len );
|
|
|
|
const XP_UCHAR* getResString( PalmAppGlobals* globals, XP_U16 strID );
|
|
XP_Bool palmask( PalmAppGlobals* globals, const XP_UCHAR* str,
|
|
const XP_UCHAR* altButton, XP_S16 titleID );
|
|
void checkAndDeliver( PalmAppGlobals* globals, const CommsAddrRec* addr,
|
|
XWStreamCtxt* instream );
|
|
|
|
#ifdef XW_TARGET_PNO
|
|
# define READ_UNALIGNED16(n) read_unaligned16((unsigned char*)(n))
|
|
#else
|
|
# define READ_UNALIGNED16(n) *(n)
|
|
#endif
|
|
|
|
#define IS_T600(g) (g)->isTreo600
|
|
|
|
#endif /* _PALMMAIN_H_ */
|