raze-gles/polymer/eduke32/build/include/osd.h
helixhorned 0dd78fb029 Cleanup of console/on-screen-display (OSD) functionality.
- Rewrite the "clear background" routine in a no-brainer way instead of
  juggling around with rotatesprite(). Make it common to game+editor.
  Expose glRectd to glbuild.
- Don't stop OSD text line drawing when encountering a non-printable char.
  Instead, treat it as space.
- In OSD_SetTextMode(), don't use swaplong (which really swaps 32-bit ints)
  to swap pointers. Write an analogous "swapptr" instead.
- When changing from/to OSD, don't inject a pause key. This *might* have been
  the cause of the reported pausing problems.
- clean up the code...
(Yes, this commit throws together too much stuff. I suck sometimes. :P)

git-svn-id: https://svn.eduke32.com/eduke32@3321 1a8010ca-5511-0410-912e-c29ae57300e0
2012-12-25 16:13:50 +00:00

209 lines
5.1 KiB
C

// On-screen display (ie. console)
// for the Build Engine
// by Jonathon Fowler (jf@jonof.id.au)
#ifndef __osd_h__
#define __osd_h__
#ifdef EXTERNC
extern "C" {
#endif
typedef struct {
int32_t numparms;
const char *name;
const char **parms;
const char *raw;
} osdfuncparm_t;
typedef struct _symbol
{
const char *name;
struct _symbol *next;
const char *help;
int32_t (*func)(const osdfuncparm_t *);
} symbol_t;
extern symbol_t *symbols;
const char *OSD_StripColors(char *out, const char *in);
enum cvartype_t
{
CVAR_FLOAT = 0x00000001,
CVAR_INT = 0x00000002,
CVAR_UINT = 0x00000004,
CVAR_BOOL = 0x00000008,
CVAR_STRING = 0x00000010,
CVAR_DOUBLE = 0x00000020,
CVAR_LOCKED = 0x00000040,
CVAR_MULTI = 0x00000080,
CVAR_NOSAVE = 0x00000100,
CVAR_FUNCPTR = 0x00000200,
};
typedef struct
{
const char *name;
const char *desc;
void *var;
int32_t type; // see cvartype_t
int32_t min;
int32_t max; // for string, is the length
} cvar_t;
typedef struct
{
char *name;
char *desc;
void *var;
int32_t type; // see cvartype_t
int32_t min;
int32_t max; // for string, is the length
// everything before this point needs to match cvar_t
// default value for cvar, assigned when var is registered
union
{
int32_t i;
uint32_t uint;
float f;
double d;
} dval;
} osdcvar_t;
enum osdflags_t
{
OSD_INITIALIZED = 0x00000001,
OSD_DRAW = 0x00000002,
OSD_CAPTURE = 0x00000004,
OSD_OVERTYPE = 0x00000008,
OSD_SHIFT = 0x00000010,
OSD_CTRL = 0x00000020,
OSD_CAPS = 0x00000040
};
#define OSD_ALIAS (int32_t (*)(const osdfuncparm_t*))0x1337
#define OSD_UNALIASED (int32_t (*)(const osdfuncparm_t*))0xDEAD
#define OSDCMD_OK 0
#define OSDCMD_SHOWHELP 1
int32_t OSD_ParsingScript(void);
int32_t OSD_OSDKey(void);
int32_t OSD_GetTextMode(void);
void OSD_SetTextMode(int32_t mode);
int32_t OSD_Exec(const char *szScript);
char *OSD_GetFmt(char *ptr);
char *OSD_GetTextPtr(void);
char *OSD_GetFmtPtr(void);
int32_t OSD_GetCols(void);
int32_t OSD_IsMoving(void);
int32_t OSD_GetRowsCur(void);
// initializes things
void OSD_Init(void);
// sets the file to echo output to
void OSD_SetLogFile(const char *fn);
// sets the functions the OSD will call to interrogate the environment
void OSD_SetFunctions(
void (*drawchar)(int32_t,int32_t,char,int32_t,int32_t),
void (*drawstr)(int32_t,int32_t,const char*,int32_t,int32_t,int32_t),
void (*drawcursor)(int32_t,int32_t,int32_t,int32_t),
int32_t (*colwidth)(int32_t),
int32_t (*rowheight)(int32_t),
void (*clearbg)(int32_t,int32_t),
int32_t (*gettime)(void),
void (*onshow)(int32_t)
);
// sets the parameters for presenting the text
void OSD_SetParameters(
int32_t promptshade, int32_t promptpal,
int32_t editshade, int32_t editpal,
int32_t textshade, int32_t textpal
);
// sets the scancode for the key which activates the onscreen display
void OSD_CaptureKey(int32_t sc);
// handles keyboard input when capturing input. returns 0 if key was handled
// or the scancode if it should be handled by the game.
int32_t OSD_HandleScanCode(int32_t sc, int32_t press);
int32_t OSD_HandleChar(char ch);
// handles the readjustment when screen resolution changes
void OSD_ResizeDisplay(int32_t w,int32_t h);
// captures and frees osd input
void OSD_CaptureInput(int32_t cap);
// sets the console version string
void OSD_SetVersion(const char *version, int32_t shade, int32_t pal);
// shows or hides the onscreen display
void OSD_ShowDisplay(int32_t onf);
// draw the osd to the screen
void OSD_Draw(void);
// just like printf
void OSD_Printf(const char *fmt, ...) ATTRIBUTE((format(printf,1,2)));
// executes buffered commands
void OSD_DispatchQueued(void);
// executes a string
int32_t OSD_Dispatch(const char *cmd);
// registers a function
// name = name of the function
// help = a short help string
// func = the entry point to the function
int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)(const osdfuncparm_t*));
int32_t osdcmd_cvar_set(const osdfuncparm_t *parm);
int32_t OSD_RegisterCvar(const cvar_t *cvar);
void OSD_WriteCvars(FILE *fp);
// these correspond to the Duke palettes, so they shouldn't really be here
// ...but I don't care
#define OSDTEXT_BLUE "^00"
#define OSDTEXT_GOLD "^07"
#define OSDTEXT_DARKRED "^10"
#define OSDTEXT_GREEN "^11"
#define OSDTEXT_GRAY "^12"
#define OSDTEXT_DARKGRAY "^13"
#define OSDTEXT_DARKGREEN "^14"
#define OSDTEXT_BROWN "^15"
#define OSDTEXT_DARKBLUE "^16"
#define OSDTEXT_RED "^21"
#define OSDTEXT_YELLOW "^23"
#define OSDTEXT_BRIGHT "^S0"
#define OSD_ERROR OSDTEXT_DARKRED OSDTEXT_BRIGHT
#define TEXTSIZE 32768
#define OSD_EDITLENGTH 511
#define OSD_HISTORYDEPTH 32
extern char osdhistorybuf[OSD_HISTORYDEPTH][OSD_EDITLENGTH+1]; // history strings
extern int32_t osdhistorysize; // number of entries in history
extern int32_t osdhistorytotal; // number of total history entries
#ifdef EXTERNC
}
#endif
#endif // __osd_h__