#include #include <../../libmodules/parsers/parsers.h> #include #include "dhparse.h" static const char K_SUBNET[]="subnet"; static const char K_RANGE[]="range"; extern CONFIG_FILE f_dhcp; #if 0 PUBLIC VIEWDHCP::VIEWDHCP() :items (p) { items.read (f_dhcp,true); } PUBLIC int VIEWDHCP::getsubnets (SSTRINGS &tb) { int ret = 0; VIEWITEM *it; items.reset_iter(); while ((it=items.getnext())!=NULL){ SSTRING word; const char *end = word.copyword (it->line.get()); if (word.cmp(K_SUBNET)==0){ tb.add (new SSTRING(str_skip(end))); ret++; } } return ret; } PUBLIC VIEWDHCP_SUBNET::VIEWDHCP_SUBNET ( VIEWITEMS_S &itemss, const char *subnet) : VIEWITEMS_RANGE(itemss) { itemss.reset_iter(); start = -1; VIEWITEM *it; while ((it=itemss.getnext())!=NULL){ if (start != -1 && it->line.cmp("}")==0){ end = itemss.positer; }else{ SSTRING word; const char *end = word.copyword (it->line.get()); if (word.cmp(K_SUBNET)==0){ end = str_skip(end); if (strcmp(end,subnet)==0){ items = itemss.getitem(itemss.nofile); start = itemss.positer-1; } } } } } PUBLIC bool VIEWDHCP_SUBNET::isok() const { return start != -1; } PUBLIC VIEWDHCP_SUBNET *VIEWDHCP::getviewsub (const char *subnet) { VIEWDHCP_SUBNET *ret = new VIEWDHCP_SUBNET (items,subnet); if (!ret->isok()){ delete ret; ret = NULL; } return ret; } void dhparse_test() { VIEWDHCP dh; SSTRINGS tb; dh.getsubnets(tb); for (int i=0; iget(); printf ("subnet %s\n",sub); VIEWDHCP_SUBNET *subnet = dh.getviewsub (sub); if (subnet != NULL){ VIEWITEM *range = subnet->locate (K_RANGE); if (range != NULL) printf ("\trange: %s\n",range->line.get()); delete subnet; } } } #else #define __TLMP_docparser struct _F_docparser { struct _F_docparser_private *priv; void lex_varvar (const char *line, SSTRINGS &tokens, const char sep); void lex_htmltag (const char *line, SSTRINGS &tokens); #define _F_docparser_lex(x) void x lex (const char *line, SSTRINGS &tokens, bool &end) virtual _F_docparser_lex( )=0; #define _F_docparser_is_section(x) bool x is_section (const char *tokens[], int nbtok) virtual _F_docparser_is_section( )=0; }; struct _F_docparser_private { bool modified; VIEWITEM *it; _F_docparser_private(){ modified = false; it = NULL; } }; void docparser(_F_docparser &c, ISC_PARSER &parser, CONFIG_FILE &f) { _F_docparser_private priv; c.priv = &priv; VIEWITEMS_S items(parser); items.read (f,true); while ((priv.it=items.getnext())!=NULL){ SSTRINGS tokens; bool end = false; c.lex (priv.it->line.get(),tokens,end); if (end) break; int nbtok = tokens.getnb(); if (nbtok > 0){ const char *tb[nbtok]; for (int i=0; iget(); if (c.is_section(tb,nbtok)){ } } } if (priv.modified){ items.write (f); } } #endif