* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-#include <stdlib.h> /* bsearch */
-#include <string.h> /* strcmp */
-#include <stdio.h>
-#include <stack>
-#include <string>
-using namespace std;
-
-#include "header.h"
-#include "parser.h"
-#include "directives.h"
+#include "include_all.h"
#define ARRAY_SIZE(x) ((sizeof(x)) / (sizeof(x[0])))
static int
-byte_handler (const char *args)
+byte_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-end_handler (const char *args)
+end_handler (const char *args, CParser* parser)
{
g_stopParsing = 1;
return 0;
}
static int
-endi_handler (const char *args)
+endi_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-endt_handler (const char *args)
+endt_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-fstr_handler (const char *args)
+fstr_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-funct_handler (const char *args)
+funct_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
- return 0;
+
+ parser->add_function(args);
+ return 0;
}
static int
-gstr_handler (const char *args)
+gstr_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-gvar_handler (const char *args)
+gvar_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-insert_handler (const char *args)
+insert_handler (const char *args, CParser* parser)
{
string file_name;
char *p = (char*)args;
//pc.current_file_name = s;
g_parsing_contexts.push(pc);
-
- unsigned saveLineNumber = g_currentLineNumber;
- parse_file(); //s.c_str());
- g_currentLineNumber = saveLineNumber;
+ unsigned saveLineNumber = parser->m_current_line_number;
+ parser->parse_file(); //s.c_str());
+ parser->m_current_line_number = saveLineNumber;
return strlen(args);
}
static int
-len_handler (const char *args)
+len_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-newdirective_handler (const char *args)
+newdirective_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-object_handler (const char *args)
+object_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-prop_handler (const char *args)
+prop_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-str_handler (const char *args)
+str_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-strl_handler (const char *args)
+strl_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-table_handler (const char *args)
+table_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-vocbeg_handler (const char *args)
+vocbeg_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-vocend_handler (const char *args)
+vocend_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-word_handler (const char *args)
+word_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
static int
-zword_handler (const char *args)
+zword_handler (const char *args, CParser* parser)
{
/* !!! TODO !!! */
return 0;
}
-// Sorted array
-static Directive Directives[] = {
- "BYTE", byte_handler,
- "END", end_handler,
- "ENDI", endi_handler,
- "ENDT", endt_handler,
- "FSTR", fstr_handler,
- "FUNCT", funct_handler,
- "GSTR", gstr_handler,
- "GVAR", gvar_handler,
- "INSERT", insert_handler,
- "LEN", len_handler,
- "NEW", newdirective_handler,
- "OBJECT", object_handler,
- "PROP", prop_handler,
- "STR", str_handler,
- "STRL", strl_handler,
- "TABLE", table_handler,
- "VOCBEG", vocbeg_handler,
- "VOCEND", vocend_handler,
- "WORD", word_handler,
- "ZWORD", zword_handler
-};
+
typedef struct
{
}
Directive_handler
-directive_lookup (const char *name, unsigned namelen)
+CDirectives::directive_lookup (const char *name, unsigned namelen)
{
- Name n = { name, namelen };
+ // Sorted array
+ static Directive Directives[] = {
+ "BYTE", byte_handler,
+ "END", end_handler,
+ "ENDI", endi_handler,
+ "ENDT", endt_handler,
+ "FSTR", fstr_handler,
+ "FUNCT", funct_handler,
+ "GSTR", gstr_handler,
+ "GVAR", gvar_handler,
+ "INSERT", insert_handler,
+ "LEN", len_handler,
+ "NEW", newdirective_handler,
+ "OBJECT", object_handler,
+ "PROP", prop_handler,
+ "STR", str_handler,
+ "STRL", strl_handler,
+ "TABLE", table_handler,
+ "VOCBEG", vocbeg_handler,
+ "VOCEND", vocend_handler,
+ "WORD", word_handler,
+ "ZWORD", zword_handler
+ };
+
+ Name n = { name, namelen };
Directive *p =
(Directive *) bsearch (&n, Directives, ARRAY_SIZE (Directives),
sizeof (Directive), namecmp);
return p ? p->handler : NULL;
}
+
+
+CDirectives::CDirectives(CParser *parser) :m_parser(parser)
+{
+}
\ No newline at end of file