Nope, Forth was definitely not the first.  There used to be a text editor
called TECO, originally developed on the DEC PDP-1 computer.  You could
write TECO macros (really programs) to do virtually any kind of text 
processing you want.  They weren't hard to write, but weren't very easy
to read, even with a lot of comments.  I attached an example below for
your amusement.  The things enclosed in exclamation points are (usually)
comments.  This is a very simple one by TECO macro standards, but was
the first example I managed to dredge out.  :-)

Note the "^" in "^u" is really a caret -- the other "^" things are 
CTRL characters.


        pete peterson
        GenRad, Inc.
        7 Technology Park Drive
        Westford, MA 01886-0033

        [EMAIL PROTECTED] or [EMAIL PROTECTED]
        +1-978-589-7478 (GenRad);  +1-978-256-5829 (Home: Chelmsford, MA)
        +1-978-589-2088 (Closest FAX); +1-978-589-7007 (Main GenRad FAX)
 

> Date: Wed, 24 May 2000 07:18:08 -0500 (CDT)
> From: [EMAIL PROTECTED] (Dave Ihnat)
> To: [EMAIL PROTECTED]
> Subject: Re: Samba 2.07
> 
> Niclas Sodergard DC wrote:
> 
> > BTW, if you think Perl is hairy don't look at postscript :-).
> 
> Much closer to FORTH, which when I first encountered it, I dubbed "the
> world's first write-only language."
> -- 
>       Dave Ihnat
>       [EMAIL PROTECTED]


!Diabset.tec    rep    10-MAY-82 07:02!
!modified to count unequal tabs properly 01-OCT-82 13:48!
!teco macro does setup for Diablo printer!
!sets characters per inch, lines per inch, margins, and tab stops!
!This version has control sequences for Bedford Computer Systems version of!
!     the Diablo printer (the one attached to the 11/70) and for normal!
!     Diablo 16XX or 630!
etu1 et#1et [1 7:wu1 0,7:w  [1  0:wu1 [1 2,0:w  !set vt100 as vt52 mode!
^A^[H^[JDiablo setup routine:  Answer questions -- follow responses with Carriage 
Return
^A
   !m1 gets a number from the keyboard and returns it-- number terminated by 
non-numeric character!
@^u1`[0[1[2 .u1 m5 .u2 q1j \u0 q1,q2k q0 ]2]1]0`
   !m2 throws away any left-over characters in keyboard buffer!
@^u2` ET#32ET <-1-^T;> 32^_&ETET `
@^u3/ 27^T ^^I^T 27^T ^^M^T 13^T 27^T ^^J^T/   !m3 erases previous line from screen!
@^u4` < ^T-10"e 0; ' > `   !m4 waits for line feed!
@^u5/ !read string from terminal into buffer!
    m2 [0 <^Tu0 q0-13"e ^T 0;' q0-127"e ."n -1d 8^T32^T8^T'' q0-127"n q0i^['>]0/

m2 ^AIs the file going to be printed on the strange Diablo printer in the
Facilities Operators Area? (y/n) ^A
^T#32-^^y"n      !set up for Diablo 16XX or 630 format!
  @^ua`^[1` !tabset sequence!  @^ub`^[9` !set left margin sequence!
  @^uc`^[0` !set right margin! @^uj`
^[` 10:^uj^[  !crlf, reverse lf  sequence!
  @^ud`^[2^[^I^A^[9^[^IU^[0` 13:^ud^[ !clear all margins and tabs sequence!
  27^ue^[31:^ue^[13:^ue^[ 27^uf^[31:^uf^[11:^uf^[ !ge for 10 cpi, gf for 12 cpi!
  27^ug^[30:^ug^[9:^ug^[ 27^uh^[30:^uh^[7:^uh^[ !gg for 6 lpi, gh for 8 lpi!
|     !set up for Bedford Computer Systems format!
  @^ua`^[1` !tabset sequence!  @^ub`^[.` !set left margin sequence!
  @^uc`^[/` !set right margin! @^uj`
^V` ! crlf, reverse lf sequence!
  @^ud`^[;^[&`  !clear all margins and tab stops sequence!
  @^ue`^[)` @^uf`^[*` !ge for 10 cpi, gf for 12 cpi!
  @^ug`^[<` @^uh`^[=` !gg for 6 lpi, gh for 8 lpi!
'   !qa is left margin position, qb is right margin position!
@^ui` 13@i~~ qa<i ^[> gb qb-qa<i ^[> gc gj`  ! set margins!
   m4
<^AName of file: ^A m5 hx6 hk @:eb/^Eq6/u6  -1-q6; ^A Can't open ^A :g6 ^A     ^A>
<^Aspecify # of characters per inch (10 or 12) ^A m1uc
qc-10"e ge  0; | qc-12"e gf  0; ' ' m3   >
<^Aspecify # of lines per inch (6 or 8) ^A m1uc
qc-6"e gg  0; | qc-8"e gh  0; ' ' m3   > gd 13i^[^M
^AMargin and tab positions are to be specified in character positions
^A <m2 ^Aleft margin = ^A m1ua qa"g  qa-(8*qc)"l 0;' ' m3  >
<m2  ^Aright margin = ^A m1ub qb-qa"g 0;' m3 >
^AWould you like tab positions absolute or relative to margins?
 (a = absolute; other response = relative) ^A ^T#32-^^au0 m4   q0"n mi' 
^ADo you want uniform tab spacing ? (y/n) ^A m2  ^T#32-^^y"e
     m4 ^ATab stop separation = ^A m2  m1u1 (qb-qa)/q1< q1< @i` ` > ga > gj q0"e mi'
    | m4 ^A
Specify tab positions (separate with commas... end with Car Ret)
^A .u1 m5 .u2 q1j .,.x6 q0"e qau5 | 0u5' <\u3 q3-q5"l ^ATabs must be within margins -- 
aborting
^A       hkekex'
    q3-q5<:@^u6` `>  .u6 ga q6,.:x6 q6,.k q3u5::s^Es^[ ^[ ::s,^[ ^[ ::s^Es^[  .-q2"e 
0; '>
q1,q2k g6 q0"e mi '   ' q0"n 13@i// '
^A^[H^[J^A  ]1^[ q1,0:w ]1^[ q1,7:w ]1^[ q1et
a ex^[^[


-- 
To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe"
as the Subject.

Reply via email to