void *html_special(struct part *p, int c, ...) { va_list l; unsigned char *t; struct form_control *fc; struct frameset_param *fsp; struct frame_param *fp; va_start(l, c); switch (c) { case SP_TAG: t = va_arg(l, unsigned char *); va_end(l); html_tag(p->data, t, X(p->cx), Y(p->cy)); break; case SP_CONTROL: fc = va_arg(l, struct form_control *); va_end(l); html_form_control(p, fc); break; case SP_TABLE: va_end(l); return convert_table; case SP_USED: va_end(l); return (void *)!!p->data; case SP_FRAMESET: fsp = va_arg(l, struct frameset_param *); va_end(l); return create_frameset(p->data, fsp); case SP_FRAME: fp = va_arg(l, struct frame_param *); va_end(l); create_frame(fp); break; case SP_NOWRAP: nowrap = va_arg(l, int); va_end(l); break; default: internal("html_special: unknown code %d", c); va_end(l); } return NULL; }
void *g_html_special(struct g_part *p, int c, ...) { va_list l; unsigned char *t; struct form_control *fc; struct frameset_param *fsp; struct frame_param *fp; struct image_description *im; struct g_object_tag *tag; struct refresh_param *rp; struct hr_param *hr; va_start(l, c); switch (c) { case SP_TAG: t = va_arg(l, unsigned char *); va_end(l); /*html_tag(p->data, t, X(p->cx), Y(p->cy));*/ tag = mem_calloc(sizeof(struct g_object_tag) + strlen(t) + 1); tag->mouse_event = g_dummy_mouse; tag->draw = g_dummy_draw; tag->destruct = g_tag_destruct; strcpy(tag->name, t); flush_pending_text_to_line(p); add_object_to_line(p, &p->line, (struct g_object *)tag); break; case SP_CONTROL: fc = va_arg(l, struct form_control *); va_end(l); g_html_form_control(p, fc); break; case SP_TABLE: va_end(l); return convert_table; case SP_USED: va_end(l); return (void *)(my_intptr_t)!!p->data; case SP_FRAMESET: fsp = va_arg(l, struct frameset_param *); va_end(l); return create_frameset(p->data, fsp); case SP_FRAME: fp = va_arg(l, struct frame_param *); va_end(l); create_frame(fp); break; case SP_SCRIPT: t = va_arg(l, unsigned char *); va_end(l); if (p->data) process_script(p->data, t); break; case SP_IMAGE: im = va_arg(l, struct image_description *); va_end(l); do_image(p, im); break; case SP_NOWRAP: va_end(l); break; case SP_REFRESH: rp = va_arg(l, struct refresh_param *); va_end(l); html_process_refresh(p->data, rp->url, rp->time); break; case SP_SET_BASE: t = va_arg(l, unsigned char *); va_end(l); if (p->data) set_base(p->data, t); break; case SP_HR: hr = va_arg(l, struct hr_param *); va_end(l); g_hr(p, hr); break; default: va_end(l); internal("html_special: unknown code %d", c); } return NULL; }