shithub: castor9

Download patch

ref: 0946587d6c95b365174c88abe47b6f4fcb465741
parent: 0f5e8eb6cd16ae6e1a54bf769826bd7df5cd321d
author: Julien Blanchard <julien@typed-hole.org>
date: Sat Nov 28 04:53:12 EST 2020

History

--- a/castor.c
+++ b/castor.c
@@ -80,6 +80,16 @@
 	current_url = url;
 }
 
+void
+show(Gmenu *m)
+{
+	plinittextview(textp, PACKE|EXPAND, ZP, m->text, texthit);
+	pldraw(textp, screen);
+	plinitlabel(urlp, PACKN|FILLX, m->url->url);
+	pldraw(urlp, screen);
+	message("Castor9");
+}
+
 Url *
 parseurl(char *url)
 {
@@ -118,14 +128,6 @@
 	return u;
 }
 
-int 
-starts_with(char *pre, char *str)
-{
-    int lenpre = strlen(pre),
-        lenstr = strlen(str);
-    return lenstr < lenpre ? 1 : memcmp(pre, str, lenpre);
-}
-
 char *
 protocol(char *link)
 {
@@ -156,10 +158,14 @@
 	if(m==nil)
 		sysfatal("malloc: %r");
 	m->text = nil;
-	plrtstr(&m->text, 1000000, 0, 0, font, strdup(" "), 0, 0);
 
-	set_current_url(url);
+	Hist *h;
+	h = malloc(sizeof *h);
+	if(h == nil)
+		sysfatal("malloc: %r");
 
+	plrtstr(&m->text, 1000000, 0, 0, font, strdup(" "), 0, 0);
+
 	message("loading %s...", url->url);
 	char *naddr = netmkaddr(url->server, "tcp", url->port);
 	fd = dial(naddr, 0, 0, 0);
@@ -183,6 +189,13 @@
 	fprint(fd, "%s\r\n", url->url);
 	Binit(&body, fd, OREAD);
 
+	m->url = url;
+	
+	char c;
+	do {
+  		c = Bgetc(&body);
+	} while (c != '\n');
+
 	while((line = Brdstr(&body, '\n', 0)) != nil)
 	{
 		if (strstr(line, "=>") == nil) {
@@ -195,32 +208,32 @@
     		width = 80;
 
 			while(*base)
-    		{
-        		if(length <= width)
-        		{
+			{
+				if(length <= width)
+				{
 					plrtstr(&m->text, 1000000, 8, 0, font, strdup(cleanup(base)), 0, 0);
 					break;
         		}
-        		right_margin = base+width;
-        		while(!isspace(*right_margin))
-        		{
-            		right_margin--;
-            		if(right_margin == base)
-            		{
-                		right_margin += width;
-                		while(!isspace(*right_margin))
-                		{
-                    		if(*right_margin == '\0')
-                        		break;
-                    		right_margin++;
-                		}
-            		}
-        		}
-        		*right_margin = '\0';
+				right_margin = base+width;
+				while(!isspace(*right_margin))
+				{
+					right_margin--;
+					if(right_margin == base)
+					{
+						right_margin += width;
+						while(!isspace(*right_margin))
+						{
+							if(*right_margin == '\0')
+								break;
+							right_margin++;
+						}
+					}
+				}
+				*right_margin = '\0';
 				plrtstr(&m->text, 1000000, 8, 0, font, strdup(cleanup(base)), 0, 0);
-        		length -= right_margin - base + 1;      /* +1 for the space */
-        		base = right_margin + 1;
-    		}
+				length -= right_margin - base + 1;      /* +1 for the space */
+				base = right_margin + 1;
+			}
 		} else {
 			/* a link */
 			char *copy = strdup(cleanup(line));
@@ -227,10 +240,18 @@
 			strtok(copy, " ");
 			char *link = strtok(NULL, " ");
 			char *rest = strtok(NULL, "\0");
-			while(isspace(*rest))
- 				rest++;
+			char *label;
 
-			char *label = smprint("→ %s%s", rest, protocol(link));
+			if(rest != NULL)
+			{
+				while(isspace(*rest))
+				{
+ 					rest++;
+				}
+				label = smprint("→ %s%s", rest, protocol(link));
+			}else{
+				label = smprint("→ %s%s", link, protocol(link));
+			}
 
 			plrtstr(&m->text, 1000000, 8, 0, font, strdup(label), PL_HOT, strdup(link));
 		}
@@ -237,17 +258,47 @@
 		free(line);
 	}
 
+	h->p = hist;
+	h->n = nil;
+	h->m = m;
+	hist = h;
+
 	Bflush(&body);
 	close(fd);
 
-	plinittextview(textp, PACKE|EXPAND, ZP, m->text, texthit);
-	pldraw(textp, screen);
-	plinitlabel(urlp, PACKN|FILLX, strdup(url->url));
-	pldraw(urlp, screen);
-	message("Castor!");
+	
+
+	show(m);
 }
 
 void
+backhit(Panel *p, int b)
+{
+	USED(p);
+	if(b!=1)
+		return;
+	if(hist==nil || hist->p==nil)
+		return;
+	hist->p->n = hist;
+	hist = hist->p;
+	//set_current_url(hist->m->url);
+	show(hist->m);
+}
+
+void
+nexthit(Panel *p, int b)
+{
+	USED(p);
+	if(b!=1)
+		return;
+	if(hist==nil || hist->n==nil)
+		return;
+	hist = hist->n;
+	//set_current_url(hist->m->url);
+	show(hist->m);
+}
+
+void
 menuhit(int button, int item)
 {
 	USED(button);
@@ -254,10 +305,10 @@
 
 	switch(item){
 	case Mback:
-		//backhit(backp, 1);
+		backhit(backp, 1);
 		break;
 	case Mforward:
-		//nexthit(fwdp, 1);
+		nexthit(fwdp, 1);
 		break;
 	case Msearch:
 		//search();