Uedit V2.5 manual errata: *** Section 1.30.3 in the manual which discusses leftMargin and autoIndent needs correction. A table needs to be provided to cover the cases. Note that when autoIndent is off and leftMargin>0, normal typing does not use leftMargin. But if you reformat the paragraph, it is indented to the column specified by leftMargin. So leftMargin is used in paragraph reformatting if it is >0 even though during normal typing it is not used when autoIndent is off. Note also that the Left Margin (L-m). *** Some commands need to be moved to other keys. Left Margin (L-m) conflicts with the Amiga key L-m which shifts screens. The Hyper Text cmds use Left-Amiga key combinations that Workbench 2.0 uses. *** CL argument list 13 in Part3 of the manual should be deleted. list14 should be the following: LIST 14: autoBackup autoIndent busies changed columnar cram favorite hideDisplay icons lace learnMode mapChars markGadgets overStrike printTabs readOnly rightJustify rowCol scrollType searchCaps smartTabs speakAlerts speakMsgs spooks teachKeys trapMenus trueTabs useKeys userGlobalA userGlobalB userLocalA userLocalB wordWrap The CL functions marked as using list 13 should be changed to use list 14. No CL function uses list 13 which no longer exists. *** Printed manual does not show the grep carat (^) symbol in the symbol table at the top of page 68. The carat symbol forces a match to start of line. *** The manual does not document the fact that spell() does not present optional spellings for bad words if the big dictionary is not in memory. It does not bother looking up options on disk because it would be too slow. For the optional spellings to be presented in the message line, you must have loaded the spelling dictionary into Uedit's memory. Note that using the Load Speller command in Config!s (unless you customize it) if Uedit cannot find enough contiguous memory for the big dictionary, it will open the speller using the dictionary on disk - in this case, optional spellings will not be looked up and presented. *** Hyper text was modified to allow partial words to be looked up. This is not documented in the manual. When the word buffer argument has something in it and the flag = 0 or 1, first the word buffer content is treated as a whole word/phrase in the lookup; if not found, it is treated as a partial word/ phrase. Thus you can type or click the first few letters of a hyper word or phrase and the lookup should find the whole word/phrase if it exists in the table. *** AREXX INTERFACE: Uedit's old cryptic standard Rexx interface (in the old Config!R) was replaced with Kerry Zimmerman's readable, verbose interface, which users say is much easier to use. The manual talks about the old Config!R, not the new one which uses command words; so ignore the irrelevant parts of the discussion in the manual, particularly the Examples. See ReadMe.Demo for instructions on using the new interface. The manual will be updated on the next major upgrade. Buffer usage: (Buf 36 no longer used by Rexx interface) buf35 = holds REXXCOMM File for Rexx interface buf62 = Rexx msg/reply output buffer buf61 = Rexx msg/reply input buffer *** The following cmds are for the Editing Tricks in the manual: Rather than setting MaxFiles to a high number, which requires customizing the config files to change buffer numbers in its commands, you can store files on the buffer stack and access them just as though they were in file buffers. Load each file and use the cmd below to push the file onto the buffer stack. You can load as many as memory will hold, and it doesn't use up file buffer slots. Swap current buffer with stack & roll stack To save changes, use the cmd below repeatedly. It examines the stack and lets you save any buffers that have been changed. Note that this cmd can be customized to save changes on the stack automatically by deleting the askYesNo() call. Save changed files on buffer stack ------------ v2.5e ERRATA *** Added: Save State (R-f5) and Load State (R-f6) menu commands. These save Uedit's state in the default state file "uestate". *** Added: saveState(filename) & loadState(filename) CL functions. (The filename arguments are list 10.) saveState() saves Uedit's state to disk. loadState() loads in a previously stored state. A "state" is a snapshot. Storing Uedit's state consists of storing file and work buffers along with their local flags; also stored are many global variables including colors and split window information. When you load in a state, everything is just as it was when the "snapshot" was taken; the split windows are in the same order, the cursors are in the same spot, the colors are the same, the currently active buffer is the same, colored regions are the same, the search & grep strings are the same, even the Changed (or not) status of files is the same. NOTE: The state does not include keys or learned sequences. As part of your state command you can include saving or loading a data file and existing learned sequence, if you wish. The state also does not include buffers and numbers on the stacks. *** Added: -s CLI command line flag. Examples: run UE -s .. runs UE & loads in the default state file "uestate". run UE -sMyState .. runs UE & loads in state file MyState. NOTE: When a state is loaded, it uses the buffers that were in use when the state was saved. WARNING: Files in Uedit may be erased so that the state can use their buffers; you should save any changes before loading in a state. Note also that if you type "Run UE -s file1 file2", file1 and file2 may be erased from Uedit's memory so their buffers can be used by the state being loaded in. The -s flag is processed BEFORE the -k & -l CLI command line flags and AFTER the named files (if any) are loaded in. You can specify a key or learned sequence (-k or -l) to act on the loaded state's files. -s is processed after the -c and -d flags, of course. To summarize, the sequence is this: process -c and -d, if used load files, if any process -s, if used process -l and -k, if used *** Added: Alt-keys array in config defaults. Below the 2 printable keys arrays in the config defaults is another array of the same length (64 characters). These keys can be typed in using the ALT shift-modifier. The purpose of the alt keys array is to enable foreign users to type in foreign characters either in normal or especially in primitive mode. (In normal mode they could use a command to input foreign letters, but they couldn't type foreign letters in that way when in primitive mode.) *** Added: customScreen global CL variable and config default. In the Config! defaults it is the default just after smartTabs (which used to be a RESERVED slot). If customScreen is FALSE or 0, when the screen opens it is a type WBENCHSCREEN; with a WBENCHSCREEN when you type Ctrl-y and "Run NewCLI" in Uedit, the CLI window is on top of Uedit's window, but a side effect is that rAmiga-n/m work strangely or incorrectly. If customScreen is TRUE or 1, when the screen opens it is a CUSTOMSCREEN; with a CUSTOMSCREEN you cannot open a CLI or Performance Monitor window on top of Uedit's screen, but the rAmiga-n/m keys work correctly. *** Added: Alt-gadget3 command to clear all bookmarks. *** Added: CL variables sWidth and sHeight to set the pixel width & height of Uedit's screen. These belong in list 10 of the manual's argument lists. *** Added: 2 new Config! defaults for setting the screen's pixel width & height. The 2 reserved slots after "Trap menus" are replaced: old: <0> Trap menus to use menu mouse button as a key <0> Reserved. <0> Reserved. new: <0> Trap menus to use menu mouse button as a key <664> Screen width in pixels (640-1064) <224> Screen height in pixels (gets auto-doubled for LACE) (200-1064) ------------ v2.6a ERRATA *** FIXED: Line count was wrong when lines/page = 1. *** FIXED: search() wouldn't find stuff like \\ or \*\*. *** Added: Key names for middle mouse button: middleDown macnum = 73 middleUp macnum = 75 Example: *** Added: '_' (underscore) after "Uedit" in title bar indicates OVERSTRIKE mode is on: "Uedit V2.6a [0]" it is OFF. "Uedit_V2.6a [0]" OVERSTRIKE is ON. *** Added: New font name & height defaults in Config! Font name <8> Font pixel height (8-32) *** Added: New setFont(fontName,fontHeight) CL fct for selecting font. setFont(fontname,fontheight) fontname: list 0 fontheight: list 10 returns eRUE if fontname exists with font size equal to fontheight. The font may be in memory or on disk; if font isn't in memory it is loaded from disk. When a new font is selected or when Uedit quits, the current font is released. setFont() does not change the font immediately or visibly. It merely changes the stored font name and height. Next time Uedit's screen is reopened - as when changing screens or returning from tiny window - the new font is used. If the font cannot be found, topaz 8 is used by default. EXAMPLE command that switches Uedit's font. Notice that it goes to/from tiny window in order to close/reopen the screen; and it runs startup cmd so that menu item spacings will be recomputed for the new font: NOTE: Now you can use a proportional font in your Workbench 2.0 and a non-proportional font in Uedit. *** Added: tinyPriority CL argument and Config! default. This sets the task priority of Uedit while in tiny window. Uedit does housekeeping in tiny window and on large buffers this may consume resource, so you may wish to set Uedit to a low priority in tiny window to keep it from hogging machine resource during housekeeping or whatever work is being done in tiny window. *** Added: setTaskPri() CL function to set Uedit's task priority. setTaskPri(pri) pri: list 10 This sets Uedit's task priority when it is not in tiny window. The tinyPriority CL variable and Config! default sets its priority when it is in tiny window. *** Added: Dynamic use of Dictionary Supplement during spell checking. You now can have an optional UDSupplement in buf41 for the spell checking cmds. (See the rAmgia-c cmd in Config!S.) When the word isn't found in the main dictionary, spell() looks in the supplement. The supplement must be in alpha order; you can use SA-s to sort a stacked list of words to make a dictionary supplement. spell(B1,B2,B3) B1,B3: list 0 (buffer or " ") B2: list 2 (buffer) The normal return for spell() is False; this indicates a bad word was found. It also returns False if B2, the buffer being spell checked, does not exist or if the speller is not up. If spell() returns True, it has reached eof. It checks from the cursor forward in B2, stopping when a bad word is found. If B1 is a buffer, optional spellings are put into B1. If B1 is " ", spell() simply returns False when it finds a bad word. (See the commands in Config!S.) When B1 is " " (no optional spellings), spell() may be aborted with Amiga-ESC. When B1 is a buffer (to collect optional spellings), the lookup of spelling options may be stopped early on by giving an input; the options accumulate in the message line as they are found, and thus when you see the option you want you can click it with the mouse and no further options are sought. If B3 is a buffer, it is used as a supplemental dictionary; the words in it should be on separate lines and in alphabetical order. If B3 is " ", no supplement is used. (See spellerUp, startSpell() and stopSpell.) Cursor Action: Advances cursor until it finds a bad word or eof. Display Action: If B=curFile, refreshes cursor; if offscreen, centers cursor. Example: if (not spellerUp) return while (not spell(buf54,curFile," ")) runKey(virtual-z) .. replace bad words *** Added: Uedit now processes work in tiny window. Just start a process, click the title bar and switch immediately to tiny window. If a requester requires an input, Uedit returns to its big screen. If a primitive mode input is required, Uedit waits until you return to big screen and give the input. Recall that you can set the priority of Uedit separately in big screen and tiny window now also; thus you can start a big process and go to tiny window and let Uedit finish the process using a lower (tiny window) task priority, if you wish. *** Added: A draw() CL function. draw(x,y,color,mode,flag) x,y,color,mode,flag: list 10 draws a line from the current position to x-y using the color, drawing mode, and flag values specified. Color = 0-7 specifies a color; color = -1 means use the current (last) color. mode values are: 0 = JAM1, 1 = JAM2, 2 = XOR, 4 = INVERSE. flag = 0 means do only a move(x,y) to set the current drawing position to x-y; other arguments are ignored except the color is stored. flag = 1 means draw a line to x-y using color, mode, and flag. Example: You can draw (using XOR) a grating on top of the text in the window & erase it by redrawing it again with XOR. You can draw boxes and other figures with the mouse. draw() always returns True. Compile BOTH of the cmds below to try this example. Press shft & the mouse button and move the mouse: Note how xor erases old box on second execution. Place cursor or scroll if button held Another example: XOR a grating onto text. Erase it on second execution. ..equateNum(n0,50) ..equateNum(n2,550) ..equateNum(n1,25) ..equateNum(n3,150) ..runkey(virtual-b) Draw a box of with corners (x-y) given by n0-n1 and n2-n3 .. *** Added: 100 buffer & 100 number stacks. getStackSize(B,N,S) B,N,S: list 10 (integer) Reports the current buffer stack size in B, number stack size in N, and save- file stack size in S. Example: .. get size of buffer stack 22 in n11 & number stack 99 in n12 equateNum(n11,22) equateNum(n12,99) getStackSize(n11,n12,n13) pop(S,BN) S,BN: list 10 (buffer or number) pops the next item from stack S into buffer or number variable BN. Returns False if stack S is empty. If S is a buffer variable such as buf10, buffer stack 10 is used; if S is a number variable such as N22, number stack 22 is used. The stack is popped variable BN. If a buffer is popped off a buffer stack the current buffer BN is deleted and the stack is popped into buffer variable BN. Note that the stack is LIFO, last-in-first-out. (See getStackSize(), push(), and rollStack().) Display Action: Displays "home" buffer, if pop into curFile. Example: pop(n22, pageLines) .. pop number stack 22 into pageLines variable. pop(buf99, buf3) .. pop buffer stack 99 into buf3 slot, killing old buf3. push(S,BN) S,BN: list 10 (buffer or number) pushes item BN, a buffer or number, onto the stack indicated by S. If S is a buffer variable such as b10, it means use buffer stack 10; if it is a number variable such as n22, it means use number stack 22. There are 100 buffer and 100 number stacks. False is returned if 8 bytes is not available for the stack entry. If BN is curFile, the "home" buffer becomes the new curFile; If BN is the last file buffer, a new NoName buffer is opened. (See rollStack(), getStackSize(), and pop().) Display Action: If curFile pushed, displays new curFile. Example: push(buf10, curFile) .. push curFile onto buffer stack 10. push(n0,lineLength) .. push lineLength onto number stack 10. rollStack(X,N) X: list 10 (buffer or integer) N: list 10 (integer) Rolls the buffer stack by amount N, if X is a buffer argument; rolls the number stack by amount N, if X is an integer argument. X indicates which buffer or number stack to roll. rollStack() returns False, if the (buffer or number) stack size is less than 2 or if N is 0. N may be positive or negative, and the stack is rolled forward or backward based on the sign and amount of N. The stacks are LIFO, last-in-first-out. If N is 1, the first- out stack entry is rolled to the last-out position, so that the second-out becomes the first-out. If N is -1, the last-out entry is rolled to the first-out slot. (See push(), pop(), and getStackSize().) Example: rollStack(buf10,1) .. rolls buffer stack 10 forward by 1. rollStack(n0,n54) .. rolls number stack 0 by the amount in n54. ------------ *** In the manual page 8 where it says to slide the screen by putting the mouse at the far right, this is no longer true. Instead you should put the mouse at the very top of the screen to slide the screen. ------------ v2.6b ERRATA None. V2.6b just fixes a few minor bugs. See Revision-History. ------------ v2.6c ERRATA None. V2.6c just fixes a few minor bugs. See Revision-History. ------------ v2.6d ERRATA NEW: Created new rexxKey command name. Like startup, idle, and preKey, rexxKey does not use shiftkeys. rexxKey runs automatically in idle periods ONLY if there is a rexx msg/reply waiting to be processed. The special key macroNums now are: rexxKey 1145 idle 1146 preKey 1147 startup 1148 NOTE: The purpose of rexxKey is to reduce overhead. When the idle cmd was used to process rexx traffic with idleTime=0, there was high overhead because idle constantly. rexxKey runs (during idle periods) ONLY if there is an incoming msg/reply to process. And if you process the msg/reply in your rexxKey cmd, rexxKey won't run again until there is another msg/reply to process. (In the std config, rexxKey runs ONLY if autoTraffic mode On. See Config!R.) NOTE: In order to keep rexxKey from running repeatedly in idle periods, you MUST process the incoming msg/reply by calling rexxIn() in your rexxKey cmd. In the std config turn on autoTraffic and this is taken care of automatically. (See Config!R.) NOTE: Config!R was modified to swap virtual-t with the rexxKey cmd instead of with the idle cmd; the idle cmd is no longer used in Config!R. Don't forget to modify your custom Config!R, if you aren't going to use the one in the std config on the Uedit disk. NEW: Created new sortLines(buffer=list 2,caseSensitive=list 10) CL fct. It sorts the lines in the buffer. If caseSense is non-zero, case sensitivity is used in the sort. If caseSense is 0, case sensitivity is not used in the sort. NEW: Created inTiny CL fct, returns TRUE if currently in tiny window. NEW: Underscore mark in title bar to show Changed status. NEW: Fcreated new CL functions screenToBack and screenToFront. NEW: Tiny window now adjusts its height to be double approx the cli window's font height. NEW: When smartTabs is TRUE, spacesToTabs/tabsToSpaces warns when an eol is encountered and a quote is not closed. ------------ v2.6d ERRATA Certain keys could not be input and had to be moved because the Amiga uses them. The LEFT Amiga mouse & gadget keys for Hyper Text were moved to RIGHT Amiga. Set Left Margin was moved from lAmiga-m to lAmiga-k. The keys changed were: lAmiga-gadget1 --> rAmiga-gadget1 lAmiga-gadget3 --> rAmiga-gadget3 lAmiga-gadget4 --> rAmiga-gadget4 lAmiga-buttonDown --> rAmiga-buttonDown lAmiga-m --> lAmiga-k ------------ v2.6e ERRATA Bookmarks: The bookmark commands were improved. Bookmarks are now named. The alt-gadget3 Clear Marks command was moved to shft-gadget4 and put into the Bookmarks submenu, and the 4th gadget name was changed to "Up/Clr Marks". Now the shift-gadgets let you goto next mark, goto prev mark, set a mark and name it, and clear the marks. When you clear the marks they are set by default to sFile, eFile, sHilite, eHilite, sInvert, eInvert, locA, and locB, and they are named "Start of file", "End of file", and so on accordingly. buf60 is now used for storing bookmark names.