TEACL is a fork of TECOC created for the purpose of describing diffs in a document being collaboratively edited
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

816 lines
45 KiB

This file contains release notes for TECOC. The "base version"
is 100 (reported by the EO command). The version number starts at 100 to
avoid confusion with TECO-11 version numbers, which were close to 40 as of
10-Dec-1987 version 100
baseline version as of Fall Decus Symposium, Anaheim
04-Jan-1988 version 101 (mostly stuff for XENIX)
1. created this file
2. changed EXEEO.C to make the version number 101.
3. changed FBFSIZ (file name size) to 20 in AMODEM.C
4. changed XAFTER.CSH to execute under CSH instead of SH
5. removed unused tags IFTag and OFTag from ZPORT.H
6. added comment about this file to AAAREADME.TXT
7. Created an updated XBUILD.CSH.
8. added a tab to INIT.C.
9. Added debugging code to PARSCL.C, MEMINI.C, ZINIFL.C, MUNG.C, ZREMBR.C,
and INIOPN.C. This code is activated only if the variable DbgLvl is
initialized to 1 in DBGDSP.C.
10. Added semi-colon to line 181 of ZOPINP.C so it'll compile.
11. Changed ZREMBR.C so it returns NO in XENIX section.
12. Added code to set TrmTyp in XENIX section of ZTRMNL.C.
13. Changed SCRNOP.C so it tests TrmTyp (not OpCode) against UNTERM.
14. Added XENIX sections to ZDSPCH.C, ZDSPBF.C and ZCHIN.C.
23-Jan-1988 version 102
1. changed EXEEO.C to make the version number 102.
2. changed the debugging code in ZABORT.C to avoid an infinite loop
3. removed "signal(SIGTERM, ZAbort)" from XENIX code in ZINIT.C
4. changed ZTRMNL.C to support control-Cs under XENIX
5. check for control-C in ZCHIN.C, needed to do it in all other Z routines
6. added XENIX section to ZRDLIN.C
7. define sys$close in ZOPINP.C and ZOPOUT.C
8. define sys$get, sys$putmsg in ZRDEI.C
9. renamed/modified all the .CSH and .COM files so they start with "Z" and
updated AAAREADME.TXT to reflect the changes.
10. added file FALL87.RNO, updated AAAREADME.TXT about it
11. fixed comment in RDLINE.C.
12. changed || to | in ZHELP.C so / immediate commands are okay under VMS.
13. fixed "invalid buffer size" bug for reading large files by changing
"65536" to "65535" in ZRDLIN.C.
14. fixed control-C handling, so that type-out of a large buffer works.
15. added a test to EXECST.C so that commands like "<test$$" will
now produce "unterminated command" errors, as they should
16. modified EXEEI.C to make EI$$ a null command to make CHANGE.TEC work
30-Jan-1988 version 103 ( to make CHANGE.TEC work )
1. changed EXEEO.C to make the version number 103.
2. changed definition of Mung from DEFAULT to VOID in MUNG.C.
3. changed TmpEI from DEFAULT to VOID in TMPEI.C, ZINIFL.C, MUNG.C
4. removed superfluous "else" from ZSWILD.C
5. moved WFab, WNam initialization from ZINIFL.C to ZINIT.C
6. set WFab.fab$l_fna in ZINIT.C to make EN command work
7. added XENIX section to ZCPYBL.C
8. fixed XENIX section of ZICLOS.C
9. fixed XENIX section of ZOPOUT.C
10. fixed XENIX section of ZRDLIN.C
11. fixed XENIX section of ZWRITE.C
12. changed constants for XENIX in ZPORT.H
13. changed calloc to malloc in ZALLOC.C, merged similar sections
14. added debugging code to RDLINE.C
15. added debugging line to WRBUFR.C
16. fixed unlink call in ZOCLOS.C, added debugging code
17. fixed unlink call in ZOCLDE.C
18. added -O switch to CC commands in XMKBLD.CSH (optimizes code)
31-Mar-1988 version 104
1. changed EXEEO.C to make the version number 104.
2. changed the way code is compiled under XENIX: deleted XMKBLD.CSH,
3. fixed XENIX file creation mode in ZOPOUT.C
4. fixed XENIX section of ZMKOFN.C
5. fixed setting of CmdMod and EStTop in EXEEB.C
6. removed unnecessary call to ExeEY in INIOPN.C
7. fixed XENIX file renaming in ZOCLOS.C
8. used auto-decrement instead of addition in MEMINI.C
9. Renamed CHRFUNCS.H to CHRMACS.H. All references to CHRFUNCS.H
had to be changed: many files modified. Also changed macros that
are in CHRMACS.H to use an array. Merged that array with the one that
was in ReadCS.
10. made ZTrmnl define TrmTyp as UNTERM when we're running in a batch job.
11. took out "dying" message in GETNMA.C
12. fixed CR/LF appending in EXEEQU.C
13. fixed file output code in ZDSPCH.C
13-Apr-1988 version 105
1. changed EXEEO.C to make the version number 105.
2. removed extra tab from ZINIT.C
4. changed ZXAFTER.CSH so it renames CHRMACS.H, not CHRFUNCS.H
5. added improved error reporting in ZOPINP.C
6. added "cc -c tecoc.c" to ZXBLD.CSH
7. added "/STANDARD=PORTABLE" qualifiers to CC commands in ZVBLD.COM
8. Fixed ZWrite to append LFs correctly under XENIX
9. Fixed ZChIn to make CR/LFs under XENIX out of LFs.
10. changed ZOpOut to use fopen instead of creat/fdopen.
11. overhauled error reporting. Many modules changed, including all "Z" files.
Added OpnOut and ZErMsg.
12. Replaced GroEBf with InsStr to merge several copies of the same code
sequence. Affected ExeBSl, ExeCtI, ExeG, ExeI, Replac.
13. Removed post-copy of memory after ZRaloc calls. ZRaloc does it.
14. Took /STANDARD=PORTABLE off VMS compile commands to prevent warnings
about "globalref".
30-Jul-1988 version 106
1. changed EXEEO.C to make the version number 106.
2. fixed some error reporting bugs.
3. check for mung mode failure in ExeCSt, not ErrMsg
4. changed EI buffer size to 20000 to let TSTSRC.TEC be input
06-Aug-1988 version 107
1. changed EXEEO.C to make the version number 107.
2. fixed FR command.
3. fixed it so two control-C's terminate TECOC, as it should be.
4. overhauled command-line parsing to make it use a TECO macro to do it,
like TECO-11 does. Major changes to initialization code. I did this to
provide the extra power and to make invocation of TECOC the same as TECO-11
under VAX/VMS. Created ExeEG, ZExeEJ, ZEgIni, ZEgLib, ZEgMem, ZEgSym
and ZEgVte. Deleted ZIniFl, Mung, ZExeEG.
5. fixed ::S command.
6. fixed ] command's memory deallocation.
22-Feb-1989 version 108 ( porting to Turbo C )
1. changed EXEEO.C to make the version number 108.
2. created function prototypes (without arguments) in DefTeco.h and removed
them from all other files.
3. changed /REPLACE to /INSERT in ZVBLD.COM
4. fixed definition of ErrTxt in BldStr.
5. moved "#include stsdef" into VAX section of ZErMsg.
6. moved expressions out of "if" statements to avoid compiler warnings in
FindQR, MakDBf, PshMac, StCopy, ZTrmnl.
7. Deleted reference to ZDefErr.h from ZOClDe.
8. deleted ZError.h
9. changed "ErrMag" to "ErrMsg" in ZOClos.
10. removed variables declared but never used in DoEI, ExeEG, WrBufr, ZOClos.
11. removed "return(xxx)" from XENIX section of ZHhelp, which is a VOID
12. Express 32768 in octal in DefTeco.h for ET_TRAP_CTRL_C to avoid problems
putting it into an unsigned EtFlag.
13. Added type-cast to ZCpyBl call in RdLine.
14. changed XENIX section of ZExeEJ so it defines ZExeEJ, not ZExCtH.
15. Replaced the Execut function with syntax for calling a function whose
address you have in a variable.
16. Made mods to make it run under Turbo C under MS-DOS. Added __TURBOC__
sections to Zxxxx.c files and created ZPBLD.BAT and ZPDBLD.BAT.
19. Fixed Turbo C section in ZDspBf, ZDspCh, ZChIn, ZWrite.
20. Changed "LONG" to "ptrdiff_t" in several files.
21. Added Turbo C section to ZPrsCL.
Just to get it working, commented out the Turbo C code in ZPrsCL.
This prevents the command-line macro from executing, which avoids the
execution of EJ and EG commands in the macro. EJ and EG are not yet
supported for non-VMS environments. It now limps under Turbo C/MS-DOS
28-Feb-1989 version 109 ( more porting to Turbo C )
1. changed EXEEO.C to make the version number 109.
2. made type conversions explicit via type casts in various functions.
3. replaced calls to ZChrIt with type-cast "(char)" and deleted ZChrIt
4. appended all the Dbgxxx functions to the end of TECOC.C and changed
compile/link so there is no separate debugging library. This simplifies
the link sequence.
5. fixed VDOW.C and VSETW.C so setting DEBUGGING to NO will not cause
compilation errors.
6. changed references to .h files to lowercase so you don't have to
explicitly rename them after copying them from one machine to another
7. various minor changes so it will build for an UNKNOWN environment
8. use FILENAME_MAX, an ANSI C identifier
9. changed the XENIX identifier to the more general __UNIX__ and restructured
the conditional compilation code to use "#elif".
10. replaced StCopy with strcpy
11. replaced ZCpyBl with MEMMOVE
12. created a file named MAKEFILE for use with Unix "make".
13. improved type definitions and casting to keep lint happy.
14. use EXIT_FAILURE and EXIT_SUCCESS in calls to exit() and ZAbort().
15. Defined return codes for the EJ command in systems other than VMS
so the command-line parsing macro could function.
16. Removed references to StCopy and ZCpyBl from ZPBLD.BAT and deleted
ZPLNK.BAT. Fixed ZPLNK.BAT to not refer to DBGTECOC.LIB.
28-Feb-1989 version 110
1. changed EXEEO.C to make the version number 110.
2. made the 2048 bit of the ET flag cause the BACKSPACE character to be
treated just like the DEL character on input. This supports the
conventions used by IBM PCs and Unix. On those systems, you'll have
trouble getting a BACKSPACE into the command line, a minor problem.
3. to simplify an effort to port TECO-C to RT-11, renamed the following
files so the name portion of the filespec is 6 characters or less.
renamed DEFTECO.H to TECOC.H
renamed TEC0_V40.TEC to TECV40.TEC
renamed TECO_V40.TES to TECV40.TES
The following files were not renamed, and are the only remaining files
with names longer than 6 characters.
AAAREADME.TXT I just didn't want to rename this one
GETTECO. used only on Unix systems
MAKEFILE. used only on Unix systems
PROBLEMS.TXT I just didn't want to rename this one
RELEASE.TXT I just didn't want to rename this one
ZVLOGIN.COM used only on VAX/VMS systems
ZXAFTER.CSH used only on Xenix systems
ZXLOGIN.CSH used only on Xenix systems
4. Fixed ZPBLD.BAT: removed superfluous -I option, added ECHO statements so
you can tell how far it's gotten, lowercased file names.
5. Removed definition of TraceM from ZExCtC, which doesn't use TraceM.
6. Don't return a value from ZDoCmd or ZHelp, they're VOID functions.
7. Fixed Sun and Turbo C sections of ZExeEJ and ZClnEG.
8. Changed second argument of PushEx from BYTE to DEFAULT.
9. Made ZClnEG a LONG function to match it's use in ExeEG.
10. Made MakDBf calls in PushEx and GetNMA use a type cast when passing
EstTop and EstBot so it works under Turbo C.
12. Fixed expression syntax in CLPARS.TES.
13. Fixed handling of :ER commands in Turbo C section of ZOpInp.
14. Added function prototypes to tecoc.h. They're conditionally compiled
based on the new USE_PROTOTYPES identifier defined in zport.h.
15. Replaced GENCLP.TEC with GENCLP.C.
11-Jun-1989 version 111
1. changed EXEEO.C to make the version number 111.
2. More type-casts added to allow Turbo C to compile the code when the
function prototypes are used (USE_PROTOTYPE == YES).
3. Moved setting of EtFlag out of ZInit.c and into ZTrmnl.c.
28-Jun-1989 version 112
1. changed EXEEO.C to make the version number 112.
2. changed || to | in ZTrmnl.c to fix setting of EtFlag.
3. changed CrType to VT100 in ZTrmnl.c for IBM-PC so ANSI sequences are used.
4. rewrote logic to fix bugs and improve readability in InpDel.c.
5. renamed ScrnOp to ZScrOp so IBM-PC screen handling could be added.
6. replaced old usage of ET_BKSP_IS_DEL with new code in ZChIn.
7. added error message generation to ZChIn
8. fixed ZVBLD.COM so the link of GENCLP has LNK$LIBRARY defined
9. changed mktemp to tmpnam (ANSI) in ZOpOut.c.
10. merged VDoW, VGetW and VSetW into ExeW
11. Lots of little changes to reduce messages produced by lint and by
Turbo C when the -w switch (maximum warnings) is used.
19-Jul-1989 version 113
1. changed EXEEO.C to make the version number 113.
3. Added code for IBM PC to ZScrOp.c
4. Added FFLINS, used in InpDel and ReadCS.
5. Fixed comments in FindQR and tecoc
6. Changed ugly \015 to \r, \012 to \n, \011 to \t in all files
7. More type casting to reduce warnings from Turbo C.
8. Changed almost every file to insert new "charptr" and "QRptr" types.
These are needed to support the brain-damaged memory access on IBM-PCs,
where the pointers need to be "HUGE" to work.
9. fixed a bug in MakRom that caused :X commands (among others) to fail.
10. Converted QBfBeg, QBfPtr and QNumbr to the simpler QR
11. Rewrote GENCLP so it makes a file that Turbo C reads correctly.
12. Made a SIZE_T typedef to support Turbo C.
13. Used farmalloc in ZAlloc, farfree in ZFree and farrealloc in ZRaloc in
Turbo C sections.
14. made 0EJ return 0 for Turbo C.
15. Fixed ZWrite code for Turbo C.
02-Aug-1989 version 114
1. changed EXEEO.C to make the version number 114.
3. merged all the Z files into ZVMS,C, ZMSDOS.C, ZUNIX.C, ZUNKN.C
4. merged all the SKP files into SKPCMD.C
6. merged REDUCE.C into PUSHEX.C
7. merged MEMINI.C into INIT.C
8. merged DOEI.C into EXEEI.C
9. merged DOFBFC.C into SRCLOP.C
10. merged EXEE*.C files into EXEE.C (EXEEB.C is an exception)
11. merged EXEF*.C files into EXEF.C (EXEFB.C is an exception)
12. Implemented colon modifier on EW command. This is an undocumented
feature required for the CLPARS macro to work on non-VAXen.
13. merged ZFILES.H into ZVMS.C, ZMSDOS.C, ZUNIX.C
14. fixed GENCLP.C yet again, for VMS
15. fixed memory shuffling bug in RDLINE.C
21-Aug-1989 version 115 (Manfred Siemsen)
1. Changed ExeEO() in EXEE.C to make the version number 115
2. Created DEFEXT.H, replaced all EXTERN lines with #include "defext.h"
3. Modified all #if DEBUGGING...#endif lines to call 3 debugging
functions: DbgFEn() upon function entry, DbgFEx() upon function
exit, and DbgFMs() for messages in the body of a function. Also,
indented the debugging lines so they line up under the code they
"belong" with, instead of being munched over on the left margin.
4. Modified debugging routines to use sprintf/printf to display
values of variables instead of displaying things "manually" through
other Teco-C build/display routines. We still avoid the use of
sprint/printf in non-debugging code.
5. Modified the indentation scheme to more closely match K&R
6. Put squiggly braces '{}' around ALL statements, even if they
aren't required.
7. Modified the comment scheme to be consistent with Pete's
latest X-window'ish standard.
8. Created a Turbo C MAKEFILE (MAKEFILE.TC).
9. Began implementation of ZPWild() and ZSWild() in ZMSDOS.C. It
seems to work ok, but there should be more error checking put in
to guard against the user entering a bizarre filename.
10 Implememted ZDoCmd() in ZMSDOS.C. Required change to ExeEG() in
EXEE.C. If it wasn't :EG, TxtLen was never set, might have been
garbage, moved TxtLen assignment out of "if (COLON..." statement.
Also, ZAbort() was called if TxtLen was not zero, should have
been called if TxtLen *is* zero.
30-Aug-1989 version 116
1. Changed ExeEO() in EXEE.C to make the version number 116
2. rearranged includes in "Z" files so that my .h files come after the
system ones. This was needed so ZPORT.H can redefine FILENAME_MAX,
which on VMS is wrong (38 ain't right). Rearranged ZPORT.H for the
same reason.
3. Replaced ERRMSG.C with ERR.C and created the new error reporting
functions ErrChr and ErrStr. Doing this removes places where I was
writing into string literals, which worked but wasn't real kosher.
It also makes lint happy about ErrMsg (fixed number of arguments now)
and modularizes the error code. Merged DSPCHR.C and VRBERR.C into
4. Created ZVrbos.
5. Fixed error message numbering.
6. Fixed prototype for ErrDsp and ErrPst in ERR.C.
7. Commented out illegal test case in TSTQR.TEC.
8. Made Charac a char instead of an int in ZChIn to fix bug.
21-Oct-1989 version 117
1. Changed ExeEO() in EXEE.C to make the version number 117
2. Moved #endif in TECOC.C from just after DbgSlv() to just after
DbgDsp() so DbgDsp() wasn't included when DEBUGGING is FALSE.
3. Updated MAKEFILE.TC.
4. Updated ZPTLIB.BAT.
6. Changed prototype of ZVrbos in ZMSDOS.C, ZVMS.C, ZUNIX.C,
7. Changed DoEI() comment in EXEE.C.
8. Made ZRdEI() call ZRdLin() instead of calling fgets() directly.
9. Changed ZWrite() to ZWrLin(), it's more descriptive.
23-Oct-1989 version 118
1. Changed ExeEO() in EXEE.C to make the version number 118
2. minor fixes to make lint happy
3. Changed ZChIn() in ZMSDOS.C to ignore any IBM PC scan code
other than DEL to eliminate the "Unrecognized character" bomb.
4. Changed CLPARS.TES so filespec memory works on PC's.
5. Changed EXEQ.C to fix numeric expression parsing
6. Change definition of FEArry[] from (*F[])() to (*F[])(VOID)
to eliminate Turboc C "function w/no prototype" warning.
03-Nov-1989 version 119 (Manfred)
1. Changed ExeEO() in EXEE.C to make the version number 119.
2. Because of some bizzare behaviour, the CHECKSUM_CODE #define and routines
were added to check code at runtime to make sure it wasn't being
overwritten. These routines read the Turbo C .MAP file to get the order
and length of all the modules, calculates and stores an initial checksum
for each module; and then compares the initial checksum of each module
with the checksum calculated after every command is executed in ExeCSt().
3. Changed ZAlloc(), ZRaloc(), and ZFree() to return and expect a new
type "voidptr" instead of charptr's. I then removed the casts before
ZAlloc() and ZRaloc() returns in the code. Borland Turbo C says that
explictly casting returns from malloc/realloc hides things from the
compiler and is bad practice in ANSI C.
4. Changed "struct QReg *LQTabl" to "QRptr LQTabl" in the definition of
MStck in TECOC.H per phone call w/Pete.
5. Changed an incorrect call to DbgFEn() in ZOpOut()...should have displayed
DbgSBf instead of "".
6. Changed the DbgFEn(), DbgFEx(), and DbgFMs() calls to send NULL instead
of "" if there is no special debugging message to display. This saves
space when Turbo C is not merging duplicate strings (tcc -d). Otherwise
there are billions of "" strings in the .EXE file ("" strings take 1
byte of space because they contain a '\0'). I used CHANGE.TEC to do it!
7. Changed ZRaloc() in ZMSDOS.C to manually reallocate blocks. There is a
problem with Turbo C's farrealloc() in that it uses movedata() to move
data from the old block to the new block. Movedata() expects a size_t
as the number of bytes to move. size_t under Turbo C v2 is *always* a
16-bit unsigned int regardless of memory model. This means that if the
old block is >64K, movedata() won't move the data correctly from the old
block to the new block when the old block is >64K.
8. Implemented the ^B system date (ZExCtB) and ^H system time (ZExCtH)
routines in ZMSDOS.C using DOS calls. EIDATE.TES$ will display the
current date and time.
9. Initialized ff_status in ZMSDOS.C to -1 so EN$$ with no preceding
ENfilename$$ doesn't blow up by calling findnext() with no initial
findfirst(). Is <File Not Found ""> a reasonable return?
10.Changed ExeRBr() so that End_P1 is set to NULL when Start is set to
NULL after the ZFree(QR->Start). Otherwise, End_P1 might not be NULL
and will cause problems for those routines which blindly subtract
End_P1 from Start to get the length of text in the Q-register.
11.Changed the line in ^EQq logic part of BldStr() where QR->End_P1 was
being subtracted from QR-Start, when it should be the other way around.
12.Changed FArray[] in ExeCSt(). The ^Q entry was ExeNYI(), it should have
been ExeCtQ(). The ^_ entry was ExeOpr(), it should have been ExeUsc().
Actually, both ExeOpr() and ExeUsc() would have pushed ^_ on the stack,
so it was a...uh...push.
13.Changed ^G entry FCAray[] in ExeCrt() from ExeNul() to ExeIll() so it
jibes with FArray[] in ExeCSt() entry.
14.The logic in ReadEI() in EXEE.C determining whether or not to add a
trailing CR-LF to the line read from the EI file was wrong. ReadEI()
now calls ZRdlin() to read lines from the EI file. ZRdLin() returns
the length of the read line *without* the trailing newline returned by
fgets(). The ReadEI() logic was checking if the line ended in VT or
in ESC-CR-LF. Since the line returned by ZRdLin() should never end in
CR-LF, the ESC check was bogus. I changed it to only add a CR-LF if
the line did NOT end in VT or ESC which I think was the original intent.
15.While playing with ReadEI() in EXEE.C, I was having problems reading in
a huge macro (>ZBFINIT bytes long). The problem was that if the EI
buffer became full (ie: BufPtr == ZBfEnd), ReadEI() was calling
ZRdLin() with (ZBfEnd-BufPtr == 0). ZRdLin() was in turn essentially
calling "fgets(buf,0,fp)". When told to read into a 0 size buffer,
fgets() simply returns the buffer. ZRdLin() only fails if fgets()
returned NULL or if an error happened, otherwise it will happily
return 0 as the length of the line it read, therefore, back in
ReadEI(), the "BufPtr += line_len" never incremented BufPtr
anywhere and ReadEI() never broke out of it's FOREVER loop, it
looped infinitely, reading zero bytes into a zero length buffer.
I added the ZBFMIN and ZBFEXP #defines in ZPORT.H and changed ReadEI()
so it dynamically reallocates the EI buffer when it is close to
becoming full.
16.Changed ExeCtu(). The call to MakRom() used to make the Q-register
text area 1 character longer when doing a "n^Qq" was sending the wrong
argument. It was sending the new *total* size of the text area
(end-start+1) instead of the *additional* size of the text area (1 byte).
17.Changed the way the CLPARS macro is handled:
Changed CLPARS.TES to not clear itself out of memory when it was
finished. The CLPARS macro is loaded and executed in Q-register Y.
The last thing it did was a "0,0XY" to clear itself out. The problem
is that ExeX() would call ZFree() to clear Q-register Y, leaving
CBfPtr effectively pointing into a free'ed memory area. This wasn't
fatal because the "0,0XY" was the very last thing in the CLPARS macro
so no further TECO instructions were looked for in the free'ed area;
but, technically it was wrong. I removed the "0,0XY" from the CLPARS
macro and changed ZPrsCl() so it manually ZFree()'s Q-register Y after
it finishes executing it.
Note: SQU also uses this technique: issuing a '0,0Xq' at the tail end of
a macro loaded in Q-register 'q' to clear the macro out after it
finishes executing. If this is a common TECO macro practice, maybe
we'll have to think this through a little more.
If USE_ANSI_CLPARS is true, the CLPARS macro is stored as one
gigantic string in clpars[]. If USE_ANSI_CLPARS is false, the
CLPARS macro is split into lines and stored as an array of strings
in *clpars[]. The advantage to USE_ANSI_CLPARS is that to execute
the CLPARS macro, ZPrsCL() simply made the text area pointers of
Q-register Y point at clpars[] to "load" Q-register Y before doing
the MY$$. Otherwise, if USE_ANSI_CLPARS is false, the CLPARS
macro is executed by (slowly) loading it from *clpars[], line-by-line,
into Q-register Y and then doing the "MY$$".
The problem was that if USE_ANSI_CLPARS was true, Q-register Y held
statically allocated data which could cause problems when the CLPARS
macro did the "0,0XY" to clean up. "0,0XY" would make ExeX() try to
ZFree() the statically allocated clpars[] string.
While looking at this problem I noticed that, other than for historical
reasons, there is no reason the CLPARS macro *has* to be executed from
Q-register Y. I changed ZPrsCL() so that if USE_ANSI_CLPRS is true, it
directly executes the CLPARS macro from the clpars[] string without
bothering to load it into Q-register Y first.
19.Removed static initialization of QRgstr[] in TECOC.C and moved it
into MemIni() in INIT.C along with the other initializations of
global static arrays (QStack[], etc). [See suggestion (1) below]
20.Changed ExeEO to return ExeNYI() for "nEO".
21.Changed DoEI(). DoEI() calls PshMac(), ExeCSt(), and PopMac(). If the
ExeCSt() failed, it would do a return(FAILURE) without doing the PopMac(),
leaving the macro stack off and CBfPtr pointing into the EI buffer. DoEI()
was changed so that it does a PopMac() even if ExeCSt() fails. This same
type of logic was changed in ExeM().
This problem didn't appear unless you tried executing a macro from a file
or from a Q-register which failed miserably.
22.Changed ReadEI() <again>. When ReadEI() finds a line containing double
<ESC>'s, it returns to DoEI(), which then executes everything up to that
point. DoEI() then re-calls ReadEI() to finish reading the EI file. The
problem was that if there were any commands *after* the two <ESC>'s on
the last line read, they would be lost in the shuffle because ReadEI()
would start reading into the beginning of ZBf. The SQU.TEC macro had
a line with commands after a double <ESC>.
23.Fixed ExeO(). ExeO() wasn't completely comparing the desired tag with
the tag in the command string. So, if the command string had two tag
names which start out the same way, for example:
"Oa" would goto !aa!.
24.Changed the way some of the colon-modified commands work. I ran into a
situation in SQU where "Y<:A;>" was used. If the yank read in the entire
buffer, ExeA() would fail immediately, without clearing the colon-modified
bit in CmdMod, thus "passing" CmdMod to ";" converting it to ":;". "n;"
breaks if n is zero or positive, "n:;" breaks if n is negative. "Passing"
CmdMod to ExeSCl() this way completely altered the sense of the ";" break.
25.Fixed case flagging in TypBuf() and made it faster by not doing the
Is_Lower() and Is_Upper() checking if EuFlag() is set to EU_NONE.
26.Rewrote ZCpyBl() in ZMSDOS.C to use memmove() and memcpy(). They
both use 80x86 string instructions and make things much faster.
27.PopMac() was clearing the contents of the local Q-register table,
but wasn't de-allocating the table itself.
28.Changed PshMac(), PopMac(), FindQR(), and Init() to use pointers into
the MStack[] and MStack[].QRgstr tables instead of doing redundant array
references. Changed Reduce() in PUSHEX.C to use pointers into EStack[]
for the same reason. Using pointers should be faster?
29.The digit buffer (DBfBeg) was initialized in TECOC.C as:
charptr *DBfBeg = " ";
then digits were poked into this statically allocated string which really
isn't kosher. Changed it so DBfBeg is initialized in MemIni() in INIT.C.
06-Dec-1989 version 120
1. Changed ExeEO() in EXEE.C to make the version number 120.
2. Fixed bug in ZDspBf caused by "length" wrapping when unsigned.
3. various little fixups.
07-Dec-1989 version 121
1. Changed ExeEO() in EXEE.C to make the version number 121.
2. Made EC clear the edit buffer after writing files. Thanks, Phil.
3. Fixed ZFWrite in ZMSDOS.C to handle files > 64k better.
20-Dec-1989 version 122
1. Changed ExeEO() in EXEE.C to make the version number 122.
2. Added TVERSION (version number of TECOC-C) to TECOC.C
3. Fixed ZRdLin in ZVMS.C to make EI commands work.
4. Removed the ZInit function. It was being called late (after MemIni),
and turned out to be unused anyway.
04-Feb-1990 version 123
1. Changed ExeEO() in EXEE.C to make the version number 123.
2. Removed funny handling of lines terminated with <ESC><CR><LF> do let
MS-DOS users edit macros without funnyness.
3. Regularized the "debugging level" numbers documented with DbgDMs in
4. Fixed looping logic in SrcLop to make "n_text$" commands work.
5. Fixed bug in ClTrEx in ZVMS.C so running from batch works.
20-Feb-1990 version 124
1. Changed TVERSION in TECOC.H to 124.
2. Rewrote MakDBf to make it more portable.
2-Mar-1990 version 125
1. Changed TVERSION in TECOC.H to 125.
2. Fixed so HP with an empty buffer doesn't cause an error message.
3. Moved the decision about whether to add/remove CR/LF pairs to/from the end
of lines when doing file I/O into the system-dependent functions. This
was needed to make MD-DOS happy, and is really where this stuff should
be anyway.
4. Defined GotCtC as "volatile".
5. Rewrote ZRdLin in ZVMS.C to do what TECO-11 really does with all the
special characters.
6. Put a check for an open output file into ExeEC, so the command HKEFEX
will work even if there's more pages in the input file.
7. Merged WrBufr and ZWrLin into a singl function called ZWrBfr. Deleted
WRBUFR.C and updated the build files. This was needed to provide system
dependent control over output so MS-DOS I/O could be cleaned up.
22-May-1990 version 126
1. Changed TVERSION in TECOC.H to 126.
2. Removed code that adds a CR/LF to each record read by ReadEI.
3. Fixed VMS output code in ZWrBfr broken in version 125.
4. Changed TypBuf so it is interruptable by ^C after displaying a line.
5. Defined ChkCtC() so that ^C's work better under MS-DOS.
6. Changed ZSWild & ZPWild to work better under CHANGE.TEC.
7. Folded wildcard filename buffer (WBf) into "normal" filename buffer (FBf)
so G* after ENfilespec$ returns "filespec".
1-June-1990 version 127
1. Changed TVERSION in TECOC.H to 127.
2. Modified ZDoCmd() in ZMSDOS.C so you can EGfilename.BAT$.
3. Added EBfFul to avoid "?MEM memory overflow" messages when reading large
files. Now TECO-C quietly stops reading.
4. Reduced number of times ChkCtC() is called to speed display up.
5. renamed AAAREADME.TXT to AAREADME.TXT, needed by MS-DOS
8-June-1990 version 128
1. Changed TVERSION in TECOC.H to 128.
2. Fixed loops that initialize IsOpnI, IsEofI and IsOpnO in Memini. Thanks
to Chuck Cranor.
3. Added ZExit, ZClnUp and ClenUp and replaced ZAbort with TAbort. This
modularizes exit handling.
4. Applied lots of fixes to zunix.c suggested by Chuck Cranor. These include
terminal initialization and use of termcap for terminal sequences.
5. Added a type cast to FindQR to prevent a compiler warning.
13-June-1990 version 129
1. Changed TVERSION in TECOC.H to 129.
2. Made n^T display n modulo 256 instead of generating an error when n
is out-of-range. Now it matches documentation.
3. Worked on file I/O in ZUNIX.C.
20-June-1990 version 130
1. Changed TVERSION in TECOC.H to 130.
2. Applied Tom Almy's MS-DOS fixes to prevent conversions of line feeds
written to the terminal to carriage-return/line-feed pairs.
3. Applied Tom Almy's fixes to the search code. Now backwards searches
work better.
4. Applied Tom Almy's fixes so eight-bit characters are better supported.
5. Minor fixes to ExeW.
6. Replaced ZRdLin in ZMSDOS.C with Tom Almy's superior version.
7. EBfFul was a global used only by RdLine, ExeA and RdPage. I made it
an argument. Seemed like the right thing to do.
8. Changed the type of the length argument to InsStr from LONG to ptrdiff_t.
9. Applied Tom Almy's fixes to DoEvEs and ReadCS.
10. Fixed up PG.RNO and created a new PG.MEM.
11. Removed BYTE identifier from ZPORT.H and did related fixups.
12. Started (by no means complete) supporting 8-bit characters throughout
the code. In most cases, this means changing things declared "char"
to be declared "unsigned char".
13. Deleted DSPCHR.C, which wasn't even compiled.
17-July-1990 version 131 (Manfred)
0. Changed TVERSION in TECOC.H to 131
1. In TECOC.C, ChrMsk[], changed 128 RCS_DEL entries Pete added to RCS_DEF.
2. In ZMSDOS.C, added #include <fcntl.h> to get O_BINARY #define. In
ZTrmnl(), added "setmode(fileno(stdout),O_BINARY)" per Tom Almy.
3. In MAKEFILE.TC, added -K (default to unsigned char) to TCC so string
literals which are signed char ptr's don't conflict with the unsigned
char ptr's now used all over to get eight-bit chars per Tom Almy.
Also added tabort.obj to TECOC_OBJS macro. Also added -DTCPP100 macro.
4. In ZPORT.H, changed EBFEXP, EBFINIT, IBFEXP, IBFINIT from 64000
to 64000L to get rid of TC++'s "Constant is long" warnings.
5. In ERR.C, ToErr(), got rid of TC++'s "Conversion may lose significant
digits" in Sbuf[DBfPtr-DBfBeg] line by using SLen to hold DBf length;
changed bogus compare "> '\126'" to "> '\177'"; also, the final ']'
was overwriting last digit in SBuf.
6. In RDLINE.C, changed function return type of expand_ibf from an
"static" to "static void". Also added prototype.
7. In TECOC.H, added prototype for errprt().
8. In RDLINE.C, expand_ibf(), added #if DEBUGGING lines so DbgFNm is declared.
9. In ZMSDOS.C, ZRdLin(), fixed typo in #if DEBUGGING "FAILURE" section.
10. In ZMSDOS.C, ZRaloc(), added test for TC++ v1.00 since the heap layout
has changed. In TC v2.0? mimic farrealloc(), in TC++ v1.00 call
farrealloc() directly.
18-July-1990 version 132
0. Changed TVERSION in TECOC.H to 132
1. lots more work to resolve type mismatches, so lint and gcc don't
complain so much.
2. fixed the ? immediate-mode command.
3. used GAPMIN in RdLine to fix wasteful memory use.
4. removed superflous parentheses from return statements.
5. to test that identifiers defined in ZPORT.H are minimally consistent,
added some tests in TECOC.C
6. To finish up eightbit handling, added ZSetTT, a function to let TECO set
terminal characteristics. Since it's there, added code so the 1:W and
2:W commands change screen size. Not video yet, but a little closer.
7. Changed ZMkOFN into a macro named ZMKOFN.
8. Fixed ZChIn to handle NoWait correctly.
9. Fixed handling of 0,32et bit.
(8-August-1990 Manfred)
10. In TECOC.C, changed "\n" to "\r\n" in debugging displays since stdout
is now in binary mode.
11. In INIT.C, in MemIni(), added Tom Almy's suggestion to temporarily
allocate a small chunk of memory to be used as a small-allocation
memory pool which may help keep memory fragmentation down.
12. In ZPORT.H, removed unused UWORD typedef.
13. In ZMSDOS.C, in ZVrBos(), changed old style function definition.
14. In ZMSDOS.C, propagated MPtrs[] dynamic allocation tracking to ZRaloc(),
added TC++'s new heapcheck() routines to check the heap on every alloc,
realloc, and free. We *are* DEBUGGING and don't care about speed
penalties, right?
15. In ERR.C, the one-line error messages for ERR_PES and ERR_PDO were
switched (Argh!).
16. In ZPORT.H, expanded EXS_SIZE, LPS_SIZE, MCS_SIZE, and QRS_SIZE so
SQU.TEC has some breathing room. Should these expand themselves?
17. Some of the .TEC and .TES files supplied with TECO-C were padded with
NUL's and some lines ending with ESC had an extra CR.
18. In ZMSDOS.C, ZDspCH() called write(). should call fwrite() or we're
mixing calls to write/fwrite on stdout which is bad. also, the code
which directly set stdout->flags'_F_BIN bit after setmode(stdout) in
ZTrmnl() somehow was lost between Pete's version and mine (?)
19. In ZMSDOS.C, in ZRdLin(), iBuf was cast as "char far *", should have
been cast simply as a "char *" otherwise compiling w/small data model
doesn't work.
20. In CHANGE.TES, changed some ^U constructs so it's now SQUishable.
21. In ZMSDOS.C, added ff_path[] to save ENfilespec$ wildcard lookup
filename since we can't be sure FBf will still contain the wildcard
lookup filename between ENfilespec$ and EN$.
22. Changed CLPARS.TES so when you MUNG there's no leftover trash in
q-register 0. (Pete)
19-August-1990 version 133 (Manfred)
0. Changed TVERSION in TECOC.H to 133
1. In EXEO.C, added support for computed gotos (nOtag0,tag1...$)
2. In INIT.C, in MemIni(), the digit buffer was being overrun on -1== since
the calculation to allocate the digit buffer either: a) didn't take into
account that 32-bits-per-long/3-bits-per-octal-digit doesn't divide evenly
(loses 2 bits), or b) didn't take into account that ExeEqu() might append
<CR><LF> to the digit buffer for =, ==, or === display purposes.
3. In ZMSDOS.C, fixed MPtrs[] tracking in ZRaloc, didn't work correctly
when farrealloc() eventually returns NULL.
4. In TECOC.C, added Turbo C's heapcheck() routine to check_consistency().
5. In RDLINE.C, in RdLine(), after expand_ibf(), was calling ZRdLin() even
if EBfFul was set TRUE. I don't think it should, even though we might be
able to read a line less than IBFMIN bytes long.
9-September-1990 version 134 (Pete)
0. Changed TVERSION in TECOC.H to 134
1. Changed the way I handle conditional inclusion of debugging code.
Borrowing from the way the ANSI assert macro works, all the debugging
functions are now macros, which don't produce any code if DEBUGGING
2. Added TECOC.OPT so the VAX linker puts literal text strings into a
non-writeable PSECT.
3. Fixed ExeBSl so it will read a numeric string from the edit buffer even
if it's preceded by a minus-sign or plus-sign, and fixed TSTBSL.TEC
so it tests for these cases.
18-October-1990 version 135 (Pete)
0. Changed TVERSION in TECOC.H to 135.
1. Updated PG.RNH/PG.MEM again.
2. Fixed define of DBGFEX in TECOC.H so DEBUGGING works again.
3. Fixed FindQR and ExeM to make TECO-C handle :M commands correctly.
21-November-1990 version 136
0. Changed TVERSION in TECOC.H to 136.
1. Fixed DBGFEX syntax bug on line 1118 of ZMSDOS.C
2. Removed extra close parenthesis in EXEW.C
3. Fixed BLDSTR.C to allow searching for nulls. Thanks to Tom Almy.
4. Fixed ExeFGt to work correctly. Bug found by Richard Graham.
5. Added missing enblosing braces in InsStr. Thanks to Mark Henderson.
6. Added Mark Henderson's additional code to BldStr to provide ^EQ* (file
spec buffer) and ^EQ_ (search string buffer) support. Then broke BldStr
into functions for readability.
7. Inserted Mark Henderson's time and date code into ZUNIX.C. Testing with
DATE.TEC revealed a slight bug, fixed.
8. Added ZAMIGA.C and some mods to ZPORT.H from Ben Mesander to support
TECO-C under Amiga-DOS. Thanks Ben!
9. Fixed ExeEQ so it preserves the state of FFPage when reading files.
Thanks to Mark Henderson.
10. Added ZBell function to make the bell sound better under MS-DOS.
Thanks to Steve Freyder.
11. Added Mark Henderson's code (he got glob.c from Berkeley stuff)
to do wild-carding of file names. Reorganized it some. Thanks, Mark.
12. Added Mark's code to name backup files sort of like VMS. Not sure I
like this yet, because I haven't tried it. ED bit 4 controls it, like
so (from Mark:)
ED&4 now specifies the mechanism for backup files
if ED&4 is set then we use the foo foo.bak mechanism (as originally)
if ED&4 is clear the first backup file will be named foo;1, the
second foo;2, ...&c. Sort of VMS like, but the most recent
version will be known by the name foo.
13. Mark added TECFILES environment variable.
If for ei commands and TECO.INI the file is not found in the
current directory the directory $(TECFILES) will be searched.
I've been keeping my teco startup files in ~/.teco
26-December-1990 version 137
0. Changed TVERSION in TECOC.H to 137.
1. Minor fixups to get ZUNIX.C to compile.
2. Moved the line that resets FFPage to zero. It was in RdPage, now it's
in RdLine so a 1:a command now correctly resets flag. Thanks to Richard
Graham for reporting this one.
3. Modified ExeCtE so you can now set the flag as well as get its value,
like in TECO-11 and TECO-32.
4. Fixed ExeBSl so it sets RefLen when it converts a digit string in the
edit buffer into a binary value. Thanks to Mark Henderson.
5. Merged in new Amiga support files from Ben Mesander. There's a new
ZAMIGA.C, which now has time and date support. Ben supplied files
MAKEFILE.AMI and TECOC.LNK for building on the Amiga.
29-December-1990 version 138
0. Changed TVERSION in TECOC.H to 138.
1. Rewrote the TSTO.TEC macro, which pointed out a bug in TECO-32!
2. Added "smallcode smalldata" to LFLAGS vlue in MAKEFILE.AMI to make TECO-C
smaller (for faster startup) under AmigaDOS. Thanks to Ben Mesander.
3. Moved OpnInp and OpnOut into ExeE because only ExeE functions call them.
4. Changed ZOpInp function in ZVMS to do the right thing with the default
macro library directory. ZAMIGA.C, ZUNIX.C and ZMSDOS.C need to be
10-January-1991 version 139
0. Changed TVERSION in TECOC.H to 139.
1. Fixed ZUNIX.C so it handles default EI file names correctly. Still needs
ZClnEG to be implemented.
2. Applied Mark Henderson's patch to ZChIn to fix Control-C handling.
3. Applied Mark Henderson's patch to ExeEQ to fix EBFEnd pointer screw-up
when reading a large file with EQ. Thanks again, Mark!
4. Applied Ben Masander's patch to ZAMIGA.C to correctly call isatty.
5. Implemented "SYM" part of :EG command for VAX/VMS, so TECO-C can set DCL
symbols like DEC's TECO.
20-January-1991 version 140
0. Changed TVERSION in TECOC.H to 140.
1. Reworked ExeEG and ZClnEG to make it work under Unix and to do the
system dependent stuff in the right places.
2. Modified GENCLP to make it create clpars as "unsigned char" instead of
"signed char" to remove a gcc warning. Made GENCLP compile/link/run under
SunOS and modified MAKEFILE.SUN to include processing of GENCLP.
3. Changed GENCLP.C to define clpars as "const" for ANSI compilers.
4. Received another ZAMIGA.C from Ben Mesander. He is now using RCS to
control revisions, so there'll be version numbers for ZAMIGA.C from now
on. This is version 1.4.
5. Implemented Mark Henderson's suggestion to make the size of error
message buffers a #define'd identifier. I named it ERBFSIZ.
6. Merged in Mark Henderson's video support. This involved a LOT of
changes, including:
a. Merged MOVE.C into ZUNIX.C
b. changed VOID to VVOID to avoid clashing with CURSES.H
c. lots of added code with "#if CURSES" control
d. created VIDEO.TXT
e. created an EZ mode control flag for Mark's bits.
f. added exetil.c
23-February-1991 version 141
0. Changed TVERSION in TECOC.H to 141.
1. Some slight changes to make lint happy.
2. From Manfred: added DBGFEN calls to DoCtVW and DoCtE in BldStr, fixed
DbgFNm in ExeF, removed extra "#include <dos.h>" from ZMSDOS.C, added
"fclose(fp)" to init_code_checksums in ZMSDOS.C, and some other minor
fixups in ZMSDOS.C. Changed MAKEFILE.TC to avoid "Abnormal Program
3. Added check of terminal width & height to ExeW for 0,1:w error.
4. Added Mark Henderson's fix to let ZUNIX.C compile under SunOS 4.0.
15-March-1991 version 142
0. Changed TVERSION in TECOC.H to 142.
1. Added Ben's fixes to slight build problems on AmigaDOS.
2. Fixed makefile.sun to make it handle SunOS 4.1 as well as 4.0. Still
needs hand-editing to the makefile before running it. Defaults to 4.1.
3. Added some fixes to ZUNIX.C to reduce gcc warnings.
4. Repaired makefile.sun, which was broken.
5. Fixed EXEFTIL.C and EXEF.C so they compile when DEBUGGING is defined.
20-April-1991 version 143
0. Changed TVERSION in TECOC.H to 143.
1. Changed CLPARS.TEC to parse Unix command lines with "-" for options
instead of "/".
2. Under Unix, changed ZClnEg to implement last-file-edited memory using
files in /tmp instead of gawdawful TECF00.TMP files in the current
3. Slight include file #ifdef changes to let it compile under SunOS 4.1.1.
4. Changed makefile.sun to not use a library. It's much faster this way.
5. Added case for tilde command to SkpCmd.c.
6. Those C files that directly include curses.h needed to have the
#include moved above zport.h.
7. Fixed ExeW so if we're not compiled with video, it returns nothing
instead of FAILURE, like TECO32. Returning FAILURE causes the current
macro to fail, and the current macro might be CLPARS!
8. Fixed ZUNIX.C so ET_UNIXNL is correctly defined.
9. Added Jerry Leichter's fixes to port to Ultrix, including makefile.ulx.
10. Fixed bug in ZUNIX.C where ZDspCh was being called with a string instead
of a character. Thanks Jerry!
2-June-1991 version 144
0. Changed TVERSION in TECOC.H to 144.
1. For the ^P command (for debugging, must compile with DEBUGGING set)
to work, each function that starts with a call to DBGFEN needs to have
a call to DBGFEX before every exit point, or the pretty nesting gets
screwed up. Added some DBGFEX calls to BldStr and ZOClos (in ZUNIX.C)
to fix the display when 4,0 is used.
2. Fixed DoFlag, ExeCtR, ExeCtT, ExeW and ExeBSl so they check the expression
stack correctly. They can now be used in expressions without problems.
Thanks to Mark Henderson and Jerry Leichter for reporting this.
3. Moved the check for "negative argument to comma" from ExeCom to GetAra,
where it belongs. This allows -1,5:w commands to work. Thanks to Jerry
4. Instead of "unterminated command", GetNmA now returns "ill-formed
expression", an new error message, when the stack is bogus.
5-June-1991 version 145
0. Changed TVERSION in TECOC.H to 145.
1. Modified PshMac to test set NumArg correctly, so a command like
^UA1$2+MA=$$ will work.
2. The "#else" on line 122 of ZUNIX.C should be a "#endif".
5-June-1991 to 18-June-1993 version 146
0. Changed TVERSION in TECOC.H to 146.
1. Removed the ~ and F~ commands (the EXETIL.C file and the ExeFTi function)
They were temporary commands used by Mark Henderson.
3. Added makefile.cct, fixed various minor nits suggested by CodeCenter.
4. Fixed error in the way the EI command reads files. If the file being
read was too large for the buffer, memory was getting stomped. Thanks
to Mark Henderson for reporting the bug in detail and suggesting a fix.