Allow compatbility with classic sam. - sam - An updated version of the sam text… | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit c65a7e677c730a320d34b7c7b630e975d141fad9 | |
parent 8cfd5730916941d0a11e24a3152898fc0e9b1091 | |
Author: Rob King <[email protected]> | |
Date: Thu, 1 Sep 2016 22:31:32 -0500 | |
Allow compatbility with classic sam. | |
Diffstat: | |
README.rst | 3 ++- | |
config.h.def | 6 ++++++ | |
sam/mesg.c | 14 ++++++++++++-- | |
sam/mesg.h | 6 ++++++ | |
sam/moveto.c | 5 ++++- | |
samterm/main.c | 35 +++++++++++++++++++++++++------ | |
samterm/mesg.c | 8 ++++++-- | |
7 files changed, 65 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/README.rst b/README.rst | |
@@ -105,7 +105,8 @@ Multicolor Support | |
Simplified and Dynamic Configuration | |
The graphical elements (colors and fonts) of this version of sam are contr… | |
- The table of composable characters is now dynamically configurable (via th… | |
+ The table of composable characters is now dynamically configurable (via th… | |
+ where it was once hard-coded. | |
Far Better Keyboard Support | |
The selection ("cursor") can be moved using keyboard commands. | |
diff --git a/config.h.def b/config.h.def | |
@@ -4,6 +4,12 @@ | |
/* Where to put temporary files. */ | |
#define TMPDIR "/tmp" | |
+/* Define this if you need compatibility with the binary protocol | |
+ * used by classic sam (e.g. if you are going to be running a classic | |
+ * sam binary and a Deadpixi samterm, or vice-versa. | |
+#define CLASSIC_SAM_COMPATIBILITY | |
+ */ | |
+ | |
/* Is the target 64-bits? | |
* 0 - build for 32-bit systems | |
* 1 - build for 64-bit little-endian systems | |
diff --git a/sam/mesg.c b/sam/mesg.c | |
@@ -1,5 +1,6 @@ | |
/* Copyright (c) 1998 Lucent Technologies - All rights reserved. */ | |
#include "sam.h" | |
+#include "../config.h" | |
Header h; | |
uchar indata[DATASIZE]; | |
@@ -19,6 +20,13 @@ long invlong(void); | |
int inshort(void); | |
int inmesg(Tmesg); | |
void setgenstr(File*, Posn, Posn); | |
+ | |
+#ifdef CLASSIC_SAM_COMPATIBILITY | |
+int oldcompat = 1; | |
+#else | |
+int oldcompat = 0; | |
+#endif | |
+ | |
#ifdef DEBUG | |
char *hname[] = { | |
[Hversion] "Hversion", | |
@@ -251,9 +259,11 @@ inmesg(Tmesg type) | |
s = inshort(); /* tag */ | |
l = inlong(); /* position */ | |
l1 = inlong(); /* lines to seek past position */ | |
- l2 = inlong(); /* cookie to return (identifies layer) */ | |
journaln(0, l1); | |
- journaln(0, l2); | |
+ if (!oldcompat){ | |
+ l2 = inlong(); /* cookie to return (identifies layer) */ | |
+ journaln(0, l2); | |
+ } | |
lookorigin(whichfile(s), l, l1, l2); | |
break; | |
diff --git a/sam/mesg.h b/sam/mesg.h | |
@@ -1,5 +1,11 @@ | |
/* Copyright (c) 1998 Lucent Technologies - All rights reserved. */ | |
+#ifdef CLASSIC_SAM_COMPATIBILITY | |
+#define VERSION 0 | |
+#else | |
#define VERSION 16091 | |
+#endif | |
+ | |
+extern int oldcompat; | |
#define TBLOCKSIZE 512 /* largest piece of text sent t… | |
#define DATASIZE (UTFmax*TBLOCKSIZE+30) /* ... including protocol head… | |
diff --git a/sam/moveto.c b/sam/moveto.c | |
@@ -58,7 +58,10 @@ lookorigin(File *f, Posn p0, Posn ls, long rl) | |
p0 = 0; | |
}else | |
p0 = oldp0; | |
- outTsll(Horigin, f->tag, p0, rl); | |
+ if (oldcompat) | |
+ outTsl(Horigin, f->tag, p0); | |
+ else | |
+ outTsll(Horigin, f->tag, p0, rl); | |
} | |
int | |
diff --git a/samterm/main.c b/samterm/main.c | |
@@ -8,6 +8,8 @@ | |
#include "samterm.h" | |
#include <commands.h> | |
+#include "../config.h" | |
+ | |
extern unsigned long _bgpixel; | |
extern void hmoveto(int, long, Flayer *); | |
@@ -31,6 +33,12 @@ int expandtabs = 0; | |
char *machine = "localhost"; | |
int nofifo = 0; | |
+#ifdef CLASSIC_SAM_COMPATIBILITY | |
+int oldcompat = 1; | |
+#else | |
+int oldcompat = 0; | |
+#endif | |
+ | |
void | |
main(int argc, char *argv[]) | |
{ | |
@@ -317,10 +325,16 @@ scrorigin(Flayer *l, int but, long p0) | |
switch(but){ | |
case 1: | |
- outTslll(Torigin, t->tag, l->origin, p0, t->front); | |
+ if (oldcompat) | |
+ outTsll(Torigin, t->tag, l->origin, p0); | |
+ else | |
+ outTslll(Torigin, t->tag, l->origin, p0, getlayer(l, t)); | |
break; | |
case 2: | |
- outTslll(Torigin, t->tag, p0, 1L, t->front); | |
+ if (oldcompat) | |
+ outTsll(Torigin, t->tag, p0, 1L); | |
+ else | |
+ outTslll(Torigin, t->tag, p0, 1L, getlayer(l, t)); | |
break; | |
case 3: | |
horigin(t->tag, p0, NULL); | |
@@ -386,7 +400,10 @@ center(Flayer *l, long a) | |
if (!t->lock && (a < l->origin || l->origin + l->f.nchars < a)){ | |
a = (a > t->rasp.nrunes) ? t->rasp.nrunes : a; | |
- outTslll(Torigin, t->tag, a, 2L, getlayer(l, t)); | |
+ if (oldcompat) | |
+ outTsll(Torigin, t->tag, a, 2L); | |
+ else | |
+ outTslll(Torigin, t->tag, a, 2L, getlayer(l, t)); | |
return 1; | |
} | |
@@ -408,7 +425,10 @@ onethird(Flayer *l, long a) | |
lines = ((s.max.y-s.min.y)/l->f.fheight+1)/3; | |
if (lines < 2) | |
lines = 2; | |
- outTslll(Torigin, t->tag, a, lines, t->front); | |
+ if (oldcompat) | |
+ outTsll(Torigin, t->tag, a, lines); | |
+ else | |
+ outTslll(Torigin, t->tag, a, lines, getlayer(l, t)); | |
return 1; | |
} | |
return 0; | |
@@ -459,7 +479,10 @@ static long | |
cmdscrollup(Flayer *l, long a, Text *t) | |
{ | |
flushtyping(0); | |
- outTslll(Torigin, t->tag, l->origin, l->f.maxlines + 1, getlayer(l, t)); | |
+ if (oldcompat) | |
+ outTsll(Torigin, t->tag, l->origin, l->f.maxlines + 1); | |
+ else | |
+ outTslll(Torigin, t->tag, l->origin, l->f.maxlines + 1, getlayer(l, t)… | |
return a; | |
} | |
@@ -866,7 +889,7 @@ type(Flayer *l, int res) /* what a bloody mess this … | |
CommandEntry *e = &commands[k.c]; | |
if (!e->unlocked || !lock){ | |
- if (k.t == Tcurrent) | |
+ if (k.t == Tcurrent || oldcompat) | |
a = e->f(l, a, t); | |
else{ | |
Flayer *lt = flwhich(k.p); | |
diff --git a/samterm/mesg.c b/samterm/mesg.c | |
@@ -590,8 +590,12 @@ hmoveto(int m, long p0, Flayer *l) | |
Text *t = whichtext(m); | |
l = l ? l : &t->l[t->front]; | |
- if (p0 < l->origin || p0 - l->origin > l->f.nchars * 9/10) | |
- outTslll(Torigin, m, p0, 2L, getlayer(l, t)); | |
+ if (p0 < l->origin || p0 - l->origin > l->f.nchars * 9/10){ | |
+ if (oldcompat) | |
+ outTsll(Torigin, m, p0, 2L); | |
+ else | |
+ outTslll(Torigin, m, p0, 2L, getlayer(l, t)); | |
+ } | |
} | |
void |