home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / system / sphinx.lzh / SPHINX2.5y / Docs / Changes.doc < prev    next >
Encoding:
Text File  |  1992-01-09  |  41.4 KB  |  657 lines

  1.  
  2.                   Sphinx.doc v2.5b
  3.          ⌐ 1991, Nicolas Dade. All Rights Reserved
  4.  permission is hereby granted for non-commercial duplication and distribution
  5.           doc file for the SPHINX: AmigaDOS device
  6.  last revised: January 9th, 1992
  7.  
  8. New in version 2.5b from version 2.5a (in the order implemented)
  9. 1) Fixed bug in C-S & C-G in which the cursor was left erased until the
  10.    next operation (was being redrawn by the writing of text when I was test-
  11.    ing, but if C-S was pressed when nothing was going on, the cursor was
  12.    erased and nothing (until the next operation) was redrawing it--no crash,
  13.    no problem internally, but still unsettling to the user.
  14. 2) Changed the window size & position to wb screen bounds checking so that
  15.    it uses GetScreenData(), and is no longer ever automatically shut off.
  16. 3) As was really going on, the first iconized wd is always placed where the
  17.    main wd was.
  18. 4) Null pointer in UndoGadget's image structure when first main wd is opened
  19.    fixed, now points to `X' (it didn't for an instant during the opening of
  20.    the initial window; it was visible really only if the program was run in
  21.    slow motion).
  22. 5) C-S is now not canceled by RETURN & its friends, but is canceled by
  23.    changing the contents of the inputsave (any text key, insert or searching),
  24.    C-G and S-DOWN
  25. 6) Fixed the fragment comparison (again). So simple an algorithm, such a small
  26.    bit of code (6 lines init, 10 lines loop), and so many bugs. Well, again
  27.    I think that it will work as described, but I've said that before... .
  28. 7) Fixed and cleaned up more stuff in the startup code than I care to admit
  29.    (single stepped through from first instruction to receiving first write
  30.    packet from shell).
  31.    sketched list of changes:
  32.    a) when using multiple differently named SPHINXs, bug involving code in use
  33.       being freed (leading to many sorts of crashes) fixed.
  34.    b) some of the flag bytes are now initialized upon startup.
  35.    c) no longer bsr to a subroutine which may have been freed.
  36.    d) reorganized the abort-startup code so that it is simpler, smaller, and
  37.       fixed a bug involving Audio.device not being closed.
  38.    e) Got a bunch of stuff (like message ports & messages, and the title of
  39.       the window, gadgets, etc...) off the stack and into mem that is
  40.       guranteed to be PUBLIC (the stack is not allocated in PUBLIC mem!).
  41.    f) some mem wasn't being freed on shutdown (256 bytes worth); it is freed
  42.       now.
  43. 8) CON and NEWCON support some formats in the window definition string of
  44.    which I was not aware; there are "default" positions and sizes, i.e.
  45.    `NEWCON:////' is legal, and SPHINX now understands SPHINX:////. In
  46.    addition, since in WB2.0 there can be further parameters beyond the window
  47.    name, SPHINX does not understand them (because as of I now, I don't know
  48.    what they do), but does strip them off when it sets up the window's name.
  49. 9) I am not sure, but I think that in v2.5a the deferment of the cursor was
  50.    not enabled because some debugging code was left.
  51. 10)Fixed two bugs involving empty saves. One involved scrolling backwards
  52.    over empty input saves when there was nothing above these saves. The
  53.    other happened when all the packets between two input saves ended up
  54.    compiling to nothing (SPHINX found no characters it wished to save--all
  55.    just unknown control codes); then the list of saves was corrupted, and
  56.    any sort of crash was soon to follow (usually just Odd Address, but...).
  57. 11)Changed the SPHINX guru displayer so that it used AutoRequest() instead of
  58.    DisplayAlert(), so it is much less jarring. Note however that an
  59.    AutoRequest() can still end up as an alert if, say, there is not enough
  60.    memory to do the whole window thing.
  61. 12)Changed C-S to SC-S, and renamed it defer-scrolling. Assigned C-S to toggle
  62.    stop-output. C-G and C-Q both restart output and un-defer scrolling.
  63. 13)Changed written text interpretor so that it handles ESC & CSI sequences
  64.    better, and so that it correctly strips DCS,OSC,PM & APC sequences and SS2
  65.    & SS3.
  66. 14)Now ARP.library pattern matching can be used to search for old input lines.
  67.    Using a wildcard character in the search string causes the arp.library to
  68.    be searched for, and if it is found then wildcard pattern matching is used
  69.    to search, and the case sinsitive/insensitive still applies (all uppercase
  70.    means case insensitive)
  71. 15)Found some code which claimed to do dead keys, spent some time finding out
  72.    just what it did (I can't read Pascal very well), and then implemented it
  73.    in sphinx, and it works! To handle dead keys, when building an inputevent
  74.    out of the intuitionmessage set Class=IECLASS_RAWKEY,SubClass=0,Code=
  75.    im_Code,Qualifier=im_Qualifier,TimeStamp+TV_SECS=im_Secs,TimeStamp+TV_MICRO=
  76.    im_Micros,NextEvent=null,and, most important, Address=contents of the
  77.    address pointed to by im_IAddress. I don't known what it points to, but
  78.    there is something there which makes the dead keys work.
  79. 16)RA-C now opens a configuration window in which the settings of the SPHINX
  80.    are reflected and may be changed.
  81. 17)SPHINX now understands the window bounds report request CSI (CSI0 q), so
  82.    now programs like LS work as they did in a CON/NEWCON window: i.e. LS
  83.    now prints out using multiple columns.
  84. 18)Write() compiler now handles SGR22,23 and 24 (Bold,Italics,Underline off).
  85. 19)When interpreting an SGR the order in which the arguments are acted upon
  86.    now matches that of CON/NEWCON; from left to right. (so CSI0;32;43m will
  87.    end up with normal text in color 2 on color3, instead of normal text in the
  88.    normal colors)
  89. 20)Using RA-C when the config window is already open brings it to the front and
  90.    activates it.
  91. 21)The faked coniorequest and conunit which are returned in a DiskInfo() call
  92.    had a bug in them: the io_Unit was not pointing to the conunit; this is
  93.    fixed and now some programs are actually fooled!
  94. 22)Added non-blocking-typeahead mode where typing ahead does not block output
  95.    to the window.
  96. 23)RA-B causes the bell to be rung (or, if there is no bell file, the screen
  97.    to be flashed) the next time a read packet is recieved and there is nothing
  98.    to give it. It can be canceled by going to the RA-C configuration window.
  99. 24)RA-R and SRA-R cause, if it is not already there, an arp file requester
  100.    to pop up. When a file is selected, if RA-R was last pressed, just the
  101.    filename is inserted; if SRA-R was last pressed, the whole path & filename.
  102.    RA-R & SRA-R may be pressed (in the SPHINX window) while the file requester
  103.    is visible; SPHINX just does the insert when the file requester returns,
  104.    but in the mean time continues to run.
  105. 25)RA-W searches back in all text for the next word which starts exactly like
  106.    the word to the left of the cursor, and if it finds one, finishes the word
  107.    under the cursor; can be hit multiple times. This is called wording.
  108. 26)RA-X/Undo cancels wording if wording is the state you are in.
  109. 27)The word left & right routines (A-LEFT & A-RIGHT) now stop at the end of
  110.    words too-this is a better implementation since the end of the word is
  111.    where you are headed for as often as not.
  112. 28)When the iconize gadget is pressed (or RA-Z), instead of closing the
  113.    window right away, I set a flag to pend the operation until all the other
  114.    messages in the window's port have been handled. That way if the SPHINX
  115.    is doing something, and you press RA-Z, and then, since the wd has not
  116.    gone away yet, you type some other stuff, it is recieved by SPHINX.
  117. 29)S-UP and C-R do not repeat at all.
  118. 30)Played with word right & left again. Now if we are thinking of stopping at
  119.    the end of a word there are some conditions under which we do not. First if
  120.    the start of the next word to the right is one non-word character away from
  121.    the word to the left, then we go on to the next start of a word, in the
  122.    direction we where headed in the first place. Secondly if we are headed
  123.    towards the right and distance we have crossed was one character wide, then
  124.    we keep on going to the start of the next word to the right. Don't worry
  125.    about trying to memorize this-it is easier to watch the cursor move and
  126.    stop when it gets clossest to where you wish it to be.
  127. 31)Changed copyright notice so that it contained both `(c)' and the word
  128.    `copyright', as a good copyright notice should.
  129. 32)Global toggle added so that you may tell SPHINX not to try to open
  130.    arp.library if you don't like those alerts in WB2.0.
  131. 33)SRA-I now first pops up an arp file requester which shows the default
  132.    insert file, and you can specify any file you like, or cancel the
  133.    insertion.
  134. 34)Added ARP call to SPHINXConfig (it doesn't need arp.library, but it is
  135.    nicer if you have it); now when you click on the filename gadget, if arp
  136.    could be opened you get an arp file requestor.
  137. 35)Made SPHINXConfig more robust about error recovery. Now if it is given a
  138.    file to load which exists but which is not a SPHINX config file, it
  139.    changes filename, but does not change the gadgets, and does not lock up!
  140. ---
  141. In progress:
  142. 1) Finishing the config window. Most of all, put a [Save Config] gadget and
  143.    get rid of SPHINXConfig completely.
  144.    All that would be needed would be a little program which converts a 2.5
  145.    config file to a 2.6 by adding in the new fields.
  146. ---
  147. To be implemented/ideas (maybe):
  148. 1) When a word is grabbed w/ double-click, while the second click is held
  149.    down, leave the word inverse-videoed so that the user can see what he is
  150.    clipping. And while the lmb is down, clicking the rmb cancels the clip.
  151.    This rmb cancel should work w/ any clipping, really.
  152. 2) Have some way of opening the intconfig window using only the mouse, since
  153.    you may be about to grab the mouse to change something in it anyhow.
  154. 3) Some sort of "on-line" help.
  155. 4) Go back and work on letting the user type into the main wd from the config
  156.    wd & the RA-O no-refresh-message problem.
  157. 5) If clipping by dragging the mouse, can clip either just a part of a line,
  158.    or, if you move to other lines, can clip the whole set of lines, and the
  159.    window scrolls to help you do this.
  160. 6) Alt-up/down,Ctrl-up/down work while mouse is being held down for a
  161.    multi-line clip.
  162. 7) Allow a string to be searched for in the outputed text
  163.    by having the user type the string in the input line, and
  164.    then press RA-S. The input line in seen as a pattern
  165.    "*inputlinetext*", and that includes ANY characters in the
  166.    input line
  167.    Window is scrolled so that, if the next occurance is not
  168.    yet visible, it is on the top line of the window, and a
  169.    little image of a hand/finger (get it from MD&D's menus) is
  170.    drawn pointing to the first character of the string, and in
  171.    sich a way that it does not go out of the bounds of the
  172.    window, so it can point either way, and also so that it does
  173.    not overwrite the string, it is pointing upwards so that the
  174.    wrist is below the string's first character.
  175.    When the hand is drawn, a flag bit is set, and the next
  176.    manipulation of the display causes the hand to be replaced
  177.    with the imagery that was drawn there before (which was saved
  178.    when the hand was drawn). Look into using the blitter's
  179.    animations/double buffering to do this.
  180.    To accumpany this, a new config option to set the color of the
  181.    hand, and the color of the border of the hand. These can be
  182.    any color (0-255), instead of just (0-7).
  183. 10)Change the extracharlists so that they can define other sets of
  184.    characters which also count as a word: so that [abc...xyz][012...789]
  185.    sort of thing could be done: `abcdefg' is a word, `01234' is a word,
  186.    but `abcd123' is two words.
  187. 11)Allow the user to chose what percentage of the screen to
  188.    scroll when the "half screen scrolling" is enabled, since
  189.    when a very tall screen a 50% scroll is quite a bit/most
  190.    of the time the bottom half of the screen is not used.
  191.    This is also good for those who want the speed-up but not the
  192.    extent of a half screen scroll.
  193.    Implement as % to scroll, min # of lines, max # of lines (and, of course,
  194.    Y/N flag) so that everyone can have their preference.
  195. 12)Change the SPHINX Open() string interpretor so that it understands or
  196.    at least strips off CONMAN style opens.
  197. 13)Understand at least some of the 2.0 flags and stuff in filename, at least
  198.    ACTIVATE/INACTIVATE, because that one can be a real nuisance, bot others
  199.    too if easy & possible.
  200. 14)While clipping with the mouse, do: RMB cancels clip. while the LMB is
  201.    held down, any "strange" IMMsg cancels the clip, but the keys `C', `P'
  202.    and `F' finish the clip and send it to the clipboard, private or file
  203.    respectively, irrespective of the state of the undo gadget.
  204.    Also think about what would happen if SPHINX was not able to run (WAITING)
  205.    when the user tried to do a clip. If the wd did not need to be scrolled,
  206.    would it all work out? That is, would the fact that the MOUSEMOVE flag
  207.    was never set not matter? SPHINX just looking at the XY in the LMB DOWN
  208.    IMMsg and the LMB UP IMMsg.
  209. 15)Think about rewriting the scroll gadget and the clipping routines so that
  210.    the loop goes back through Main_Loop so that the user can use all the
  211.    keys he is acustomed to during the scroll or clip w/o extra code for that.
  212.    This would mean getting rid of some optimizations but it might be possible.
  213.    (at a miminum forbid the freeing of anything during a clip or a scroll)
  214. 16)Add an option to the scroll gadget so that it scrolls you inside a subset
  215.    of the full list of saves (like just back to the last non-just-LF inputsave
  216.    for quick scanning of, say, the last `dir'. The way to do this is to have
  217.    the user hold down the SHIFT key when fiddling with the gadget to indicate
  218.    that he wants to look at just the last output.
  219. 17)Add the possibility of having a log file (would hold everything that was
  220.    entered or outputed in chronological order). Could either rewrite or
  221.    append the log file.
  222. 18)Except for the clip-file, when a file exists and you are going to rewrite
  223.    it, put up a requestor saying "File exists/[Cancel][Append][WriteOver]"
  224. 19)Have some sort of insert/typeover mode and toggle
  225. 20)Provide some way of a) entering an input line w/o having it ever be made
  226.    available-that is, it is just there for the history, and b) some way of
  227.    loading a history (This should be done both in startup, with a global
  228.    history file, and at any later time privately by going to Sphinx-Config
  229. 21)Have a flag in the config file which says "don't actually open the window
  230.    until something is read or written to it". It would work by saving the
  231.    open string, and when a read or write packet is recieved and wd_not_open,
  232.    would first simulate an open packet.
  233. 23)Have numerical string gadget to say what wd height to use when lying
  234. 24)Go back and add all this stuff to SPHINXConfig & the config file.
  235. 25)Have clipping mode "And To Clipboard" where any clips go to their usual
  236.    destination and also to the clipboard.
  237. 26)Let the user chose the clipboard unit read from & and clipboard unit
  238.    written to both for the "& to Clipboard" and the explicit to clipboard
  239.    clip.
  240. 27)SRA-F should first put up a requestor which does not put SPHINX to sleep
  241.    explaining what is going to happen if the user says OK. Since SPHINX is not
  242.    asleep the user can reposition the top line and spot10 before saying OK,
  243.    or can cancel if a mistake was made.
  244. 28)Add toggle `Spot-10 Defined' so the user does not have to remember A-F10.
  245. 29)The insert filename ((S)RA-R) should first try to use the req.library
  246.    since its requester is better than arp's, and would permit more complicated
  247.    insertions (multiple filenames for a delete, for example).
  248. 50)Add ExtraUserWordWordChars to the configuration file (and make it v2.5)
  249.    and change RA-W code so that the extra chars are used.
  250. 51)Add Sphinx Alerts all over the place (especially for AllocMem: in fact,
  251.    maybe have a second Alloc_Mem call which shows an Alert if it is not
  252.    successfull).
  253. 52)There is going to be a problem with changing a global var like fgb_NoArp
  254.    since other SPHINXs aren't going to update their config wd's when they
  255.    aren't the ones who toggled it. Is a global list of all SPHINXs in order?
  256.  
  257. ------------------------------------------------------------------------------
  258.  
  259. New in version 2.5a from version 2.4b (in the order implemented)
  260. NOTE: Because it is just about to evolved into two independant things, the
  261. term grabbing is now replaced by two different terms, clipping or inserting.
  262. 1) When a window is iconized for the first time, the iconized window opens
  263.    where the main window was when it was iconized, not where the main window
  264.    opened. After that the iconized window opens were the iconized window was
  265.    closed, like before.
  266. 2) SRA-[ and SRA-] now also do WindowToFront/Back, for those moments when
  267.    you cannot bear to lift the shift key.
  268. 3) RA-O opens the window to the full size of the screen (but does not change
  269.    its depth arrangement), or, if has already been opened with RA-O, shrinks
  270.    it back down to its pre-RA-O size and position.
  271. 4) Changed wording of Sphinx alert from `Cancel' to `Continue', and from
  272.    `guru' to `alert'.
  273. 5) Changed size of icon file for SPHINXConfig to about half previous size.
  274. 6) Changed SPHINXConfig so that it checks/alters Minimum Write Buffer Length
  275.    before it saves it, so now if you reload that config file, your value
  276.    may have been adjusted.
  277. 7) RA-I inserts from the clipboard.device unit 0 to the input line.
  278. 8) Changed Write() handling code so that characters between $80 and $80+' '
  279.    are stripped out.
  280. 9) Fixed bug in bell file loading code. Now when the bell file cannot be
  281.    found you don't get an alert and then window closing, but rather, as
  282.    the docs say (and said), I use DisplayBeep() instead.
  283. 10)Changed insert_n_chars_into_inputbuffer routine so now if the string
  284.    won't fit, as many characters as will fit are inserted. This effects
  285.    all insertions (typed text, from clipping, clipboard or file).
  286. 11)Fixed bug in which the last character of the first window line of an
  287.    input line was sometimes not being drawn by some of the text drawing
  288.    routines.
  289. 12)Changed deiconizing routine so that if you want to deiconize with a key-
  290.    stroke it must be a keystroke that produces a (or some) characters in
  291.    the default keymap; just hitting the shift, alt, amiga, ctrl, or caps
  292.    keys won't deiconize the window.
  293. 13)Clipping can now also go to the clipboard (so that programs like Snap
  294.    can use it), or to a file, and that file can be either appended or
  295.    rewritten.
  296. 14)To go with new clipping modes, RA-G has been changed: now, if you start
  297.    out in private clipping, successive presses of RA-G cycle through (one
  298.    time clipboard clipping),(one time file clipping) and (private clipping).
  299.    Successive presses of SRA-G cycle through the same things in their locked
  300.    versions (of course, locked and "one time" private clipping are the same
  301.    thing).
  302.    If you in a locked clipping mode, once you have clipped, the next time
  303.    RA-G or SRA-G is pressed, you go back to private clipping. Then, from
  304.    there, you start cycling through as usual.
  305.    NOTE: there is no longer such a thing as global grabbing-that is now
  306.    achieved by clipping to either clipboard or file, and then, in the
  307.    destination window, inserting from either clipboard or file.
  308. 15)RA-X and UNDO no longer cancel the clipping mode, only (S)RA-G does this.
  309. 16)New Config options: file name to clip to, from, inital clipping type
  310.    (private|clipboard|file), and initial dest file mode (rewrite|append).
  311. 17)RA-P and a config option specify whether inserted text should be inserted
  312.    as literal characters or parsed. Thus you can form simple (no ifs, loops,
  313.    etc...) macros by asking that a file containing the commands in the macro
  314.    be inserted and parsed. When parsing an insert, CR = LF = enter line and
  315.    make it available to caller (Read()).
  316. 18)Made undo gadget imagery changing routine safer. (used RemoveGadget &
  317.    AddGadget before and after change)
  318. 19)Fixed bug in my msgport w/ sigbit initializing routine in which the
  319.    msgport's list was not being correctly initialized to empty. I don't
  320.    know why this did not cause crashes earlier, because this is rather a
  321.    nasty mess, but, oh well, it's fixed now.
  322. 20)Set up a work around of a problem in C='s dos.library by setting up,
  323.    for each SPHINX window, a second task caller SPHINX.doscaller.v2.5a which
  324.    calls dos.library for the SPHINX task when before SPHINX was doing so
  325.    itself. The reason I have to do this is 1) the dos.library calls are
  326.    synchronous calls, they use the pr_MsgPort to wait for and receive
  327.    replied packets from the dos device to whom we are talking. In SPHINX,
  328.    since SPHINX is also a dos device, messages from other programs to SPHINX
  329.    also arrive at this same port. If this happens while SPHINX is itself
  330.    inside a dos.library call (or if there is already a message/packet waiting
  331.    at that port) then the dos.library call find that one, realizes it is not
  332.    the message/packet which it sent, and goes to an AsyncPacket GURU. I
  333.    do not see how to use pr_PktWait since I do not know what packet I/
  334.    dos sent, and therefore should be waiting for; I see no way of distin-
  335.    guishing between the replied packet and the packets comming from other
  336.    tasks talking to us. This task is also used for OpenLibrary and OpenDevice
  337.    when C= has not promised that the devices will be in ROM (like clipboard-
  338.    .device)
  339.    NOTE: this is really simple to solve, but C= has to do it, since all that
  340.    code is in ROM. All they have to do is do like DoIO: WaitPort(port), look
  341.    for the expected msg, if there, unlink it and exit, restoring the task's
  342.    signals to reflect whether any msgs arrived to that port which were not
  343.    dos's and/or whether the sigbit for that port was already set, else
  344.    Wait(port's sigbit) again....
  345. 21)RA-A will insert the last clipboard or private insertion again. This saves
  346.    you from having to go back and find the text again if you have moved, or
  347.    from having to not put anything in the clipboard. This is done by saving
  348.    the inserted text when it is inserted the first time, so even if the
  349.    privately clipped text has been freed, or the clipboard file has been
  350.    changed, this still inserts what was last inserted. File insertions are
  351.    not saved by SPHINX for RA-A because of the next change...
  352. 22)The insertion of a file is handled by a seperate task (SPHINXFileInserter)
  353.    so that the rest of SPHINX does not go to sleep while the insertion is
  354.    taking place; the insertions looks just as if you are typing the lines in,
  355.    except that those lines do not get in the way of any lines which you might
  356.    be typing in: you can scroll the window, clip from or to it, type in stuff,
  357.    etc... while the insertion is taking place. What's more, you can start an
  358.    insertion, use RA-C and change the insert file, and hit SRA-I again, and
  359.    change the insert file again, and use RA-P to toggle parsing on or off,
  360.    and hit SRA-I again... as many times as you like and all these file insert-
  361.    ions will be performed sequencially each from the insertfile which was
  362.    defined and the parsing/no parsing mode active when SRA-I was hit.
  363.    This is not much of a big deal when you are inserting a small, quick file,
  364.    but if you are inserting with parsing from, say, a SER: or AUX: sort of
  365.    device, you can now manipulate the contents of the window while the
  366.    insertion is taking place, and this insertion may actually never end
  367.    (if the insert device or file never returns an error or eof), and you
  368.    can still use the SPHINX window as your own. Does this give you any ideas?
  369. 23)Fixed bug in the undoing of an A-DEL. Sorry about the characters comming
  370.    out in the wrong order; just a little bset that should have been a bclr.
  371. 24)Added support for ACTION_UPDATE packets, since I now know what they are.
  372.    Sphinx now reacts to ACTION_UPDATE just like ACTION_FINDINPUT or OUTPUT.
  373. 25)C-B now always cancels the search and restores the input buffer, so it is
  374.    no longer equivalent to S-DOWN, but rather to the C='s shell's definition.
  375. 26)SPHINX now works a little bit better with programs who ask for DISK_INFO;
  376.    it now builds a fake console unit structure for the callers.
  377. XX)C-S sets a flag which disables the automatic scrolling of the window when
  378.    when the cursor goes off the window. This is usefull when, say, you are
  379.    running a program which i outputing a lot, and you are reading some stuff
  380.    which it printed at the top of the window while it is just about to fill
  381.    the window and cause the window to scroll. By pressing C-S before this
  382.    happens you keep the window from scrolling (when you want to see the text
  383.    which would have caused the scrolling, just    A or C or S-DOWNARROW. This
  384.    flag is canceled by entering a line (RETURN,ENTER,C-J,C-M,C-\) or S-DOWN.
  385. 28)C-G manually cancels the scroll lock
  386.  
  387.  
  388. New in version 2.4b, from version 2.4 (in the order implemented):
  389. 1) Fixed bug in the font finding code. If you don't specify a font in the
  390.    configuration, SPHINX now really doesn't display an alert.
  391. 2) Changed AutoCanceledGlobalGrabbing so that it no longer is a config
  392.    option, but instead is selected by you in the same way that Literal
  393.    or LockedLiteral is selected; by using either RA-G (cancel after this
  394.    line) or SRA-G (locked). This does not make the 2.4 config file
  395.    incompatiable, but it does get rid of that flag in SPHINXConfigv2.4b.
  396.    Feed Sphinxv2.4b a v2.4 config file, and that option is ignored.
  397. 3) Fixed big bug! When a line with a change of text style (SGR) in the
  398.    middle of it was written to the window, and that line did not end with
  399.    a CR or LF, but rather was part of a larger line, then the cursor was
  400.    being misplaced after that line was written, and later characters,
  401.    which start being drawn at the cursor, would write over previous text.
  402.    When that line was redrawn later (due to scrolling, etc...) the text
  403.    came out correctly. This is fixed (just needed a little bcc.s in the
  404.    right spot).
  405.  
  406. NOTE TO THE ANNOYED:
  407. If you have some scripting stuff that talked to a SPHINX window, and it
  408. no longer works because I have changed the clipping/inserting completely,
  409. I can only say I am sorry, but that is why I do not ask for money--so that
  410. I can make mistakes and fix them cleanly, instead of using some backwardsly
  411. compatible kludge I would feel abligated to use if money was involved.
  412. If you really need your scripts that only work with an older version then
  413. you can have different versions of SPHINX in your machine at once. To do
  414. this, you have to rename the different version handlers to different names,
  415. change the configuration file names, the Mount in the startup sequence, and
  416. make different entries in the Mountlist, just as you would to have two
  417. differently configured but same version SPHINXs. And in the Mountlist
  418. entries, use different names and, unlike with differently configured same
  419. version SPHINXs, USE THE HANDLER CORRESPONDING TO THE VERSION YOU DESIRE.
  420.  
  421. ------------------------------------------------------------------------------
  422.  
  423. New in version 2.4, from version 2.3 (in the order implemented):
  424. NOTE: those changes numbered with an X no longer apply to v2.5
  425. X) Global grabbing from any SPHINX window to any other with RA-G.
  426. 2) New config option (yes or no) to allow stripping of CR, LF or FF from
  427.    the end of a grabbed line, and another having to do with global grabbing.
  428. 3) Bell files can be shared between any SPHINXs.
  429. 4) Duplicate input lines are not shown when searching back with S-UP,UP and
  430.    DOWN. You only see the newest version.
  431. 5) RA-] and RA-[ move the window to the front and back respectively.
  432. 6) Code that is used only once is freed when it is no longer needed. This
  433.    saves about 2 to 18K, depending on how much can be freed.
  434. 7) The little `10' that used to appear only over the `X' when spot 10 was
  435.    defined now appears no matter what background letter is displayed.
  436. 8) The comparison of old input lines (S-UP) can now be case sensative or case
  437.    insensative, depending on whether the search string is all uppercased or
  438.    not. This effects all the comparisons.
  439. 9) Bug in SPHINXConfig involving the blanking out of the Save gadget is
  440.    fixed.
  441. 10)Bug in SPHINX involving extra memory not being freed upon startup is
  442.    fixed.
  443. 11)User configurable input strings can be tied to C-Fn for quicker access to
  444.    common input lines.
  445. 12)If there are differently configured SPHINXs around, all but one (the first
  446.    loaded) free most of themselves (all but about 500 bytes) and use the code
  447.    of the first. This saves a lot of memory when using differently configured
  448.    SPHINXs. Because of this, much of the startup code has been rewritten, so
  449.    any old bugs there may be gone (replaced no doubt by new ones). While I
  450.    was at it, found bug in the error recovery code and fixed it.
  451. 13)New keystroke SRA-F (Shift + Right Amiga-F) which frees all memory that
  452.    can be freed. Now you dont have to hold down RA-F if you want to free
  453.    everything.
  454. 14)Only the very first SPHINX window prints out the startup message, instead
  455.    of every first differently configured SPHINX's window.
  456. 15)Bug in editor in which when exiting search mode the cursor could exit the
  457.    window without the window being scrolled is fixed.
  458. 17)New config option InputTxtColor (1 through 7) choses the color with which
  459.    to draw the input lines, so that they may be differentiated more easily
  460.    from written text.
  461. 18)The fragment comparison is completely rewritten, so all old bugs are gone
  462.    (and some new ones probably introduced) (actually the new code is much
  463.    simpler than the old, so I have more hopes in its being bugless than the
  464.    old.) The new code now does exactly what the DOCS describe, and is much
  465.    faster than the old.
  466. 19)The don't-repeat-a-key routine is changed so that a key that is not sup-
  467.    posed to repeat does nothing at all if the key has been released, instead
  468.    of doing whatever action was assigned to that key one last time.
  469. 20)Bug involving the undo buffer flags not being canceled when the cursor
  470.    is moved with the mouse is fixed.
  471. 21)New key stroke SRA-L (Shift + Right Amiga-L) which toggles the literal
  472.    trigger like RA-L, but when the trigger is set by this keystroke it is
  473.    not automatically canceled by useing it; this key locks the literal
  474.    trigger until it is cancel manually, allowing you to type a large amount
  475.    of text that involves characters that would have required reloading the
  476.    literal retrigger a good deal by just setting the trigger once with this
  477.    key, typing the text, and then unloading it with SRA-L (or RA-L, or UNDO).
  478. 22)The drawing of text has been changed so that lines that contain a lot of
  479.    low valued characters ($05 to $19) are drawn at full speed, instead of one
  480.    character at the time. characters $00 to $04 are still drawn one character
  481.    at a time, but that is because of the way they are stored internally.
  482. 23)Bug in keyboard handler which took 40 bytes from the stack when a key
  483.    returned a too long string is fixed.
  484. 24)If you are searching, but have scrolled so that the cursor is no longer
  485.    visible, when S-DOWN is pressed, instead of canceling the search, the
  486.    window is scrolled to make the cursor visible.
  487. 25)Internal change makes writing text to SPHINX faster. This has turned out
  488.    to be a large rewrite.
  489. 26)Bug in which when the upper left character was in the input buffer, and
  490.    the window was resized, the cursor ended up at the wrong place has been
  491.    fixed.
  492. 27)Bug involving the input buffer characters being drawn in italics, under-
  493.    lined, etc... when the input and write fonts were the same font is fixed.
  494. 28)Bug in which if the SPHINX was occupied doing something else, a single
  495.    lmb click could leave you stuck in the grabbing mode until you did some-
  496.    thing else is fixed.
  497. 29)The window now scrolls continuously when the scroll gadget is moved,
  498.    which makes it much easier to find the text you seek.
  499. 30)A multiplicity of bugs that occur when the upper left character is in the
  500.    input buffer, and the cursor is out of sight above the window, and the
  501.    input buffer is edited have been fixed.
  502. XX)Various parts of this file have been edited for, I hope, greater clarity,
  503.    or to add new features. This list and SECTION V are the only places any
  504.    reference to the v2.3 are made. The rest of the file can stand alone as
  505.    the DOC for v2.4.
  506. 32)PowerPacker was never usable on SPHINX. That was a misconception of mine
  507.    that crept into the DOC file and was never deleted. (the problem is that
  508.    the second time the code is run, PP's decoder is still there, and tries
  509.    to decompress the decompressed code, which leads to garbage)
  510. 33)The v2.3 icon (SShell.info) made reference to AShell (Arp's Shell). It now
  511.    makes no reference at all, and must be edited before it can be used. (See
  512.    setup instructions)
  513. 34)Some internal changes in SPHINXConfig have made it more usable, and you
  514.    now can specify an initial filename if you start it from a CLI.
  515. XX)SPHINX now tries to open the arp.library when it is needed, not at start-
  516.    up. This solves the problem of having to cancel an alert telling you
  517.    that SPHINX wanted arp.library in WB2.0 when SPHINX was started. Now if
  518.    you never (try to) do a wildcard comparison, then SPHINX never looks for
  519.    arp.library. (Like the bell files, the arp.library pointer is shared
  520.    between all SPHINX's, so only one SPHINX needs to open it, or only one
  521.    needs to try and fail)
  522. 36)If the lnheight supplied in the config file is too small for the fonts
  523.    SPHINX is actually going to use, then it is automatically increased.
  524. 37)Fonts must, in addition to the older criteria, have a non-zero width.
  525. 38)Added alerts to SPHINX so that using the chart in SECTION I you can find
  526.    out why SPHINX refuses to run on your system, which gives you some chance
  527.    of correcting the error.
  528. 39)BS, DEL, A-BS and A-DEL do not repeat after being released.
  529. 40)Improved an achiles heel of SPHINX: when the iconized window cannot be
  530.    opened, it now alerts, then waits 2 minutes and tries again, giving you a
  531.    chance free some memory.
  532. 41)Added file SShell to package so that workbench can be used to manipulate
  533.    SShell.info.
  534. 42)Bug in which if the user's font cannot be used, it is not closed
  535.    (CloseFont()) is fixed.
  536. 43)Bug in the testing of the font to see if it is proportional or not is
  537.    fixed.
  538. 44)Bug in the testing of the memory font to see if it is exactly what was
  539.    requested is fixed, so that now if in the machine you have a font of the
  540.    desired family, but not the desired height, the font is looked for on disk
  541.    instead of the wrong-height version in the machine being used.
  542. 45)No key is allowed to repeat after it has been released.
  543. 46)Bug in which when the input font was not square (font height = font width)
  544.    editing the input buffer when it covered only one line made a mess visually
  545.    is fixed.
  546. 47)Iconizing routine changed so that the iconized window is made active only
  547.    if the main window is active just before it is closed, and the main wd is
  548.    made active when it opens only if the iconized window was active (it might
  549.    not have been if the main window reopening was forced because of a DiskInfo
  550.    packet).
  551. 48)The Free-A-Save routine (used by the automatic memory use limiter and RA-F)
  552.    is changed so that it always frees the whole set of blocks of text between
  553.    the input lines, even if there is more than 32K of text. And the write
  554.    save counting routine has been changed so that all that text counts as
  555.    only one save.
  556. 49)Write save compression/optimization is gone. It has been replaced with a
  557.    new config line, the minimum length of the write buffer, and new code. Now
  558.    the written text goes into a buffer until the buffer is full or a new
  559.    input line is added.
  560. 50)Dropped the idea of using the arp.library for a comparison for two reasons:
  561.    the arp.library's compare was slow, and the fragment comparison takes care
  562.    of the most common use of the wildcards, the xxx*yyy*zzz or xxx#?yyy#?zzz
  563.    sort of comparison. Due to this, the config file has the wildcards line
  564.    removed, etc....
  565. 51)Replaced the wildcard line in the config file with a new option: the
  566.    minimum number of characters - 1 the search string must have in order for
  567.    the fragment comparison to be attempted.
  568. 52)More speedups and optimizations have now made SPHINX's speed comparing to
  569.    or even greater than NEWCON's.
  570. 53)The (re)drawing of the cursor is now defered internally until the SPHINX
  571.    has nothing else to do (about to call Wait()). This makes SPHINX faster
  572.    when the program talking to it talks quickly and asynchronously. It
  573.    also, in a strange reversal of the expected, sometimes makes SPHINX faster
  574.    when you reduce its priority, because since the program sending the
  575.    packets can make the next packet before SPHINX would go to sleep, so the
  576.    cursor is not drawn and then erased until all the data is written. This
  577.    is a help with some terminal programs, which, due to their nature,
  578.    communicate asynchonously with SPHINX.
  579. 54)New Config option allows the window to be scrolled half its height instead
  580.    of just enough to bring the cursor into sight after new text has been
  581.    drawn (Write()) and the cursor has gone out of sight. This speeds up text
  582.    output because of the reduced number of scrolls that have to take place.
  583. 55)Changed the auto-save freeing so that empty input saves are freed first,
  584.    then duplicate ones, and only after these have been finished, are unique
  585.    input saves freed. Also changed the way write saves are freed, all those
  586.    between two input saves (or the top and an input save) are freed as a
  587.    block. And input saves cannot be freed unless they are above all write
  588.    saves.
  589. 56)SPHINXConfig is compressed since it contains a lot of zeros, but not in a
  590.    pattern such that a BSS hunk can be used.
  591. 57)Changed word left or right routines so that they stop with the cursor at
  592.    the beginning of a word, like most other word left/right routines.
  593. XX)Added code to window opening routine so that it moves or shrinks the new
  594.    window if it is not going to fit in the screen where it is. This can only
  595.    happen if the workbench screen can be found before the window is opened,
  596.    and the screen structure has not ever moved, so that if they are multiple
  597.    wb screen, like a certain PD program allows you to have, then this is
  598.    disabled rather quickly.
  599. 59)Changed delete word right or left routines so that the first non-word
  600.    character is no longer deleted.
  601. 60)Added support for C-J, so now multiple input lines can be entered and
  602.    visually seperated without making them available to Read().
  603. 61)Bug in which when searching, the input save you are looking at, or one
  604.    below all this can be freed is fixed.
  605. 62)Rewrote keystroke parser so that keys that return a string that is
  606.    really several commands in one (the default keymaps dont have this, but
  607.    anyone can edit/create/use a custom keymap that does do this) are handled
  608.    correctly. This also ended up making that hunk smaller, since the keyboard
  609.    decoding routine was becoming spaghetti code (is there any language/organ-
  610.    ization that makes the interpretation of an ascii command string elegant?).
  611. 63)Changed C-X routine so that if the cursor is not at one of the ends of the
  612.    inputsave, then the old undo block is erased before the new characters are
  613.    added to it. This way when you undo after a C-X, there is no garbage.
  614. 64)Changed keystroke handler so that anything SPHINX does not understand ends
  615.    up in the input buffer, instead of some stuff (like HELP) being ignored
  616. 65)Height of iconized window is topborder-1 of main window, or 4, whichever
  617.    is larger.
  618. 66)Once the first window is opened, and so therefore two fonts have been
  619.    found somewhere, the user no longer gets font related alerts from another
  620.    SPHINX that has the same configuration except the topaz font alerts,
  621.    which are fatal (to that SPHINX, not the system, of course).
  622. 67)Changed delete word routines, A-BS & A-DEL, so that they delete nothing to
  623.    the wrong side of the cursor. This, incidently, also fixes the bug in
  624.    which the undo buffer recieved characters in the wrong order if, after
  625.    some other deletions, a word deletion is started in the middle of a word.
  626. 68)Fixed bug in which when the last text consisted of an input line and the
  627.    input buffer, with nothing in between, then clicking just beyond the end
  628.    of the input line moved the cursor in the input buffer to the first
  629.    character instead of starting a grab
  630. 69)Bug in which the cursor, characters etc... end up at the wrong character
  631.    position in the input buffer when there is no write save between it and
  632.    the right edge is fixed.
  633. 70)Changed the whole format of the config file so that most of the work is
  634.    done by SPHINXConfig instead of SPHINX. This makes SPHINX and the config
  635.    file smaller. It also makes the v2.3 file completely incompatible with
  636.    everything. However future versions of SPHINXConfig should be able to read
  637.    in v2.4 config files for conversion to the higher version, since the file
  638.    now starts with a long word version identifier ('SPX'<<8+$24).
  639. 71)Added config options to give the iconized window front-to-back gadget(s)
  640.    and make it automatically go to back after it is opened.
  641. 72)Added config option to have the window, when the cursor scrolls off the
  642.    window because the cursor moved back or forth in the input buffer, be
  643.    scrolled enough so that the the cursor is centered, instead of just in
  644.    sight.
  645. 73)Changed startup code so that if the long startup fails, it is tried again
  646.    if SPHINX is started again, and got rid of the self modifying code.
  647. 74)Changed the routine that changes the imagery of the undo gadget so that if
  648.    you are clicking on it at the moment it is changed, or you have resized
  649.    the window, it is drawn correctly (used RefreshGList() instead of
  650.    DrawImage()).
  651. 75)Changed keystroke interpretor so that keys that I map beyond the capabi-
  652.    lities of the ansi ascii I interpret at the raw key code stage (Fn,BS,DEL
  653.    and ARROWS) However, if their key codes appear in a string of another key,
  654.    that still works.
  655.  
  656.  
  657.