X-Git-Url: https://jxself.org/git/?p=zilutils.git;a=blobdiff_plain;f=zilasm%2Fdirectives.cpp;fp=zilasm%2Fdirectives.cpp;h=94c39f982313c9c1c9707e7a36a05992394c0ab6;hp=d15ba894ca7b90237735282d1b02676f7e3fbdbd;hb=b1f151e1500e1fdadafaab6b13df6e0a8f32136e;hpb=c0f515aab1285fdedb65d4582b42cc59db0c8e26 diff --git a/zilasm/directives.cpp b/zilasm/directives.cpp index d15ba89..94c39f9 100644 --- a/zilasm/directives.cpp +++ b/zilasm/directives.cpp @@ -19,16 +19,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -#include /* bsearch */ -#include /* strcmp */ -#include -#include -#include -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]))) @@ -38,63 +29,65 @@ stack g_fileHandlers; 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; @@ -146,113 +139,90 @@ insert_handler (const 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 { @@ -274,11 +244,40 @@ namecmp (const void *key, const void *elem) } 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