* July 2, 1991 * 旼컴컴컴컴컴컴컴컴컴컴컴� RingLoop Tests (Results) 컴컴컴컴컴컴컴컴컴컴컴컴� * � Beep/ Ring Loop Time * � Fail seconds * 쿘acro Conds. Bytes (a) (b) (c) Test * �===== ===== ===== === === ==== ======================================== * � * � Recommended Techniques * � ---------------------- * �@(e)� f 25 6.0 1.4 0.35 CursorLt * �@(j)� ok 34 nt 1.8 0.50 CursorDn/Up, Scr Buf (CurrentFileName 2x) * � * � Other Techniques * � ---------------- * �@(a) f 29 41.5 4.1 0.65 Scr Buff (BackSpace) * �@(b) f,b 30 29.5 6.0 1.10 Find "path:\NUL" * �@(c) f,b 28 15.5 3.2 0.60 Find Dummy Character * �@(d) f 24 12.0 3.6 0.80 EndFile BegFile * �@(f) ok 29 46.0 4.6 0.75 Scr Buff (CurrentFileName 2x) * �@(g) f 36 7.0 1.7 0.40 CursorDn/Up CursorLt EndLine/BegLine * �@(h) f 30 7.0 1.7 0.40 CursorDn/Up CursorLt * �@(i) f 22 f 1.6 0.40 CursorDn/Up * � * � (Purpose) and Objectives of Tests * � (Recommendations) and Conclusions: * � (Macros) * � (Description) of Tests * � (Fail) Conditions * � (Equipment)/Software for Testing * � (Footnotes) * � * 읕컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴켸 * (Purpose) and Objectives of Tests * ---------------------------------- * The purpose of these tests was find the most effective QEdit macro * technique to execute undetermined tasks in each file in the ring. My * ideas and those of John Goodman, Kyle Watkins and Tim Farley were * tested in very simple macros that loop through the QEdit file ring * once and only once. The objectives were to find a technique that was * fast, visibly and audibly pleasing (no beeps), and would not fail * under any circumstances. * (Recommendations) and Conclusions * --------------------------------- * 1) - Use macro @e technique (developed by Kyle Watkins of * Semware) when loading files from the command line for * subsequent macro processing of all files in the ring, * like the search/replace macros in SRCHxx.QM in AMACxx.ZIP. * Macro @e only fails if the cursor is in column 2 in any * file in ring and is the fastest. * 2) - Use macro @j technique when editing files for macro * processing of all files in the ring. It is slightly slower * and larger (9 bytes) than @e, but there are *no* file * conditions or cursor positions which cause this macro * technique to fail. It is foolproof. * (Footnotes) * ----------- * b - Macros beep if Find beep set on in QCONFIG * f - Macro fail conditions * nt - Not tested * ok - Will not fail * (Description) of Tests * ----------------------- * Three different tests were used. Time was measured manually to the * nearest second using the second hand clock hand. Total run time was * divided by the number of times the macro was executed consecutively * without stopping to arrive at a relative time comparison for each * macro technique. The technique used in ring looping portion of the * macros in RINGxx.QM was proposed later by Richard Blackburn and was * not tested in this series. * Test a - 500 files containing one line "test", 6 bytes each * (Time for 1 repeat, accuracy +/- 1.0 seconds) * Test b - 100 files containing two lines "test", 14 bytes each * (Time for 10 repeats � 10, accuracy +/- 0.10 seconds) * Test c - 10 files, 10k each, total 100k * (Time for 20 repeats � 20, accuracy +/- 0.05 seconds) * Macro (Fail) Conditions * ------------------------ * @a fails if file name NU is loaded * @b fails if "path:\NUL" exists in any file in ring * @c fails if dummy character #250 exists in any loaded file * @d fails if any empty file is loaded in ring * @e fails if cursor is in column 2 in any file in ring * @g fails if cursor is in column 2 in any blank file in ring * @h fails if cursor is in column 2 in any single line file in ring * @i fails if any single line file in ring, empty or not * (Equipment)/Software for Testing * --------------------------------- * 10 mhz XT clone with 12 mhz Everex accelerator board (SI 10.4) * 5 megs ram with 3 AST ram boards (wish I could fit more in) * Miniscribe 40 meg as E: (17.2 meg, data) and G: (26.6 meg, files) * Seagate 20 meg as F: (used to incrementally backup E: and G:) * 360k floppy as A: * 720k floppy as B: * Everex 2400 baud internal modem * Magnavox VGA paper white Monitor * Logix VGA board * PC Kwik (1.7 meg cache) configured C: and D: ram disks * PCED * NEWKEY * Test (Macros) * =============== *  * ---------------------------------------------------------------------- * @(a) Scratch Buffer BackSpace, Fails if file name NU is loaded * (John Goodman technique) * ---------------------------------------------------------------------- @a MacroBegin UnMarkBlock PrevFile EditFile "NUL" Return DropAnchor StoreScrBuff CurrentFileName BackSpace Return RINGLOOP: NextFile GetScrBuff CurrentFileName BackSpace Return JFalse RINGLOOP: END: Quit NextFile * 29 bytes Fri 05-17-1991 00:35:21 (TH/JG) *  * ---------------------------------------------------------------------- * @(b) Find CurrentFileName, A "beeping" method, Fails if "path:\NUL" * exists in any file in ring (John Goodman technique) * ---------------------------------------------------------------------- @b MacroBegin PrevFile EditFile "NUL" Return CurrentFileName RINGLOOP: NextFile UnmarkBlock MarkLine Find CurrentFileName Return "LB" Return JFalse RINGLOOP: END: Quit NextFile * 30 bytes Fri 05-17-1991 14:31:01 (TH/JG) *  * ---------------------------------------------------------------------- * @(c) Find Dummy Character, A "beeping" method, Will not fail unless * dummy character #250 exists in any loaded file in th ring * (John Goodman technique) * ---------------------------------------------------------------------- @c MacroBegin PrevFile EditFile "NUL" Return #250 RINGLOOP: NextFile Find #250 Return "B" Return JFalse RINGLOOP: END: Quit NextFile * 28 bytes Fri 05-17-1991 14:32:29 (TH/JG) *  * ---------------------------------------------------------------------- * @(d) EndFile/BegFile suggested by Tim Farley, Fails if any empty file * is loaded in ring * ---------------------------------------------------------------------- @d MacroBegin UnMarkBlock DropAnchor PrevFile EditFile "NUL" Return RINGLOOP: NextFile EndFile BegFile JTrue RINGLOOP: END: Quit GoToBlockBeg UnMarkBlock * * 24 bytes Fri 05-17-1991 14:33:47 (TH) *  * ---------------------------------------------------------------------- * @(e) CursorLeft, Fails only if cursor is in column 2 in any file * in ring (Kyle Watkins' technique) * ---------------------------------------------------------------------- @e MacroBegin PrevFile * Position to load NUL file EditFile "NUL" Return * Load NUL file CursorRight * Put cursor in column 2 of NUL file RINGLOOP: NextFile * Move to next file in ring CursorLeft * See if we can move cursor left Jfalse RINGLOOP: * If we can't move cursor left, it's not * the NUL file, then move to next file CursorLeft * If we could move cursor left, see if we * can do it again JTrue RINGLOOP: * If we can, we are not in the NUL file, * and move to next file END: *ELSE test was false and we must be in * the NUL file Quit * Quit it NextFile * Move to file we started in * * 25 bytes Fri 05-17-1991 09:00:37 (TH) *  * ---------------------------------------------------------------------- * @(f) Scratch Buffer CurrentFileName 2x, Will not fail * (John Goodman's technique) * ---------------------------------------------------------------------- @f MacroBegin UnMarkBlock * Unmark blocks PrevFile * Position to load NUL file EditFile "NUL" Return * Load NUL file DropAnchor * Need a block marker for StoreScrBuff StoreScrBuff * Create a buffer named CurrentFileName * "path:\NULpath:\NUL" eg CurrentFileName * "c:\nulc:\nul" Return * RINGLOOP: * NextFile * Go to next file in ring GetScrBuff * Try retrieving a buffer named CurrentFileName * current file's name 2x, eg CurrentFileName * "c:\current.extc:\current.ext" Return * JFalse RINGLOOP: * Buffer only exists for "c:\nulc:\nul" * If test is false, we are not yet in * the NUL file, move to next file END: *ELSE test was true and we must be in * the NUL file Quit * Quit it NextFile * Move to file we started in * * 29 bytes Sat 05-18-1991 01:33:57 (TH/JG) *  * ---------------------------------------------------------------------- * @(g) CursorDown/Up CursorLeft EndLine/Begline, * Fails if cursor is in column 2 in any blank file in ring * ---------------------------------------------------------------------- @g MacroBegin UnMarkBlock * PrevFile * Position to load NUL file EditFile "NUL" Return * Load NUL file CursorRight * Put cursor in column 2 of NUL file RINGLOOP: * NextFile * Move to next file in ring CursorDown CursorUp * Test if file has more than one line JTrue RINGLOOP: * If so, move to next file CursorLeft * See if we can move cursor left Jfalse RINGLOOP: * If we can't move cursor left, it's not * the NUL file, then move to next file CursorLeft * If we could move cursor left, see if we * can do it again JTrue RINGLOOP: * If we can, we are not in the NUL file, * and move to next file EndLine BegLine * If we could not move cursor left, test * if line has any text JTrue RINGLOOP: * If line has text it is not the NUL file * but a single line file with text that * had the cursor in column 2, move to next * file END: *ELSE test was false and we must be in * the NUL file Quit * Quit it NextFile * Move to file we started in * 36 bytes Fri 05-17-1991 10:33:44 (TH) *  * ---------------------------------------------------------------------- * @(h) CursorUp/Down Cursorleft, Fails if any single line file in ring * has cursor in col 2 * ---------------------------------------------------------------------- @h MacroBegin PrevFile EditFile "NUL" Return CursorRight RINGLOOP: NextFile CursorDown CursorUp * pass all multi line JTrue RINGLOOP: CursorLeft Jfalse RINGLOOP: CursorLeft JTrue RINGLOOP: END: Quit NextFile * * 30 bytes Fri 05-17-1991 09:07:09 (TH) *  * ---------------------------------------------------------------------- * @(i) CursorDown/Up, Fails only if single line file in ring * ---------------------------------------------------------------------- @i MacroBegin PrevFile * Position to load NUL file EditFile "NUL" Return * Load NUL file RINGLOOP: NextFile * Move to next file in ring CursorDown CursorUp * Test if file has more than one line JTrue RINGLOOP: * If if does, we are not in the * NUL file, move to next file END: *ELSE test was false and we must be in * a file with only one line Quit * Quit it NextFile * Move to file we started in * * 21 bytes Sun 05-19-1991 11:48:37 (TH) *  * ---------------------------------------------------------------------- * @(j) Scratch Buffer CurrentFileName 2x, CursorDown/Up, Fastest RingLoop * Technique that will not fail (John Goodman's Scratch Buffer * technique use with CursorDown CursorUp) * ---------------------------------------------------------------------- @j MacroBegin UnMarkBlock * Unmark blocks PrevFile * Position to load NUL file EditFile "NUL" Return * Load NUL file DropAnchor * Need a block marker for StoreScrBuff StoreScrBuff * Create a buffer named CurrentFileName * "path:\NULpath:\NUL" eg CurrentFileName * "c:\nulc:\nul" Return * RINGLOOP: * NextFile * Go to next file in ring CursorDown CursorUp * Test if file has more than one line JTrue RINGLOOP: * If if does, we are not in the * NUL file, move to next file GetScrBuff *ELSE try retrieving a buffer named CurrentFileName * current file's name 2x, eg CurrentFileName * "c:\current.extc:\current.ext" Return * JFalse RINGLOOP: * Buffer only exists for "c:\nulc:\nul" * If test is false, we are not yet in * the NUL file, move to next file END: *ELSE test was true and we must be in * the NUL file Quit * Quit it NextFile * Move to file we started in * * 34 bytes Sun 05-19-1991 01:02:05 (TH/JG) * Tom Hogshead