static void render_error(const char *fmt, ...) { va_list ap; char s[8192], e[8192]; va_start(ap, fmt); vsnprintf(s, sizeof(s), fmt, ap); va_end(ap); printf("%s\r\n\r\n", rssroll->ct_html); fflush(stdout); d_printf("<html><head><title>Error</title></head><body>\n"); d_printf("<h2>Error</h2><p><b>%s</b><p>\n", s); if (q != NULL) { d_printf("Request: <b>%s</b><br>\n", html_esc(q->query_string, e, sizeof(e), 0)); d_printf("Address: <b>%s</b><br>\n", html_esc(q->remote_addr, e, sizeof(e), 0)); if (q->user_agent != NULL) d_printf("User agent: <b>%s</b><br>\n", html_esc(q->user_agent, e, sizeof(e), 0)); if (q->referer != NULL) d_printf("Referer: <b>%s</b><br>\n", html_esc(q->referer, e, sizeof(e), 0)); } d_printf("Time: <b>%s</b><br>\n", rfc822_time(time(0))); d_printf("<p>If you believe this is a bug in <i>this</i> server, " "please send reports with instructions about how to " "reproduce to <a href=\"mailto:%s\"><b>%s</b></a><p>\n", rssroll->owner, rssroll->owner); d_printf("</body></html>\n"); }
void render_error(const char *fmt, ...) { va_list ap; char s[8192]; tbstring sa = {0}; va_start(ap, fmt); vsnprintf(s, sizeof(s), fmt, ap); va_end(ap); printf("%s\n\n", conf.ct_html); printf("<html><head><title>Error</title></head><body>\n"); printf("<h2>Error</h2><p><b>%s</b><p>\n", s); if (q != NULL) { printf("Request: <b>%s</b><br>\n", html_esc(q->query_string, &sa, 0)); printf("Address: <b>%s</b><br>\n", html_esc(q->remote_addr, &sa, 0)); if (q->user_agent != NULL) printf("User agent: <b>%s</b><br>\n", html_esc(q->user_agent, &sa, 0)); } printf("<p>Please send reports with instructions about how to " "reproduce to <a href=\"mailto:%s\"><b>%s</b></a><p>\n", conf.mailaddr, conf.mailaddr); printf("</body></html>\n"); tbstrfree(&sa); }
void render_edit_extra(const char *m, void *arg) { ChopstixItemExtra *extra = (ChopstixItemExtra *)arg; ChopstixMenuitem *mi; tbstring sa = {0}; if ((mi = menu_getitem(menucode)) == NULL) return; if (!strcmp(m, "ITEMCODE")) printf("%s", html_esc(mi->code, &sa, 0)); else if (!strcmp(m, "ITEMGEN")) printf("%d", mi->gen); else if (!strcmp(m, "ITEMFLAGS")) printf("%s", mi->flags.deleted ? "Deleted" : "Active"); else if (!strcmp(m, "ITEMEXTRAQTY")) printf("%d", extra->qty); else if (!strcmp(m, "ITEMEXTRACODE")) printf("%s", html_esc(extra->code, &sa, 0)); else if (!strcmp(m, "ITEMEXTRANAME")) { if ((mi = menu_getitem(extra->code))) printf("%s", html_esc(mi->name, &sa, 0)); } else printf("render_extra: unknown macro '%s'", m); tbstrfree(&sa); }
void render_extra(const char *m, void *arg) { ChopstixItemExtra *extra = (ChopstixItemExtra *)arg; ChopstixMenuitem *mi; tbstring sa = {0}; if (!strcmp(m, "ITEMEXTRAQTY")) printf("%d", extra->qty); else if (!strcmp(m, "ITEMEXTRACODE")) printf("%s", html_esc(extra->code, &sa, 0)); else if (!strcmp(m, "ITEMEXTRANAME")) { if ((mi = menu_getitem(extra->code))) printf("%s", html_esc(mi->name, &sa, 0)); } else printf("render_extra: unknown macro '%s'", m); tbstrfree(&sa); }
void render_edit(const char *m, void *arg) { ChopstixMenuitem *mi = (ChopstixMenuitem *)arg; tbstring sa = {0}; char fn[MAXPATHLEN]; unsigned int u; if (mi == NULL) if ((mi = menu_getitem(menucode)) == NULL) return; if (!strcmp(m, "ITEMCODE")) printf("%s", html_esc(mi->code, &sa, 0)); else if (!strcmp(m, "ITEMGEN")) printf("%d", mi->gen); else if (!strcmp(m, "ITEMFLAGS")) printf("%s", mi->flags.deleted ? "Deleted" : "Active"); else if (!strcmp(m, "ITEMNAME")) printf("%s", html_esc(mi->name, &sa, 0)); else if (!strcmp(m, "ITEMPRICE")) PRINTF_MONEY(mi->price); else if (!strcmp(m, "EDITSTYLES")) { snprintf(fn, sizeof(fn), "%s/edit_style.html", conf.htmldir); for (u = 0; u < mi->styles.len; u++) render_html(fn, render_edit_style, &mi->styles.val[u]); } else if (!strcmp(m, "EDITEXTRAS")) { snprintf(fn, sizeof(fn), "%s/edit_extra.html", conf.htmldir); for (u = 0; u < mi->extras.len; u++) render_html(fn, render_edit_extra, &mi->extras.val[u]); } else if (!strcmp(m, "EDITSUBITEMS")) { snprintf(fn, sizeof(fn), "%s/edit_subitem.html", conf.htmldir); if (mi->subitems) for (u = 0; u < mi->subitems->len; u++) render_html(fn, render_edit_extra, &mi->subitems->val[u]); } else printf("render_list: unknown macro '%s'", m); tbstrfree(&sa); }
void render_style(const char *m, void *arg) { ChopstixItemStyle *style = (ChopstixItemStyle *)arg; tbstring sa = {0}; if (!strcmp(m, "ITEMSTYLENAME")) printf("%s", html_esc(style->name, &sa, 0)); else printf("render_style: unknown macro '%s'", m); tbstrfree(&sa); }
void render_edit_style(const char *m, void *arg) { ChopstixItemStyle *style = (ChopstixItemStyle *)arg; ChopstixMenuitem *mi; tbstring sa = {0}; if ((mi = menu_getitem(menucode)) == NULL) return; if (!strcmp(m, "ITEMCODE")) printf("%s", html_esc(mi->code, &sa, 0)); else if (!strcmp(m, "ITEMGEN")) printf("%d", mi->gen); else if (!strcmp(m, "ITEMFLAGS")) printf("%s", mi->flags.deleted ? "Deleted" : "Active"); else if (!strcmp(m, "ITEMSTYLENAME")) printf("%s", html_esc(style->name, &sa, 0)); else printf("render_style: unknown macro '%s'", m); tbstrfree(&sa); }
int render_html(const char *html_fn, render_cb r, void *arg) { FILE *f; char s[8192]; char fn[MAXPATHLEN]; tbstring sa = {0}; if ((f = fopen(html_fn, "r")) == NULL) { printf("ERROR: fopen: %s: %s<br>\n", html_fn, strerror(errno)); return (1); } while (fgets(s, sizeof(s), f)) { char *a, *b; for (a = s; (b = strstr(a, "%%")) != NULL;) { *b = 0; printf("%s", a); a = b + 2; if ((b = strstr(a, "%%")) != NULL) { *b = 0; if (!strcmp(a, "ACTION")) { if (action == NULL) action = "front"; printf("%s", action); } else if (!strcmp(a, "BASEURL")) printf("%s", conf.baseurl); else if (!strcmp(a, "BASEDIR")) printf("%s", conf.htmldir); else if (!strcmp(a, "BASECSS")) { printf("%s?action=css%s", conf.baseurl, display_type == DISPLAY_PRINT ? "&display=print" : display_type == DISPLAY_CSV ? "&display=csv" : ""); } else if (!strcmp(a, "TITLE")) printf("%s", conf.title); else if (!strcmp(a, "HEADER")) { snprintf(fn, sizeof(fn), "%s/header.html", conf.htmldir); render_html(fn, NULL, NULL); } else if (!strcmp(a, "FOOTER")) { snprintf(fn, sizeof(fn), "%s/footer.html", conf.htmldir); render_html(fn, NULL, NULL); } else if (!strcmp(a, "ROW")) { printf("row%d", rowselect); rowselect = !rowselect; } else if (!strcmp(a, "ROWRESET")) rowselect = 0; else if (!strcmp(a, "MENUCODE")) { printf("%s", html_esc(menucode, &sa, 0)); } else if (!strcmp(a, "QUERY")) printf("%s", q->query_string); #if 0 else if (!strcmp(a, "RCSID")) printf("%s", rcsid); #endif else if (r != NULL) (*r)(a, arg); a = b + 2; } } printf("%s", a); } fclose(f); tbstrfree(&sa); return 0; }
void render_order_list(const char *m, void *arg) { ChopstixOrder *order = (ChopstixOrder *)arg; char fn[1024]; unsigned int u, s; tbstring sa = {0}; tbstring sa2 = {0}; if (!strcmp(m, "ORDERCODE")) printf("%d", order->key); else if (!strcmp(m, "ORDERCODEEDIT")) printf("<a href=\"%s?action=orderdetail&code=%d\">%d</a>", conf.baseurl, order->key, order->key); else if (!strcmp(m, "ORDERDATETIME")) { char datetime[sizeof("YYYY-MM-DD HH:MM:SS")]; strftime(datetime, sizeof(datetime), "%F %T", localtime(&order->date)); printf("%s", datetime); } else if (!strcmp(m, "ORDERTYPE")) { switch (order->type) { case ORDER_NONE: printf("NONE"); break; case ORDER_PICKUP: printf("PICKUP"); break; case ORDER_DELIVERY: printf("DELIVERY"); break; case ORDER_WALKIN: printf("WALKIN"); break; case ORDER_VOID: printf("VOID"); break; } } else if (!strcmp(m, "ORDERPAYTYPE")) { switch (order->payment.type) { case PAYMENT_NONE: printf("NONE"); break; case PAYMENT_CASH: printf("CASH"); break; case PAYMENT_CREDIT: printf("CREDIT"); break; case PAYMENT_VOID: printf("VOID"); break; case PAYMENT_DEBIT: printf("DEBIT"); break; case PAYMENT_CHEQUE: printf("CHEQUE"); break; case PAYMENT_OTHER: printf("OTHER"); break; } } else if (!strcmp(m, "ORDERPAYDETAIL")) { switch (order->payment.type) { case PAYMENT_NONE: printf("NONE"); break; case PAYMENT_CASH: printf("CASH"); break; case PAYMENT_CREDIT: if (order->payment.ccinfo) printf("CREDIT - CC# %s EXP %s", html_esc(order->payment.ccinfo->number, &sa, 0), html_esc(order->payment.ccinfo->expiry, &sa2, 0)); else printf("CREDIT - (INFO PURGED)"); break; case PAYMENT_VOID: printf("VOID"); break; case PAYMENT_DEBIT: printf("DEBIT"); break; case PAYMENT_CHEQUE: printf("CHEQUE"); break; case PAYMENT_OTHER: printf("OTHER"); break; } } else if (!strcmp(m, "ORDERSPECIAL")) printf("%s", strlen(order->special) ? html_esc(order->special, &sa, 0) : " "); else if (!strcmp(m, "ORDERSUBTOTAL")) PRINTF_MONEY(order->total.subtotal); else if (!strcmp(m, "ORDERDISCOUNT")) PRINTF_MONEY(order->total.discount); else if (!strcmp(m, "ORDERDELIVERY")) PRINTF_MONEY(order->total.delivery); else if (!strcmp(m, "ORDERCREDIT")) PRINTF_MONEY(order->total.credit); else if (!strcmp(m, "ORDERTAX1")) PRINTF_MONEY(order->total.tax1); else if (!strcmp(m, "ORDERTAX2")) PRINTF_MONEY(order->total.tax2); else if (!strcmp(m, "ORDERTOTAL")) PRINTF_MONEY(order->total.total); else if (!strncmp(m, "CUST", 4)) render_customer_info(m, &order->customer); else if (!strcmp(m, "ORDERITEMS")) { snprintf(fn, sizeof(fn), "%s/order_item.html", conf.htmldir); for (u = 0; u < order->items.len; u++) { render_html(fn, render_order_item, &order->items.val[u]); if (order->items.val[u].subitems) for (s = 0; s < order->items.val[u].subitems->len; s++) render_html(fn, render_order_subitem, &order->items.val[u].subitems->val[s]); } } else if (!strcmp(m, "ORDERRULEITEMS")) { snprintf(fn, sizeof(fn), "%s/order_item.html", conf.htmldir); for (u = 0; u < order->ruleitems.len; u++) render_html(fn, render_order_item, &order->ruleitems.val[u]); } else printf("render_order_list: unknown macro '%s'<br>\n", m); tbstrfree(&sa); tbstrfree(&sa2); }