cli.c - frontends - front-ends for some sites (experiment)
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
cli.c (1418B)
---
1 #include <sys/types.h>
2
3 #include <ctype.h>
4 #include <err.h>
5 #include <errno.h>
6 #include <locale.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <unistd.h>
11 #include <wchar.h>
12
13 #include "duckduckgo.h"
14 #include "https.h"
15 #include "util.h"
16
17 #define OUT(s) fputs((s), stdout)
18 #define OUTESCAPE(s) printescape((s))
19
20 /* print: ignore control-characters */
21 void
22 printescape(const char *s)
23 {
24 for (; *s; ++s)
25 if (!iscntrl((unsigned char)*s))
26 fputc(*s, stdout);
27 }
28
29 int
30 main(int argc, char *argv[])
31 {
32 struct duckduckgo_results *results;
33 struct duckduckgo_result *result;
34 char buf[512];
35 size_t i;
36
37 setlocale(LC_CTYPE, "");
38
39 if (pledge("stdio dns inet rpath unveil", NULL) == -1) {
40 fprintf(stderr, "pledge: %s\n", strerror(errno));
41 exit(1);
42 }
43 if (unveil(TLS_CA_CERT_FILE, "r") == -1) {
44 fprintf(stderr, "unveil: %s\n", strerror(errno));
45 exit(1);
46 }
47 if (unveil(NULL, NULL) == -1) {
48 fprintf(stderr, "unveil: %s\n", strerror(errno));
49 exit(1);
50 }
51
52 if (argc != 2) {
53 fprintf(stderr, "usage: %s <search>\n", argv[0]);
54 exit(1);
55 }
56
57 results = duckduckgo_search(argv[1]);
58 if (pledge("stdio", NULL) == -1)
59 err(1, "pledge");
60
61 if (results) {
62 for (i = 0; i < results->nitems; i++) {
63 result = &(results->items[i]);
64
65 if (utf8pad(buf, sizeof(buf), result->title, 70, ' ') != -1)
66 OUTESCAPE(buf);
67 OUT(" ");
68 OUTESCAPE(result->urldecoded);
69 OUT("\n");
70 }
71 }
72
73 return 0;
74 }