source: rtems/cpukit/httpd/ej.h @ 9b05600

4.104.114.84.95
Last change on this file since 9b05600 was c1cdaa0, checked in by Joel Sherrill <joel.sherrill@…>, on 10/27/99 at 12:50:33

Patch from Emmanuel Raguet <raguet@…> and Eric Valette
<valette@…> to add a port of the GoAhead? web server
(httpd) to the RTEMS build tree. They have successfully used
this BSP on i386/pc386 and PowerPC/mcp750.

Mark and Joel spoke with Nick Berliner <nickb@…> on
26 Oct 1999 about this port and got verbal approval to include
it in RTEMS distributions.

  • Property mode set to 100644
File size: 7.2 KB
Line 
1/*
2 *      ej.h -- Ejscript(TM) header
3 *
4 *      Copyright (c) Go Ahead Software, Inc., 1992-1999
5 *
6 *      See the file "license.txt" for information on usage and redistribution
7 */
8
9#ifndef _h_EJ
10#define _h_EJ 1
11
12/******************************** Description *********************************/
13
14/*
15 *      Go Ahead Ejscript(TM) header. This defines the Ejscript API and internal
16 *      structures.
17 */
18
19/********************************* Includes ***********************************/
20
21#include        <ctype.h>
22#include        <stdarg.h>
23#include        <stdlib.h>
24#ifndef CE
25        #include        <fcntl.h>
26#endif
27
28#if LYNX
29        #include        <unistd.h>
30#endif
31
32#ifdef QNX4
33        #include        <dirent.h>
34#endif
35
36#if UEMF
37        #include        "uemf.h"
38#else
39        #include        <param.h>
40        #include        <stat.h>
41        #include        "basic/basicInternal.h"
42        #include        "emf/emf.h"
43        #include        "webs/webs.h"
44#endif
45
46/********************************** Defines ***********************************/
47/*
48 *      Constants
49 */
50#define EJ_INC                          110             /* Growth for tags/tokens */
51#define EJ_OFFSET                       1               /* hAlloc doesn't like 0 entries */
52#define EJ_MAX_RECURSE          100             /* Sanity for maximum recursion */
53
54/*
55 *      Ejscript Lexical analyser tokens
56 */
57#define TOK_ERR                         -1              /* Any error */
58#define TOK_LPAREN                      1               /* ( */
59#define TOK_RPAREN                      2               /* ) */
60#define TOK_IF                          3               /* if */
61#define TOK_ELSE                        4               /* else */
62#define TOK_LBRACE                      5               /* { */
63#define TOK_RBRACE                      6               /* } */
64#define TOK_LOGICAL                     7               /* ||, &&, ! */
65#define TOK_EXPR                        8               /* +, -, /, % */
66#define TOK_SEMI                        9               /* ; */
67#define TOK_LITERAL                     10              /* literal string */
68#define TOK_FUNCTION            11              /* function name */
69#define TOK_NEWLINE                     12              /* newline white space */
70#define TOK_ID                          13              /* function name */
71#define TOK_EOF                         14              /* End of script */
72#define TOK_COMMA                       15              /* Comma */
73#define TOK_VAR                         16              /* var */
74#define TOK_ASSIGNMENT          17              /* = */
75#define TOK_FOR                         18              /* for */
76#define TOK_INC_DEC                     19              /* ++, -- */
77#define TOK_RETURN                      20              /* return */
78
79/*
80 *      Expression operators
81 */
82#define EXPR_LESS                       1               /* < */
83#define EXPR_LESSEQ                     2               /* <= */
84#define EXPR_GREATER            3               /* > */
85#define EXPR_GREATEREQ          4               /* >= */
86#define EXPR_EQ                         5               /* == */
87#define EXPR_NOTEQ                      6               /* != */
88#define EXPR_PLUS                       7               /* + */
89#define EXPR_MINUS                      8               /* - */
90#define EXPR_DIV                        9               /* / */
91#define EXPR_MOD                        10              /* % */
92#define EXPR_LSHIFT                     11              /* << */
93#define EXPR_RSHIFT                     12              /* >> */
94#define EXPR_MUL                        13              /* * */
95#define EXPR_ASSIGNMENT         14              /* = */
96#define EXPR_INC                        15              /* ++ */
97#define EXPR_DEC                        16              /* -- */
98
99/*
100 *      Conditional operators
101 */
102#define COND_AND                        1               /* && */
103#define COND_OR                         2               /* || */
104#define COND_NOT                        3               /* ! */
105
106/*
107 *      States
108 */
109#define STATE_ERR                               -1                      /* Error state */
110#define STATE_EOF                               1                       /* End of file */
111#define STATE_COND                              2                       /* Parsing a "(conditional)" stmt */
112#define STATE_COND_DONE                 3
113#define STATE_RELEXP                    4                       /* Parsing a relational expr */
114#define STATE_RELEXP_DONE               5
115#define STATE_EXPR                              6                       /* Parsing an expression */
116#define STATE_EXPR_DONE                 7
117#define STATE_STMT                              8                       /* Parsing General statement */
118#define STATE_STMT_DONE                 9
119#define STATE_STMT_BLOCK_DONE   10                      /* End of block "}" */
120#define STATE_ARG_LIST                  11                      /* Function arg list */
121#define STATE_ARG_LIST_DONE             12
122#define STATE_DEC_LIST                  16                      /* Declaration list */
123#define STATE_DEC_LIST_DONE             17
124#define STATE_DEC                               18
125#define STATE_DEC_DONE                  19
126#define STATE_BEGIN                             STATE_STMT
127
128/*
129 *      Flags. Used in ej_t and as parameter to parse()
130 */
131#define FLAGS_EXE                               0x1                             /* Execute statements */
132#define FLAGS_VARIABLES                 0x2                             /* Allocated variables store */
133#define FLAGS_FUNCTIONS                 0x4                             /* Allocated function store */
134
135/*
136 *      Function call structure
137 */
138typedef struct {
139        char_t          *fname;                                                 /* Function name */
140        char_t          **args;                                                 /* Args for function (halloc) */
141        int                     nArgs;                                                  /* Number of args */
142} ejfunc_t;
143
144/*
145 *      EJ evaluation block structure
146 */
147typedef struct ejEval {
148        ringq_t         tokbuf;                                                 /* Current token */
149        ringq_t         script;                                                 /* Input script for parsing */
150        char_t          *putBackToken;                                  /* Putback token string */
151        int                     putBackTokenId;                                 /* Putback token ID */
152        char_t          *line;                                                  /* Current line */
153        int                     lineLength;                                             /* Current line length */
154        int                     lineNumber;                                             /* Parse line number */
155        int                     lineColumn;                                             /* Column in line */
156} ejinput_t;
157
158/*
159 *      Per Ejscript session structure
160 */
161typedef struct ej {
162        ejinput_t       *input;                                                 /* Input evaluation block */
163        sym_fd_t        functions;                                              /* Symbol table for functions */
164        sym_fd_t        *variables;                                             /* hAlloc list of variables */
165        int                     variableMax;                                    /* Number of entries */
166        ejfunc_t        *func;                                                  /* Current function */
167        char_t          *result;                                                /* Current expression result */
168        char_t          *error;                                                 /* Error message */
169        char_t          *token;                                                 /* Pointer to token string */
170        int                     tid;                                                    /* Current token id */
171        int                     eid;                                                    /* Halloc handle */
172        int                     flags;                                                  /* Flags */
173        int                     userHandle;                                             /* User defined handle */
174} ej_t;
175
176/******************************** Prototypes **********************************/
177
178extern int              ejOpenEngine(sym_fd_t variables, sym_fd_t functions);
179extern void             ejCloseEngine(int eid);
180extern int              ejOpenBlock(int eid);
181extern int              ejCloseBlock(int eid, int vid);
182extern char_t   *ejEval(int eid, char_t *script, char_t **emsg);
183extern char_t   *ejEvalBlock(int eid, char_t *script, char_t **emsg);
184extern char_t   *ejEvalFile(int eid, char_t *path, char_t **emsg);
185extern int              ejSetGlobalFunction(int eid, char_t *name,
186                                        int (*fn)(int eid, void *handle, int argc, char_t **argv));
187extern void             *ejGetGlobalFunction(int eid, char_t *name);
188extern int              ejSetGlobalFunctionDirect(sym_fd_t functions, char_t *name,
189                                        int (*fn)(int eid, void *handle, int argc, char_t **argv));
190extern int              ejArgs(int argc, char_t **argv, char_t *fmt, ...);
191extern void     ejError(ej_t* ep, char_t* fmt, ...);
192extern void             ejSetUserHandle(int eid, int handle);
193extern int              ejGetUserHandle(int eid);
194extern int              ejGetLineNumber(int eid);
195extern void             ejSetResult(int eid, char_t *s);
196extern char_t   *ejGetResult(int eid);
197extern void             ejSetVar(int eid, char_t *var, char_t *value);
198extern void             ejSetLocalVar(int eid, char_t *var, char_t *value);
199extern int              ejGetVar(int eid, char_t *var, char_t **value);
200extern void             ejSetGlobalVar(int eid, char_t *var, char_t *value);
201
202extern int              ejLexOpen(ej_t* ep);
203extern void     ejLexClose(ej_t* ep);
204extern int              ejLexOpenScript(ej_t* ep, char_t *script);
205extern void     ejLexCloseScript(ej_t* ep);
206extern void     ejLexSaveInputState(ej_t* ep, ejinput_t* state);
207extern void     ejLexFreeInputState(ej_t* ep, ejinput_t* state);
208extern void     ejLexRestoreInputState(ej_t* ep, ejinput_t* state);
209extern int              ejLexGetToken(ej_t* ep, int state);
210extern void             ejLexPutbackToken(ej_t* ep, int tid, char_t *string);
211
212extern sym_fd_t ejGetVariableTable(int eid);
213extern sym_fd_t ejGetFunctionTable(int eid);
214
215extern int              ejEmfOpen(int eid);
216extern void             ejEmfClose(int eid);
217
218extern int ejEmfDbRead(int eid, void *handle, int argc, char_t **argv);
219extern int ejEmfDbReadKeyed(int eid, void *handle, int argc, char_t **argv);
220extern int ejEmfDbTableGetNrow(int eid, void *handle, int argc, char_t **argv);
221extern int ejEmfTrace(int eid, void *handle, int argc, char_t **argv);
222extern int ejEmfDbWrite(int eid, void *handle, int argc, char_t **argv);
223
224#endif /* _h_EJ */
225
226/*****************************************************************************/
Note: See TracBrowser for help on using the repository browser.