raze/source/build/include/osd.h
terminx c25aa4a790 OSD (console) cleanup
git-svn-id: https://svn.eduke32.com/eduke32@6297 1a8010ca-5511-0410-912e-c29ae57300e0
2017-06-27 02:24:14 +00:00

308 lines
7.8 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 __cplusplus
extern "C" {
#endif
#include "mutex.h"
typedef struct {
int32_t numparms;
const char *name;
const char **parms;
const char *raw;
} osdfuncparm_t;
const char *OSD_StripColors(char *outBuf, const char *inBuf);
#define OSDDEFAULTMAXLINES 128
#define OSDEDITLENGTH 512
#define OSDMINHISTORYDEPTH 32
#define OSDMAXHISTORYDEPTH 256
#define OSDBUFFERSIZE 32768
#define OSDDEFAULTROWS 20
#define OSDDEFAULTCOLS 60
#define OSDLOGCUTOFF 131072
#define OSDMAXSYMBOLS 512
enum cvartype_t
{
CVAR_FLOAT = 0x00000001,
CVAR_INT = 0x00000002,
CVAR_UINT = 0x00000004,
CVAR_BOOL = 0x00000008,
CVAR_STRING = 0x00000010,
CVAR_DOUBLE = 0x00000020,
CVAR_READONLY = 0x00000040,
CVAR_MULTI = 0x00000080,
CVAR_NOSAVE = 0x00000100,
CVAR_FUNCPTR = 0x00000200,
CVAR_RESTARTVID = 0x00000400,
CVAR_INVALIDATEALL = 0x00000800,
CVAR_INVALIDATEART = 0x00001000,
CVAR_MODIFIED = 0x00002000,
CVAR_TYPEMASK = CVAR_FLOAT | CVAR_DOUBLE | CVAR_INT | CVAR_UINT | CVAR_BOOL | CVAR_STRING
};
typedef struct _symbol
{
const char *name;
struct _symbol *next;
const char *help;
int32_t(*func)(osdfuncparm_t const * const);
} osdsymbol_t;
typedef struct
{
const char *name;
const char *desc;
union
{
void * ptr;
int32_t * i32;
uint32_t * u32;
float * f;
double * d;
char *const string;
};
uint32_t flags; // see cvartype_t
int32_t const min;
int32_t const max; // for string, is the length
} osdcvardata_t;
typedef struct
{
osdcvardata_t *pData;
// default value for cvar, assigned when var is registered
union
{
int32_t i32;
uint32_t u32;
float f;
double d;
} defaultValue;
} osdcvar_t;
// version string
typedef struct
{
char *buf;
uint8_t len;
uint8_t shade;
uint8_t pal;
} osdstr_t;
// command prompt editing
typedef struct
{
char *buf; // [OSDEDITLENGTH+1]; // editing buffer
char *tmp; // [OSDEDITLENGTH+1]; // editing buffer temporary workspace
int16_t len, pos; // length of characters and position of cursor in buffer
int16_t start, end;
} osdedit_t;
// main text buffer
typedef struct
{
// each character in the buffer also has a format byte containing shade and color
char *buf;
char *fmt;
int32_t pos; // position next character will be written at
int32_t lines; // total number of lines in buffer
int32_t maxlines; // max lines in buffer
} osdtext_t;
// history display
typedef struct
{
char *buf[OSDMAXHISTORYDEPTH];
int32_t maxlines; // max entries in buffer, ranges from OSDMINHISTORYDEPTH to OSDMAXHISTORYDEPTH
int32_t pos; // current buffer position
int32_t lines; // entries currently in buffer
int32_t total; // total number of entries
int32_t exec; // number of lines from the head of the history buffer to execute
} osdhist_t;
// active display parameters
typedef struct
{
char const *errorfmt;
char const *highlight;
int32_t promptshade, promptpal;
int32_t editshade, editpal;
int32_t textshade, textpal;
int32_t mode;
int32_t rows; // # lines of the buffer that are visible
int32_t cols; // width of onscreen display in text columns
uint16_t head; // topmost visible line number
int8_t scrolling;
} osddraw_t;
typedef struct
{
BFILE *fp;
int32_t cutoff;
int32_t errors;
int32_t lines;
} osdlog_t;
typedef struct
{
osdtext_t text;
osdedit_t editor;
osdhist_t history;
osddraw_t draw;
osdstr_t version;
uint32_t flags; // controls initialization, etc
osdcvar_t *cvars;
uint32_t numcvars;
osdsymbol_t *symbptrs[OSDMAXSYMBOLS];
int32_t numsymbols;
int32_t execdepth; // keeps track of nested execution
mutex_t mutex;
int32_t keycode;
osdlog_t log;
} osdmain_t;
extern osdmain_t *osd;
extern BFILE *osdlog;
extern const char* osdlogfn;
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);
int OSD_Exec(const char *szScript);
// Get shade and pal index from the OSD format buffer.
void OSD_GetShadePal(const char *ch, int32_t *shadeptr, int32_t *palptr);
int32_t OSD_GetCols(void);
int32_t OSD_IsMoving(void);
int32_t OSD_GetRowsCur(void);
// initializes things
void OSD_Init(void);
// cleans things up. these comments are retarded.
void OSD_Cleanup(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,
char const *const errorStr, char const *const highlight);
// sets the scancode for the key which activates the onscreen display
void OSD_CaptureKey(uint8_t scanCode);
// handles keyboard input when capturing input. returns 0 if key was handled
// or the scancode if it should be handled by the game.
int OSD_HandleScanCode(uint8_t scanCode, int keyDown);
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 *pszVersion, int osdShade, int osdPal);
// 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)));
// just like puts
void OSD_Puts(const char *str);
// 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 *pszName, const char *pszDesc, int32_t (*func)(const osdfuncparm_t *));
int32_t osdcmd_cvar_set(osdfuncparm_t const * const parm);
void OSD_RegisterCvar(osdcvardata_t * const cvar, int32_t (*func)(osdfuncparm_t const * const));
void OSD_WriteAliases(FILE *fp);
void OSD_WriteCvars(FILE *fp);
static inline void OSD_SetHistory(int32_t histIdx, const char *src)
{
osd->history.buf[histIdx] = (char *)Xmalloc(OSDEDITLENGTH);
Bstrncpyz(osd->history.buf[histIdx], src, OSDEDITLENGTH);
}
extern int32_t osdcmd_restartvid(osdfuncparm_t const * const parm);
extern void M32RunScript(const char *s);
#ifdef __cplusplus
}
#endif
#endif // osd_h_