behold my crappy code
This commit is contained in:
parent
783b9ac27a
commit
02c7ca431c
|
@ -0,0 +1,7 @@
|
|||
CC = cc
|
||||
CFLAGS = -g
|
||||
INCLUDE = -I /usr/local/include -L /usr/local/lib
|
||||
LIBS = -lncurses -ltls
|
||||
|
||||
tls: tls.o
|
||||
$(CC) -o tls tls.o $(LIBS) $(INCLUDE)
|
|
@ -0,0 +1,142 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <tls.h>
|
||||
#include <ncurses.h>
|
||||
|
||||
typedef struct ll {
|
||||
void *dat;
|
||||
struct ll *next;
|
||||
struct ll *prev;
|
||||
} ll;
|
||||
|
||||
char *tls_incremental_line_read(struct tls *context) {
|
||||
char buffer;
|
||||
int bufsize = 40;
|
||||
int current = 0;
|
||||
int read;
|
||||
char *initial = malloc(bufsize);
|
||||
for(;;) {
|
||||
read = tls_read(context, &buffer, 1); /* if malloc err check this */
|
||||
if(!read) {
|
||||
free(initial);
|
||||
return NULL;
|
||||
}
|
||||
switch(buffer) {
|
||||
case '\n':
|
||||
case '\r':
|
||||
case '\0':
|
||||
initial[current] = '\0';
|
||||
return initial;
|
||||
}
|
||||
initial[current++] = buffer;
|
||||
if(current == bufsize - 2) {
|
||||
initial = realloc(initial, bufsize *= 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int getHeaderData(struct tls *context, int *i, char **s) {
|
||||
char *buf = tls_incremental_line_read(context);
|
||||
char *token = strtok(buf, " ");
|
||||
*i = atoi(token);
|
||||
token = strtok(NULL, " ");
|
||||
if(!token) return 0;
|
||||
*s = strdup(token);
|
||||
free(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
initscr();
|
||||
keypad(stdscr, TRUE);
|
||||
nonl();
|
||||
cbreak();
|
||||
noecho();
|
||||
|
||||
if(has_colors()) {
|
||||
init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK);
|
||||
init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
|
||||
init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
|
||||
init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
|
||||
init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
|
||||
init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
|
||||
init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
|
||||
init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
|
||||
}
|
||||
|
||||
int y = 1;
|
||||
int links = 0;
|
||||
char towrite[] = "gemini://tilde.club/\r\n";
|
||||
struct tls_config *c = tls_config_new();
|
||||
tls_config_insecure_noverifycert(c);
|
||||
tls_config_insecure_noverifyname(c);
|
||||
|
||||
struct tls *client = tls_client();
|
||||
tls_configure(client, c);
|
||||
|
||||
tls_connect(client, "tilde.club", "1965");
|
||||
|
||||
tls_write(client, &towrite, sizeof towrite);
|
||||
|
||||
int statuscode;
|
||||
char *mime;
|
||||
|
||||
int status = getHeaderData(client, &statuscode, &mime);
|
||||
|
||||
printf("%i %i %s -- custom status display\n", status, statuscode, mime);
|
||||
|
||||
int my, mx;
|
||||
getmaxyx(stdscr, my, mx);
|
||||
int counter = 1;
|
||||
|
||||
ll *cll = NULL, *ptr = cll;
|
||||
|
||||
for(;;) {
|
||||
char *out = tls_incremental_line_read(client);
|
||||
int disable = FALSE;
|
||||
if(!out) break;
|
||||
if(counter == my) disable = TRUE;
|
||||
if(!cll) {
|
||||
cll = malloc(sizeof *cll);
|
||||
cll->prev = NULL;
|
||||
ptr = cll;
|
||||
} else {
|
||||
cll->next = malloc(sizeof *cll);
|
||||
cll->next->prev = cll;
|
||||
cll = cll->next;
|
||||
}
|
||||
|
||||
cll->dat = out;
|
||||
cll->next = NULL;
|
||||
|
||||
if(!disable) mvprintw(y++, 0, "%s", out);
|
||||
if(out[0] == '=' && out[1] == '>') {
|
||||
if(!disable) printw(" [%i]", ++links);
|
||||
}
|
||||
counter++;
|
||||
}
|
||||
|
||||
ll *scroll = ptr;
|
||||
tls_close(client);
|
||||
tls_free(client);
|
||||
for(;;) {
|
||||
char c = getch();
|
||||
erase();
|
||||
|
||||
int ycounter = 1;
|
||||
|
||||
if(c == 'k') scroll = scroll->prev;
|
||||
else scroll = scroll->next;
|
||||
ll *drawingPointer = scroll;
|
||||
while(drawingPointer) {
|
||||
mvprintw(ycounter++, 0, "%s", drawingPointer->dat);
|
||||
drawingPointer = drawingPointer->next;
|
||||
if(ycounter == my) break;
|
||||
}
|
||||
}
|
||||
endwin();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue