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();
--
⑨