2 * This file is part of DisOrder.
3 * Copyright (C) 2004-2008 Richard Kettlewell
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
42 #include "configuration.h"
48 #include "inputline.h"
52 #include "server-cgi.h"
75 #define RELIST(x) struct re *x, **x##_tail = &x
77 static int have_read_options
;
78 static struct kvp
*labels
;
79 static struct column
*columns
;
81 static void include_options(const char *name
);
82 static void cgi_expand_parsed(const char *name
,
83 struct cgi_element
*head
,
84 const struct cgi_expansion
*expansions
,
89 void cgi_header(struct sink
*output
, const char *name
, const char *value
) {
90 sink_printf(output
, "%s: %s\r\n", name
, value
);
93 void cgi_body(struct sink
*output
) {
94 sink_printf(output
, "\r\n");
97 const char *cgi_label(const char *key
) {
101 if(!(label
= kvp_get(labels
, key
))) {
103 if(!strncmp(key
, "images.", 7)) {
104 static const char *url_static
;
105 /* images.X defaults to <url.static>X.png */
108 url_static
= cgi_label("url.static");
109 byte_xasprintf((char **)&label
, "%s%s.png", url_static
, key
+ 7);
110 } else if((label
= strchr(key
, '.')))
111 /* X.Y defaults to Y */
114 /* otherwise default to label name */
120 int cgi_label_exists(const char *key
) {
122 return kvp_get(labels
, key
) ?
1 : 0;
125 char **cgi_columns(const char *name
, int *ncolumns
) {
129 for(c
= columns
; c
&& strcmp(name
, c
->name
); c
= c
->next
)
133 *ncolumns
= c
->ncolumns
;