! TECEDT - TECO macro for EDT V2 simulation with additions of draw and overprint modes. Justify text added ! ! To squeeze, use TECO SQU macro, then convert control U to ^U, ^N to control N, and ^E to control E ! ! Written by: Robin Miller May 1981 Modified for smoother overprint mode by Glenn Everhart 6/82 Q-register usage: Text: $0 = Messages to print. $1 = Checks for Control/C typed. $2 = Contains . $3 = Types character in image mode. $4 = Word delimeters. $5 = Types out escape sequence. $6 = Buffer for cut/paste. $7 = Buffer for deleted line(s). $8 = Buffer for deleted word(s). $9 = Buffer for deleted character(s). $B = Box / Unbox macro. $D = Draw character macro. $E = Input Macro. $G = Calculates character position. $H = Move curser n positions. $I = Main macro. $J = Check buffer limits. $K = Displays keypad layout. $M = Curser control macro. $N = Numeric input macro. $O = File status macro. $R = Command string buffer. $S = Search string buffer. $T = Converts tabs to spaces. $U = User defined keys (if any). $Z = Scratch. Numeric: %1 = Autosave modification count. %2 = Current modification count. %3 = Select from search active. %5 = Iteration count. %6 = Indicator used by UP and DOWN arrows. %7 = ASCII of last character typed. %9 = Used by UP and DOWN arrows in draw mode. %C = Message on screen flag -1/0/1 (-1 clears). %D = Direction flag -1/1 = Backward/forward. %F = File search flag -1 = True. %G = Gold key typed flag -1/0. %M = Mode flag -1/0/1 = Draw/Edit/Overprint. %N = Saved iteration count. %Q = Drawing character. %V, %W, %X, %Y, %Z = Scratch. ! @EI%% ! Shut off indirect command file. ! QQ"E ^^*UQ ' ! Load default character to draw with. ! Q1"E 50U1 ' 0U2 ! Default count for autosave. ! 0:W-2"E ! If VT100 is in VT52 mode, change it to ANSI. ! 4,0:W^[ ' 0:W-4"N ! All other terminals are invalid. ! @^A%Invalid terminal type... need VT100 terminal. % ' ! Messages. m,nM0: n = message number. m = attribute -1 = none, 0 = bold & reverse, else user supplied. ! @^U0_[Z [Y +0UZ +0UY < QY"E 0MM 7,4MM | 12MM QY"G QYMM ' ' QZ+64@^UZ// @O!^EQZ! !@! @^A%File name ? % 0; !A! @^A%Select is already active% 0; !B! @^A%No select range active% 0; !C! 0; !D! 0; !E! 0; !F! @^A% Edit mode % 0; !G! @^A% Draw mode % 0; !H! @^A%Overprint mode% 0; !I! @^A%Search for: % 0; !J! @^A%String was not found% 8MM @^A% % 7MM QD"L @^A%Backward% | @^A%Forward% ' 0; !K! @^A%No search string% 0; !L! @^A%Teco Command: % 0; !M! @^A%No file for input% 0; !N! @^A%No file for output% 0; !O! @^A%Number: % 0; !P! @^A%Drawing character: % 0; !Q! @^A%Really KILL output file ? % 0; !R! @^A%Exiting and closing file % 0; !S! @^A%No HELP available% 0; !T! @^A%File not found% 0; !U! 0; !V! @^A%End of file detected% 0; !W! @^A%Doing autosave, please wait ...% 1UY 0; !X! @^A%No output file for Autosave ... Continuing ...% 0; !Y! 13^T @^A%Autosave complete, you may continue.% 0; !Z! @^A%Aborted by CTRL/C% 0; > 8MM QY"E 7M3 ' ]Y ]Z _ ! Check for Control/C typed (M1;). 0 = message, else no message. ! @^U1_[Z [Y +0UY -1UZ ET"G QY"E 26M0 ' 0UZ ' QZ ]Y ]Z_ ! for misc. operations. ! @^U2% % ! Type out character in image mode. ! @^U3_[Z UZ 0,16#1ET QZ^T ]Z 1,0ET -1000W_ ! Word delimeters. ! 32@^U4// 9@:^U4// 13@:^U4// 10@:^U4// 11@:^U4// 12@:^U4//32@:^U4// ! Type out escape sequence. m,nM5: i.e., ^^H,^^[M5 gets you home. ! @^U5_[Z [Y UZ +0UY 27M3 QZ^T QY"G QY^T ' ]Y ]Z_ ! Box / Unbox macro. ! @^UB_[Z [Y [X ! Box ! 1,0MJ"S .-(4:W-1)"L .U5 (4:W-1)J .UZ | .UZ (4:W-1)U5 ' 0^Q"L L ' .UZ Q5J 0L .U5 0UX (1:W-4)-QX/2UY QY"L 7M3 @O!E! ' @^UZ% % QY<32@:^UZ//> QX+4 @:^UZ% % QY<32@:^UZ//> QQ@:^UZ// QX+2<32@:^UZ//> QQ@:^UZ// @:^UZ% % Q5J QQ@:^UZ// 32@:^UZ// @::S/^ES/^[ .,.+(^Q-2):XZ (QX+1)-(^Q-2)<32@:^UZ//> QQ@:^UZ// @:^UZ% % L> QY<32@:^UZ//> QQ@:^UZ// QX+2<32@:^UZ//> QQ@:^UZ// @:^UZ% % QY<32@:^UZ//> QX+4 @:^UZ% % Q5,QZK 0,4:W^[ GZ | ! Unbox ! QQ@^UX// ^Q,1@:S/^EQX/"U 7M3 @O!E! ' 0U5 <1M1; -.; -L .U5 @::S/^EQ2/:;> 0,0XZ 2L Q5,.X7 Q5,.K GZ ' !E! ]X ]Y ]Z_ ! Draw character. -1 = UP, 1 = DOWN. ! @^UD_[Z UZ Q6"E MG ' Q5<0,0XZ -Q9<32@:^UZ//> GZ ^Q"E G2 2R | 0A-13"N D ' ' QQ@I// QZ"L .+(0^Q)"E 0L G2 ' ' QZL Q6MH> 0,0XZ -Q9<32@:^UZ//> GZ Z-."E G2 -L ' 0L Q6MH ]Z _ ! Get text from user. Message should already be on the screen. Input saved on push down register; restore with ]q. -1 = Terminate on any character. 0 = Terminate with 2 escapes or keypad key. 1 = Terminate on control character or keypad key. $Z destroyed, Q7 = last character entered. ! @^UE_[Y [X [W [V +0UW .UV ^^=M5 ZJ ZUY <^TU7 Q7-3"E QYJ 0; ' ET"G QYJ 0; ' Q7-21"E QYJ 0; ' Q7-13"E ^T^[ QW"N 0; | G2 @^A%^M^J% ' F< ' Q7-27"E 0UX 0,32ET <^TUZ QZ:; QZUX> 32,0ET QX"G QXU7 Q7-^^u"E -1UD | Q7-^^t"E 1UD ' ' QW"E 2<27^T> ' 0; ' QW"N 0; | Q7^T ' .-QY"G -1A-27"E -D 0; ' ' Q7@I// F< ' QW"L 0; ' QW"G Q7-32"L 0; ' ' Q7-127"E .-QY"G -1A-32"L -1A-27"N 8^T 32^T 8^T ' ' 8^T 32^T 8^T -D ' F< ' Q7@I// Q7-32"L ^^^^T Q7+64^T | Q7^T ' F< > QY,.XZ QY,ZK QVJ ]V ]W ]X ]Y [Z_ ! Calculate character position on the screen. Q6 = calculated position. ! @^UG_[Z [Y 0UZ .UY 0U6 0L QY-.%6< 0A-32"L 0A-27"N 0A-9"E 6-(QZ&7)%6^[ -2UZ ' %Z^[ %6^[ ' ' C %Z> QYJ ]Y ]Z_ ! Move curser n positions. ! @^UH_U6 [Z -Q6U9 0UZ Q6<.-Z; 0A-32"L 0A-13"E 0; ' 0A-27"N 0A-9"E 6-(QZ&7)%9^[ -2UZ ' %Z^[ %9^[ ' ' C %Z^[ %9"G R ' Q9;> ]Z_ ! Check buffer limits / range. m,nMJ: n = operation: -1 = Backward, 0 = Range, 1 = Forward. m = 0 error message, else no message. ! @^UJ_[Z [Y [X +0UZ +0UX -1UY QZ"L ."E QX"E 7M3 ' 0UY ' | QZ"G .-Z"E QX"E 7M3 ' 0UY ' | 4:W"E QX"E 2M0 ' 0UY | (4:W-1)-Z"G Z+1,4:W^[ ' ' ' ' QY ]X ]Y ]Z_ ! Display Help macro. ! @^UK_[Z [Y [X [W ^EUY EP @:ER/LB0:[1,2]TECEDT.HLP/"U 19M0 | 1U7 0UX .UW ZJ < Q7-QX"L Q7U5 Q7UX @ER/LB0:[1,2]TECEDT.HLP/ | Q7-QXU5 Q7UX ' Q5<.,ZK A QY"E 1:A^[ '> 2MM 0,1ET .,(Z-4)T 1,0ET -1ME Q7-13"E QX-1"E 2U7 | 1U7 ' F< ' Q7-32"L 0; ' Q7-^^A"L 0; ' Q7-^^E"L Q7-62U7 F< ' Q7-^^M"E 7U7 F< ' Q7-^^P"L 0; ' Q7-^^T"L Q7-72U7 F< ' Q7-^^l"S 0; ' Q7-^^z"L Q7-96U7 F< ' 0;> .,ZK QWJ 2MM -1W ' @ER// ]W ]X ]Y ]Z_ ! Curser control macro. m,nMM: n = curser operation. 0 = save curser, set line 23 column 1. 1 = restore curser. 2 = clear screen and sets scrolling region based on 2:W. 3 = position on bottom of screen ready to exit. 4 = bold, 5 = underscore, 6 = blink, 7 = reverse video. 8 = clear all attributes. 9 = clear message at bottom of screen. 10 = set 80 column mode. 11 = set 132 column mode. 12 = save curser, set line 24 column 1. m = second function (if any). ! @^UM_[Z [Y +0UZ +0UY !GO! QZ+64@^UZ// <@O!^EQZ! !@! QC"E ^^7M5 | QC"L 0; ' ' ^^[M5 @^A%23;1H% -1UC 0; !A! ^^8M5 -1000W 0; !B! ^^[M5 @^A%1;% 2:WUZ QZ:= ^^r^T ^^J,^^[M5 0; !C! ^^r,^^[M5 ^^>M5 ^^[M5 @^A%24;1H% 0; !D! ^^1,^^[M5 ^^m^T 0; !E! ^^4,^^[M5 ^^m^T 0; !F! ^^5,^^[M5 ^^m^T 0; !G! ^^7,^^[M5 ^^m^T 0; !H! ^^m,^^[M5 0; !I! ^^7M5 ^^[M5 @^A%23;1H% ^^K,^^[M5 @O!A! !J! ^^?,^^[M5 @^A%3l% 0; !K! ^^?,^^[M5 @^A%3h% 0; !L! QC"E ^^7M5 1UC | QC"G 0; ' ' ^^[M5 @^A%24;1H% ^^K,^^[M5 0; > QY"G QYUZ 0UY @O!GO! ' ]Y ]Z_ ! Accept numeric input and store # in Q5 and QN. ! @^UN_QG"T -1,15M0 ' 0U5 ' Q7-21"E 0U5 QG"T Q7^T ' | Q5UN ' Q7-13"E ^T^[ ' QG"T 0UG '_ ! File status macro. m,nMO (i.e., 2,1MO checks both primary files): n = operation. 0 = status only, no message. 1 = primary input file. 2 = primary output file. 3 = secondary input file. 4 = secondary output file. 5 = check end of file. m = second operation (if any). Outputs: $Z = File name of last stream checked. ! @^UO_[Y [X [W [V +0UZ +0UY 0UX -1UW .UV !GO! QZ+64@^UZ// <@O!^EQZ! !@! 1UX 0; !A! @ER// 13UZ @O!S! !B! @EW// 14UZ @O!S! !C! EP 13UZ @O!S! !D! EA 14UZ @O!S! !E! ^N"L 22M0 0UW ' 0; !S! G* ^YXZ ^YK :QZ"E QX"E QZM0 ' 0UY 0UW ' 0; > QY"G QYUZ 0UY @O!GO! ' QVJ ]V QW ]W ]X ]Y_ ! Convert TABS to spaces on current line. ! ! Altered line QM"T to QM"N to convert in overprint mode too ! @^UT_ QM"N [Z MG Q6UZ 0L < ^Q,1@:FS% %%; MG ((Q6/8)+1)*8-Q6<@I% %> > QZMH ]Z '_ ! ********************************************** Load main macro into Q-Register I. ********************************************** ! ! Note use of n,m:W construct to read in input text...TECO-11 specific ! @^UI$+0U5 ^D 0UC 1UD 16,0ED^[ 0,4:W^[ 11W^[ 2:W-22"G 22,2:W^[ ' ! Set ANSI mode, scrolling region 1;22, clear screen. ! ^^ .,QZX9 QZ-.U5 .,QZK QM"N Q5<@I% % R> ' ' F< ' ! Insert character; overprint with space if drawing. ! Q7-31"G .-Z"E G2 2R ' Q5 F< ' ! Branch to appropriate control key. ! ! Escape handled below under [ and further characters input there ! ! Go to label of noncontrol char. Later ESC chars go to label K ! Q7+64@^UZ// @O/^EQZ/ ! Key not defined. ! !@! !E! !O! !P! !Q! !S! !X! !]! !^! !_! 7M3 F< ! \ - Unfill text... remove all multiple spaces of selected region prior to justify (for reformatting). ! !\! MJ"S .-(4:W-1)"L .U5 (4:W-1)J .UZ | .UZ (4:W-1)U5 ' 0^Q"L L ' .-2,.@:FB/^EG2/"S 2R ' L .UZ Q5J 0L .U5 [P Q5UP ! Save start loc of fill ! ! Perform line by line justify ! [8 QZU8 ! store end character ! ! QP = START CHARACTER FOR JUSTIFY, Q8=END. ! [9 0U9 [Q QPJ (Q8-QP)< M1 @::S/^EQ2/"S 1%9^[ R | C' > ! COUNT LINES ! ! Q9 NOW COUNTS LINES ! QPJ Q9<1@:FC/^ES/ /"S F< | L F> '> ! CONVERT ALL SPACES TO SINGLE ONES ! QPJ Q9<1@:FB/^ES^EQ2/"S 2R -@S/^ES/@FR// 'L> ! REMOVE TRAILING SPACES ! QPJ Q9<@::S/^ES/"S @FR// ' L > ! REMOVE LEADING SPACES ! ]Q ]9 ]8 ]P ' 0,4:W^[ F< ! ^Y - Justify select region. Calls fill first, then blank fills lines to justify margin. ! !D! !Y! ! Control D will be a synonym since VAX uses control Y ! MJ"S .-(4:W-1)"L .U5 (4:W-1)J .UZ | .UZ (4:W-1)U5 ' 0^Q"L L ' .-2,.@:FB/^EG2/"S 2R ' .UZ Q5J 0L .U5 [P Q5UP ! Save start loc of fill ! <.-QZ; M1; @::S/^EQ2/"S F< ' .,QZ@:FB/^EQ2/"U QZJ @O!JU! ' @::S/^EQ2/"S 4R @O!JU! ' 2R MG Q6-(1:W-2)"L @I% % 2D -1%Z^[ ' !JU! <1M1; MG (1:W-2)-Q6; Q6-(1:W-2)R 0^Q,-1@:FS% %%"S -1%Z^[ ' G2 2R 2%Z^[> > QZJ L 0,4:W^[ ! Perform line by line justify ! [8 .U8 ! store end character ! ! QP = START CHARACTER FOR JUSTIFY, Q8=END. ! [9 0U9 [Q QPJ (Q8-QP)< M1 @::S/^EQ2/"S 1%9^[ R | C' > ! COUNT LINES ! ! Q9 NOW COUNTS LINES ! QPJ Q9<1@:FC/^ES/ /"S F< | L F> '> ! CONVERT ALL SPACES TO SINGLE ONES ! QPJ Q9<1@:FB/^ES^EQ2/"S 2R -@S/^ES/@FR// 'L> ! REMOVE TRAILING SPACES ! QPJ Q9<@::S/^ES/"S @FR// ' L > ! REMOVE LEADING SPACES ! ! Remember to handle the last line separately by not filling it. Must avoid cases of only one word per line. ! ! Thus, the FB check on finding a space first and skipping line if none. ! QPJ (Q9-1)<1M1 MG .U8 0L 1@:FB/ /"U L F> ' 0L .UQ L2R ((1:W-2)-(.-QQ))"G Q8J 1@:FC/ / /"U 0L F< | 1@:FB/^EA/"U 0L ' ' F< | L F> '> ]Q ]9 ]8 ]P ' ^[ F< !Z!! ^Z (26) = Close file and exit. ! 2MO"S -1,18M0 :GZ 3MM EX | -1,0M0 1ME ]Z :QZ"G @EW/^EQZ/ @O!Z! ' ' F< !W!! ^W (26) = Refresh screen. ! Q5-9"G Q5-23"L Q5,2:W^[ | Q5-81"L 10MM | 11MM ' Q5,1:W^[ ' ' 2MM -1W F< !V!! ^V (22) = Toggle see-all mode. ! (3:W^_),3:W^[ F< !U!! ^U (21) = Delete to beginning of line. ! -1MJ"S 0^Q"E -Q5X7 -Q5K | 0X7 0K ' %2^[ ' F< !T!! ^T (20) = Top of file. ! 2MO"S EC @EB/^EQZ/ P 0U2 | J ' F< !R!! ^R (18) = Reverse editing mode. ! QM"E 1UM 7,8M0 | 0UM 7,6M0 ' F< !N!! ^N (14) = Use saved iteration count. ! QNU5 ^TU7 @O!2! !M!! CR (13) = Insert carriage return / line feed. ! ^T^[ Q5 %2^[ F< !L!! ^L (12) = Insert form feed. ! Q7@I// F< !K!! ^K (11) = Kill output file. ! -1,17M0 1ME 0QZ&95-^^Y"E HK EK 3MM EX ' F< !J!! LF (10) = Rubout word. ! -1MJ"S .UZ Q5<-.; R @-S/^N^EG4/; R @-S/^EG4/;> .,QZX8 .,QZK %2^[ ' F< !I!! TAB (9) = If drawing, insert spaces, else insert tab. ! Q5 MT F< !H!! BS (8) = Position at beginning of line. ! -1MJ"S Q5<0^Q"E -L | 0L '> ' F< !G!! ^G (7) = Change drawing character. ! -1,16M0 -1ME Q7^T Q7UQ F< !F!! ^F (6) = File search. ! 2,1MO"S 1UD -1UF -1UG @O!KR! | F< ' !C!! ^C (3) = Exit to Teco. ! 0; !B!! ^B (2) = Bottom of file. ! 2,1MO"S | ZJ ' F< !A!! ^A (1) = Append page(s). ! 1MO"S Q5 ' F< ![!! Escape (27). ! ! Get next character. ! Q7"D | ^TU7 1M1; Q7-27"E Q5 F< ' ' ! If minus sign or number, presume iteration count. ! Q7-^^-"E ^TU7 1M1; ' Q7"D MN Q5"G @O!2! | F< ' ' ! If [ or O, presume VT100 escape sequence. ! Q7-^^O"E ^TU7 1M1; ! Branch to appropriate key. ! Q7-^^M"L @O!IN! | Q7-^^S"G @O!KEY! ' ' Q7@^UZ// @O!K^EQZ! !KEY! Q7-^^l"L @O!IN! | Q7-^^y"G @O!IN! ' ' Q7-64@^UZ// @O!K^EQZ! ' ! Arrows. ! Q7-^^["E ^TU7 1M1; ! Branch to arrow key. ! Q7-^^A"L @O!IN! | Q7-^^D"G @O!IN! ' ' Q7@^UZ// @O!K^EQZ! ' !IN!!KN!!KO!!K/! !EA!! ESC ^A = Include next page. ! Q7-1"E 3MO"S @O!AP! | F< ' ' !EB!! ESC ^B = Box / Unbox. ! Q7-2"E MB F< ' !EI!! ESC ^I = Include file. ! Q7-9"E -1,0M0 1ME ]Z :QZ"G EP @:ER/^EQZ/"U 20M0 | !AP! 5MO"N .,ZXY ^E"T 12@:^UY// ' .,ZK Q5 ZJ GY ^SC 0,0XY ' ' @ER// ' F< ' !EZ!! ESC ^Z = Write to secondary file. ! Q7-26"E -1,0M0 1ME ]Z :QZ"G EA @EW/^EQZ/ 1,0MJ"S (4:W-1)UZ Q5 0,4:W^[ | Q5 ' EF @EW// ' F< ' Q7@I// F< ! Arrows have a double meaning: In draw mode, insert drawing character. In edit mode, move the curser. ! !KA!! ^ (A) = Up in column. ! -1MJ"S QM"T -1MD F< | -Q5U5 @O!GO! ' ' @O!1! !KB!! v (B) = Down in column. ! 1MJ"S QM"T 1MD F< | !GO! Q6"E MG ' Q5L Q6MH ' ' @O!1! !KC!! > (C) = Right character. ! 1MJ"S QM"T Q5< ^Q"G 0A-13"N D ' ' QQ@I//> | Q5 ' ' F< !KD!! < (D) = Left character. ! -1MJ"S QM"T Q5<-.; ^Q"G 0A-13"N D ' ' QQ@I// R 0^Q; R> | Q5<-1^Q; R 2,-1@:S/^EQ2/"S 2R ' > ' ' F< !K0!! 0 (p) = Next line / Open line. ! QG"F QDMJ"S (QD*Q5)L ' | Q5 %2^[ ' F< !K1!! 1 (q) = Word / Changecase. ! QG"F QDMJ"S QD"G .UZ Q5 ."E QZJ L ' | Q5 ' ' | .UZ QD"L .-Q5"L .U5 ' ' 4:W"G .-(4:W-1)U5 Q5"L -Q5U5 | (4:W-1)J ' | QDMJ"S QD"L .-Q5"L .U5 ' .-Q5J | (.+Q5)-Z"G Z-.U5 ' ' | F< ' ' Q5 ' @::S/^EW/"S R 0A+32@I// D | C '> %2^[ 4:W"G QZJ 0,4:W^[ | QD"L .-Q5J ' ' ' F< !K2!! 2 (r) = End of line / Delete to end of line. ! QDMJ"S .UZ QD"L (QD*Q5)L (^Q-2)C @::S/^N^EQ2/^[ | Q5<@::S/^EQ2/^[ ^Q,1@:S/^EQ2/"S 2R | L 0; '> ' QG"T QZ,.X7 QZ,.K %2^[ ' ' F< !K3!! 3 (s) = Character / Special Insert. ! QG"F 1MJ"S QD"L Q5<-1^Q; R 2,-1@:S/^EQ2/"S 2R '> | Q5<.-Z; @::S/^EQ2/"U C '> ' ' | Q5@I%% ' F< !K4!! 4 (t) = Forward / Bottom. ! QG"F 1UD | ZJ ' F< !K5!! 5 (u) = Backward / Top. ! QG"F -1UD | BJ ' F< !K6!! 6 (v) = Cut / Paste. ! QG"F MJ"S (4:W-1),.X6 (4:W-1),.K 0,4:W^[ %2^[ ' | Q5 %2^[ ' F< !K7!! 7 (w) = Page / Command. ! QG"F 2,1MO"S Q5 ' | -1,12M0 ME ]R :QR"E F< ' 27@:^UR// Q5 ' F< !K8!! 8 (x) = Section / Fill. ! QG"F QDMJ"S ((Q5*16)*QD)L ' | MJ"S .-(4:W-1)"L .U5 (4:W-1)J .UZ | .UZ (4:W-1)U5 ' 0^Q"L L ' .-2,.@:FB/^EG2/"S 2R ' .UZ Q5J 0L .U5 <.-QZ; M1; @::S/^EQ2/"S F< ' .,QZ@:FB/^EQ2/"U QZJ @O!JU! ' @::S/^EQ2/"S 4R @O!JU! ' 2R MG Q6-(1:W-2)"L @I% % 2D -1%Z^[ ' !JU! <1M1; MG (1:W-2)-Q6; Q6-(1:W-2)R 0^Q,-1@:FS% %%"S -1%Z^[ ' G2 2R 2%Z^[> > QZJ L 0,4:W^[ ' ' F< !K9!! 9 (y) = Append / Replace. ! MJ"S QG"F (4:W-1),.:X6 | (4:W-1),.X7 (4:W-1),.K G6 ' 0,4:W^[ ' F< !K,!! , (l) = Delete character / Undelete character. ! QG"F 1MJ"S .UZ Q5<.-Z; @::S/^EQ2/"U C '> QZ,.X9 .-QZU5 QZ,.K QM"T Q5<@I% %> ' ' | Q5 ' F< !K-!! - (m) = Delete word / Undelete word. ! QG"F 1MJ"S .UZ Q5<@S/^EG4/; @S/^N^EG4/; R> ."E ZJ ' QZ,.X8 QZ,.K %2^[ ' | Q5 ' F< !K.!! . (n) = Select / Reset. ! QG"F 4:W"G Q3"F 1M0 | 0U3 F| ' | (.+1),4:W^[ ' | 0,4:W^[ ' F< !KM!! ENTER (M) = Enter / Substitution. ! QG"T MJ"S Q3"T (4:W-1),.X7 (4:W-1),.K 0,4:W^[ G6 ' 0UG @O!KR! ' ' F< !KP!! PF1 (P) = Gold. ! QG"T QM"L 0UM 7,6M0 | -1UM 7,7M0 ' MT F< | -1UG ^TU7 1M1; @O![! ' !KQ!! PF2 (Q) = Help. ! MK F< !KR!! PF3 (R) = Find next / Find. ! 0,16ED^[ QG"T -1,9M0 ME ]S :QS"G F| ' | :QS"E 11M0 | Q3"T 0,4:W^[ ' 0UG 0U3 Q5<.UZ M1; QD@:S/^EQS/"U QF"T ^N"E P F< ' ' 10M0 0; ' QD"L QZ-(.+1)"L (QD*2)@:S/^EQS/"U 10M0 0; ' ' ' 4:W"E -1U3 F| | Q3"T (.+1+^S),4:W^[ ' '> ' ' 0UF 0UG 16,0ED^[ @O!3! !KS!! PF4 (S) = Delete line / Undelete line. ! QG"F 1MJ"S Q5X7 Q5K %2^[ ' | Q5 ' F< > 3MM ^^K,^^[M5 $ ET&128"E @^A%Editing macro loaded into Q-register I % | 128,0ET^[ 1,0MO"S A ' MI '