TECO-11 V35 RELEASE NOTES July 1979 TECO-11 is unofficially maintained by the TECO SIG. Send comments and bug reports to: TECO SIG c/o DECUS Mail Stop MR2-3/E55 One Iron Way Marlboro, MA 01752 You can enhance the probability of receiving a reply to your communication by enclosing a self-addressed stamped envelope. 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 V35 RELEASE NOTES Page 2 VERSION 35 OF TECO-11 This section of these Release Notes describes the changes in TECO V35 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 V35 RELEASE NOTES Page 3 TECO editor changes EO returns 35 A search using only a ^EQq (e.g., @S/^EQA/) when the q-reg is empty will search for the null string (not the last search argument) ^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 TECO-11 V35 RELEASE NOTES Page 4 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 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 ^ TECO-11 V35 RELEASE NOTES Page 5 W command: W VT52: do scrolling update if scrolling; else nop VT11: refresh screen using last defined view amount 0W VT52: forget screen image, SEEALL mode, mark, hold mode, scrolling, 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: do scrolling update if scrolling; else do normal update 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) TECO-11 V35 RELEASE NOTES Page 6 7:W returns number of scrolling lines (0=>not scrolling, n=>scrolling bottom n lines) -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 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 1 => no need to initially refresh the screen 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) n,7:W sets number of scrolling lines (n=0 for no scrolling, n<>0 for scroll bottom n lines, where n must be greater than 1 and scope height minus n must be greater then 9) TECO-11 V35 RELEASE NOTES Page 7 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) Notes on Hold Screen mode (5:W) If "hold whole screen" mode (-1,5:W) is set, the hardware scrolling of the scope will never be used. This allows a program to set hold whole screen mode (-1,5:W) and, then, shorten the scope's height (n,2:W) without problems. The bottom 'unused' lines of the scope will never be altered by TECO and can be used by the program for other purposes. Notes on Scrolling (7:W) Whenever a scrolling lines modification is issued (n,7:W), TECO alters the scope's height (2:W) accordingly. For example, if 2:W is currently returning a value of 24, then, after a 5,7:W command, 2:W will return a value of 19. Doing a 0,7:W will restore 2:W to returning 24. ^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 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$ TECO-11 V35 RELEASE NOTES Page 8 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 V35 RELEASE NOTES Page 9 TECO.TEC - the TECO command responder 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. /NOCREATE Don't automatically create a new file if the file specified by a TECO command doesn't already exist. /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). /SCROLL Automatically enter split screen scrolling mode with 1/4 of the screen's lines scrolled (see 7:W command). /SCROLL:n Automatically enter split screen scrolling mode with n lines scrolled (see 7:W command). All of the above can be abbreviated to two (2) characters except /NOINI, /NOMEMORY, and /NOCREATE which must be at least three (3) characters. TECO-11 V35 RELEASE NOTES Page 10 All of the switches apply to TECO commands, MAKE commands only recognize the /NOI, /NOM, /NOC, /VT, and /SC switches, and MUNG commands only take /NOI, /NOM, and /NOC. (/NOC is meaningless to MAKE and MUNG commands, but the switch is stripped off; /NOM is meaningless to MUNG, but the switch is also stripped off.) The following command formats are recognized by TECO.TEC 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 V35 RELEASE NOTES Page 11 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, the /H is turned into a /H:24 (see below). /H:n Count n lines and hold the screen. This also forces on the /W switch. /-W Turn off filespecification announcing. Useful if /H turned announcements on. /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 "). /A:n Search for all occurances of the string specified with the /S switch. The n is the number of lines around the match to display. If just /A is used, n defaults to 3. /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. /I Inspect each (wildcarded) file before it is typed. /F:x Flag lower (x is L) or upper (x is U) case. If just /F is specified then lower case is flagged. /L:n List only the first n lines of the file. If just /L is specified then n defaults to the terminal's height (or 24 if unknown). TECO-11 V35 RELEASE NOTES Page 12 /O:n Overprint each line n times. If just /O is specified then n defaults to 1. Useful for darkened copies on a hardcopy terminal. For RSTS/E, TYPE.TEC should be installed with a protection code of <104>. TECO-11 V35 RELEASE NOTES Page 13 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 V35 RELEASE NOTES Page 14 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 V35 RELEASE NOTES Page 15 LOCAL.TEC - the MACRO local symbol reordering macro This macro will reorder local symbol blocks in MACRO-11 (.MAC) or MACRO/VAX (.MAR) 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 V35 RELEASE NOTES Page 16 SEARCH.TEC - the wildcard file searching macro SEARCH will scan one or more wildcarded sets of files for all occurances of one or more strings. Each match is displayed in the log file with the character "~" immediately after the matched string. SEARCH also has a change mode (i.e., find and replace). You use the MUNG command to invoke SEARCH and it enters into a dialogue with you. The "Output:" question directs SEARCH's log file. The default log file is to your terminal; the default file extension is .SRH. If you are doing a change mode run, you place the /CHA switch on your answer to this question. If the strings you wish to search for (or the replacement strings) contain embedded CR/LF's, you must add the /ESC switch to this question. When you say /ESC, your responses to the Search: (and Replace:) questions will be terminated only by ESCape; normally, either RETURN or ESCape is the terminator. You can always use DELete (RUBOUT) and CTRL/U to edit your responses. The "Input:" question is asking for an optionally wildcarded file specification. The default file extension is .MAC. You terminate supplying file specifications by responding with simply RETURN. The "Lines:" question determines the number of extra lines around the found line to place in the log file. An answer of 0 results in only the found line; the default value is 3. The "Search:" question accepts the string(s) to search for. All normal TECO search constructs are allowed. Terminate entering search strings with simply RETURN (or ESCape if you said /ESC). The "Replace:" question will only appear if you specified /CHA. After each Search: is responded to, you enter a replacement string for the last entered search string. The "Detach:" question directs SEARCH to detach during the searching. The default is to stay attached. TECO-11 V35 RELEASE NOTES Page 17 SQU.TEC - the TECO macro squisher This macro will take a nice, readable TECO macro and squish it so that it is as small and as fast as possible (and is completely unreadable). You invoke SQU with the MUNG command. SQU then enters into a dialogue with you as described below. All questions contain the allowed legal responses enclosed in parentheses and the default you get if you just type RETURN in angle brackets. In the discussion below the term "lexical" refers to characters that TECO would have interpreted as TECO commands; all characters inside string arguments are not lexical characters. For example, the ABC of SABC$ are not lexical characters while the S and $ are. Similiarly, the ABC and DEF of @FS/ABC/DEF/ are not lexical while the @, F, S, /'s, and $ are. Delete CR/LF (Y/N) ? A Y response will delete all lexical RETURNs and LINE FEEDs. As this usually results in one very long "line", an answer of N is suggested (but, see the question below). Set line lengths (Y for 70, N, or length) ? This question is asked if you responded N to the previous question. If a positive response is given, SQU will initially delete all lexical CR/LFs, then, as a post-process, insert the CR/LF combination wherever it's needed so that no line is longer than the length specified. This neatly formats the squished TECO macro. The most commonly used length is 70 so a response of Y results in a length of 70. Delete blank lines (Y/N) ? This question is asked only if you responded N to both of the questions above. A Y answer results in all lexical blank lines being deleted. Delete lexical TABs and FORM FEEDs (Y/N) ? Even though lexical TABs and FORM FEEDs have meaning to TECO (TAB starts an insert, FORM FEED outputs a FORM FEED on the terminal), some TECO macro writers use them simply to format their macro code. Of course, their macros won't correctly execute without removing those lexical TABs and FFs. A Y response will delete all lexical TABs and FORM FEEDs. If your macro runs unsquished, you certainly want to answer N. Delete comments (Y for SP/TAB, N, or set) ? The trouble here is that both comments and labels (tags) use the same construct. To be able to differentiate between the two, some sort of coding convention must be used. SQU will check the character immediately following the "!" that starts the comment or label. If that character matches the one of the set of "comment characters" specified, SQU will delete the construct. TECO-11 V35 RELEASE NOTES Page 18 Using a SPace or TAB immediately after the leading exclamation point seems to be the most flexible for formatting comments so a Y response results in the "comment character" set being SPace and TAB. Watch progress (Y/N) ? If your terminal is supported by the W (scope watch) commands, this question will be asked. At the cost of SQU running more slowly, you can watch its progress. Useful for debugging, not for production squishing... Automatic mode (Y for %, N, or set) ? This is the most confusing question. The problem here is that SQU normally won't touch characters inside string argument strings, but the ^U command is frequently used to load TECO macro code into Q-registers and, of course, you wish that code to also be squished. On the other hand, all ^U commands aren't necessarily loading TECO macro code. There are two forms of the ^U command: ^Uqxxx$ and @^Uq%xxx%. The rule SQU uses is that any ^U command that is of the @^Uq%xxx% form and whose delimiting character is a member of the "non-squishable ^U command" character set shouldn't be sub-squished; every other ^U command's string argument is assumed to be TECO macro code and is sub-squished. The convention we've adopted is that the quoting character "%" is to be used for textual (i.e., non-code) ^U command arguments. Therefore, a Y response sets the "non-squishable ^U command" character set to %. You may enter any set of character(s) you want. An N response places you in manual mode. Whenever SQU encounters a ^U command, it will pause, ring the terminal's bell, and await a response. A Y says to go ahead and sub-squish the string arugment; an N means to skip it. Obviously, you want to start coding your macros according to some convention so that you don't need manual mode. Allow adjacent ESCapes (Y/N) ? The process of squishing a macro can result in two adjacent ESCape characters where there wasn't before. For example, if the command @FS/ABC// was used, SQU will turn it into FSABC$$. If the macro will be read via an ER command, yanked into the text buffer, copied to a Q-register, and executed this poses no problems. On the other hand, if the macro is to be EI'd, the adjacent ESCapes will trigger command execution prematurely. An N response will direct SQU to never generate adjacent ESCapes where there wasn't before. File <.TES or .TEC>? SQU is now asking you for the file specification of your TECO macro and indicating the it will default the extension to .TES, or, if no file with a .TES extension exists, to .TEC. After your reply, SQU will take off and start squishing the macro. When it's done, it will simply return to TECO's * prompt. You can now write out the squished macro however you want. TECO-11 V35 RELEASE NOTES Page 19 If you invoke SQU as MUNG SQU,filnam it will enter its dialogue for the squishing options, but will start squishing immediately after asking about adjacent ESCapes then return to the * prompt. You can invoke SQU specifying all of the squishing options as switches. The switches are: /D Delete CR/LF /L Set line lengths /B Delete blank lines /T Delete lexical TAB/FFs /C Delete comments /W Watch progress /A Automatic mode /E Allow adjacent ESCapes Each switch should be expressed as /x:y where "x" is the switch and "y" is either Y or N. A non-standard line length can be expressed as /L:nn where "nn" is some non-zero digit string. Non-standard character sets can be specified for the /C and /A switches, but the character set is limited to a single character. For example, /C:* sets the comment character set to "*" and /A:` sets the non-squishable ^U command character set to "`". You can also supply SQU with both output and input file specifications. For example: MUNG SQU,outfil=infil SQU will enter its dialogue for the squishing options, then will immediately do the squishing, write out the result, and exit. The output file extension always defaults to .TEC. If you have specified everything SQU needs (an input file, an output file, and all of the options as switches), it will do the whole squishing operation and exit without further intervention. Common SQU command lines are: MUNG SQU,VTEDIT.TEC=VTEDIT.TES/D:N/L:Y/B:Y/T:N/C:Y/W:N/A:Y/E:N MUNG SQU,TECO.INI=TECOIN.TES/D:N/L:Y/B:Y/T:N/C:Y/W:N/A:Y/E:Y TECO-11 V35 RELEASE NOTES Page 20 TECKBM.TEC - the TECO keyboard monitor macro This is a magic macro for RSTS/E only that implements a TECO keyboard monitor; read it and weep. TECO-11 V35 RELEASE NOTES Page 21 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... There exists a global patch location (TE.INI) which governs TECO's startup handling. The bits to patch there are described in the comments of the TECO.INI file (the bit encoded flag bits). Specifically, bit 12 (4096(10), 10000(8)) says to not try to find the TECO.INI file (i.e., disable private initialization) and bit 2 (4(10), 4(8)) says to not use or TECO's memory file (i.e., disable memory). TECO-11 V35 RELEASE NOTES Page 22 RSTS/E TECO I/O handling changes If running under RSTS/E V7.0: a) Tentative files are used b) Wild card PPN's are available with EN c) No supersede mode is recognized The following switches are recognized with EB, ER, and EW: /MO:n RSTS/E file open mode /CL:n RSTS/E file cluster size (means block size on ANSI magtapes) /B binary input/output mode; all data is read/written as unfiltered 8-bit / same as /B+ /B+ Old BASIC-PLUS source file processing; correctly reads/writes line feed style continuation lines /B2 same as /8 /n BASIC-PLUS-2 source file processing; correctly reads/writes & style continuation lines; the & is placed in column n The following sequential disk file formats are handled: ASCII stream if no file attributes of if ASCII stream (R.STM) attribute (this is the default processing mode) Fixed if fixed (R.FIX) attribute Variable if variable (R.VAR) attribute Variable w/ fix if variable with fixed control (R.VFC) attribute Fortran carriage control (FD.FTN) is converted for R.FIX, R.VAR, R.VFC Implied carriage control (FD.CR) is added for R.FIX, R.VAR, R.VFC Print format control (FD.PRN) is converted for R.VFC No block spanning (FD.BLK) is recognized for R.FIX, R.VAR, R.VFC The following ANSI magtape file formats are handled: Fixed (format "F") Variable (format "D") ASCII stream (format "U") (this is the default processing mode) TECO-11 V35 RELEASE NOTES Page 23 Fortran carriage control (modifier "A"??) is converted Implied carriage control (modifier " "??) is added Embedded carriage control (modifier "M") is recognized (this is the default) On output, if the magtape is an ANSI magtape, the format written is variable (format "D") with implied carriage control (modifier " ") and a default block size of 2048 bytes per block (modifyable by /CL:n) TECO-11 V35 RELEASE NOTES Page 24 RSTS/E :EG - TECO special function processing :EG is implemented as follows: :EGRTS$ switch to system default RTS :EGRTS foo$ switch to RTS "foo" :EGFSS string$ file string scan "string" :EGCCL cmd$ try "cmd" as a CCL command :EGRUN file$ try to run "file" :EGRUN file=xx$ try to run "file" with "xx" placed in core common :EGEMT$ issue a monitor directive; the FIRQB is loaded from Q-regs A through P and the XRB is loaded from Q-regs Q through W; the low byte of the value in Q-reg A is the monitor EMT code to issue; if the high byte of the value in Q-reg A is >0 then the text part of Q-reg A is put into the XRB for a 'write' (XRLEN= size of A, XRBC=size of A, XRLOC->A); if Q-reg A high byte is <0 then the text part of Q-reg A is put into the XRB for a 'read' (XRLEN=size of A, XRBC=0, XRLOC->A) Returned value is -1 for success, 0 for unrecognized command, or >0 for the RSTS/E error code The FIRQB is placed in the numeric part of Q-regs A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P The XRB is placed in the numeric part of Q-regs Q, R, S, T, U, V, W TECO-11 V35 RELEASE NOTES Page 25 CONFIGURING RSTS/E TECO-11 RSTS/E TECO-11 V35 can be re-configured to: 1. Include or exclude ":EG" support. 2. Include or exclude scope Rubout and Control/U support. 3. Include or exclude the "W" (scope watch) command. 4. Include or exclude the scrolling ("7:W") support. If :EG support is not included, all :EG commands will return a value of zero (for failure). The usefulness of :EG is questionable, but including :EG support adds less than 1K words to the TECO Run-Time System. Unfortunately, including :EG and/or scrolling support along with scope Rubout and Control/U support and the "W" command causes the TECO Run-Time System to be over 8k words... Scope support can be configured four ways: 1. No support at all for scope terminals. At a modest saving in size over #2 below, TECO can be configured without any support at all for scope type terminals. 2. Support for only Rubout and Control/U on scope terminals. TECO normally processes Rubouts by re-echoing the deleted character and processes Control/U by simply echoing ^U. If TECO is configured this way, Rubouts and Control/Us will actually erase the deleted character(s) from the screen. The size cost for this configuration is very modest. 3. Support for Rubout, Control/U, and the W (watch) command. This configuration includes the code that implements the W (scope watch) command. While the size cost is fairly large (about 1K words both in the TECO Run-Time System and in the user's job image), the W command allows TECO to serve as a keypad editor. 4. All of the above plus scrolling support. This configuration implements the special split-screen scrolling support. Scrolling can only operate on terminals with hardware scrolling region control (e.g., the VT100). The pre-built TECO Run-Time System on the distribution kit (TECO.RTS) is configuration #3 above without :EG. TECO-11 V35 RELEASE NOTES Page 26 You will need the following files from the distribution kit: 1. TECOLB.OBJ - Pre-assembled TECO and I/O package. 2. GEXIT.OBJ - Pre-assembled :EG command processor. 3. SCREEN.OBJ - Pre-assembled W command processor. 4. SCRINS.OBJ - Pre-assembled Insert Optimizer. 5. SCROLL.OBJ - Pre-assembled scrolling processor. 6. CRTRUB.OBJ - Pre-assembled scope type determination and sequences. You also will need the following from the RSTS/E distribution kit: 1. $PIP.SAV - To move files around. 2. $LINK.SAV - To link your new TECO. 3. ERR.STB - Error message globals for the TECO link. 4. $SILUS.SAV - To build your new TECO Run-Time System. 5. $UTILTY - To ADD your new TECO Run-Time System. Link TECO one of the following ways: Configuration #1, no :EG, no scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *ERR.STB Round section? PATCH *^Z Configuration #2, :EG, no scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *GEXIT/C *ERR.STB Round section? PATCH *^Z Configuration #3, no :EG, Rubout & Control/U scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *CRTRUB/C *ERR.STB Round section? PATCH *^Z TECO-11 V35 RELEASE NOTES Page 27 Configuration #4, :EG, Rubout & Control/U scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *GEXIT/C *CRTRUB/C *ERR.STB Round section? PATCH *^Z Configuration #5, no :EG, Rubout, Control/U, & Watch scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *SCREEN/C *CRTRUB/C *ERR.STB Round section? PATCH *^Z Configuration #6, :EG, Rubout, Control/U, & Watch scope support RUN $LINK.SAV *TECO/Z,TECO,TECO=TECOLB/X/H:#177776/U:#4000/C *GEXIT/C *SCREEN/C *CRTRUB/C *ERR.STB Round section? PATCH *^Z Configurations #3 and #4 above require that the CRTRUB module be reassembled with the assembly conditionals "WATCH" and "SCROLL" defined as zero (see next section). To add the insert optimization module to configurations #5 and #6 above, you must change the line "*SCREEN/C" to "*SCREEN,SCRINS/C". To add scrolling support to configurations #5 and #6 above, you must change the line "*SCREEN/C" to "*SCREEN,SCROLL/C" (or "*SCREEN,SCRINS,SCROLL/C"), and the CRTRUB module must be reassembled with the assembly conditionals "WATCH" and "SCROLL" defined as one (see next section). After linking TECO, you build your new TECO Run-Time System as follows: RUN $SILUS.SAV *TECO.RTS=TECO *^Z Now you can move TECO.RTS to account [0,1] being sure you make it contiguous: TECO-11 V35 RELEASE NOTES Page 28 RUN $PIP.SAV *[0,1]*.*<60>/MODE:16.=TECO.RTS *^Z Now use UTILTY to REMOVE to old TECO and, then, ADD your new TECO: RUN $UTILTY ? REMOVE TECO ? ADD TECO ? ^Z Obviously, you can use some name other than TECO in the above PIP run to avoid clobbering a known good TECO.RTS while you are debugging. You can enter your trial TECO by saying D$=SYS(CHR$(9)+MID(SYS(CHR$(6)+CHR$(-10)+"xx"),7,4)+CHR$(0)) to BASIC-PLUS. TECO-11 V35 RELEASE NOTES Page 29 CONFIGURING TECO-11 FOR FOREIGN SCOPE TERMINALS TECO-11 V35 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 not 80 then a default of VT52 scope support else; 4. If the "XON" characteristic (RSTS/E) is set or "SET TER/VT100" (VAX/VMS) then scope is a "VT100" else; 5. 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 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. TECO-11 V35 RELEASE NOTES Page 30 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 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 TECO-11 V35 RELEASE NOTES Page 31 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) The major qualification for scrolling support is the hardware capability of setting scrolling regions on the terminal. Reading the CRTRUB source should show you what is needed. 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 TECO-11 V35 RELEASE NOTES Page 32 support will be generated. The "SCROLL" assembly conditional determines whether scrolling support is to be included. 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!