Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

historical revisionism

7 views
Skip to first unread message

Mark Crispin

unread,
Apr 1, 2008, 8:00:30 PM4/1/08
to
I was browsing through the technical books, and my eyes fell upon an
O'Reilly EMACS tutorial. I picked it up, and turned to its history
section.

According to this book, TECO was a "line-oriented editor" that was
completely unusable until Richard Stallman created EMACS from TECO macros
in 1975 and caused TECO to fade into "well-deserved obscurity."

I could go on, but you get the gist. Nauseatingly false statements about
TECO, and utter disregard for the many individuals who made EMACS happen.
Even the year was wrong; EMACS' advent was in late 1976/early 1977.

To be sure, Stallman was a player; but there were many other individuals
involved, without whose effort there would have been no EMACS and very
likely no GNU either.

-- Mark --

http://staff.washington.edu/mrc
Science does not emerge from voting, party politics, or public debate.
Si vis pacem, para bellum.

SDF Poster

unread,
Apr 1, 2008, 8:09:41 PM4/1/08
to
Mark Crispin <M...@Washington.EDU> wrote:
>According to this book, TECO was a "line-oriented editor" that was
>completely unusable until Richard Stallman created EMACS from TECO macros
>in 1975 and caused TECO to fade into "well-deserved obscurity."

[1:i*^Yu14<q1&377.f"nir'q1/400.u1>^[[8
.-z(1702117120m81869946983m8w660873337m8w1466458484m8
)+z,.f^@fx*[0:ft^]0^[w^\

>I could go on, but you get the gist. Nauseatingly false statements about
>TECO, and utter disregard for the many individuals who made EMACS happen.
>Even the year was wrong; EMACS' advent was in late 1976/early 1977.

[1:i*^Yu16<q1&77.+32iq1f"l#-1/100.#-1&7777777777.'"#/100.'u1r>6c^[[6
.(675041640067.m6w416300715765.m6w004445675045.m6
455445440046.m6w576200535144.m6w370000000000.m6),.fx*[0:ft^]0^[w^\

Mark Crispin

unread,
Apr 1, 2008, 9:27:23 PM4/1/08
to
On Wed, 2 Apr 2008, SDF Poster posted:

> [1:i*^Yu14<q1&377.f"nir'q1/400.u1>^[[8
> .-z(1702117120m81869946983m8w660873337m8w1466458484m8
> )+z,.f^@fx*[0:ft^]0^[w^\

So?

Obfuscated code can be written in any language, including C.
Well-written TECO code was not written that way. People who judge TECO by
silly examples like the above generally don't think twice about awk
scripts or regular expressions.

Need I remind you of:

#define P(X)j=write(1,X,1)
#define C 39
int M[5000]={2},*u=M,N[5000],R=22,a[4],l[]={0,-1,C-1,-1},m[]={1,-C,-1,C},*b=N,*d=N,c,e,f,g,i,j,k,s;main(){for(M[i=C*R-1]=24;f|d>=b;){c=M[g=i];i=e;for(s=f=0;s<4;s++)if((k=m[s]+g)>=0&&k<C*R&&l[s]!=k%C&&(!M[k]||!j&&c>=16!=M[k]>=16))a[f++]=s;if(f){f=M[e=m[s=a[rand()/(1+2147483647/f)]]+g];j=j<f?f:j;f+=c&-16*!j;M[g]=c|1<<s;M[*d++=e]=f|1<<(s+2)%4;}else e=d>b++?b[-1]:e;}P(" ");for(s=C;--s;P("_"))P(" ");for(;P("\n"),R--;P("|"))for(e=C;e--;P("_ "+(*u++/8)%2))P("| "+(*u/4)%2);}

Or perhaps you prefer:

#define p struct c
#define q struct b
#define h a->a
#define i a->b
#define e i->c
#define o a=(*b->a)(b->b,b->c)
#define s return a;}q*
#define n (d,b)p*b;{q*a;p*c;
#define z(t)(t*)malloc(sizeof(t))
q{int a;p{q*(*a)();int b;p*c;}*b;};q*u n
a=z(q);h=d;i=z(p);i->a=u;i->b=d+1;s
v n c=b;do o,b=i;while(!(h%d));i=c;i->a=v;i->b=d;e=b;s
w n o;c=i;i=b;i->a=w;e=z(p);e->a=v;e->b=h;e->c=c;s
t n
for(;;)o,main(-h),b=i;}main(b){p*a;if(b>0)a=z(p),h=w,a->c=z(p),a->c->a=u,a->c->b=2,t(0,a);putchar(b?main(b/2),-b%2+'0':10);}

or:

#define o define
#o ___o write
#o ooo (unsigned)
#o o_o_ 1
#o _o_ char
#o _oo goto
#o _oo_ read
#o o_o for
#o o_ main
#o o__ if
#o oo_ 0
#o _o(_,__,___)(void)___o(_,__,ooo(___))
#o __o
(o_o_<<((o_o_<<(o_o_<<o_o_))+(o_o_<<o_o_)))+(o_o_<<(o_o_<<(o_o_<<o_o_)))
o_(){_o_ _=oo_,__,___,____[__o];_oo ______;_____:___=__o-o_o_; _______:
_o(o_o_,____,__=(_-o_o_<___?_-o_o_:___));o_o(;__;_o(o_o_,"\b",o_o_),__--);
_o(o_o_," ",o_o_);o__(--___)_oo _______;_o(o_o_,"\n",o_o_);______:o__(_=_oo_(oo_,____,__o))_oo _____;}

or:

#define C_C_(_)~' '&_
#define _C_C(_)('\b'b'\b'>=C_C>'\t'b'\n')
#define C_C _|_
#define b *
#define C /b/
#define V _C_C(
main(C,V)
char **V;
/* C program. (If you don't
* understand it look it
*/ up.) (In the C Manual)
{
char _,__;
while (read(0,&__,1) & write((_=(_=C_C_(__),C)),
_C_,1)) _=C-V+subr(&V);
}
subr(C)
char *C;
{
C="Lint says "argument Manual isn't used." What's that
mean?"; while (write((read(C_C('"'-'/*"'/*"*/))?__:__-_+
'\b'b'\b'|((_-52)%('\b'b'\b'+C_C_('\t'b'\n'))+1),1),&_,1));

It doesn't even have to be wierd-looking:

main ()
{
int i;
for (i=1; i<4; i++)
putchar ((45*i-9*i*i+168)/2);

Johnny Billquist

unread,
Apr 2, 2008, 2:46:56 AM4/2/08
to
Mark Crispin skrev:

> I was browsing through the technical books, and my eyes fell upon an
> O'Reilly EMACS tutorial. I picked it up, and turned to its history
> section.
>
> According to this book, TECO was a "line-oriented editor" that was
> completely unusable until Richard Stallman created EMACS from TECO
> macros in 1975 and caused TECO to fade into "well-deserved obscurity."
>
> I could go on, but you get the gist. Nauseatingly false statements
> about TECO, and utter disregard for the many individuals who made EMACS
> happen. Even the year was wrong; EMACS' advent was in late 1976/early 1977.
>
> To be sure, Stallman was a player; but there were many other individuals
> involved, without whose effort there would have been no EMACS and very
> likely no GNU either.

Sadly enough, it's not too uncommon these days... But thanks for the warning. If
I come across the book, I'll skip it.

Johnny

--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: b...@softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol

Pat Farrell

unread,
Apr 2, 2008, 9:40:43 AM4/2/08
to
On Tue, 01 Apr 2008 17:00:30 -0700, Mark Crispin wrote:
> According to this book, TECO was a "line-oriented editor" that was
> completely unusable until Richard Stallman created EMACS from TECO macros
> in 1975 and caused TECO to fade into "well-deserved obscurity."

Wow, that is so bad.

And no mention that 'vi' is a direct spiritual descendant of TECO.
More limited, but ifoo$ to insert sure looks familiar.

Mark Crispin

unread,
Apr 2, 2008, 1:52:20 PM4/2/08
to
On Wed, 2 Apr 2008, Pat Farrell posted:

> And no mention that 'vi' is a direct spiritual descendant of TECO.
> More limited, but ifoo$ to insert sure looks familiar.

I always consider vi to be part of the west coast line (TV, E, TVEDIT,
etc.) instead of the east coast line (TECO, EMACS). However, there was
certainly cross-pollinization between the two lines. Although most people
in the 1970s and 1980s were firmly in one camp or the other, almost
everybody had familiarity with the other side.

I, personally, never learned vi; but my E skills from WAITS transferred to
vi well enough that I can do simple editing on a system which lacks emacs.

DEC TECO was crippled until the release of TV-TECO in TOPS-20. TECO, as
written by Dan Murphy, always was a display editor. I'm sure that Dan can
chime in with a lot more history.

TECO (by this I mean the program on MIT ITS) remained much like the
TOPS-20 TV-TECO program over a decade later until RMS visited SAIL in the
early 1970s and saw E and its real time editing features. This was,
indeed, a critical turning point and RMS was part of it; he implemented ^R
mode in TECO which was its first real-time editing. Some familiar
commands, such as ^A, ^B, ^D, ^F, ^K, ^N, ^O, ^P, ^V appeared during this
time.

Other people quickly developed macro packages, and by 1976 there were two
major ones: TECMAC and TMACS. There were also personal variations as
well. For example, I had an extended version of TECMAC which had meta
commands to operate on words the way that control commands operated on
characters, and convinced RMS that this was an important basic
functionality.

EMACS was created in late 1976/early 1977 by a group of people, including
RMS, Guy Steele, and Dave Moon, in an effort to unify TECMAC and TMACS.
I take credit for the design in which commands such as ^X^R (read file)
prompt you for a file name instead of opening a TECO minibuffer with the
necessary TECO commands and the cursor placed where the file name should
go. I nagged RMS into making that change. [Yes, it is undoubtably true
that RMS did most of the programming -- but he did not operate in a
vacuum!]

EMACS would have languished in obscurity and died when ITS did, were it
not for the effort of Mike McMahon, one of the most brilliant programmers
that I have ever met. MMcM did "the impossible": he ported EMACS to
TOPS-20!

MMcM's port is another critical turning point in the history of EMACS; and
had this not happened I am convinced GNU would not have happened since
nobody would have paid any attention to RMS in the early 1980s. RMS got
the attention and support he needed to launch GNU because he was the
developer and distributor of EMACS for TOPS-20.

Sadly, MMcM gets very little credit today; he deserves more. I should
also mention that he was the original author of the TOPS-20 mailsystem.
I am most associated with it, and did indeed write some of its components
(most notably the SMTP and IMAP servers). But MM, MMAILR (originally
XMAILR), and MMAILBOX (originally XMAILBOX) were created by MMcM; I have
always attempted to correct people who call me the "author of MM".

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.

Talkin Horse

unread,
May 10, 2008, 2:52:11 AM5/10/08
to
"SDF Poster" <mart...@sdf.lNoOnSePsAtMar.org> wrote in message
news:fsuis5$fa2$1...@chessie.cirr.com...

On an ASR-33 and 10 characters per second, brevity is the soul of wit.


Chris Barts

unread,
Jun 20, 2008, 1:03:07 AM6/20/08
to
Mark Crispin <m...@Washington.EDU> writes:

> On Wed, 2 Apr 2008, Pat Farrell posted:
>> And no mention that 'vi' is a direct spiritual descendant of TECO.
>> More limited, but ifoo$ to insert sure looks familiar.
>
> I always consider vi to be part of the west coast line (TV, E, TVEDIT,
> etc.) instead of the east coast line (TECO, EMACS). However, there
> was certainly cross-pollinization between the two lines. Although
> most people in the 1970s and 1980s were firmly in one camp or the
> other, almost everybody had familiarity with the other side.

What about vi's basis in ex, derived from em, derived from ed?* It
seems the Unix influence (Kernighan, Ritchie, and later Joy) is being
ignored in this paragraph.

*(Any resemblance to the histories of Bronze Age tribesman strictly
co-incidental.)

[snip]

> EMACS would have languished in obscurity and died when ITS did, were
> it not for the effort of Mike McMahon, one of the most brilliant
> programmers that I have ever met. MMcM did "the impossible": he
> ported EMACS to TOPS-20!

What was the first port of Emacs to Unix? It seems Gosmacs, Mocklisp
and all, had plenty to do with Emacs surviving 1983 et seq.

[snip]

Mark Crispin

unread,
Jun 20, 2008, 10:26:42 AM6/20/08
to
On Thu, 19 Jun 2008, Chris Barts posted:

> What about vi's basis in ex, derived from em, derived from ed?* It
> seems the Unix influence (Kernighan, Ritchie, and later Joy) is being
> ignored in this paragraph.

I don't dispute this. However, none of these were display editors, and I
see little sign of much pre-Berkeley display capability in UNIX.

>> EMACS would have languished in obscurity and died when ITS did, were
>> it not for the effort of Mike McMahon, one of the most brilliant
>> programmers that I have ever met. MMcM did "the impossible": he
>> ported EMACS to TOPS-20!
> What was the first port of Emacs to Unix? It seems Gosmacs, Mocklisp
> and all, had plenty to do with Emacs surviving 1983 et seq.

MMcM's work was years earlier, circa 1977. Without his work, EMACS would
have been an obscure editor, known to a few dozen people at most.

By making EMACS available in the TOPS-20 world, a much wider community of
people became aware of it -- and came to insist upon having it. That in
turn lead to many EMACS clones on other platforms.

Gosling's EMACS was certainly a crucial ancestor of GNU EMACS. But MMcM's
earlier work was equally crucial.

That isn't to say that display editors wouldn't have happened anyway.
But they wouldn't have been EMACS.

Brian Harvey

unread,
Jun 20, 2008, 4:58:28 PM6/20/08
to
Chris Barts <chbarts...@gmail.com> writes:
>What was the first port of Emacs to Unix? It seems Gosmacs, Mocklisp
>and all, had plenty to do with Emacs surviving 1983 et seq.

There were several Unix versions of Emacs prior to Gosling, although his was
the most complete until GNU. In 1980 I found one called TORES at MIT that I
brought to LSRHS, but it was pretty weak, and was replaced first by EDT and
later by JOVE, both written by my student Jonathan Payne. This was on the
PDP-11, not on the Vax, so all three were far from complete, but (being an old
dog unable to learn new tricks) I am typing this message into JOVE right now.
:-) It has the advantage that, having been written to fit in 64Kb, it starts
in an instant and plays well with others.

John Sauter

unread,
Jun 20, 2008, 5:45:11 PM6/20/08
to

There was also a DEC product called EDT which ran on the PDP-11 and the
VAX.
John Sauter (John_...@systemeyescomputerstore.com)

Mark Crispin

unread,
Jun 20, 2008, 6:19:18 PM6/20/08
to
On Fri, 20 Jun 2008, John Sauter posted:

> There was also a DEC product called EDT which ran on the PDP-11 and the
> VAX.

And TOPS-20.

0 new messages