Introduction
Introduction Statistics Contact Development Disclaimer Help
gopher.c - frontends - front-ends for some sites (experiment)
Log
Files
Refs
README
LICENSE
---
gopher.c (1753B)
---
1 #include <sys/types.h>
2
3 #include <ctype.h>
4 #include <errno.h>
5 #include <locale.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <unistd.h>
10 #include <wchar.h>
11
12 #include "duckduckgo.h"
13 #include "https.h"
14 #include "util.h"
15
16 #define OUT(s) fputs(s, stdout)
17 #define OUTTEXT(s) gophertext(stdout, s, strlen(s))
18
19 static const char *host = "127.0.0.1", *port = "70";
20
21 int
22 main(void)
23 {
24 struct duckduckgo_results *results;
25 struct duckduckgo_result *result;
26 char *p, *search = NULL;
27 size_t i;
28
29 setlocale(LC_CTYPE, "");
30
31 if ((p = getenv("SERVER_NAME")))
32 host = p;
33 if ((p = getenv("SERVER_PORT")))
34 port = p;
35 if (!(p = getenv("X_GOPHER_SEARCH"))) /* geomyidae */
36 p = getenv("SEARCHREQUEST"); /* gophernicus */
37 if (p)
38 search = p;
39
40 if (pledge("stdio dns inet rpath unveil", NULL) == -1) {
41 fprintf(stderr, "pledge: %s\n", strerror(errno));
42 exit(1);
43 }
44 if (unveil(TLS_CA_CERT_FILE, "r") == -1) {
45 fprintf(stderr, "unveil: %s\n", strerror(errno));
46 exit(1);
47 }
48 if (unveil(NULL, NULL) == -1) {
49 fprintf(stderr, "unveil: %s\n", strerror(errno));
50 exit(1);
51 }
52
53 if (search == NULL) {
54 printf("3\tSpecify a search term\t%s\t%s\r\n", host, por…
55 printf(".\r\n");
56 exit(1);
57 }
58
59 if ((results = duckduckgo_search(search))) {
60 for (i = 0; i < results->nitems; i++) {
61 result = &(results->items[i]);
62
63 OUT("h");
64 OUTTEXT(result->title);
65 OUT("\tURL:");
66 OUTTEXT(result->urldecoded);
67 printf("\t%s\t%s\r\n", host, port);
68
69 /* TODO: multi-line wrap ? */
70 OUT("h");
71 OUTTEXT(result->description);
72 OUT("\tURL:");
73 OUTTEXT(result->urldecoded);
74 printf("\t%s\t%s\r\n", host, port);
75
76 printf("i\t\t%s\t%s\r\n", host, port);
77 printf("i\t\t%s\t%s\r\n", host, port);
78 }
79 }
80 printf(".\r\n");
81
82 return 0;
83 }
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.