• Andrew Hodgkinson's avatar
    By request, an intermediate 2.06 check-in. This is not a "proper" release and... · 334a6d84
    Andrew Hodgkinson authored
    By request, an intermediate 2.06 check-in. This is not a "proper" release and will need some Makefile fiddling etc. to swap between JavaScript and standard builds and so-forth. The Resources files are not all up to date; only Phoenix and the testbed Browse are more or less current. Right now,
    
    JavaScript doesn't work, SO COMPILE IT OUT. But to make a JavaScript build
    for a larf -
    
     * Build JSLib and NSPRLib. Recommend you leave -DUSEMEMLIB in there (as
       used by default) so you can watch it leak into a dynamic area... :-)
       If you do this, you'll need to build MemLib too, of course. If you
       do NOT use MemLib, *undefine JS_USING_MEMLIB in Main.c*!
     * Run !MkClean
     * Add -DJAVASCRIPT to DFLAGS in MakeFile
     * Strip dynamic dependencies from MakeFile
     * Rebuild Phoenix or the Desktop build of Browse
     * In the exported copy, increase the !Run file WimpSlot value; either
       use the appropriate symbols table in 'syms' or use about 960K for
       non-debug, 4600K for debug builds.
     * If the exported copy has an About resource, edit the HTML file inside
       and uncomment the line about JavaScript.
     * Reverse most of the above to rebuild a non-JavaScript copy! :-O
    
    I hope to have much of the above automated soon (either by a new target,
    or preferably hackery with the MakeFile).
    
    Here's the change list:
    
    References to 'Phoenix' removed from Ursula build Res file Choices dialogue
    help text (only a couple of them). Cookie value display made taller in the
    Cookie Query dialogue (prompt field shrunk to accommodate this).
    
    Yikes - ever since markers, "reformat page to fit paper" hasn't done
    anything when printing; the reformatter reset the HTML page limits to
    the window size at startup! Fixed. Using markers, you can now also reformat
    from the top of the visible area and still reformat to fit the paper; the
    print dialogue used to grey out the reformat option in this case. It still
    does this when printing to the bottom of the visible area, though.
    
    You can drag text files to form writables (single and multiple line,
    but NOT password items (deliberately; it's trivial to add this but I
    think it'd be a bad idea)). Normally, data is appended up to the limit
    specified by the field (unlimited for multiple line items). Holding
    down Ctrl replaces the current value entirely (still, again, limited
    by maximum field length). The caret is moved from wherever it currently
    is and placed at the end of the added data. Note that you *cannot* insert
    in the middle of text by placing the caret and dropping.
    
    Things can get distinctly sluggish when you start dragging many Ks of
    text file into a multi-line writable, so the keyboard buffer is cleared
    for any input code < 32, equal to 127 (backspace - this one is a little
    less clear cut, but I think it's probably worthwhile) and anything
    > 255. This way, when typing, you don't lose characters; but when moving
    around, you don't find the cursor "running away" from you.
    
    Multi-line writables (text areas) would redraw a vertical column taller,
    or horizontal column wider than the element covers itself should the
    user scroll enough in any one direction (e.g. Ctrl+Up or Ctrl+Down to
    go to the top or end of the area). The code working out how much of
    the area to redraw by the number of lines or columns moved didn't ensure
    it kept within the area. Because an update rather than force redraw is
    done, with background blending turned on text around the area would
    "thicken". Now fixed.
    
    Form menu entries have (at long last) a space appended to each one, so
    the Wimp doesn't get confused and think something is a keyboard shortcut
    when someone expresses "Formula 1" as (say) "F1"... Now fill in the menu
    width entry from having read the actual VDU character width and spacing,
    not that anyone uses the original RO 3.1 Wimp with Browse any more! (The
    code existed elsewhere anyway, so it was trivial to add).
    
    Ctrl+U in a multi-line writable clears the contents of the line the caret
    is on, but doesn't delete the line itself. Ctrl+J now does this.
    
    DDFLAGS doesn't set ALIAS_URLS - Customer build has this now.
    
    Tiled images were being plotted in the wrong place in some modes (a '+4'
    in the starting y coordinate calculations in the three filler / tile
    functions should have been '+wimpt_dy()').
    
    MessageTrans lookup buffer extended from 256 to 320 bytes (Limits_Message
    in Limits.h), mostly to support Messages files alterations for the About
    page.
    
    Spelling error in URI handler menu for Desktop (also known as Ursula,
    though this is now something of a misnomer) build corrected. There was
    a missing 'l' in 'handler'). StartProxy setting in Choices was 'no' and
    is now 'yes'.
    
    Downloading files of sizes over about 20Mb would cause an overflow in
    the % calculating code ("(fetched * 100) / file_size" as opposed to
    "100 * (fetched / file_size)" with (float) and (int) casts as required.
    Percentages now shown to 1dp; Mb displays to 2dp where the file size is
    not known.
    
    Download speed is now indicated in Small Fetch windows. Increased the
    delay between progress indicator updates as part of this, and modified
    Res files to cope (byte counter needs to be enlarged quite a lot). It
    isn't shown in normal browser windows because the enlarged byte counter
    looks daft in that context (normally, there's never enough information
    to fill even half of it).
    
    Adjust-click on an unlinked part of a client side image map could give an
    invalid object ID error from accidentally using the return value of a
    previous Toolbox call instead of the return result of a call to a fetcher
    routine - because given it had a NULL pointer for the URL, there was no
    such call made. Corrected in windows_create_browser() and
    handle_link_clicks() won't try to do this in the first place anymore.
    fetchpage_fetch_targetted() will also warn of such NULL pointers in
    TRACE builds.
    
    Submitting a GET form back to the same URL would lead to the query
    string getting appended to the fetch URL over and over. form_build_data
    now checks to see if there's already a query string in the submission
    URL for GET methods and if so, strips it. fetchpage_new_add will do a
    similar thing in the case of the additional data starting with '?'.
    
    When following a link, if RefoKeep was 'yes', the page could sometimes
    jump to a pre-stored scroll position; it was down to the resize routines
    remembering it, but if windows_check_reformat() or windows_remember_size()
    didn't actually do a reformat the position was not forgotten. It is now,
    so this jumping should no longer occur.
    
    Single character leafnames (e.g. "a.class") used to be reported just as
    "Index" in a save dialogue for the object. Fixed.
    
    <P> elements could fail to work as expected in some circumstances. For
    example, there would be no gap above '<p> <b>...' - the <b> text doesn't
    have the <p> attached, the tag before it does. However, the white space
    on this tag gets stripped so it ends up with a NULL text field. This
    means that paragraph space is allocated but the text height for the line
    thus far is zero. This has been fixed through special case code in
    reformat_check_height.
    
    browser_base_url() function added, which through browser_base_callback
    can supply a base URL for the current document.
    
    In-page references (URLs with '#something' in them) would fail if the
    page contained a BASE tag which pointed elsewhere (that is, the page
    would be fetched from its base URL and references would work thereafter;
    not very useful for developing sites on your local hard drive). Fixed.
    Fixed also the problem where in-page references would fail once after
    a forced reload.
    
    Several ultra-stupid bugs in image cross referencing code within
    image_update_image fixed:
    
     - No longer redraws *every* page with the same background when
       *any* of those backgrounds are updated; just if the page with
       the actual image data attached is updated. Doh!
    
     - Similarly, no longer updates every copy of an image when asked
       to update any of them, only when the one holding the actual image
       data is updated.
    
     - In the above cases, image array a scanning is avoided wherever
       possible now, whereas it used to happen for any update.
    
    Animated masked GIFs will no longer flicker briefly when they are first
    viewed on a page.
    
    Hacky but useful optimisation in Images.c. Local compilation option
    'FAST_TOKEN_REFERENCE' controls whether or not the flags word of each
    HStream associated with an image_info struct is used in part to store
    the image's array index. If so, there's no array scanning to do - this
    signficantly speeds up cross referenced image handling. It's still
    rather undertested "but it seems to work". The number of bits used for
    the array index is controlled by FAST_TOKEN_REFERENCE_SHIFT, and is
    currently 20, giving around a 1 million image limit on the browser
    and leaving 12 bits for genuine flags (only 3 currently used).
    
    If an error occurred when Message_PlugIn_Opening was received, Browse
    would exit early with the message - before it removed the plug-in from
    the queue, thus stopping other launches. The error is now reported and
    then the item is still removed, preventing this problem.
    
    The BASEHREF entry in the parameters file used for plug-in launching
    will now give the contents of any BASE tag in the document before
    looking at the display URL, then the fetch URL.
    
    When a new page is visited or a browser window closed, any in progress
    fetches for plug-ins are abandoned. They weren't before, which caused
    all sorts of problems later on. In addition, any pending plug-in items
    in the queue may not have been correctly flushed (the first item may
    have been left behind), which can cause mis-firing of the plug-in
    engine as it picks up outdated queue items and attemps to launch them.
    This has also been fixed.
    
    Fixed problem with asynchronous delivery and reception of the Stream_New
    plug-in protocol messages, which previously would be incorrectly handled -
    Browse assumed that, as with plug-in launch, only one fetch would be running
    at a time (or the message passing between plug-in and fetch window would
    occur synchronously). This is not the case, and a variety of problems could
    be seen if the system broke down. The most obvious symptom is in Scrap,
    where Browse used to leave behind "BTFxxxxx" files on quit.
    
    Intermittent "Invalid object ID" errors cured; the Find dialogue box
    handler wasn't clearing its remembered ID, and since Find is a shared
    object, that object could get deleted without the Find code
    realising.
    
    Corrected mis-spelling of "Parameters" n comment block at top of
    about_copy_info_file(), which fouled up the documentation auto-generation.
    
    BuildSHelp will recognise functions indented by 2 spaces, assume they're
    indented because of a wrapping #ifdef, and put 'Conditionally compiled.'
    under the name of any such functions. It no longer outputs broken manuals
    if no functions are found in a source file. More robust to odd input due
    to extra EOF checking.
    
    New utility BuildHTML, to generate HTML pages in the same manner as
    BuildSHelp, created from BuildSHelp. This was done to support Ferrotec
    who'd like StrongHelp-like documentation but don't want to be tied to
    Acorn machines (and haven't got any at the time of writing anyway!).
    HTML was agreed as a good, easy format to go for.
    
    Have begun to implement JavaScript support. Updated !Boot and !Run[D]
    files to define File$Type_F81 and Alias$@RunType_F81 (0xf81 is a
    JavaScript script file, 'JSScript', MIME type application/x-javascript,
    common filename extension '.js'.). !Sprites[22] files have the relevant
    file icons added. Messages files extended with various tokens for
    miscellaneous error messages, error box buttons etc. Created a Browse
    About: page section based on the JavaScript filetype - we at last
    credit the use of the JPEG group software, LibPNG, etc.
    334a6d84
!RunD,feb 5.34 KB