#include "debug.h"
#include "halloc.h"
#include "sockio.h"
#include "group.h"
#include "initx.h"
GroupItem *gTopOfGroupStack = NULL;
int
pop_group_stack()
{
GroupItem *junk;
if (! gTopOfGroupStack->next)
return -1;
junk = gTopOfGroupStack;
gTopOfGroupStack = gTopOfGroupStack->next;
junk->next = NULL;
free(junk);
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
return 1;
}
void
push_group_stack()
{
GroupItem *newgp;
newgp = (GroupItem *) halloc(sizeof(GroupItem), "Push Group Stack");
newgp->cur_font = gTopOfGroupStack->cur_font;
newgp->cur_color = gTopOfGroupStack->cur_color;
newgp->center = gTopOfGroupStack->center;
newgp->next = gTopOfGroupStack;
gTopOfGroupStack = newgp;
}
void
init_group_stack()
{
gTopOfGroupStack = (GroupItem *) halloc(sizeof(GroupItem), "Push Group Stack");
gTopOfGroupStack->center = 0;
gTopOfGroupStack->next = NULL;
gTopOfGroupStack->cur_color = 0;
gTopOfGroupStack->cur_font = NULL;
}
void
em_top_group()
{
if (! gTopOfGroupStack->next)
push_group_stack();
gTopOfGroupStack->cur_color = gEmColor;
gTopOfGroupStack->cur_font = gEmFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
rm_top_group()
{
if (! gTopOfGroupStack->next)
push_group_stack();
gTopOfGroupStack->cur_color = gRmColor;
gTopOfGroupStack->cur_font = gRmFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
line_top_group()
{
if (! gTopOfGroupStack->next)
push_group_stack();
gTopOfGroupStack->cur_color = gBorderColor;
gTopOfGroupStack->cur_font = gRmFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
bf_top_group()
{
if (! gTopOfGroupStack->next)
push_group_stack();
gTopOfGroupStack->cur_color = gBfColor;
gTopOfGroupStack->cur_font = gBfFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
tt_top_group()
{
if (! gTopOfGroupStack->next)
push_group_stack();
gTopOfGroupStack->cur_color = gTtColor;
gTopOfGroupStack->cur_font = gTtFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
push_active_group()
{
push_group_stack();
gTopOfGroupStack->cur_font = gActiveFont;
gTopOfGroupStack->cur_color = gActiveColor;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
push_spad_group()
{
push_group_stack();
gTopOfGroupStack->cur_font = gAxiomFont;
gTopOfGroupStack->cur_color = gAxiomColor;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
init_top_group()
{
while (pop_group_stack() >= 0)
;
gTopOfGroupStack->cur_color = gRmColor;
gTopOfGroupStack->cur_font = gRmFont;
change_text(gTopOfGroupStack->cur_color, gTopOfGroupStack->cur_font);
}
void
center_top_group()
{
push_group_stack();
gTopOfGroupStack->center = 1;
}
GroupItem *
copy_group_stack()
{
GroupItem *newgp = NULL;
GroupItem *first = NULL;
GroupItem *prev = NULL;
GroupItem *trace = gTopOfGroupStack;
while (trace) {
newgp = (GroupItem *) halloc(sizeof(GroupItem), "Copy Group Stack");
newgp->cur_font = trace->cur_font;
newgp->cur_color = trace->cur_color;
newgp->center = trace->center;
if (!first)
first = newgp;
else
prev->next = newgp;
prev = newgp;
trace = trace->next;
}
if (newgp)
newgp->next = NULL;
return first;
}
void
free_group_stack(GroupItem *g)
{
GroupItem *trace = g;
while (trace) {
GroupItem *junk = trace;
trace = trace->next;
free(junk);
}
}