Initial commit.
[agg.git] / stack.c
blob21e3c3d899e872b257057efde8655b3951edacc6
1 #include <string.h>
2 #include "stack.h"
3 #include "fail.h"
4 #include "rss.h"
6 #define STACK_LAYERS 3
8 void unknown_enter(const char* elem, const char** attr);
9 void unknown_leave(const char* elem);
11 struct Layer _stack[STACK_LAYERS] = { { unknown_enter, unknown_leave } };
12 unsigned int _top = 0;
14 const struct Layer* stack_top()
16 return &_stack[_top];
19 void stack_next()
21 ++_top;
24 void stack_prev()
26 --_top;
29 void stack_set(unsigned i, struct Layer l)
31 if (i >= STACK_LAYERS) fail(ERR_STACK);
33 _stack[i].enter = l.enter;
34 _stack[i].leave = l.leave;
37 void unknown_enter(const char* elem, const char** attr)
39 (void) attr;
41 if (strcmp("rss", elem) != 0) fail(ERR_TYPE);
43 rss_setup();
46 void unknown_leave(const char* elem)
48 (void) elem;
50 fail(ERR_STACK);