! THIS IS TKO.TEC, 1989-12-24, WHICH EXTENDS INITIALIZATION DONE BY TECO.INI ! ! ( TEC$INIT DEFINITION) WHEN TKO IS INVOKED RATHER THAN TEC*O. ! ! DEFINITIONS FROM THE USER LOGIN FILE (IN DIRECTORY [BW.KOENIG]) ARE: ! ! $ASSIGN "$[BW.KOENIG]TECO.INI" TEC$INIT ! ! $TEC*O:==$SYS$SYSTEM:TECO TECO/NOMEM ! ! $MAKE :==$SYS$SYSTEM:TECO MAKE ! ! $MUNG:==$SYS$SYSTEM:TECO MUNG """ ! ! TKO:=="$SYS$SYSTEM:TECO MUNG [BW.KOENIG]TKO.TEC" ! ! CURRENT MACROS ARE B C .C D E H I .I K .K L .L N R S Z 3. ! ! FIND WITH NO ALPHANUMERIC ADJACENT EITHER END, REPLACE BY ! ! NOTE nMR REPLACES nTH WITH , 5<3MR> REPLACES 3,6,9,12 AND 15-TH ! @^UR\URQRSRQ1R-C-SQ1FRG2\ ! CONVERT ALL UPPER-CASE LETTERS BEGINNING AT BUFFER POINTER TO LOWER CASE. ! @^UI\+0U.IQ.I"E%.I'Q.I<0A-64"G0A-91"L0A+32U.ADQ.AIF>''C>\ ! CONVERT ALL LOWER-CASE LETTERS TO UPPER CASE. ! @^UK\+0U.KQ.K"E%.K'Q.K<0A-96"G0A-123"L0A-32U.ADQ.AIF>''C>\ ! DATIM SHOWS 20-BYTE " YYYY-MM-DD HH:MM:SS", PUTS IT INTO QT (NO QUOTES). ! ! PUSHES AND POPS QZ, PUSHES QT. D F KOENIG. EXAMPLE: 1988-12-29 11:39:08 ! ! RSX/VMS - SPECIFIC: "^H" ALGORITHM ACCURACY IS +/- 2 SECONDS. ! @^UD$  [T [Z .UZ[Z 0UZZL ^UZ (^B%Z/512)+1900\^Y:XZ^YD :^UZ-(QZ/32)-((QZ/512)*16)UTQT-10"L:^UZ0' QT\^Y:XZ^YD :^UZ-QZ-((QZ/32)*32)UTQT-10"L:^UZ0' QT\^Y:XZ^YD :^UZ ^HUZQZ/1800UTQT-10"L:^UZ0' QT\^Y:XZ^YD :^UZ:(QZ/30)-((QZ/1800)*60)UTQT-10"L:^UZ0' QT\^Y:XZ^YD :^UZ:(QZ-((QZ/30)*30))*2UTQT-10"L:^UZ0' QT\^Y:XZ^YD [Z]T:GT  ]ZQZJ ]Z $ ! FIND FORTRAN END STATEMENT - EXCLUDE END... STUFF, FINESSE TIDY EOF ID'S ! ! AND ANY PURE TRAILING BLANKS. NO ATTEMPT TO HANDLE DEC TRAILING COMMENT.! ! FAILURE TO FIND END STATEMENT CAUSES QE TO BE SET TO END-OF-BUFFER Z. ! ! D F KOENIG 27 NOV 1988 - MY BIRTHDAY PRESENT TO ME IN MY PRIME NR YEAR ! @^UE[+0U.EQ.E"E%.E'!TOP!Q.E:S SENDR"S-C::S "S-TT| ::SS"S.UE0LQE-.-71"GL-TT|::S "S-TT|Q.E"L-L'OTOP''''.UE|-1UE' [ ! UPWARD SEARCH FOR END. AS n IT SHOWS ALL n. AS nM3 IT SHOWS ONLY nTH. ! ! FAILURE TO FIND END ABOVE CAUSES QE==>0. USES ME. I MADE IT. DFK 1989. ! @^U3[+0U.3Q.3"E%.3'-2L-Q.3MEQE"L0UEJT' [ @^UB[ ! "BSPACE" FINDS AND DISPLAYS CHARACTER(S) BACKSPACED OVER. BUFFER POINTER ! ! PRECEDES THE CHARACTERS; THEY ARE NOT DELETED. AT ^T PAUSE, "D" DELETES ! ! THEM AND THE BSP'S, "B" DELETES ONLY THE BACKSPACES. ANYTHING ELSE EXCEPT! ! SPACE EXITS BSPACE. I KEEP BSPACE IN QB; IT USES #B AND #T. D F KOENIG. !  !  TRY IT ON THIS DOGGEREL: ABCDDB. LMNOB?. SERT2AB, NECEU    ! ! HIC FACIT 1989-01-07 14:43:54 UNIV. PITTSBURGH, DEPT. CRYSTALLOGRAPHY. ! <8UB SUB.-1UB<::S"U0;'> V0T .-(2*(.-QB)),QBT ?^TUT  QT-^^D"E2*(QB-.)D|QT-^^B"EQB-.D|QT-^^ "N0;'''> [ 0UZ@^UZ#[ZJ."NZ-.UZ'Z-QZJQZ]ZUZ ! EXECUTE .MZ WHEN NEW TARGET IS DESIRED (AT CURRENT Z-. FROM BOTTOM) ! ! OR EXECUTE MZ WHEN JUMP TO THAT DISTANCE FROM CURRENT BOTTOM IS DESIRED. ! ! ".MZ" FAILS IFF .=0. THEN CAN TEST AND USE "J" INSTEAD, OR SET QZ TO Z. ! ! LIVES IN Z, USES ONLY Z. D F KOENIG 1989-01-08 14:52:26 ! # ! MAKE ALL ALPHABETICS LOWER CASE. USAGE: SET BEGINNING OF RANGE TO #A, THEN ! ! GO TO END OF DESIRED RANGE, INVOKE THIS MACRO: M.I ALL LINES IN RANGE ARE! ! DISPLAYED; POINTER IS LEFT AT #.2 D F KOENIG 1989-10-12 13:05:26 ! @^U.I@.U.BQAJQ.B-.MI.U.BL.U.2QAJ0L.,Q.2TQ.BJ@ ! MAKE ALL ALPHABETICS UPPER CASE. USAGE: SET BEGINNING OF RANGE TO #A, THEN ! ! GO TO END OF DESIRED RANGE, INVOKE THIS MACRO: M.K ALL LINES IN RANGE ARE! ! DISPLAYED; POINTER IS LEFT AT #.2 D F KOENIG 1989-10-12 13:05:26 ! @^U.K@.U.BQAJQ.B-.MK.U.BL.U.2QAJ0L.,Q.2TQ.BJ@ ! FORTRAN HOLLERITH-STRING HELPER COUNTS CHARS AFTER "@H" TO CURRENT POINTER,! ! REPLACES @ BY COUNT. DISPLAYS THE HOLLERITH COUNT THROUGH CURRENT POINTER, ! ! THEN ON NEW LINE DISPLAYS THE TEXT BEYOND IT. LIVES IN QH. DF KOENIG 1989. ! @^UH#.U.H-S@HQ.H-.\IH-SFR.U.A1+\C Q.A,.T T# ! DISPLAY CURRENT LINE'S ASCII CODES, 20 PER DISPLAY-LINE. QN SETS POINTER TO! ! BEGINNING OF LINE (CHANGES Q_,#E), WHERE IT STAYS. D F KOENIG, 1989-11-24. ! @^U.L[ Line length =  MN0U.0QN [ ! FOR EACH NAME IN ARG-th FORTRAN COMMON, SEARCH THROUGH THE END STATEMENT ! ! FOR ALL OCCURENCES OF NAME, PUT LINES INVOLVED INTO Q1. RETURN TO START OF! ! RECONSTITUTED COMMON, DISPLAY IT, STOP. INDIVIDUAL HEADER FOR EACH SEARCH.! ! POPS Q1, USES QE END-MACRO. D F KOENIG, 1989-09-09 19:03, U PGH, CRYSTALL.! ! ALGORITHM: ! ! FIND Q.0th {LINE-END + COMMON}. Q.L BEGINS COMMON LINE, INITIALLY Q.C=Q.L.! ! FIND MODULE'S FIRST LINE, SAVE IT IN Q1. FIND NO OR TWO "/"; ONE = ERROR; ! ! IF NONE FIND SPACE, ELSE ERROR. THEN SET #.1 TO CURRENT POINTER, WHERE ! ! BEGINNING OF FIRST NAME SHALL OCCUR: FROM #.1 ON THROUGH THE COMMON, ALL! ! BLANKS WILL BE REMOVED. ADD ENTIRE COMMON TO Q.1 HEADER, THEN GO TO #.1, ! ! MAKE SINGLE SUPER-RECORD, THEN REMOVE ALL BLANKS BEYOND #.1, UPDATE #.C TO! ! END OF THE COMMON. FIND MODULE END IN CURRENT PAGE ELSE ERROR. GO TO #.1, ! ! BEGIN LOOP OVER ALL COMMON-NAME SEARCHES. FIRST CHECK FOR DONE: #.1=#.C; ! ! IF SO, DISPLAY "DONE", RESTORE COMMON TO 72-CHARACTER LINES, EXIT WITH THE! ! POINTER AT #.L, THE BEGINNING OF THE COMMON. ELSE: FIND FIRST NON-ALPHA- ! ! NUMERIC BEYOND #.1; IF UNSUCCESFUL #.1 TO #.C IS THE LAST NAME IN COMMON,! ! OTHERWISE #.1 TO POINTER-1 IS CURRENT NAME. IN EITHER CASE SAVE NAME IN QX! ! FOR SEARCH. IN LATTER CASE, THE NON-AN CHARACTER MUST BE "," SO THAT THE ! ! NEW #.1 IS THE POINTER LOC. IF NOT, THE CHARACTER MUST BE "(" ELSE ERROR. ! ! AFTER "(", MUST FIND ITS OUTERMOST MATCHING ")" ELSE ERROR, AND FINALLY ! ! ALSO A TRAILING "," OR IF NONE POINTER AT #.C, ELSE ERROR. IT IS SIMPLEST! ! TO TRY THE EASY CASES FIRST, AND ON SUCCESS GO TO PROCESS THE NAME. IF AN ! ! ERROR IN THE COMMON IS FOUND, IT IS LEFT AS A SUPER RECORD FOR CORRECTION.! ! THE SEARCH OF ALL MATCHES TO THE NAME IS STRAIGHTFORWARD; NO CONCATENATION! ! OF CONTINUATION LINES IS DONE, SO SOME MATCHES MAY BE MISSED UNLESS THIS ! ! WAS DONE BEFORE RUNNING COMUSE. EACH LINE CONTAINING A MATCH IS APPENDED ! ! (JUST ONCE PER NAME) TO Q.1 IN ORDER FOUND (BEGINNING TO END OF MODULE). ! ! A TEST IS MADE TO SKIP THE COMMON RECORD ITSELF. ! @^UC@+0U.0Q.0"E%.0'[1^U1 Q.0:S SCOMMONR"UOEND'0L.U.L M3X1 -1U.0 .U1 Q.LJ :X1 Q.LJ .U.C SN :FB/"S:FB/"UOERR'|::S "UOERR'' .U.1 <FBSFR> MNQN%.C MEQE"L INCOMPLETE MODULE.OERR' Q.1J <Q.1-Q.C"E0L DONE: 0;' Q.1J FBR -C 0A-13"EQ.1,Q.CXX Q.CU.1 OK' Q.1,.XX ::S,"S.U.1 OK' ::S("UOERR'.U.A :FB)"UOERR'.U.B Q.AJ 1U.3<FB(%.3>Q.AJ Q.3:FB)"UOERR' ::SS ::S,"UOERR' .U.1 !K! Q1J :^U1*** GX^Y:X1^YD:^U1 ***: <.,QEFBRQXR0L .-Q.L"N:X1'L> > Q.LJ 48U.0  !ERR!  ***ERROR EXIT. CURRENT LINE: V  ****CURRENT POSITION TO END: T  !END! Q.LJ Q.0-48T@ ! BREAK ONE LONG FORTRAN STATEMENT PLUS ALL ITS CONTINUATIONS, OR ONE LONG ! ! COMMENT LINE, INTO MULTIPLE LINES. POINTER MUST BE IN FIRST LINE ANYWHERE.! ! A COMMENT IS BROKEN INTO LINES EACH SHORTER THAN 73 CHARS AND ENDING AFTER! ! A WORD OR HYPHEN (DOUBLE HYPHEN IF PRESENT). STATEMENT LINES OF EXACTLY 72! ! CHARACTERS (EXCEPT LAST LINE NOT PADDED) ARE PRODUCED WITH CONT CHARS 1-9.! ! TAKES NO ARGUMENT, ALTERS NOTHING. D F KOENIG, 1990-01-03 20:02:02 ! ! INIT: #.1=START OF LINE, #.2="C" OR " ", #.0=CONT CNTR, #.H="-", QH=" -". ! ! FOR FORTRAN STATEMENT ONLY, COLLECT ALL CONTINUATIONS INTO INITIAL LINE.! @^U.C@0L.U.1 ::SC"S67U.2|32U.2' 0U.0 45U.H^U.H - V Q.2-67"N -L' ! LOOP ! <0L -.U.3 S ^SC.-72%.3"GV -Q.3C Q.2-67"E ! C COMMENT ! .,.-72FBG.H -C -::SS"SFR'::SS"SFR' -1A-45"E-2A-45"NC-1A-45"N45I''' ::SS"SFR' I C F<' ! OTHER ! I Q.0-9"E0U.0'%.0\|0;'> L Q.1,.T@ [3[C[.C[.I[.K[.L