diff -u -r -N links-current/Makefile.gen links/Makefile.gen
--- links-current/Makefile.gen Fri Jun 9 17:45:58 2000
+++ links/Makefile.gen Thu Jun 15 17:32:35 2000
@@ -44,6 +44,7 @@
cookies.o : cookies.c links.h language.h
default.o : default.c links.h language.h
dns.o : dns.c links.h language.h
+dummyjs.o : dummyjs.c links.h
error.o : error.c links.h language.h
file.o : file.c links.h language.h
finger.o : finger.c links.h language.h
diff -u -r -N links-current/Makefile.in links/Makefile.in
--- links-current/Makefile.in Mon Jun 12 13:45:58 2000
+++ links/Makefile.in Thu Jun 15 17:32:35 2000
@@ -72,7 +72,7 @@
EXTRA_DIST = $(man_MANS) Unicode/* intl/* config2.h Makefile.gen BUGS TODO SITES
bin_PROGRAMS = links
-links_SOURCES = af_unix.c beos.c bfu.c bookmarks.c cache.c charsets.c connect.c cookies.c default.c dns.c error.c file.c finger.c ftp.c html.c html_r.c html_tbl.c http.c kbd.c language.c mailto.c main.c menu.c os_dep.c sched.c select.c session.c terminal.c types.c url.c view.c win32.c links.h os_dep.h os_depx.h setup.h codepage.h language.h codepage.inc entity.inc uni_7b.inc language.inc rebuild
+links_SOURCES = af_unix.c beos.c bfu.c bookmarks.c cache.c charsets.c connect.c cookies.c default.c dns.c error.c file.c finger.c ftp.c html.c html_r.c html_tbl.c http.c kbd.c language.c mailto.c dummyjs.c main.c menu.c os_dep.c sched.c select.c session.c terminal.c types.c url.c view.c win32.c links.h os_dep.h os_depx.h setup.h codepage.h language.h codepage.inc entity.inc uni_7b.inc language.inc rebuild
datadir = $(prefix)/@DATADIRNAME@
LIBS = @LIBS@
@@ -88,7 +88,7 @@
LDFLAGS = @LDFLAGS@
links_OBJECTS = af_unix.o beos.o bfu.o bookmarks.o cache.o charsets.o \
connect.o cookies.o default.o dns.o error.o file.o finger.o ftp.o \
-html.o html_r.o html_tbl.o http.o kbd.o language.o mailto.o main.o \
+html.o html_r.o html_tbl.o http.o kbd.o language.o mailto.o dummyjs.o main.o \
menu.o os_dep.o sched.o select.o session.o terminal.o types.o url.o \
view.o win32.o
links_LDADD = $(LDADD)
diff -u -r -N links-current/dummyjs.c links/dummyjs.c
--- links-current/dummyjs.c Thu Jan 1 01:00:00 1970
+++ links/dummyjs.c Thu Jun 15 17:33:31 2000
@@ -0,0 +1,136 @@
+/*
+ * It is supposed to handle 'javascript' scheme. It understands
+ * simplest expressions:
+ *
+ * history.back();
+ * history.reload();
+ */
+
+#include "links.h"
+typedef unsigned char uchar;
+
+static char *keywords =
+ "\6window"
+ "\7history"
+ "\4back"
+ "\6reload"
+ "\2go"
+;
+
+enum {
+ JS_WINDOW=0x200, JS_HISTORY, JS_BACK, JS_RELOAD, JS_GO,
+ JS_NAME=0x300, JS_NUMBER
+};
+
+static int get_token(uchar **ptr, uchar **start)
+{
+ uchar *p = *ptr, *s;
+ int c;
+
+ while(*p <= ' ') {
+ if(!*p) break;
+ p++;
+ }
+ if(start)
+ *start = p;
+ s = p;
+ c = *p;
+ if(!c) goto out;
+
+ p++;
+ if(!isalnum(c) && c != '_')
+ goto out;
+
+ while(isalnum(*p) || *p == '_')
+ p++;
+
+
+ c = JS_NUMBER;
+ if(!isdigit(*s)) {
+ int l = p - s;
+ char *k;
+
+ c = JS_WINDOW;
+ for(k = keywords; *k; k += k[-1], c++)
+ if(*k++ == l && 0==memcmp(k, s, l))
+ goto out;
+ c = JS_NAME;
+ }
+out:
+ *ptr = p;
+ return c;
+}
+
+int javascript(struct session *ses, unsigned char *p)
+{
+ int c;
+
+ c = get_token(&p, 0);
+ if(!c) return 0;
+ if(c == JS_WINDOW) {
+ c = get_token(&p, 0);
+ if(c != '.')
+ return 0;
+ c = get_token(&p, 0);
+ }
+
+ if(c == JS_HISTORY) {
+ int a, n, v;
+ uchar *s;
+
+ c = get_token(&p, 0);
+ if(c != '.')
+ return 0;
+ a = get_token(&p, 0);
+ c = get_token(&p, 0);
+ if(c != '(')
+ return 0;
+ c = get_token(&p, &s);
+ n = 0;
+ if(c == '-') {
+ n = 1;
+ c = get_token(&p, &s);
+ }
+ v = 0;
+ if(c == JS_NUMBER) {
+ uchar *e;
+ v = strtol(s, (char**)&e, 0);
+ if(e != p)
+ return 0;
+ if(n) v=-v;
+ c = get_token(&p, 0);
+ } else if(n)
+ return 0;
+ if(c != ')')
+ return 0;
+ c = get_token(&p, 0);
+ if(c == ';')
+ c = get_token(&p, 0);
+ if(c)
+ return 0;
+
+ switch(a) {
+ case JS_BACK: v = -1;
+ case JS_GO:
+ if(v < -MAX_HISTORY_ITEMS) v = -MAX_HISTORY_ITEMS;
+ while(v++ < 0) go_back(ses);
+ break;
+ case JS_RELOAD: reload(ses, -1); break;
+ default: return 0;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+void js_func(struct session *ses, unsigned char *url)
+{
+ unsigned char *p;
+
+ p = strchr(url, ':');
+ if(!p) p = url-1; /* just in case */
+ if(javascript(ses, ++p))
+ return;
+
+ msg_box(ses->term, NULL, "JavaScript", AL_LEFT, p, NULL, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);
+}
diff -u -r -N links-current/links.h links/links.h
--- links-current/links.h Mon Jun 12 12:39:57 2000
+++ links/links.h Thu Jun 15 00:05:08 2000
@@ -809,6 +809,10 @@
void telnet_func(struct session *, unsigned char *);
void tn3270_func(struct session *, unsigned char *);
+/* dummyjs.c */
+
+void js_func(struct session *, unsigned char *);
+
/* kbd.c */
#define BM_BUTT 3
diff -u -r -N links-current/url.c links/url.c
--- links-current/url.c Sun Jun 11 21:02:08 2000
+++ links/url.c Thu Jun 15 17:32:35 2000
@@ -17,6 +17,7 @@
{"mailto", 0, NULL, mailto_func, 0, 0, 0},
{"telnet", 0, NULL, telnet_func, 0, 0, 0},
{"tn3270", 0, NULL, tn3270_func, 0, 0, 0},
+ {"javascript", 0, NULL, js_func, 0, 0, 0},
{NULL, 0, NULL}
};