summary refs log tree commit diff
path: root/nav.c
diff options
context:
space:
mode:
Diffstat (limited to 'nav.c')
-rw-r--r--nav.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/nav.c b/nav.c
index 82cf71a..3a1d095 100644
--- a/nav.c
+++ b/nav.c
@@ -1,12 +1,17 @@
 #include <string.h>
 #include <stdio.h>
+
 #include "nav.h"
+#include "net.h"
+
+/* history */
 
 void nav_init(struct nav_state *ns) {
 	memset(ns, 0, sizeof *ns);
 	ns->histc = 1;
-	doc_init(&ns->histv[0]);
-	doc_add_text(&ns->histv[0], "Type ? for command help.");
+	doc_init(ns->histv);
+	doc_add_text(ns->histv, "Type ? for command help.");
+	ns->prot_default = PROT_FILE; /* change to PROT_GOPHER later */
 }
 
 void nav_fini(struct nav_state *ns) {
@@ -15,6 +20,16 @@ void nav_fini(struct nav_state *ns) {
 	}
 }
 
+void nav_new(struct nav_state *ns) {
+	if (ns->histc == HIST_MAX) {
+		doc_fini(ns->histv);
+		memmove(ns->histv, &ns->histv[1], sizeof(struct doc) * (HIST_MAX - 1));
+		ns->histc--;
+	}
+}
+
+/* paging */
+
 size_t pg_lines(void) {
 	return 24;
 }
@@ -59,4 +74,27 @@ void nav_pg_down(struct nav_state *ns) {
 }
 
 void nav_redraw(struct nav_state *ns) {
+	size_t lines = pg_lines();
+	while (lines-- && nav_line_up(ns));
+	nav_pg_down(ns);
+}
+
+/* network */
+
+int nav_to(struct nav_state *ns, const char *url) {
+	struct addr adr;
+	buf_t buf;
+	if (net_addr(url, &adr, ns->prot_default)) {
+		return -1;
+	}
+	ns->prot_default = adr.prot;
+	if (net_fetch(&adr, &buf)) {
+		return -1;
+	}
+	buf_free(&buf);
+	return 0;
+}
+
+int nav_link_nr(struct nav_state *ns, unsigned long link_nr) {
+	return 0;
 }