💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Vgmi › files › 729d9a25ded17dca279106e0720f8… captured on 2023-04-19 at 23:02:41. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
0 /* See LICENSE file for copyright and license details. */
1 #ifndef _GEMINI_H_
2 #define _GEMINI_H_
3
4 #define VERSION "1.5"
5
6 #include <netdb.h>
7 #include <unistd.h>
8 #include <stddef.h>
9 #include <pthread.h>
10 #include <poll.h>
11 #include <netinet/in.h>
12 #include "memcheck.h"
13 #include "url.h"
14
15 #define GMI 9
16 #define P_FILE 7
17 #define MAX_META 1024
18
19 #define MAX_TEXT_SIZE 4194304 // 4 MB
20 #define MAX_IMAGE_SIZE 33554432 // 32 MB
21
22 struct gmi_page {
23 char** links;
24 char title[64];
25 int title_cached;
26 int links_count;
27 char* data;
28 int data_len;
29 int code;
30 int lines;
31 char meta[MAX_META];
32 #ifdef TERMINAL_IMG_VIEWER
33 struct img {
34 int tried;
35 unsigned char* data;
36 int w;
37 int h;
38 int channels;
39 } img;
40 #endif
41 int no_header;
42 };
43
44 struct gmi_link {
45 char url[MAX_URL];
46 struct gmi_link* prev;
47 struct gmi_link* next;
48 int scroll;
49 struct gmi_page page;
50 int cached;
51 };
52
53 #define STATE_DONE 0
54 #define STATE_REQUESTED 1
55 #define STATE_DNS 2
56 #define STATE_CONNECTING 3
57 #define STATE_CONNECTED 4
58 #define STATE_RECV_HEADER 5
59 #define STATE_RECV_BODY 6
60 #define STATE_CANCEL 7
61 #define STATE_STARTED 8
62
63 struct gmi_tab {
64 struct gmi_tab* next;
65 struct gmi_tab* prev;
66 struct gmi_link* history;
67 struct gmi_page page;
68 int scroll;
69 int selected;
70 char selected_url[MAX_URL];
71 char url[MAX_URL];
72 char error[256];
73 int show_error;
74 char info[256];
75 struct search {
76 char entry[MAX_URL];
77 int cursor;
78 int count;
79 int scroll;
80 int pos[2];
81 } search;
82 int show_info;
83 // async
84 int pair[2];
85 struct request {
86 #ifdef __linux__
87 struct gaicb* gaicb_ptr;
88 int resolved;
89 #endif
90 pthread_t thread;
91 pthread_mutex_t mutex;
92 int loaded;
93 int socket;
94 struct tls* tls;
95 int state;
96 int ask;
97 char info[1024];
98 char action[128];
99 unsigned short port;
100 char host[256];
101 union {
102 struct sockaddr_in addr4;
103 struct sockaddr_in6 addr6;
104 } _addr;
105 struct sockaddr* addr;
106 int family;
107 char url[1024];
108 char meta[1024];
109 char* data;
110 int recv;
111 int download;
112 char error[1024];
113 } request;
114 struct thread {
115 pthread_t thread;
116 int started;
117 int pair[2];
118 char url[1024];
119 int add;
120 } thread;
121 pthread_mutex_t render_mutex;
122 };
123
124 struct gmi_client {
125 struct gmi_tab* tab;
126 struct pollfd* tabs_fds;
127 int tabs_count;
128 struct input {
129 char download[MAX_URL];
130 char label[MAX_URL];
131 char field[MAX_URL * 2];
132 int cursor;
133 int mode;
134 } input;
135 struct vim {
136 char counter[6];
137 int g;
138 } vim;
139 struct cert_cache {
140 char host[1024];
141 char* crt;
142 size_t crt_len;
143 char* key;
144 size_t key_len;
145 } *certs;
146 int certs_size;
147 char** bookmarks;
148 #ifndef DISABLE_XDG
149 int xdg;
150 #endif
151 int c256;
152 int shutdown;
153 };
154
155 extern struct gmi_client client;
156 int gmi_init();
157 int gmi_goto(struct gmi_tab* tab, int id);
158 int gmi_goto_new(struct gmi_tab* tab, int id);
159 int gmi_request(struct gmi_tab* tab, const char* url, int add);
160 void gmi_load(struct gmi_page* page);
161 int gmi_render(struct gmi_tab* tab);
162 void gmi_cleanforward(struct gmi_tab* tab);
163 int gmi_nextlink(struct gmi_tab* tab, char* url, char* link);
164 struct gmi_tab* gmi_newtab();
165 struct gmi_tab* gmi_newtab_url(const char* url);
166 int gmi_loadfile(struct gmi_tab* tab, char* path);
167 void gmi_addbookmark(struct gmi_tab* tab, char* url, char* title);
168 void gmi_newbookmarks();
169 int gmi_loadbookmarks();
170 int gmi_savebookmarks();
171 void gmi_addtohistory(struct gmi_tab* tab);
172 int gmi_removebookmark(int index);
173 void gmi_polling();
174 void gmi_gohome(struct gmi_tab* tab, int add);
175 void gmi_gettitle(struct gmi_page* page, const char* url);
176 void gmi_freepage(struct gmi_page* page);
177 void gmi_freetab(struct gmi_tab* tab);
178 void gmi_free();
179
180 void fatal();
181 int fatalI();
182 void* fatalP();
183
184 #include "img.h"
185
186 #define WHITE (client.c256?15:TB_WHITE)
187 #define BLACK (client.c256?16:TB_BLACK)
188 #define BLUE (client.c256?25:TB_BLUE)
189 #define RED (client.c256?9:TB_RED)
190 #define GREEN (client.c256?2:TB_GREEN)
191 #define CYAN (client.c256?14:TB_CYAN)
192 #define MAGENTA (client.c256?13:TB_MAGENTA)
193 #define YELLOW (client.c256?58:TB_YELLOW)
194 #define GREY (client.c256?252:TB_WHITE)
195 #define ORANGE (client.c256?172:ITALIC|TB_WHITE)
196 #define ITALIC (client.c256?0:TB_ITALIC)
197
198 #endif
199