
// HSPOSCmp
// Copyright (c) 2012 mogesystem

/* hsp.h */

#define RGB(r,g,b)	(((r << 8) & 0xf800) | ((g << 3) & 0x07e0) | (b >> 3))

struct HSPPOS {
	int x, y;
};

typedef enum {
	ST_INT = 0,
	//ST_DBL = 1,
	ST_STR = 2,
	ST_LABEL = 3
} StackType;

typedef struct {
	StackType type;
	int ival;
	//double dval;
	char *str;
	int strsize;
} PVal;

typedef int *CHSP3_TASK;

#ifndef HSP3_MEMVAL
#define HSP3_MEMVAL
extern PVal mem_var[256];
#endif

#define STACKSIZE 256

int loadimg(char *, int, int);

void __HspEntry(void);
void hsp_task(void);
void InitHSP(void);
void PushStr(char *);
void PushInt(int);
void PushLabel(int);
void PushVar(PVal *, int);
void PushVAP(PVal *, int);
void PushExtvar(int, int);
void PushSysvar(int, int);
void PushFuncEnd(void);
void VarSet(PVal *, int);
void VarInc(PVal *, int);
void CalcAddI(void);
void CalcSubI(void);
void CalcMulI(void);
void CalcEqI(void);
void CalcNeI(void);
void CalcLtI(void);
void CalcGtI(void);
void CalcLtEqI(void);
void CalcGtEqI(void);
void VarCalc(PVal *, int, int);
int HspIf(void);
void mes(char *);
void line(int, int, int, int);
void Intcmd(int, int);
void Extcmd(int, int);
void Prgcmd(int, int);
void TaskSwitch(int);

/* stack */
void StackInit(void);
void StackPushInt(int);
//void StackPushDouble(double);
void StackPushStr(char *, int);
void StackPushLabel(int);
PVal StackPop(void);

/* end of hsp.h */
