⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oxbow.h

📁 OXCC is a multipass, interpreting C compiler with several language extensions. It generates an Archi
💻 H
📖 第 1 页 / 共 5 页
字号:

int OXPORT_get_curr_screen_mode(void);
int OXPORT_get_curr_screen_cols(void);
int OXPORT_get_curr_screen_rows(void);
void OXPORT_get_video_modes(void);
void OXPORT_set_video_mode(int mode);
void OXPORT_set_ORIGvideo_mode(int mode);
void OXPORT_read_palette_register(int n, int *red, int *green, int *blue);
void OXPORT_write_palette_register(int n, int *red, int *green, int *blue);
void OXPORT_clear_screen(void);
void OXPORT_fill_screen_rect(int color, int x, int y, int w, int h);

void OXPORT_start_timer(void);
void OXPORT_stop_timer(void);
void OXPORT_set_thread_msec(int msec);
void OXPORT_compute_final_tick(void);
unsigned long OXPORT_get_clock_ticks(void);
unsigned long OXPORT_get_timestamp(void);
unsigned OXPORT_wait_msec(unsigned n);
void OXPORT_beep(int freq);
void OXPORT_beeplen(int freq, int msec);

void OXPORT_crash(char *msg);
void OXPORT_nulproc(void);

int CF_was_msg(void);
CFmsg CF_get_msg(void);
void CF_InitIO(long arg, _LONGLONG_ (*msgproc)());

#define CF_REMOTE_KEYBOARD (1)
#define CF_USE_EVENTS	(2)
#define CF_USE_MESSAGES	(4)
#define CF_USE_GUI		(8)
#define CF_ANSI_TEXT_OUTPUT	(16)
#define CF_BIOS_TEXT_OUTPUT (32)
#define CF_DIRECT_TEXT_OUTPUT (64)
#define CF_GRAPHIC_TEXT_OUTPUT (128)
#define CF_GRAPHIC_OUTPUT (256)
#define CF_TEXT_MODE (CF_ANSI_TEXT_OUTPUT|CF_BIOS_TEXT_OUTPUT|CF_DIRECT_TEXT_OUTPUT)
#define CF_GRAPHIC_MODE (CF_GRAPHIC_TEXT_OUTPUT|CF_GRAPHIC_OUTPUT)

extern _LONGLONG_
DeliverMessage(vobject to, CFmsg m);
extern void
QueueMessage(vobject to, CFmsg m);

#define SendEvent(to, msg, sparm, lparm) \
({CFmsg it;it.E_TYPE=msg;it.M_SPARAM=(short)sparm;it.M_LPARAM=(long)lparm; \
DeliverMessage(to,it);})

#define PostEvent(to, msg, sparm, lparm) \
({CFmsg it;it.E_TYPE=msg;it.M_SPARAM=(short)sparm;it.M_LPARAM=(long)lparm; \
QueueMessage(to,it);})

extern _LONGLONG_
ConstructCommand(vobject to, char *cmd, short sparm, long lparm, int flag);

#define SendCommand(to, cmd, sparm, lparm) \
ConstructCommand(to, #cmd, sparm, lparm, 0)

#define PostCommand(to, cmd, sparm, lparm) \
ConstructCommand(to, #cmd, sparm, lparm, 1)

extern vobject CaptureKeyboard(vobject self, int nochild);
extern void ReleaseKeyboard(vobject self, vobject prev);
extern vobject CaptureMouse(vobject self, int nochild);
extern void ReleaseMouse(vobject self, vobject prev);
extern void CaptureMotion(vobject self);
extern void ReleaseMotion(vobject self);
extern void CaptureClock(vobject self);
extern void ReleaseClock(vobject self);
extern void CaptureTicker(vobject self);
extern void ReleaseTicker(vobject self);
extern void EnterLeave(int flag);

/* ------------ Global coordinate macros -------------- */

#define SCREENXMAX _SCREENXMAX
#define SCREENYMAX _SCREENYMAX
#define SCREENHEIGHT _SCREENHEIGHT
#define SCREENWIDTH _SCREENWIDTH
#define EFFECTIVE_SCREENWIDTH _EFFECTIVE_SCREENWIDTH
#define EFFECTIVE_SCREENHEIGHT _EFFECTIVE_SCREENHEIGHT
#define GLOBALHEIGHT _GLOBALHEIGHT
#define GLOBALWIDTH _GLOBALWIDTH
#define FONTHEIGHT _FONTHEIGHT
#define FONTWIDTH _FONTWIDTH
#define CURCOLS _CURCOLS
#define CURROWS _CURROWS
#define MAXROWS _MAXROWS
#define MAXCOLS _MAXCOLS
#define LINEHEIGHT _LINEHEIGHT
#define CHARWIDTH _CHARWIDTH
#define GRIDWIDTH _GRIDWIDTH
#define GRIDHEIGHT _GRIDHEIGHT
#define GLOBALX _GLOBALX
#define GLOBALY _GLOBALY
#define UserXMin GLOBALX
#define UserYMin GLOBALY
#define UserXMax (GLOBALX+GLOBALWIDTH-1)
#define UserYMax (GLOBALY+GLOBALHEIGHT-1)
#define VBUF_SIZE (MAXROWS*MAXCOLS)
#define VIDEOMODE _VIDEOMODE
#define LOOK _LOOK
#define FEEL _FEEL
#define REMOTEFD _REMOTEFD

extern int GuiEnabled;
extern long AppArg;
extern int _SCREENXMAX;
extern int _SCREENYMAX;
extern int _SCREENHEIGHT;
extern int _SCREENWIDTH;
extern int _EFFECTIVE_SCREENWIDTH;
extern int _EFFECTIVE_SCREENHEIGHT;
extern int _GLOBALHEIGHT;
extern int _GLOBALWIDTH;
extern int _FONTHEIGHT;
extern int _FONTWIDTH;
extern int _CURCOLS;
extern int _CURROWS;
extern int _LINEHEIGHT;
extern int _CHARWIDTH;
extern int _GRIDWIDTH;
extern int _GRIDHEIGHT;
extern int _GLOBALX;
extern int _GLOBALY;
extern int _MAXROWS;
extern int _MAXCOLS;
extern int _VIDEOMODE;
extern int _LOOK;
extern int _FEEL;
extern int _REMOTEFD;
extern DRIVER_MODE_ENTRY *TextModes;
extern int numTextModes;
extern DRIVER_MODE_ENTRY *GraphicModes;
extern int numGraphicModes;
extern int MouseEnabled;

#define DEFAULT_LOOK 0
#define LOOK_TEXT1		1
#define LOOK_TEXT2		2
#define LOOK_TEXT3		3
#define LOOK_TEXT4		4
#define LOOK_GRAPHICS1	20
#define LOOK_GRAPHICS2	21
#define LOOK_GRAPHICS3	22
#define LOOK_GRAPHICS4	23
#define LOOK_GRAPHICS5	24

#define DEFAULT_FEEL 0
#define FEEL_CUA 1


#define rdiv(a,b) \
	((a)/(b))
#define Scale(var,arg,num,den)	\
((var) = rdiv(((arg) * (num)),(den)))

#define g2sx(x) \
Scale(x,x,EFFECTIVE_SCREENWIDTH,GLOBALWIDTH)
#define g2sy(y) \
Scale(y,y,EFFECTIVE_SCREENHEIGHT,GLOBALHEIGHT)
#define s2gx(x) \
Scale(x,x,GLOBALWIDTH,EFFECTIVE_SCREENWIDTH)
#define s2gy(y) \
Scale(y,y,GLOBALHEIGHT,EFFECTIVE_SCREENHEIGHT)
#define c2gx(x) \
Scale(x,x,GLOBALWIDTH,CURCOLS)
#define c2gy(y) \
Scale(y,y,GLOBALHEIGHT,CURROWS)
#define c2sx(x) \
Scale(x,x,EFFECTIVE_SCREENWIDTH,CURCOLS)
#define c2sy(y) \
Scale(y,y,EFFECTIVE_SCREENHEIGHT,CURROWS)
#define s2cx(x) \
Scale(x,x,1,FONTWIDTH)
#define s2cy(y) \
Scale(y,y,1,FONTHEIGHT)
#define g2cx(x) \
Scale(x,x,1,CHARWIDTH)
#define g2cy(y) \
Scale(y,y,1,LINEHEIGHT)


vobject
NewGuiClass(
    object cl,       	      /* class      				*/
    char *title,              /* window title or NULL       */
    int left, int top,        /* upper left coordinates     */
    int height, int width,    /* dimensions (global coords) */
    void *extension,          /* pointer to additional data */
    void *parent,             /* parent of window (a window)*/
	_LONGLONG_ (*msgproc)(),  /* message proc for user      */
    unsigned long attrib,     /* window attributes          */
	int look, int feel
	);

/* PARSER STUFF */
#define ASTMODE 1
#define LEXMODE 2
#define EOF_MARK       26   /* End of file character.                  */
#define ACTION         1           /* Call action function.            */
#define MAKENODE       2           /* Make a node.                     */
#define DELTREE        4           /* Delete the subtree.              */
#define PL_ACTION	0x10
#define PL_MAKENODE 0x20
#define PL_DELTREE  0x40
#define LEFT_ASSOC 0
#define RIGHT_ASSOC 1
#define NON_ASSOC 2
#define PARSER_STKSIZE 512
#define ASTMINADDR ((AstP)(100000))	/* lowest allowed address (line numbers here ) */

/*--- PARSER SYMBOL Structure. ---------------------------------------------*/

typedef struct                 /* Symbol table cell structure (4 bytes). */
{
   char   *name;		/* Pointer to name.               */
} PARSER_SYMBOL;

typedef struct
{
	int cnt;
	PARSER_SYMBOL *ptr;
} PARSER_SYMBOL_TABLE;

/*--- AST NODE Structure. --------------------------------------------------*/
#ifndef __ASTNODEH__
#define __ASTNODEH__
typedef union _datum { /* 16 bytes */
	STOR stor;
	CAT cat;
	struct {
		char d[16];
	} chr;
	struct {
		unsigned char d[16];
	} uchr;
	struct {
		short d[8];
	} shrt;
	struct {
		unsigned short d[8];
	} ushrt;
	struct {
		long d[4];
	} lng;
	struct {
		unsigned long d[4];
	} ulng;
	struct {
		_LONGLONG_ d[2];
	} lnglng;
	struct {
		unsigned _LONGLONG_ d[2];
	} ulnglng;
	struct {
		void *d[4];
	} ptr;
	unsigned char	Uuchar;
	char			Uchar;
	unsigned short	Uushort;
	short			Ushort;
	unsigned int	Uuint;
	int				Uint;
	unsigned long	Uulong;
	long			Ulong;
	void *			Upointer;
	float			Ufloat;
	double			Udouble;
	unsigned _LONGLONG_ Uulonglong;
	_LONGLONG_		Ulonglong;

#if SUPPORT_LONG_DOUBLE
	long double		Ulongdouble;
#endif
} DATUM, *PDATUM;

typedef struct  ast_node 
{/* MINIMUM AST Node structure. (20 bytes)  */
   struct ast_node *right;
   struct ast_node *down;
   short  symb;				/* Symbol number */
   short    id;				/* Nodeid  ((id<<6)|subid) */
   unsigned short Tindx; 	/* Terminal type (is a symbol number) */
   unsigned short lineno;	/* line number */
   unsigned short flags;	/* general purpose flags */
   unsigned char fileno;	/* File number */
   unsigned char colno;		/* column of input text */
} AST_NODE, *AstP;

#endif /* __ASTNODEH__ */

typedef struct
{
	int cnt;
	int freecnt;
	AstP free;
} PARSER_AST_TABLE;

/* The structure at the beginning of each set of tables in the .lod file */
typedef struct lodtable {

long	type;		/* type of tables, LEXMODE, ASTMODE etc */
long	next;		/* offset from start of current structure to next structure */

/* Offsets to tables in the file */
long	t_D_red;
long	t_R_start;
long	t_R_symbol;
long	t_R_prod;
long	t_rBase;
long	t_Head;
long	t_MT_beg;
long	t_MT_tran;
long	t_MN_beg;
long	t_MN_tran;
long	t_M_bits;
long	t_G_symbol;
long	t_PL;
long	t_LGT;
long	n_actions;

long	t_ACTIONS;
long	t_ACTIONSTRINGS;
long	t_ia_numb;			/* unused */
long	t_oa_numb;			/* unused */
long	t_ia_proc;			/* unused */
long	t_oa_proc;			/* unused */
long	t_node_proc;		/* unused */

/* constants */
long	TM;
long	bitwords;
long	n_terms;
long	n_vars;
long	n_symbs;
long	n_rules;
long	n_states;
long	maxtoken;
} LODTABLE;
typedef struct _pactions {
	void (*func)();
	int args[9];
} *PACTIONS;

typedef struct {
	PARSER_AST_TABLE pat;
	PARSER_SYMBOL_TABLE pst;
	AstP	root;
	int		category;
	char	language[32];

	struct lodtable *lod_table;
	void	*in_file;
	void	*symhandle;
	void	*ROOT;
	unsigned int		line_numb;
	unsigned int		line_char;
	unsigned int		line_file;	/* entry in the 'files' array below */
	int		parsecnt;
	int		n_actions;
	PACTIONS ACTIONS;
	char 	*ACTIONSTRINGS;
	struct ptable	*ptab;
	struct ltable	*ltab;
	int		LSP;
	int		errors;
#define PARSER_DEBUG 1
#define LEXER_DEBUG 2
#define NO_DYNAMIC_TOKENS 4
	int 	debug;
	int 	lastsymnum;
	int		lastclass;
	char	*actionerr;
	int		maxfile;
	int		numfiles;
	int		curfile;
	int		totsymlen;
	int		hashdups;
	short	L_stack[4];
	short	files[64];	/* contains symbol numbers of filenames */
	short	blockinID;
	short	blockoutID;
	int		blocklevel; /* block nesting level */
	char	*chunkbase;	/* symbol text is stored in chunks during parse */
	char	*chunkend;
	char	*symbase;
	char	*symend;
	_LONGLONG_	symhash;
	unsigned int symspot;
	int		(*readfunc)();	/* stream reader function */
	int		(*writefunc)();	/* stream writer function */
	int		(*readcharfunc)();
	int		(*writecharfuc)();
	int		(*statfunc)();
	int		fstack_depth;
	int		fstack[64];		/* for included file nesting */
	int		obj_inbufcnt;
	int		obj_inbufsize;
	unsigned char	obj_inbuf[128];
	int		astchunk;
	int		symbolchunk;
	int		textchunk;
	int		astsize;
} PG;

typedef struct ptable {

/* Pointers to tables produced by the parser generator 	*/

PG		*pg;		/* Pointer to multiparser global variable structure */
short	*D_red;     /* Default reduction.                        */
short	*R_start;   /* Reduction start.                          */
short	*R_symbol;  /* Reduction symbol.                         */
short	*R_prod;    /* Reduction production.                     */
short	*rBase;
short	*Head;         /* Head symbol number for a production.   */
short	*MT_beg;
short	*MT_tran;
short	*MN_beg;
short	*MN_tran;
short	*M_bits;
long	*G_symbol;		/* Symbol names of the grammar			*/
short 	*PL;			/* Production length less one.			*/
short	*LGT;
long	*ACTIONS;
char	*ACTIONSTRINGS;

/* constants provided by the load module */
short	TM;
short	bitwords;
int		n_terms;
int		n_vars;
int		n_symbs;
int		n_states;
int		n_rules;
int		n_actions;
short	maxtoken;

/* variables

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -