REBOL

REBOL/View 1.3.0 Release Summary

Contents:

1. Overview
2. Important Changes
2.1 New GC (Garbage Collection)
2.2 Path Evaluation
2.3 Parse
2.4 Networking
2.5 New Modal System for VID
2.6 Revised Image Datatype
2.7 All New DRAW Effect and DRAW Function
2.8 VID Face Accessors and Doc Objects
3. Updated Functions
3.1 Other functions that were updated in this release:
4. 61 New Functions
4.1 Other Important Changes, Notes
5. RAMBO Changes
5.1 228 Bugs Eliminated
5.2 50 Wishes Granted

1. Overview

There are hundreds of fixes and enhancements in this version of REBOL; major new features were added; it is a milestone release.

There were many more enhancements we wanted to include, but there just wasn't time. A top priority for this project was to ship a new official version of REBOL that can be used to build new SDK releases, Link clients, and the OSX port. With that done, the goal is to provide more frequent official releases with small enhancements while planning the next major release.

One of the most important things about this project is that its success is due to the combined efforts of REBOL Technologies, the REBOL community, and the open source Antigrain AGG library. Two previous "version 1.3" projects and many unofficial releases provided much of the foundation for this release, not to mention the valuable experience of learning what didn't work when coordinating and managing a project like this.

2. Important Changes

In addition to the changes listed below, there are a large number of fixes in this release, many of which were included in beta releases (1.2.5 - 1.2.57). See the list of RAMBO bugs in this document to get an idea of what fixes have been included.

2.1 New GC (Garbage Collection)

This is the biggest change you can't see. The new garbage collector is a major enhancement and should reduce or eliminate the small number of cases where the old GC caused problems. A great deal of testing was done on the new GC, but be sure to report, via RAMBO, any errors you think might be related as soon as you see them, and please include (minimal) example code to reproduce the problem.

2.2 Path Evaluation

Paths now allow paren! values, which is a major change and will greatly simplify certain kinds of expressions. For example, the following two statements are now equivalent:

a/(1 + 1)
a/2

>> n: 3
== 3
>> b: [1 2 3 4 5 6 7 8]
== [1 2 3 4 5 6 7 8]
>> b/(n + 1)
== 4
>> b: [1 2 3 [a b c] 5 6 7 8]
== [1 2 3 [a b c] 5 6 7 8]
>> b/(n + 1)/3
== c

In addition, path literals (unevaluated paths) can now easily be evaluated later with DO:

>> do 'system/stats
== 5012769
>> s: 'system/stats
== system/stats
>> do s
== 5013601

>> blk: [system/stats]
== [system/stats]
>> do blk/1
== 5020369

2.3 Parse

The PARSE function was enhanced in a number of ways, and even more improvements may be considered in the future.

  • Recursion limit increased
  • Improvements related to side-effects of parens
  • Fixed issues when parsing past the end of the input
  • Dynamic rules are now properly garbage collected
  • Allows variables and paths
val: #"c"
test: context [len: 4 str: "ab"]
parse "ababababccc" [test/len test/str some val]
  • Allows RETURN and THROW
do does [parse "a" [#"a" (return 4)]]

catch [parse [%test.txt] [set file file! (throw file)]]

2.4 Networking

  • New ESMTP (authenticated email) protocol
  • set-net supports ESMTP options
  • Send now uses esmtp
  • Changed HTTP scheme so that query now does an HTTP HEAD request (instead of GET). this means now you can safely write:
info? http://somehost/some-big-file
  • Entirely new FTP protocol handler by Romano Paolo Tenca

2.5 New Modal System for VID

This is something the community has been asking for, and now they have it. This is a major change, but was designed so normal REBOL code won't be affected at all. The only code in danger of breaking is code that hacks into the old window event handling system.

There are a lot of other VID enhancements planned, but they were deferred for a 1.3.x release. They are a high priority, but also require a great deal of thought and design work; we didn't want to rush them out the door now and have to fix things later.

IMPORTANT! The new modal system may change in the next few releases so, for compatibility, you probably shouldn't hack into it or write code that depends on its implementation details.

2.6 Revised Image Datatype

On the surface, images work as they have in the past for the most part; internally, the code was improved and optimized. It contains better support for pixel modification, copying of areas (cropping), alpha channel support, and a lot more.

The IMAGE Datatype document describes the new datatype and its functions in great detail.

There are some changes that may affect existing scripts if they operated directly against the image data or manipulated images at the pixel level.

A significant change is that image datatype support was added to REBOL/Core as well.

2.7 All New DRAW Effect and DRAW Function

The DRAW effect has undergone major changes in this release to better support scalar vector graphics (SVG). DRAW now uses the AGG library from Antigrain.com, which was created by Maxim Shemanarev, as the new engine behind the DRAW dialect. With this advanced 2D rendering system in place, REBOL's already-impressive graphic capabilities have been extended. There are already a number of impressive demo apps that show off this new feature (see the Viewtop Demos folder).

In addition to using DRAW within face effect blocks, a new native has been added that lets you DRAW directly into an image datatype. Alpha channel transparency is fully supported.

Some new draw docs are available along with some old ones.

2.8 VID Face Accessors and Doc Objects

For people new to REBOL, and even some old-timers, learning and remembering which styles use /text, /data, or /value refinements can be a chore. Face accessors solve that problem by defining internal functions that "know" how a style works. You don't have to know which facet is used, or what other functions you might need to call (to update a scroller on a text-list for example); just use the accessors and they'll do the dirty work for you. Here are the face accessor functions:

clear-face
get-face
reset-face
scroll-face
set-face

3. Updated Functions

 arrayNow does a deep copy of initial values if they are a series
 callAccepts relative paths, accepts file! argument
 extractThrows error on zero skip size; used to loop endlessly
 forallbased on new FORSKIP
 formFORM of an object or a port now does something useful. The object block and the make object! part is stripped. Fields are output in human readable mold (construct) format.
 forskipChanged to return the body block result to match other control functions, like foreach. The word is also no longer left at the tail; it is either reset to the original position or left where a BREAK occurred. This change could break existing code, but our research showed that the risk is very small, and we think the new behavior is much more natural.
 getWhen used on objects, returns a block containing values for each word.
 lowercaseNow accepts char! values
 moldLine breaks within blocks are formatted correctly again; some interim releases had problems with this.
 parseNow allows variables and paths; recursion limit increased; allows RETURN and THROW; improvements related to side-effects of parens.
 quitAdded /return refinement (lets you set exit values)
 reduceAdded /only refinement (used for dialect evaluation)
 repeatFixed to allow better recursion. A deep copy of the evaluated block is now bound, with bind, to the iteration variable.
 request-fileFixed to keep file names used for saves
 reverseReturns same index as passed, rather than the tail
 setWhen used on objects, sets all word from the block provided
 split-pathcompletely re-implemented; much smaller and faster now.
 throw-on-errorRevised to allow any value, including unset
 to-local-fileAllows relative paths; returns string datatype
 to-stringProperly terminates char! conversions
 to-wordNow supports conversion of datatype! values
 uppercaseNow accepts char! values

3.1 Other functions that were updated in this release:

  • ??
  • alert
  • alter
  • array
  • build-tag
  • choose
  • dbug
  • decode-cgi
  • decode-url
  • delete
  • desktop
  • editor
  • emailer
  • exists-thru?
  • flash
  • focus
  • get-net-info
  • help
  • import-email
  • in-window?
  • inform
  • launch-thru
  • layout
  • license
  • link?
  • list-dir
  • load-prefs
  • make-dir
  • make-face
  • net-error
  • parse-header
  • path-thru
  • read-thru
  • request
  • request-color
  • request-date
  • request-list
  • request-pass
  • request-text
  • resend
  • screen-offset?
  • scroll-para
  • send
  • set-font
  • set-net
  • show-popup
  • stylize
  • to-idate
  • unfocus
  • view
  • win-offset?

4. 61 New Functions

 as-binary Coerces any type of string into a binary! datatype without copying it.
 as-pair Combine X and Y values into a pair.
 as-string Coerces any type of string into a string! datatype without copying it.
 attempt Tries to evaluate and returns result or NONE on error.
 brightness? Returns the monochrome brightness (0.0 to 1.0) for a color value.
 build-attach-body Return an email body with attached files.
 build-markup Return markup text replacing <%tags%> with their evaluated results.
 case Evaluates each condition, and when true, evaluates what follows it.
 clear-face Clears the primary value of a face.
 component? Returns specific REBOL component info if enabled.
 construct Creates an object, but without evaluating its specification.
 decloak Descrambles the string scrambled by encloak.
 delete-dir Deletes a directory including all files and subdirectories.
 do-browser Evaluate browser script.
 do-thru Do a net file from the disk cache.
 draw Draws scalable vector graphics to an image (returned).
 dump-obj Returns a block of information about an object.
 edge-size? Return total size of face edge (both sides), even if missing edge.
 eighth Returns the eight value of a series.
 encloak Scrambles a string or binary based on a key.
 get-env Gets the value of an operating system environment variable.
 get-face Returns the primary value of a face.
 hilight-all Undocumented
 hilight-text Undocumented
 hsv-to-rgb Converts HSV (hue, saturation, value) to RGB
 link-relative-path Remove link-root from a file path
 load-stock Load and return stock image. (Keep cache after first load)
 load-stock-block Load a block of stock image names. Return block of images.
 local-request-file Creates an OS-specific file requester
 mod Compute a nonnegative remainder of A divided by B.
 modulo Wrapper for MOD that handles errors like REMAINDER. Negligible values (compared to A and B) are rounded to zero.
 new-line Sets or clears the new-line marker within a block.
 new-line? Returns the state of the new-line marker within a block.
 ninth Returns the ninth value of a series.
 notify Flashes an informational message to the user. Waits for a user response.
 overlap? Returns TRUE if faces overlap each other.
 read-cgi Read CGI data from web server input stream. Return data as string.
 remove-each Removes a value from a series for each block that returns TRUE.
 request-dir Requests a directory using a popup list.
 reset-face Resets the primary value of a face.
 resize-face Resize a face.
 rgb-to-hsv Converts RGB value to HSV (hue, saturation, value)
 round Returns the nearest integer. Halves round up (away from zero) by default.
 run Runs the system application associated with a file.
 scroll-drag Move the scroller drag bar
 scroll-face Scroll a face. Default is vertical.
 set-face Sets the primary value of a face. Returns face object (for show).
 seventh Returns the seventh value of a series.
 sign? Returns sign of number as 1, 0, or -1 (to use as multiplier).
 sixth Returns the sixth value of a series.
 stats System statistics. Default is to return total memory used.
 suffix? Return the suffix (ext) of a filename or url, else NONE.
 tenth Returns the tenth value of a series.
 to-datatype Undocumented
 to-error Undocumented
 to-itime Returns a standard internet time string (two digits for each segment)
 to-port Undocumented
 unless Evaluates the block if condition is not TRUE.
 unlight-text Undocumented

4.1 Other Important Changes, Notes

  • Maximum negative integer! RAMBO 3099. Watch for side effects.
  • Changed decimal equality comparison (coef = 0.1) RAMBO 3680. This is a "compromise value" that produces print results that are similar to those of comparison. Of course, in floating point, nothing is perfect. Use round function for more control.
  • Uses Win32 file access and control functions. It only affects REBOL 3.1 platforms and has no affect on Linux, BSD, etc. With this release, REBOL uses the newer Win32 file system API, rather than the old Windows "compatibility mode" functions.
  • Changes to how script/header/needs value is parsed.
  • View Desktop code (Viewtop) reorganized and cleaned up.
  • image! is no longer part of the any-string datatype set.
  • You can now type editor from the keyboard and provide a string, block, or other datatype in addition to the normal file or url.
  • Changes have been made to face verification. Negative face sizes no longer throw an error, but invalid offset values will throw an error or be ignored. If you use negative sizes, please watch for errors during your testing.
  • "read %/" returns a list of drives; under 1.3 there is no leading slash. e.g. This is a bug to be fixed soon.
>> read %/
== [%a/ %c/ %d/ %r/]

5. RAMBO Changes

Note that not all bug fixes and enhancements were added to RAMBO, so this is really only a partial list. RAMBO is used as much as possible and the best way to make sure your bug report or enhancement request is addressed is to submit it to RAMBO.

Another important thing to note here is that not all the bugs listed were in official REBOL releases. While 1.3 was in development, a number of interim releases were made available for testing and RAMBO was used to track issues in those releases as well.

5.1 228 Bugs Eliminated

 #3011 path-thru patch can return directories
 #3012 editor slider patch shows slider for correct initial dragger size
 #3013 grow-facets patch adds locals 'val and 'images
 #3014 help function: add 'type-name to locals
 #3017 Fixes bug in ctx-text/back-field
 #3018 Fixes bug in CHECK style redraw.
 #3020 fix bug in screen-offset?
 #3024 fix inform keys
 #3029 Fix 'scroll-para to handle real values
 #3038 make the sense facet work
 #3042 patch view to add a window-feel to every face
 #3043 fix a slider bug
 #3044 fix a in-window? bug
 #3047 fix http open local vars
 #3048 Fix Gradient bug when width greater than height
 #3054 fix some bugs in edit-text
 #3066 BUG: offset-to-caret
 #3067 BUG: choice style has strange behaviour (1.2.12)
 #3069 BUG: edit-text doesn't scroll text well (big edge)
 #3070 offset-to-caret 2
 #3071 core - return set-word!
 #3075 effect - fill-pen bug
 #3076 effect - grid bug
 #3077 effect - draw image bug
 #3078 fix set-font style none bug
 #3081 bug mold/all image
 #3082 bug to-image
 #3083 core - unknown type value
 #3085 field bug
 #3088 Unable to open IMAP box twice
 #3090 Cookie parsing only catches the last cookie
 #3092 drives under windows
 #3095 View should run in Quiet mode
 #3096 Spaces are lost in the first element of a text-list
 #3098 core - math -2147483648 sign
 #3099 core - math -2147483648 type
 #3102 HIDE command CRASHES Rebol/View!!!
 #3104 filled polygon causes ** Script Error: Not enough memory during the SHOW
 #3107 CALL function can cause crash
 #3109 alpha-channel top-left pixel bug
 #3111 size-text return 0x0 instead of none
 #3113 core - parse recursion limits
 #3120 Rebol crash on making email
 #3124 Old path SET bug.
 #3125 TO-ANY-... functions are invalid
 #3129 call/wait broken on linux
 #3130 On Linux, CALL interferes with TCP port wakeup
 #3132 crop effect bug
 #3135 clear bug with hash!
 #3139 Patch for parse-header-date
 #3141 Alias internal image names to remove .suffixes
 #3142 rebol.com/view-sales.html missing
 #3155 Email read fails to recognize byte stuffing
 #3156 BUG: Drop-down style never close the list
 #3157 BROWSE %1 arg substitution
 #3159 Linux: system port interferes with TCP ports
 #3160 VID - radio can crash REBOL/View 1.2.18.3.1
 #3162 Crash on large Window Face View
 #3165 To on Ports crashes REBOL.
 #3166 Greyscale jpg doesn't load properly, 2/3s of image is black.
 #3167 Wrong picture used in 'radio style
 #3170 Skip fails with negative values and images
 #3171 Skip and next have different behaviour with images
 #3172 image/alpha crash - image/alpha problems
 #3176 to-struct crash
 #3181 IMAGE! element size is inconsistent.
 #3185 Crash in LOAD when loading an #[object! ...]
 #3191 access/clear-face* of area,field styles don't reset line-list
 #3197 Browsing with spaces in URL
 #3201 recycle error on loading large hash!
 #3215 para/tabs: 0 crash
 #3218 Make integer!
 #3226 Can't go to local twice
 #3228 [mold 1.0] -> 1 (=integer)
 #3235 Desktop script links broken when in path w/spaces
 #3238 delete leaves port open on error
 #3240 loading a molded/all function discard the argument datatypes
 #3241 layout sets new/var wrong (binding), 'panel could make good use of it.
 #3244 list-reg crash under 2.1.23 2.1.24
 #3245 make object crash under 1.2.25
 #3251 Compositing bug?
 #3253 to-image crash (1.2.25 1.2.26)
 #3254 'request : missing /local img
 #3263 prot-http.r incomplete as provided in the sdk/command
 #3264 edge: none causes CRASH
 #3265 side effect of permit pair with image!
 #3270 UNIQUE can crash on LIST!s ?
 #3271 some ctx-text functions are only in global context...
 #3272 to-routine crashes, should be removed
 #3273 fix some bugs in base-text
 #3274 Correct a check-line bug with edge
 #3275 broken images with size specified
 #3278 The big image change: BGR to RGB as format
 #3279 image copy out of bounds -> CRASH
 #3282 fix var in layout (1.2.28)
 #3285 to list! bug/inconsistency
 #3286 'Poke on image! doesn't accept pair! index
 #3287 find/tail list!
 #3289 Tab & Hidden fields
 #3297 bad view/options causes crash
 #3300 Core version 2.5 displayed in desktop
 #3301 'to-list unattended result with empty block
 #3302 pick/poke indexing with pair!
 #3304 opposite ranges: alphamul vs image/alpha
 #3308 optimize as-pair a bit more
 #3310 'mold does not format like before
 #3315 copy/part image short length
 #3317 Corrupted User's Guide for core documentation
 #3319 Random string does not return correct datatype
 #3320 copy/part skip out of the image data *crash* (big image ?)
 #3326 CALL should accept file! datatype
 #3328 Editor Save-As shows "Open" button
 #3329 uniform to-integer, to-tuple, to-pair ""
 #3330 to email! & char > 128
 #3331 close system/ports/output in console crashes REBOL
 #3335 Min and Max
 #3338 recursion of infix operator into prefix context
 #3339 HSV conversions
 #3341 LAYOUT - 'across after 'origin loses Y offset
 #3345 Hover tripping in Viewtop editor "menus"
 #3348 Should be able to execute remote scripts on startup
 #3378 Memory bug in cloning images
 #3379 copy/deep memory bug (and crash) with images
 #3388 Crash on View field
 #3401 Parse-Header bug
 #3403 [alpha] Two files, an image, read/lines from http and parse crash
 #3407 VID styles: SCROLLER,SLIDER,PROGRESS - bug in REDRAW
 #3409 block set returns a wrong value
 #3412 to-binary of bitset
 #3415 code not table-based in Micro-Database in Cookbook
 #3425 BUG: to string! with char! values
 #3427 to block! applied to list! is broken
 #3436 x: native [] crash
 #3437 func [a 'a :a][] does not return an error
 #3438 REPEAT is broken for recursion
 #3440 recursive do string crash
 #3445 field/access/clear-face* : does not work with hide text
 #3451 Crash while handling an error when recycle/torture enabled
 #3463 Construct/with crash
 #3464 CASE crashes with false and none as last expression.
 #3466 SDK encappers crash on Unix platforms if their STDIN is redirected
 #3467 Non-blocking tcp server crashes REBOL 2.5.5x Alpha
 #3474 random/secure result value is different from return of platforms
 #3475 rebol does not return a message to it's calling shell
 #3483 date! weekday refinement
 #3485 Doc typo: Chapter 14 Section 4
 #3487 RAMBO Error:
 #3488 Mac OS X:: rebcmd can't open library
 #3490 change-dir not working on disks
 #3505 new path evaluation is inconsistent and crashes Rebol
 #3506 ALPHA - Using colon : alone.
 #3507 insert/dup crash
 #3508 ALPHA - paths paren crash on block changes (1.2.55.3.1)
 #3509 ALPHA - Info? broke on top level directories
 #3511 insert crash with out-of-range
 #3515 ALPHA - bug in new path evaluation
 #3524 out-of-range path crash
 #3530 Rambo displays Pending Changes as New (Unviewed) Submissions
 #3533 Allow THROW in PARSE
 #3534 Parse documentation bug - missing file
 #3537 Crash with temporary series values - memory corruption
 #3540 Parse-Xml - executes an unwanted print statement
 #3544 Async doc error
 #3546 make function! crash
 #3548 to routine! crashes console session
 #3550 difference/only
 #3555 REQUEST-FILE problem when given file names
 #3558 copy/part and image!
 #3560 get-modes bug?
 #3561 Problem when restoring after dual screen mode
 #3566 Windows FAULT - with 'read/lines' AND 'join' on large file.
 #3586 [alpha] Port timeouts can cause crash
 #3591 out-of-range crash
 #3594 Linux: ports not always closed on exit
 #3596 Parse and Garbage Collection
 #3597 PARSE Past Tail Positions
 #3613 Manual (documentation) is missing text for some examples
 #3614 calling browse 5 times results in ** CRASH (Should not happen) - expand series overflow
 #3616 Rebol crashes on reading dir (GC bug?)
 #3618 debase returning wrong result for bad chars
 #3622 to-idate needs to pad hour and include seconds
 #3624 Invalid data type during recycle
 #3629 Docs still contain open/nowait, which is nonexistent
 #3632 Crash after typing ":" character
 #3638 net-log call in prot-http.r in SDK/Command
 #3645 integer division crash
 #3646 integer negate and subtract bug
 #3656 copy/part open/direct/read/binary what-dir 100000 ;=CRASH
 #3667 dump-obj system/words BUG
 #3678 Recursive panes cause Rebol/View to crash silently
 #3680 Decimal rounding problem
 #3685 PARSE error when at end of data if PAREN is used.
 #3687 Bitwise Ops return wrong result on Little Endian CPUs
 #3693 draw native: random data at start of image
 #3694 Draw: Unable to set pen color to transparent
 #3697 Crash when ANDing two images
 #3699 Rebol view (stable version) on windows crashes
 #3703 [throw] function attribute and return (in 1.3 prototypes)
 #3704 Desktop does not sync icons (in 1.2.110 prototype)
 #3705 as-binary and as-string gives wrong length on images
 #3706 crash with or/and/xor and mixed datatypes
 #3711 AGG spline command with negative argument : crash
 #3713 IMAGE! should not be any-string
 #3714 View Editor error on executing without a saved file
 #3716 Parse returns [] on encountering
 #3717 Problem with creating objects in newer versions (>1.2.104)
 #3718 Bug in Info?
 #3720 request-dir/dir should clean the path
 #3721 Overflow when converting from decimal to integer
 #3723 list-dir console freeze for a while when given a file
 #3724 reverse on list! returns wrong result
 #3728 request-dir dead clicking on hard drive root
 #3731 Script Error: Invalid graphics face object - 0x0 face size
 #3733 Control - L to launch Reblets from Viewtop crashes
 #3735 Read/lines crashes if it fails inside a does routine
 #3737 CALL doesn't accept file! datatype
 #3738 to-local-file returns file! not string!
 #3741 SAVE/HEADER does not work properly
 #3754 'do not open desktop on startup' option in user settings does not work
 #3757 REBOL/View stores preferences in %user.r but does not use them.
 #3761 Stats: improper block termination?
 #3762 Wrong links in http://www.rebol.net/notes/rv13-changes.html
 #3764 Odd pop-up requestor state bug
 #3765 'create-link ignores sandbox
 #3767 Desktop does not display proxy server setting
 #3768 Uninstall doesn't work when .r assoc was not made
 #3769 Possible event system bug related to security requestors
 #3773 Installer does not finish after

5.2 50 Wishes Granted

 #3009 Add check-line and radio-line styles
 #3015 desktop patch accepts a url or file argument
 #3021 Get and Set-face-value, and other functions
 #3023 Gives focus to the pass field when /only is used
 #3027 exists-thru? patched to return file instead of true.
 #3028 Simple function that checks if faces overlap each other.
 #3030 Images for VID Buttons
 #3031 Images for VID Checkboxes
 #3032 Images for VID Radio Buttons
 #3033 Images for VID Arrow/Slider/Scrollbar Buttons
 #3036 changes request key from shift+y shift+n to y and n
 #3037 new style auto-panel with auto size
 #3039 Unified default background color
 #3046 Systray Support
 #3049 to-pair should accept decimals, also + - * /
 #3050 fix para in area
 #3052 Adds many hot-keys to REQUEST
 #3062 return the edge size of a face
 #3073 core - extend bind to any-word!
 #3074 core - extend in to any-word!
 #3093 Rounding functions
 #3094 Use COPY* not system/words/copy
 #3117 Authenticated SMTP
 #3123 Evaluation Stats
 #3126 allow [echo off]
 #3131 add image/alpha
 #3144 'unless (negation of 'if)
 #3148 Add /multiple refinement to import-email
 #3150 shortcut: bind [code] object!
 #3177 to-datatype
 #3209 patch view to add a window-feel ONLY if feel functions are none
 #3213 Object! enhancement request
 #3223 image pair as offset/size
 #3258 Default RELATED setting for RADIO etc.
 #3276 make image! reduce [10x10 red 128]
 #3281 optimize as-pair a bit
 #3334 style auto-docs
 #3336 Extend IN (and BIND) to work with port!
 #3351 HSV Effect
 #3354 Colorize depth added
 #3381 Should DO evaluate PATHs?
 #3416 uppercase & lowercase to accept char!
 #3471 Smtp authentication
 #3472 Allow parens in path!s to be evaluated
 #3559 return from a paren parse rule
 #3567 DRAW function added
 #3568 PARSE allows paths for values
 #3615 request-dir Dialog Box
 #3700 complement on binary! and image!
 #3712 IMAGE Index? as an XY PAIR
MakeDoc2 by REBOL - 24-Jun-2005