💾 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

View Raw

More Information

-=-=-=-=-=-=-

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