summaryrefslogtreecommitdiffstats
path: root/man2html/cgibase.c
blob: de31cdfea0b284f4e7bb62e4d5e47ffc9a2e455f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
 * Here are the routines of man2html that output a HREF string.
 */

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <ctype.h>		/* tolower() */
#include <string.h>		/* strlen() */
#include "defs.h"

/*
 * The default is to use cgibase. With relative html style
 * we generate URLs of the form "../manX/page.html".
 */
static int relat_html_style = 0;

/*
 * Either the user is non-local (or local, but using httpd),
 * in which case we use http:/cgi-bin, or the user is local
 * and uses lynx, and we use lynxcgi:/home/httpd/cgi-bin.
 */

static char *man2htmlpath = "/cgi-bin/man/man2html"; 	/* default */
static char *cgibase_format = "http://%s"; 		/* host.domain:port */
static char *cgibase_ll_format = "lynxcgi:%s"; 		/* directory */
static char *cgibase = "http://localhost";		/* default */

/*
 * Separator between URL and argument string.
 *
 * With http:<path to script>/a/b?c+d+e the script is called
 * with PATH_INFO=/a/b and QUERY_STRING=c+d+e and args $1=c, $2=d, $3=e.
 * With lynxcgi:<full path to script>?c+d+e no PATH_INFO is possible.
 */
static char sep = '?';					/* or '/' */

void
set_separator(char s) {
     sep = s;
}

void
set_lynxcgibase(char *s) {
     int n = strlen(cgibase_ll_format) + strlen(s);
     char *t = (char *) xmalloc(n);

     sprintf(t, cgibase_ll_format, s);
     cgibase = t;
}

void
set_cgibase(char *s) {
     int n = strlen(cgibase_format) + strlen(s);
     char *t = (char *) xmalloc(n);

     sprintf(t, cgibase_format, s);
     cgibase = t;
}

void
set_man2htmlpath(char *s) {
     man2htmlpath = xstrdup(s);
}

void
set_relative_html_links(void) {
     relat_html_style = 1;
}

/* What shall we say in case of relat_html_style? */
static char *signature = "<HR>\n"
"This document was created by\n"
"<A HREF=\"%s%s\">man2html</A>,\n"
"using the manual pages.<BR>\n"
"%s\n";

#define TIMEFORMAT "%T GMT, %B %d, %Y"
#define TIMEBUFSZ	500

void print_sig()
{
    char timebuf[TIMEBUFSZ];
    struct tm *timetm;
    time_t clock;

    timebuf[0] = 0;
#ifdef TIMEFORMAT
    sprintf(timebuf, "Time: ");
    clock=time(NULL);
    timetm=gmtime(&clock);
    strftime(timebuf+6, TIMEBUFSZ-6, TIMEFORMAT, timetm);
    timebuf[TIMEBUFSZ-1] = 0;
#endif
    printf(signature, cgibase, man2htmlpath, timebuf);
}

void
include_file_html(char *g) {
     printf("<A HREF=\"file:/usr/include/%s\">%s</A>&gt;", g,g);
}

void
man_page_html(char *sec, char *h) {
	if (relat_html_style) {
		if (!h)
			printf("<A HREF=\"../index.html\">"
			       "Return to Main Contents</A>");
		else
			printf("<A HREF=\"../man%s/%s.%s.html\">%s</A>",
			       sec, h, sec, h);
	} else {
		if (!h)
			printf("<A HREF=\"%s%s\">Return to Main Contents</A>",
			       cgibase, man2htmlpath);
		else if (!sec)
			printf("<A HREF=\"%s%s%c%s\">%s</A>",
			       cgibase, man2htmlpath, sep, h, h);
		else
			printf("<A HREF=\"%s%s%c%s+%s\">%s</A>",
			       cgibase, man2htmlpath, sep, sec, h, h);
	}
}

void
ftp_html(char *f) {
     printf("<A HREF=\"ftp://%s\">%s</A>", f, f);
}

void
www_html(char *f) {
     printf("<A HREF=\"http://%s\">%s</A>", f, f);
}

void
mailto_html(char *g) {
     printf("<A HREF=\"mailto:%s\">%s</A>", g, g);
}

void
url_html(char *g) {
     printf("<A HREF=\"%s\">%s</A>", g, g);
}