OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [libnetworking/] [rtems_webserver/] [ej.h] - Rev 589

Go to most recent revision | Compare with Previous | Blame | View Log

/* 
 *	ej.h -- Ejscript(TM) header
 *
 *	Copyright (c) Go Ahead Software, Inc., 1992-1999
 *
 *	See the file "license.txt" for information on usage and redistribution
 */
 
#ifndef _h_EJ
#define _h_EJ 1
 
/******************************** Description *********************************/
 
/* 
 *	Go Ahead Ejscript(TM) header. This defines the Ejscript API and internal
 *	structures.
 */
 
/********************************* Includes ***********************************/
 
#include	<ctype.h>
#include	<stdarg.h>
#include	<stdlib.h>
#ifndef CE
	#include	<fcntl.h>
#endif
 
#if LYNX
	#include	<unistd.h>
#endif
 
#ifdef QNX4
	#include	<dirent.h>
#endif
 
#if UEMF
	#include	"uemf.h"
#else
	#include	<param.h>
	#include	<stat.h>
	#include	"basic/basicInternal.h"
	#include	"emf/emf.h"
	#include	"webs/webs.h"
#endif
 
/********************************** Defines ***********************************/
/*
 *	Constants
 */
#define EJ_INC				110		/* Growth for tags/tokens */
#define EJ_OFFSET			1		/* hAlloc doesn't like 0 entries */
#define EJ_MAX_RECURSE		100		/* Sanity for maximum recursion */
 
/*
 *	Ejscript Lexical analyser tokens
 */
#define TOK_ERR				-1		/* Any error */
#define TOK_LPAREN			1		/* ( */
#define TOK_RPAREN			2		/* ) */
#define TOK_IF				3		/* if */
#define TOK_ELSE			4		/* else */
#define TOK_LBRACE			5		/* { */
#define TOK_RBRACE			6		/* } */
#define TOK_LOGICAL			7		/* ||, &&, ! */
#define TOK_EXPR			8		/* +, -, /, % */
#define TOK_SEMI			9		/* ; */
#define TOK_LITERAL			10		/* literal string */
#define TOK_FUNCTION		11		/* function name */
#define TOK_NEWLINE			12		/* newline white space */
#define TOK_ID				13		/* function name */
#define TOK_EOF				14		/* End of script */
#define TOK_COMMA			15		/* Comma */
#define TOK_VAR				16		/* var */
#define TOK_ASSIGNMENT		17		/* = */
#define TOK_FOR				18		/* for */
#define TOK_INC_DEC			19		/* ++, -- */
#define TOK_RETURN			20		/* return */
 
/*
 *	Expression operators
 */
#define EXPR_LESS			1		/* < */
#define EXPR_LESSEQ			2		/* <= */
#define EXPR_GREATER		3		/* > */
#define EXPR_GREATEREQ		4		/* >= */
#define EXPR_EQ				5		/* == */
#define EXPR_NOTEQ			6		/* != */
#define EXPR_PLUS			7		/* + */
#define EXPR_MINUS			8		/* - */
#define EXPR_DIV			9		/* / */
#define EXPR_MOD			10		/* % */
#define EXPR_LSHIFT			11		/* << */
#define EXPR_RSHIFT			12		/* >> */
#define EXPR_MUL			13		/* * */
#define EXPR_ASSIGNMENT		14		/* = */
#define EXPR_INC			15		/* ++ */
#define EXPR_DEC			16		/* -- */
 
/*
 *	Conditional operators
 */
#define COND_AND			1		/* && */
#define COND_OR				2		/* || */
#define COND_NOT			3		/* ! */
 
/*
 *	States
 */
#define STATE_ERR				-1			/* Error state */
#define STATE_EOF				1			/* End of file */
#define STATE_COND				2			/* Parsing a "(conditional)" stmt */
#define STATE_COND_DONE			3
#define STATE_RELEXP			4			/* Parsing a relational expr */
#define STATE_RELEXP_DONE		5
#define STATE_EXPR				6			/* Parsing an expression */
#define STATE_EXPR_DONE			7
#define STATE_STMT				8			/* Parsing General statement */
#define STATE_STMT_DONE			9
#define STATE_STMT_BLOCK_DONE	10			/* End of block "}" */
#define STATE_ARG_LIST			11			/* Function arg list */
#define STATE_ARG_LIST_DONE		12
#define STATE_DEC_LIST			16			/* Declaration list */
#define STATE_DEC_LIST_DONE		17
#define STATE_DEC				18
#define STATE_DEC_DONE			19
#define STATE_BEGIN				STATE_STMT
 
/*
 *	Flags. Used in ej_t and as parameter to parse()
 */
#define FLAGS_EXE				0x1				/* Execute statements */
#define FLAGS_VARIABLES			0x2				/* Allocated variables store */
#define FLAGS_FUNCTIONS			0x4				/* Allocated function store */
 
/*
 *	Function call structure
 */
typedef struct {
	char_t		*fname;							/* Function name */
	char_t		**args;							/* Args for function (halloc) */
	int			nArgs;							/* Number of args */
} ejfunc_t;
 
/*
 *	EJ evaluation block structure
 */
typedef struct ejEval {
	ringq_t		tokbuf;							/* Current token */
	ringq_t		script;							/* Input script for parsing */
	char_t		*putBackToken;					/* Putback token string */
	int			putBackTokenId;					/* Putback token ID */
	char_t		*line;							/* Current line */
	int			lineLength;						/* Current line length */
	int			lineNumber;						/* Parse line number */
	int			lineColumn;						/* Column in line */
} ejinput_t;
 
/*
 *	Per Ejscript session structure
 */
typedef struct ej {
	ejinput_t	*input;							/* Input evaluation block */
	sym_fd_t	functions;						/* Symbol table for functions */
	sym_fd_t	*variables;						/* hAlloc list of variables */
	int			variableMax;					/* Number of entries */
	ejfunc_t	*func;							/* Current function */
	char_t		*result;						/* Current expression result */
	char_t		*error;							/* Error message */
	char_t		*token;							/* Pointer to token string */
	int			tid;							/* Current token id */
	int			eid;							/* Halloc handle */
	int			flags;							/* Flags */
	int			userHandle;						/* User defined handle */
} ej_t;
 
/******************************** Prototypes **********************************/
 
extern int		ejOpenEngine(sym_fd_t variables, sym_fd_t functions);
extern void		ejCloseEngine(int eid);
extern int		ejOpenBlock(int eid);
extern int		ejCloseBlock(int eid, int vid);
extern char_t	*ejEval(int eid, char_t *script, char_t **emsg);
extern char_t	*ejEvalBlock(int eid, char_t *script, char_t **emsg);
extern char_t	*ejEvalFile(int eid, char_t *path, char_t **emsg);
extern int 		ejSetGlobalFunction(int eid, char_t *name, 
					int (*fn)(int eid, void *handle, int argc, char_t **argv));
extern void		*ejGetGlobalFunction(int eid, char_t *name);
extern int 		ejSetGlobalFunctionDirect(sym_fd_t functions, char_t *name, 
					int (*fn)(int eid, void *handle, int argc, char_t **argv));
extern int 		ejArgs(int argc, char_t **argv, char_t *fmt, ...);
extern void 	ejError(ej_t* ep, char_t* fmt, ...);
extern void		ejSetUserHandle(int eid, int handle);
extern int		ejGetUserHandle(int eid);
extern int		ejGetLineNumber(int eid);
extern void		ejSetResult(int eid, char_t *s);
extern char_t	*ejGetResult(int eid);
extern void		ejSetVar(int eid, char_t *var, char_t *value);
extern void		ejSetLocalVar(int eid, char_t *var, char_t *value);
extern int		ejGetVar(int eid, char_t *var, char_t **value);
extern void		ejSetGlobalVar(int eid, char_t *var, char_t *value);
 
extern int 		ejLexOpen(ej_t* ep);
extern void 	ejLexClose(ej_t* ep);
extern int	 	ejLexOpenScript(ej_t* ep, char_t *script);
extern void 	ejLexCloseScript(ej_t* ep);
extern void 	ejLexSaveInputState(ej_t* ep, ejinput_t* state);
extern void 	ejLexFreeInputState(ej_t* ep, ejinput_t* state);
extern void 	ejLexRestoreInputState(ej_t* ep, ejinput_t* state);
extern int		ejLexGetToken(ej_t* ep, int state);
extern void		ejLexPutbackToken(ej_t* ep, int tid, char_t *string);
 
extern sym_fd_t	ejGetVariableTable(int eid);
extern sym_fd_t	ejGetFunctionTable(int eid);
 
extern int		ejEmfOpen(int eid);
extern void		ejEmfClose(int eid);
 
extern int ejEmfDbRead(int eid, void *handle, int argc, char_t **argv);
extern int ejEmfDbReadKeyed(int eid, void *handle, int argc, char_t **argv);
extern int ejEmfDbTableGetNrow(int eid, void *handle, int argc, char_t **argv);
extern int ejEmfTrace(int eid, void *handle, int argc, char_t **argv);
extern int ejEmfDbWrite(int eid, void *handle, int argc, char_t **argv);
 
#endif /* _h_EJ */
 
/*****************************************************************************/
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.