/* * Copyright (C) 1995-1997 Christopher D. Granz * * This header may not be removed. * * Refer to the file "License" included in this package for further * information and before using any of the following. */ #ifndef __EMC_H__ #define __EMC_H__ #include "emerald.h" /* * Defines */ #ifdef str_free #undef str_free #endif #define str_free( s ) \ if ( (s) != NULL ) \ free_mem( (void **) &(s) ); #define NODE_IDENTIFIER 61 #define NODE_STRING 62 #define NODE_INT 63 #define NODE_FLOAT 64 #define NODE_INFO 48 #define NODE_FUNCTION 49 #define NODE_OPER_INDEX 50 #define NODE_OPER_FUNC_CALL 51 #define NODE_OPER_INC 52 #define NODE_OPER_DEC 53 #define NODE_UOPER_INC 54 #define NODE_UOPER_DEC 55 #define NODE_UOPER_ADDRESS_OF 56 #define NODE_UOPER_BUILTIN_FUNC 57 #define NODE_UOPER_PLUS 58 #define NODE_UOPER_MINUS 59 #define NODE_UOPER_NOT_EQUAL 60 #define NODE_OPER_MUL 32 #define NODE_OPER_DIV 33 #define NODE_OPER_MOD 34 #define NODE_OPER_ADD 35 #define NODE_OPER_SUB 36 #define NODE_OPER_LEFT 37 #define NODE_OPER_RIGHT 38 #define NODE_ROPER_LESS 39 #define NODE_ROPER_GREATER 40 #define NODE_ROPER_LESS_EQUAL 41 #define NODE_ROPER_GREATER_EQUAL 42 #define NODE_ROPER_EQUAL 43 #define NODE_ROPER_NOT_EQUAL 44 #define NODE_OPER_AND 45 #define NODE_OPER_XOR 46 #define NODE_OPER_OR 47 #define NODE_LOPER_AND 16 #define NODE_LOPER_OR 17 #define NODE_COPER_QUEST 18 #define NODE_COPER_COLON 19 #define NODE_OPER_ASSIGN 20 #define NODE_OPER_MUL_ASSIGN 21 #define NODE_OPER_DIV_ASSIGN 22 #define NODE_OPER_MOD_ASSIGN 23 #define NODE_OPER_ADD_ASSIGN 24 #define NODE_OPER_SUB_ASSIGN 25 #define NODE_OPER_LEFT_ASSIGN 26 #define NODE_OPER_RIGHT_ASSIGN 27 #define NODE_OPER_AND_ASSIGN 28 #define NODE_OPER_XOR_ASSIGN 29 #define NODE_OPER_OR_ASSIGN 30 #define NODE_RETURNED 31 #define NODE_TYPE_INT 1 #define NODE_TYPE_FLOAT 2 #define NODE_TYPE_STRING 3 #define NODE_TYPE_OBJECT 4 #define NODE_TYPE_ARRAY 5 #define NODE_STAR 6 #define NODE_TREE 7 #define NODE_IF 8 #define NODE_ELSE 9 #define NODE_WHILE 10 #define NODE_BROKEN 11 #define NODE_CONTINUED 12 #define NODE_BREAK 13 #define NODE_CONTINUE 14 #define NODE_RETURN 15 /* * Structures */ /* * One node in the parse tree. */ typedef struct node { intt iType; union { long lInt; double dFloat; char * pString; struct node * pLeft; } uL; struct { struct node * pRight; } uR; } NODE; typedef struct tmp_sym_entry { struct tmp_sym_entry * pNext; char * pSymbol; intt iType; } TMP_SYM_ENTRY; typedef struct sym_entry { struct sym_entry * pNext; char * pSymbol; } SYM_ENTRY; typedef struct func_entry { struct func_entry * pNext; unsigned short int usiSymName; flags fFuncFlags; intt iNumArgs; intt iNumReturn; unsigned long ulCodeSize; byte * pCode; } FUNC_ENTRY; /* * Prototypes */ /* * main.c */ int main ( int, char *[] ); void write_emo ( FILE * ); /* * memory.c */ void * alloc_mem ( register size_t ); void * realloc_mem ( register void *, register size_t ); void free_mem ( register void ** ); void zero_out ( register void *, register size_t ); char * str_dup ( register char * ); /* * fileio.c */ FILE * open_file ( char *, char * ); void close_file ( FILE * ); /* * error.c */ void warning ( char *, ... ); void error ( char *, ... ); void fatal ( char *, ... ); /* * node.c */ NODE * node_int ( long ); NODE * node_float ( double ); NODE * node_string ( int, char * ); NODE * node_tree ( int, NODE *, NODE * ); /* * lex.yy.c */ int yylex ( void ); int yywrap ( void ); /* * y.tab.c */ int yyparse ( void ); /* * Globals */ extern int errno; extern char cNullChar; extern FILE * yyin; extern FILE * yyout; extern char * yytext; extern NODE * pNodeTree; extern TMP_SYM_ENTRY pSymbolTable; extern unsigned short int usiSymbolListSize; extern SYM_ENTRY * pSymbolList; extern unsigned short int usiFuncListSize; extern FUNC_ENTRY * pFuncList; #endif /* __EMC_H__ */ /* * End of emc.h */