18 changed files with 447 additions and 70 deletions
@ -0,0 +1,68 @@
@@ -0,0 +1,68 @@
|
||||
|
||||
TECOC - TECO Editor |
||||
=================== |
||||
|
||||
Teco is a text editor written by Dan Murphy in 1962. It differs from |
||||
other editors in several ways as follows: |
||||
|
||||
1. Character oriented |
||||
|
||||
Vi and Emacs are screen oriented editors. You view the text on the whole |
||||
window or screen, and you edit the text right where you see it. Changes take |
||||
affect immediately. |
||||
|
||||
ed, ex, edlin are line oriented editors. Edited text is viewed, |
||||
referenced, and edited by line. |
||||
|
||||
Teco is character oriented. This means the unit of reference is a |
||||
single character. On one hand, this may make teco cumbersome to use, |
||||
but on the other hand, it gives teco very fine control over what is |
||||
happening. |
||||
|
||||
Teco does have a video mode, however text is still edited with |
||||
commands on a character basis. The screen is simply updated once a |
||||
command is completed to give the user a visual representation of where |
||||
they are. Text is not edited in the screen view area. |
||||
|
||||
2. Macros |
||||
|
||||
In general, vi, ed, and edlin are not programmable. This means you |
||||
have the functions the editor provides and that is all you can do. |
||||
However, teco is highly programmable. Programs that you write are |
||||
called macros. In fact, the original version of Emacs was written as |
||||
teco macros. Also, "emacs" actually means "Editing Macros". |
||||
|
||||
|
||||
The original versions of Teco were written in the machine languages of |
||||
the machines it operated on. As newer machines and editor arose, teco |
||||
fell into increasing disuse and obscurity. |
||||
|
||||
In the early '80's Pete Siemsen, a long-time teco user, created a |
||||
portable version of Teco in the C language called "tecoc". Rather |
||||
than create a new editor, Pete's goal was to duplicate the original teco |
||||
as closely as possible. |
||||
|
||||
As time wore on, Tom Almy, Blake McBride, and others increasingly |
||||
assisted in tecoc's maintenance (porting, bug fixes, etc.). |
||||
Eventually, tecoc found a new home and principal support at Tom |
||||
Almy's home page where Tom kept up with ports to Windows, Mac, and |
||||
Linux. |
||||
|
||||
Most recently, Blake McBride: |
||||
|
||||
1. Merged Tom Almy's various ports along with work done by Blake |
||||
2. renewed the Windows, Mac, and Linux ports |
||||
3. re-enabled video support (on Mac & Linux) |
||||
4. bug fixes and speed improvements |
||||
5. tested on 64 bit machines |
||||
|
||||
This latest work is available on github at: |
||||
|
||||
https://github.com/blakemcbride/Tecoc |
||||
|
||||
Other documents in the "doc" directory provide complete documentation. |
||||
See the following files in the "doc" directory: |
||||
|
||||
BUILD.txt Build and setup instructions |
||||
INTRO.txt Introduction to using the tecoc |
||||
teco-manual.txt Complete manual |
@ -0,0 +1,68 @@
@@ -0,0 +1,68 @@
|
||||
|
||||
TECOC build & setup instructions |
||||
|
||||
Please note my use of "teco" and "tecoc". "teco" refers to the editor |
||||
in general, and "tecoc" refers to the particular "tecoc" |
||||
implementation of teco. |
||||
|
||||
TECOC has been tested on 64 bit Linux, 64 bit Mac, and 64 bit Windows |
||||
OSs that were current as of 2015. In the past, this system was build on |
||||
32 and even 16 bit machines, so I have every reason to believe that it |
||||
would build as-is on 32 bit environments. |
||||
|
||||
I used GCC on Linux and Mac, and I used the Microsoft 2013 C compiler |
||||
on Windows. On the Mac, GCC came automatically when I installed the |
||||
Apple development kit. I did no special setup. |
||||
|
||||
The Linux and Mac versions support video and non-video modes. The |
||||
Windows version only supports non-video mode. (Porting Windows to |
||||
video using ncurses would probably be pretty simple.) As-shipped, the |
||||
Linux and Mac versions are setup to build the video versions. This |
||||
can be controlled by editing their associated makefiles. Linux and |
||||
Mac machine would need to install the ncurses development library. |
||||
|
||||
To build, go to the "src" directory and type: |
||||
|
||||
Linux: make -f makefile.linux |
||||
|
||||
Mac: make -f makefile.osx |
||||
|
||||
Windows: nmake -f makefile.win |
||||
|
||||
You will end up with an executable names "tecoc". That is all you |
||||
need from this directory. |
||||
|
||||
Historically, the teco environment included a handful of utilities |
||||
including: |
||||
|
||||
teco |
||||
munge |
||||
inspect |
||||
Make |
||||
|
||||
Tecoc includes all of this functionality in the single tecoc |
||||
executable. Tecoc has two ways of determining which functionality you |
||||
desire as follows: |
||||
|
||||
1. On file systems that have links, one can create an entry with one |
||||
of the above names that links to the tecoc executable. |
||||
|
||||
2. Alternatively (especially on Windows), if you execute the tecoc |
||||
executable directly, then the first argument must be one of the |
||||
utility names above. "teco" is what you'd mainly use. |
||||
|
||||
As mentioned, teco supports the ability to create your own macros. |
||||
User added macros would exist in files named XX.tec |
||||
where XX is the name of the macro. It need not be two characters long. |
||||
These macro files must exist somewhere tecoc can find them. To this end, |
||||
tecoc supports an environment variable named TEC_LIBRARY |
||||
You should set that environment variable to the directory (full path) |
||||
where the macros are to exist. Note that TEC_LIBRARY must contain a |
||||
trailing slash. |
||||
|
||||
Lastly, the "tec" file extension means "teco macro". There is also a |
||||
file type "tes". That stands for "teco macro source". Generally, if you |
||||
have a small macro, you'd just put it in a .tec file. Larger macros |
||||
would be written in a .tes file allowing comments and space. Later |
||||
the squeeze function can be used to convery a .tes file into a .tec |
||||
file. |
@ -0,0 +1,145 @@
@@ -0,0 +1,145 @@
|
||||
|
||||
Introduction to using tecoc |
||||
|
||||
Evocation |
||||
--------- |
||||
As stated in BUILD.txt, tecoc can either be executed directly, or a |
||||
file link can be created, or a batch file or shell script can be |
||||
created. For example, if you want to edit a file name MyFile.txt, |
||||
if you have a link setup like: |
||||
|
||||
teco -> tecoc |
||||
|
||||
then you could execute: |
||||
|
||||
teco MyFile.txt |
||||
|
||||
However, if you want to run tecoc directly, you'd have to do: |
||||
|
||||
tecoc teco MyFile.txt |
||||
|
||||
The extra, and first, argument, "teco", tells tecoc what mode to run |
||||
under. The remainder of this document will assume you have the link |
||||
setup. |
||||
|
||||
If you have video mode configured, tecoc nevertheless starts in non-video |
||||
mode by default. To start tecoc in video mode you could do: |
||||
|
||||
teco -scroll:5 MyFile.txt |
||||
|
||||
This would make the bottom 5 lines used for commands, and the remaining |
||||
lines above to be the video display area. |
||||
|
||||
Additionally, video mode can be turned on or off while editing a file, |
||||
regardless of the startup parameters. See "video.txt" |
||||
|
||||
Importantly, the command to save the file and exit is: |
||||
|
||||
EX followed by two escape key presses |
||||
|
||||
To exit the edit session without saving, do: |
||||
|
||||
-1EX followed by two escape key presses |
||||
|
||||
Commands |
||||
-------- |
||||
|
||||
Teco is a character based editor. This means that teco keeps track of |
||||
what character you are at, and not what line you are on. One normally |
||||
edits a file by positioning the point and editing there. |
||||
|
||||
The "$" character functions as the "escape key". A single $ is used |
||||
to separate multiple commands. Two consecutive escapes, $$, cause |
||||
teco to execute all of the commands up to that point. |
||||
|
||||
Other characters, besides $, each have a meaning to teco. Some |
||||
commands consist of more than one character. Teco commands are |
||||
case-insensitive. This means that "m" and "M" mean the same thing. |
||||
In this text I will show the commands in uppercase simply to avoid |
||||
confusion between such letters as ell and one. |
||||
|
||||
For example, the "L" command causes teco to move its pointer to the |
||||
following line. If you type "L", nothing happens until you tell teco |
||||
to execute is by following the "L" with "$$". So, |
||||
|
||||
L$$ |
||||
|
||||
will cause teco to go to the next line. |
||||
|
||||
You may have any number of commands specified before executing them, |
||||
for example: |
||||
|
||||
LLL$$ |
||||
|
||||
will go down three lines. |
||||
|
||||
Also, commands may take numeric arguments. For example, |
||||
|
||||
3L$$ |
||||
|
||||
will go down 3 lines. |
||||
|
||||
Commands may also be negative, so the following: |
||||
|
||||
-4L$$ |
||||
|
||||
will cause teco to go up 4 lines. Also, since the default argument is one, |
||||
|
||||
-L$$ |
||||
|
||||
is the same as -1L$$ |
||||
|
||||
In video mode, you will see the changes occur as soon as you execute $$. |
||||
In non-video mode, you see nothing unless you ask teco to display a |
||||
portion of the text. For example, if you type: |
||||
|
||||
V$$ |
||||
|
||||
you will see the line you are on. |
||||
|
||||
The current character position is always available vie the "." command. |
||||
There is also the "=" command that causes teco to display a value, thus: |
||||
|
||||
.=$$ |
||||
|
||||
causes teco to display the current character position. |
||||
|
||||
Teco has many, many powerful commands. It has loops, conditionals, |
||||
variables, etc.. Each letter has a different function. See the |
||||
included documentation. |
||||
|
||||
|
||||
Macros |
||||
------ |
||||
|
||||
A series of commands, since they are only letters, may be entered into |
||||
a text file. A user may tell teco to read and execute the commands in |
||||
one of those files. The name associated to that set of commands is the name of |
||||
the file they are located in (minus the .tec extension). The command |
||||
used to execute a macro file is "EI", thus, for example, if you have a |
||||
macro file named "ab.tec" located in the TEC_LIBRARY directory, |
||||
executing: |
||||
|
||||
EIab$$ |
||||
|
||||
will cause teco to execute the commands located in that file. |
||||
|
||||
In this example, the command is "EI". It takes a trailing string argument |
||||
"ab", and the "$$" means execute it. |
||||
|
||||
|
||||
Moving On |
||||
--------- |
||||
|
||||
To learn more, I suggest you read the following, included, documents in |
||||
the order shown: |
||||
|
||||
Summary.pdf |
||||
blake-notes.txt |
||||
teco-manual.txt |
||||
wchart.txt |
||||
|
||||
Many of the other documentation files are either historical or provide |
||||
greater, tecoc specific, information. |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
|
||||
Blake's Tecoc notes |
||||
|
||||
.TES Teco source file |
||||
.TEC Teco macro file (compressed .TES file) |
||||
|
||||
The distribution has a lib directory that has some teco macros. The |
||||
SQU macro used to squeze / compress teco source files is included |
||||
there. |
||||
|
||||
= display value |
||||
|
||||
Use /nomemory to avoid memory files |
||||
|
||||
mung is just a link to teco |
||||
|
||||
To compile / compress a teco macro file do (np.tes to np.tec): |
||||
|
||||
mung squ np.tec=np.tes/D:N/L:Y/B:Y/T:Y/C:Y/W:N/A:Y/E:N |
||||
|
||||
My macros |
||||
|
||||
bl beginning of line |
||||
bw beginning of word |
||||
cls clear screen |
||||
dw delete word |
||||
el end of line |
||||
ew end of word |
||||
jmp jump to line |
||||
np next page - display and move forward one screen |
||||
pp previous page - display and move back one screen |
||||
|
||||
0^X case insensitive search mode (default) |
||||
-1^X case sensitive search mode |
||||
|
||||
---------------------------------------------------------------------- |
||||
|
||||
Video mode of tecoc |
||||
|
||||
5,7:w to evoke video display (5 command lines at bottom) |
||||
0,7:w video mode off |
||||
-4:w to redraw screen |
||||
^w put current line at top of screen |
||||
|
||||
|
||||
A file can be started in video mode with: |
||||
|
||||
teco -scroll:5 myfile on linux or Mac |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
[0+0U0Q0"E1U0'Q0">Q0<<0A"R|0;'C><0A"R0;'C>>|-Q0<<-A"R0;'-C><-A"R|0;'-C>>']0 |
@ -0,0 +1,101 @@
@@ -0,0 +1,101 @@
|
||||
|
||||
|
||||
TECO COMMANDS |
||||
------------- |
||||
|
||||
|
||||
File Commands |
||||
------------------------------------ |
||||
EX save file - exit |
||||
EBfile open file for input/output with backup |
||||
ERfile open input file for reading |
||||
EWfile open output file for writing |
||||
EC save buffer - clear buffer - close input/output files |
||||
EF close output file |
||||
EK kill current output file (abort edit) |
||||
Y read the next page |
||||
P save page - read next page |
||||
nP perform n Ps |
||||
|
||||
|
||||
Positioning Commands |
||||
------------------------------------ |
||||
J jump to beginning of buffer |
||||
nJ jump to character position n |
||||
L beginning of next line |
||||
nL move n relative lines (0 means beginning of line) |
||||
C move forward one character |
||||
nC move n characters |
||||
R move reverse one character |
||||
nR move n relative characters |
||||
Stext$ search buffer for text (position after search string) |
||||
(if no text use previous search text) |
||||
Ntext$ search entire file from current position |
||||
nS search for the nth occurance (negative n means reverse) |
||||
nN search for the nth occurance (all pages) |
||||
|
||||
|
||||
Type Commands |
||||
------------------------------------- |
||||
T type current position to EOL |
||||
nT type n relative lines (0 means from BOL) |
||||
HT type whole buffer |
||||
V view whole current line |
||||
nV view n lines around current line |
||||
|
||||
|
||||
Text modification commands |
||||
----------------------------------------- |
||||
Itext$ insert text |
||||
@I/txt/ insert txt (may contain escapes) |
||||
K kill to EOL |
||||
nK kill n relative lines (0 meands BOL to current position) |
||||
HK kill whole buffer |
||||
D delete one character |
||||
nD delete n relative characters |
||||
FDtext$ find and delete text |
||||
FKtext$ find and kill from initial location to final location |
||||
FRtext$ replace last found text with text |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Constants & Misc. Commands |
||||
------------------------------------ |
||||
Z number of characters in the buffer |
||||
B 0 |
||||
H B,Z |
||||
. current position |
||||
= display value |
||||
n<cmd> execute command string cmd n times |
||||
n^Q convert line offset (from 0) to character offset |
||||
(only works when starting from beginning of buffer) |
||||
|
||||
|
||||
Command Line |
||||
-------------------------------------- |
||||
^U erase command line |
||||
*q put last command line into q register q |
||||
|
||||
|
||||
Q Register Commands |
||||
---------------------------------------- |
||||
nUq put n into q register q |
||||
Qq get value from q register q |
||||
^Uqstr put string str into q register q |
||||
nXq copy next n (default 1) lines into q register q |
||||
n:Xq append next n lines into q register q |
||||
Gq get text in q register q and insert into buffer |
||||
Mq execute macro commands in q register q |
||||
|
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
[0+0U0Q0"E1U0'Q0">Q0<<0A"R0;'D><0A"R|0;'D>>|-Q0<<-A"R0;'-D><-A"R|0;'-D>>']0 |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
[0+0U0Q0"E1U0'Q0">Q0<<0A"R0;'C><0A"R|0;'C>>|-Q0<<-A"R|0;'-C><-A"R0;'-C>>']0 |
@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
|
||||
-1^x ! enable case sensitive searches ! |
||||
5*256+^^!ev ! display context before prompt ! |
||||
0,16ed ! retain dot after failed searches ! |
||||
$$ |
@ -1,70 +0,0 @@
@@ -1,70 +0,0 @@
|
||||
Command line |
||||
------- ---- |
||||
-NOPAGE |
||||
Don't separate input into pages. Instead, treat form feeds |
||||
as normal characters. |
||||
+nnn |
||||
where nnn is any number of digits. Go to line number nnn and |
||||
set NOPAGE. Note this uses the UNIX end of line convention |
||||
for use with cc output &c. The non-unix line termination will |
||||
still be used for nL and other intrinsic TECO commands, this just |
||||
controls the starting line AT INVOCATION. |
||||
-SCROLL:nnn |
||||
do nnn,7:w |
||||
-SCROLL:nnn:SEEALL |
||||
do nnn,7:W and 1,3:W |
||||
-INSPECT |
||||
Same as /INSPECT |
||||
-NOMEMORY |
||||
Same as /NOMEMORY |
||||
Video |
||||
----- |
||||
^W Immediate mode command - try to place line containing dot in |
||||
centre of scope window |
||||
-4W Complete redraw of screen |
||||
-1W Stop refreshing scope before each prompt |
||||
1W Start refreshing scope before each prompt |
||||
0W refresh scope |
||||
3:w Seeall Mode (set to 1 if SeeAll is on, 0 otherwise) |
||||
seeall is more unix style then you might expect |
||||
5:w Hold mode is not properly implemented. I don't like it anyway. |
||||
7:W Number of lines in command window. The size of the scope window |
||||
will be (Rows - 7:W (- 1 if ET&256)) |
||||
8:w Attribute for special characters. This is highly implementation |
||||
dependent (curses implementation dependent). Under SUN OS 4.1 |
||||
0 - no marking |
||||
1 - underline |
||||
2 - reverse |
||||
4 - blink |
||||
8 - dim |
||||
16 - bold |
||||
128 - ALT_CHARSET |
||||
currently controls marking of <CR> ` |
||||
END OF PAGE (BTEE/+) |
||||
9:W Bit 0 - keypad support on |
||||
Bit 1 - do not do timeout escape sequence detection |
||||
ET&1 image mode - doesn't really do much with curses version |
||||
ET&2 use scope for delete and control-U |
||||
ET&4 accept lowercase input |
||||
ET&32 read with no wait on control-T (unimplemented - easy though) |
||||
ET&2048 reverse roles of BS and DEL (good if you use stty erase ^H, |
||||
in particular the key placement of BS is sometimes much easier |
||||
to get at then DEL). Should I have it detect the kill character |
||||
and automatically set this? |
||||
ET&8192 accept ` as escape (for VT220 terminals) |
||||
ET&16384 special VT200 mode |
||||
ET&32768 trap control-C |
||||
EZ&1 if false VMS style versioning for backup files (multiple backups) |
||||
if true only one backup level (foo, foo.bak) |
||||
EZ&8 if TRUE use LARROW (<) for CR, if false use ` |
||||
EZ&16 if set then prefer audio beep else visual flash |
||||
EZ&32 winline divider for scope |
||||
EZ&128 if set DO NOT stop read on FF otherwise make pages as usual |
||||
EZ&256 UNIX NL-convert LF to <CR><LF> on input and invert on output |
||||
ED&512 controls scope display. If set will use VT100 line drawing |
||||
characters for CR and LF (in non-scope mode). May degrade |
||||
performance. |
||||
EZ&2048 if set use BTEE for end of buffer, else use DIAMOND |
||||
(desirable for pathological terminal types) |
||||
EZ&8192 don't show CR in scope - closer to TECO-11, but really |
||||
not as good in my opinion (Mark Henderson) |
Loading…
Reference in new issue