TECO-11 V34 RELEASE NOTES TECO-11 V34 RELEASE NOTES April 1979 The information in this document is subject to change without notice and should not be construed as a commitment by Digital Equipment Corporation. Digital Equipment Corporation assumes no responsibility for the use or reliability of this document or the described software. Copyright (C) 1979 Digital Equipment Corporation TECO-11 V34 RELEASE NOTES PAGE 2 VERSION 34 OF TECO-11 This section of these Release Notes describes the changes in TECO V34 from earlier versions. The TECO manual included in this distribution (TECO.DOC) has not been updated to reflect these changes. As the manual is updated, items will be deleted from here. INCOMPATIBILITIES introduced by TECO V34 :A (append 1 line) is now 1:A and returns 0 if eof; else -1 nA (get character value at .+n) now returns -1 instead of ?POP DANGERS introduced by TECO V34 The O command now optionally takes an argument. Beware of commands that immediately precede an O command that return a value. The usual mistakes involve a ^T command or a %q command immediately before an O command. The correction is to place an ESCape after the value returning command; the ESCape eats the value. TECO-11 V34 RELEASE NOTES PAGE 3 TECO editor changes EO returns 34 ^R command (radix set/read) ^R returns the current radix (8, 10, or 16) n^R sets the radix (only legal values are 8, 10, or 16) (^O and ^D both still work; ^R would return 8 and 10 respectively) n=== prints n in hexidecimal followed by a cr/lf n:=== prints n in hexidecimal without any cr/lf n\ and \ will operate with hexidecimal radix Ostring$ can use the string building constructs for the tag (e.g., ^EQq) nOtag0,tag1,tag2,tag3,...$ => go to tag n; else continue in-line m,nV is identical to (1-m)TnT Q command has three (3) formats: Qq returns the value in Q-reg q :Qq returns the size of Q-reg q nQq returns the value of the (n-1)th character in Q-reg q or -1 if n is too large " | ' is If ... Then ... Else Immediate lf after * prompt if .=z already then a nop (normal EV takes place) else does +1L then if EV is active (<>0) lets EV take place else does a T Immediate bs after * prompt if .=0 already then a nop (normal EV takes place) else does -1L then if EV is active (<>0) lets EV take place else does a T The only special characters in an indirect command file (EI) are double ESCape which starts command execution (all other normal command entry specials are not treated as TECO-11 V34 RELEASE NOTES PAGE 4 special) EJ command: -1EJ returns operating system dependent value 0EJ returns job dependent value (e.g., job number) 1EJ returns terminal dependent value (e.g., terminal number) 2EJ returns PPN or UIC EG command: EG$ EX then exit to operating system and re-execute last compile class command if you can EGcmd$ EX then exit to operating system and execute 'cmd' :EGcmd$ operating system dependent action... returns a value of -1 for success, 0 for illegal 'cmd', or other value for error when executing 'cmd' ED flag: Bit value 4 means 'no arbitrary memory expansions'; a Y (or the Y part of P, N, etc.) will not try to enlarge the text buffer if a form feed was not encountered (this is good when editing large files without any form feeds); the A command always ensures that there are 256. free bytes in the text buffer (and will expand memory if needed) Bit value 16 means 'do not reset dot to zero on search failure' Error messages: ?IRA Illegal radix arg replaces ?ILR ?NYA Numeric arg with Y replaces ?NAY ?IPA Illegal P arg negative or zero argument to P ?IUC Illegal ^ character other than ASCII octal 100 through 137 or ASCII octal 141 through 172 after ^ W command: TECO-11 V34 RELEASE NOTES PAGE 5 W VT52: nop VT11: refresh screen using last defined view amount 0W VT52: forget screen image, SEEALL mode, mark, hold mode, and set cursor line to default (2/3 of the way down the screen) VT11: turn off screen +nW VT52: forget screen image, SEEALL mode, mark, hold mode, and set cursor line to n VT11: set view amount to n and refresh screen -1W VT52: refresh screen VT11: nop -nW VT52: forget top n-1 lines of screen VT11: nop -1000W VT52: forget that output was done VT11: nop :W command: (for VT52 only; all are nop's on VT11) :W same as 0:W 0:W returns scope type (0=>VT52, 2=>VT100 in VT52, 4=>VT100 in ANSI, 6=>VT05) 1:W returns scope width 2:W returns scope height 3:W returns SEEALL mode (0=>off, -1=>on) 4:W returns mark (0=>none, n=>mark @ n-1) 5:W returns hold mode (0=>off, -1=>hold whole screen, n=> hold all but top and bottom n lines) 6:W returns position of upper left hand corner of last -1W (0=>none, n=>position @ n-1) -256+n:W inserts characters at "dot" until... characters are read (echo off) from the terminal and inserted at "dot" until and according to the microcoded bits in n TECO-11 V34 RELEASE NOTES PAGE 6 128 => return immediately if no characters 64 => return on any character 32 => don't update screen (i.e., don't do a -1W) 2 => return on TAB's return is always done on control characters (0 through 37 and 177 except TAB) returned value has return character code in low byte (0 through 177 or 377 for returned immediately); sign bit (value 32768) is set if one or more inserts were done the screen is only updated if 32 is not in n and there is no typeahead to process; if 128 in n is not set then the update will occur after all typeahead insert(s) are done n,:W same as n,0:W n,0:W sets scope type (n must be 0, 2, 4, or 6) n,1:W sets scope width (n must be between 10 and 254 and even) n,2:W sets scope height (n must be between 10 and 127) n,3:W sets SEEALL mode (n=0 for off, n<>0 for on) n,4:W sets mark (n=0 for none, n<>0 for mark @ n-1) n,5:W sets hold mode (n=0 for off, n=-1 for hold whole screen, n>0 for hold all but top and bottom n lines) n,6:W sets position for upper left hand corner for next -1W (n=0 for default cursor positioning, n<>0 for upper left hand corner @ n-1) (applies only if hold mode is on and cursor is within the specified limits) m,-256+n:W inserts characters at "dot" until... same operation as -256+n:W except if m typeahead insert(s) are done the screen will be updated (provided 32 is not set in n) ^C^C => unconditionally exit from TECO (second ^c must be a real CTRL/C) F> => flow to > (go to end of iteration; count iteration; loop if more) $$ => unconditionally end macro/command (second $ must be a real ESCape) n$$ => like $$, but pass value n out of the macro TECO-11 V34 RELEASE NOTES PAGE 7 m,n$$ => like $$, but pass values m and n out of the macro F< => flow to < (go back to start of iteration or macro/command; don't count if in iteration) :; => opposite of ; (also valid after iteration searches) m,nUq => same as nUQm F' => flow to ' (exit from conditional) F| => flow to | (go to else clause of conditional) FB => bounded search m,nFBstring$ => search between m and n; backwards if m>n nFBstring$ => same as .,(n^Q+.)FBstring$ FC => bounded search and replace FCstg1$stg2$ => same as FBstg1$FRstg2$ E_string$ => _string$ without yank protection EY => Y without yank protection :P, :Y, :EY => return 0 if eof; else return -1 A commands: A => append page :A => append page; return 0 if eof; else return -1 nA => return char @ .+n; else return -1 n:A => append n lines; return 0 if eof; else -1 m,n => #n&(m^_) String build characters: ^R same as ^Q ^EUq use character corresponding to value of Q-reg q Match control characters: ^EB same as ^S "= => same as "E TECO-11 V34 RELEASE NOTES PAGE 8 TECO.TEC - the TECO command responder TECO.TEC is a TECO macro that interprets the command line that is passed to TECO. In RSX-11, IAS, and VAX/VMS, TECO.TEC is built in to TECO and executes out of Q-register Y when TECO is started up. Upon start up, TECO.TEC looks for a file named TECO.INI in your directory. If such a file is found, it is assumed to be a TECO macro and is executed before any command decoding. This feature can be inhibited by the /NOINI switch. TECO.TEC maintains a "memory" file with a name of "TECFnn.TMP" in your directory (the nn is your job number, 00 for RSX-11 systems). Every time you explicitly name a file to be edited, TECO places that file's name in the memory file. If you simply say TECO without any file specification, the memory file is read and the last edited file is re-edited. This feature can be inhibited by the /NOMEMORY switch. The following switches are recognized by TECO.TEC /NOINI Don't try to find or use the private initialization file TECO.INI. /NOMEMORY Don't read, write, or use the memory file TECFnn.TMP. /FIND Find the position marker in the file, delete the marker, then start editing. More information on the position marker is available in the VTEDIT documentation (VTEDIT.DOC). /INSPECT Only read the named file; don't edit it. /VTEDIT Automatically invoke the VTEDIT editing macro. /VTEDIT:SEEALL Invoke VTEDIT in SEEALL mode (see VTEDIT documentation). /VTEDIT:HOLD Invoke VTEDIT in hold screen mode (see VTEDIT documentation). /VTEDIT:SEEALL:HOLD Invoke VTEDIT in SEEALL and hold screen modes (see VTEDIT documentation). All of the above can be abbreviated to two (2) characters except /NOINI and /NOMEMORY which must be at least three (3) characters. All of the switches apply to TECO commands, MAKE commands only recognize the /NOI, /NOM, and /VT switches, and MUNG commands only take /NOI. The following command formats are recognized by TECO.TEC TECO-11 V34 RELEASE NOTES PAGE 9 TECO Re-edit last edited file (getting file name from memory file); effective EBfile$Y$$. TECO file Edit file "file"; effective EBfile$Y$$. TECO file2=file1 Create file "file2" from file "file1"; effective ERfile1$EWfile2$Y$$. TECO @file Use file "file" as an indirect command string; effective EIfile$$. (Not available under RSTS/E). MAKE file Create file "file"; effective EWfile$Y$$. MUNG file Use file "file" as an indirect command string; effective EIfile$$. MUNG file,text Use file "file" as an indirect command string passing the argument "text"; effective Itext$EIfile$$. For RSTS/E, TECO.TEC should be installed with a protection code of <104>. TECO-11 V34 RELEASE NOTES PAGE 10 TYPE.TEC - the TYPE command responder TYPE.TEC will type wild carded file specifications. The filename, extension, or version number (except RSTS/E) can be * or contains ?'s (RSTS/E only). Under RSTS/E V7.0, the PPN can also contain *'s. TYPE.TEC recognizes the following switches /W Announce the filespecification of every file before it is typed. /H Use VT52 hold screen mode. /H forces on the /W switch. On VT100's, this switch will cause the screen to clear and the cursor to initially go to home, but hold screen mode won't be used as the VT100 doesn't have it... /V This switch changes all control characters to visable characters. It is useful for finding funny carriage return/line feed sequences, etc. The actual output format depends on the terminal you are using; read the VTEDIT documentation. /T Truncate long line. /S:"xxxx" Search for the string "xxxx" before starting typing. Any search string may be used and any character may be the string quoting character (this example used "). /N:n Start typing at page n or find the nth occurance of the string specified by /S. /P When the string specified by /S is found, start typing at the top of that page instead of the line immediately before the found string. For RSTS/E, TYPE.TEC should be installed with a protection code of <104>. TECO-11 V34 RELEASE NOTES PAGE 11 VTEDIT.TEC - the VTEDIT keypad editor macro Since VT100 terminals are best when operated in ANSI mode (see VTEDIT documentation, especially about mark'd regions), VTEDIT will automatically switch any VT100 terminal into ANSI mode upon entry. Since every operating system almost every other program really doesn't know about ANSI mode, VTEDIT will automatically switch any VT100 terminal into VT52 compatibility mode upon exit. Please also read the VTEDIT documentation contained in the file VTEDIT.DOC. For RSTS/E, VTEDIT.TEC should be installed with a protection code of <104>. TECO-11 V34 RELEASE NOTES PAGE 12 TECO.INI - the TECO initializer If you have a file by the name TECO.INI in your directory, TECO.TEC will automatically invoke it on every TECO start up. The file TECO.INI on the distribution medium is a model that you can build your own private TECO.INI from. TECO-11 V34 RELEASE NOTES PAGE 13 LOCAL.TEC - the MACRO local symbol reordering macro This macro will reorder local symbol blocks in macro programs. LOCAL.TEC is loaded into Q-register L by using EI (e.g., EILOCAL$). Saying ML$$ will reorder the local symbol block in the text buffer setting the first local symbol to 10$ and going up in increments of 10. Saying nML$$ will reorder starting at n (the increment stays 10). The increment can be changed by nUL. TECO-11 V34 RELEASE NOTES PAGE 14 SQU.TEC - the TECO macro squisher This macro will take a nice, readable TECO macro and squishes it so that it is as small and as fast as possible (and is completely unreadable). SQU.TEC has a dialogue mode; simply MUNG it. TECO-11 V34 RELEASE NOTES PAGE 15 RSX-11 and VAX/VMS TECO I/O handling changes The following new switch is recognized with EB, ER, and EW: /B2 BASIC-PLUS-2 source file processing; correctly reads/writes & style continuation lines. On input, all lines ending with & have that & and, then, all trailing spaces and tabs removed. On output, any line with a following line that doesn't start with a digit is assumed to be a continuation line; it is suffixed with one space and a &. This algorithm allows you to correctly edit well formed BASIC-PLUS-2 source files without regard having to worry about &'s. Print Format files (FD.PRN) can now be read (but not EI'd or written). Control/C handling has been fixed. A single Control/C either aborts TECO's execution or restarts TECO, but never exits from TECO. Two Control/C's in a row will cause TECO to exit. Three Control/Z's in a row will cause TECO to exit. This helps the termination of TECO in batch streams... TECO-11 V34 RELEASE NOTES PAGE 16 CONFIGURING TECO-11 FOR FOREIGN SCOPE TERMINALS TECO-11 V34 can be re-configured to include support for foreign scope terminals. This section of these Release Notes is only intended for persons with MACRO programming knowledge; elsewise you can stop reading. TECO will support up to four (4) different scope type terminals in any given configuration. Each scope type is given a code. Scope type #1 is code 0, scope type #2 is code 2, scope type #3 is code 4, and scope type #4 is code 6. The pre-built TECO has support for: 1. VT52's, code 0 2. VT100's in VT52 mode, code 2 3. VT100's in ANSI mode, code 4 4. VT05's at 2400 baud (i.e., fill required), code 6 The algorithm for determining which of the above to use uses the terminal's current characteristic set (as set by TTYSET, SET TERMINAL, etc.). The pre-built algorithm is: 1. If not a scope then no scope support else; 2. If width is 72 then scope is a "VT05 with fill" else; 3. If width is 132 then scope is a "VT100 in ANSI mode" else; 4. If width is not 80 then a default of VT52 scope support else; 5. If the "XON" characteristic (RSTS/E) is set or "SET TER/VT100" (VAX/VMS) then scope is a "VT100", but will be used in VT52 mode else; 6. Scope is a "VT52". In order for a scope type terminal to qualify for Rubout and Control/U support it must: 1. Be able to erase a single character with a standard sequence The sequence , , must erase a single character and leave the cursor in the original position. 2. Be able to move the cursor up within column one line TECO-11 V34 RELEASE NOTES PAGE 17 For example, , A on VT52's. 3. Be able to erase a whole line and leave cursor at left margin For example, , , K on VT52's. In order for a scope type terminal to qualify for W (scope watch) command support it must: 1. Be able to position the cursor to "home" (upper left) For example, , H on VT52's. 2. Be able to do direct cursor addressing For example, , Y, , on VT52's. 3. Be able to erase to end of line without moving cursor For example, , K on VT52's. 4. Be able to scroll the screen up with cursor at screen's lower left For example, on VT52's. The following features are not required for W (scope watch) command support, but will be used if present: 1. Ability to scroll the screen down with cursor at screen's upper left For example, , I on VT52's. While this is an optional feature, the utility of the W command is very low without it. Any movement of the cursor up the page will cause a full screen re-draw. 2. Ability to erase to end of screen without moving cursor For example, , J on VT52's. This simply saves doing multiple erase to end of line's when the rest of the screen is to be blanked. On the other hand, any terminal with a changeable scrolling region (e.g., the VT100) should declare that it doesn't have this even if it does. The W command will do the multiple erase to end of line's and, thus, avoid clobbering anything out of the scrolling region. 3. Ability to enter/exit reverse video TECO-11 V34 RELEASE NOTES PAGE 18 For example, , [, 7, m on VT100's. All characters between the current "marked" position and the current cursor position will be displayed in reverse video. Some attribute other than reverse video can be used (e.g., blinking, bold, etc.). 4. Ability to enter/exit a "graphics" character set For example, , F on VT52's. Various points are marked with special graphics characters: 1. End-of-buffer without Form feed The "paragraph" symbol is used by VT52's. 2. End-of-buffer with Form feed The "solid rectangle" is used by VT52's. 3. A line which exceeds the right margin The "right arrow" is used by VT52's. 4. Cursor positioned between a Carriage return and Line feed The "down arrow" is used by VT52's. In the special "see all" mode, the following are also used: 1. Null spacing ("elipsis" on VT52's) 2. Horizontal tab ("degrees" on VT52's) 3. Line feed - same as #4 above 4. Vertical tab ("divided by" on VT52's) 5. Form feed - same as #2 above 6. Carriage return ("c/d" on VT52's) 7. Overprint carriage return ("5/" on VT52's) 8. Escape ("3/" on VT52's) 9. Control character prefix ("plus or minus" on VT52's) TECO-11 V34 RELEASE NOTES PAGE 19 You will need the following file from your distribution kit: 1. CRTRUB.MAC - Source for determining scope type and sequences. The first thing to do is to list CRTRUB.MAC, read it, and try to understand it. You will note that there is an assembly conditional called "WATCH". If it is left undefined, the CRTRUB assembly will include both scope rubout support and scope watch support. If it is defined to be zero then only scope rubout support will be generated. The correct operating system parameter should be defined to one (RSTS/E, RSX, or RT-11). If your CPU has the hardware SOB instruction, define I$$SOB to be one. If your CPU has the hardware divide (DIV) instruction, define I$$DIV to be one. (Note that VAX/VMS TECO is configured as RSX since it runs in compatibility mode; VAX always has hardware SOB and divide.) The rest of this exercise is left to the student... Now edit CRTRUB.MAC to be whatever you want. Assemble CRTRUB with the MACRO assembler; it needs neither any prefix file(s) nor uses any macro library. After you have CRTRUB assembled to your satisfaction, follow the directions for building TECO described earlier. Good luck!