6.1 History

    Please read the history bottom-up. Note that the history might list some
    features that were implemented in beta versions and removed later but are
    still mentioned here. This history is a log of the programmer so that he
    can look up what has been done/tried/modified. Things that were implemented
    and removed later are marked with [VOID].

    Version 10.0    (25-Feb-23)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files required to create
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New: Added Xcelicious example as the official Hollywood 10: Xcelicious welcome presentation
    - New [OS3]: ShowNotification() supports the Ranchero system now; since apps need to register before they
      can show notifications with Ranchero it's recommended that if you intend to use ShowNotification() on
      AmigaOS3 with Ranchero you should use @APPIDENTIFIER to specify a unique ID for your app; otherwise the
      generic app name "Hollywood" will be used (requested by Michael Rupp)
    - Change [GUI]: Using "Full screen (scaled)" mode will now respect the script's aspect-ratio when scaling
    - New [GUI/IDE]: Added macOS ARM 64-bit target to the Hollywood GUIs on AmigaOS/Linux/macOS and to the IDE
      on Windows
    - Fix [macOS/GUI]: Hollywood's GUI will now adapt its layout in case the desktop screen's height can't
      contain it in full (reported by Stefan Haubenthal)
    - Fix [macOS]: Fullscreen mode didn't always work correctly on newer macOS versions, especially when using
      very low resolution like 640x480
    - Fix [macOS]: Transparent windows weren't drawn correctly on macOS 11 and up
    - Change [SDK]: Plugin exports can now optionally use a "hwp_" prefix; this should have been done right
      from the start because it helps to avoid clashes with system libraries, e.g. on Windows Hollywood SDK's
      FreeLibrary() and Sleep() functions clash with Windows APIs; it is now recommended that you prefix all
      your plugin exports using "hwp_" but of course only if you target Hollywood 10 or higher because plugins
      which do that obviously can't be loaded by older Hollywood versions
    - Change: Moved lots of functions into their own libraries (object, serializer, time, locale, table, menu,
      plugin, and joystick); this should make it more comprehensive when examining Hollywood's standard libs
      from the GUI
    - Fix [IDE]: Syntax highlighting for certain command synonyms like HasItem() or legacy command names like
      DebugStr() didn't work (reported by Ralf Gruner)
    - Fix [OS3fpu/WarpOS]: Division by zero crash under rare circumstances due to a vbcc compiler bug
    - Change: Removed the Cocoa-backend for x86 (32-bit) macOS and made the Carbon-backend the default one for
      x86 macOS; there are only very few x86 Macs out there and the last version of macOS that supports them
      is 10.6 so it makes sense to use Carbon instead of Cocoa for those exotic x86 Macs because Carbon is more
      efficient than Cocoa on 10.6 and earlier
    - New: Added support for the macOS ARM 64-bit platform; to compile executables for macOS ARM, just pass the
      new platform definition "macosarm64" to the EXETYPE argument
    - Fix [macOS/GUI]: The GUI now adapts to dark mode also on the fly while it is running
    - Fix [macOS/64-bit]: Joystick support was completely broken on 64-bit macOS systems; it only worked on
      32-bit macOS systems
    - Fix [macOS/Cocoa]: Leading spaces were cropped when using the native, Core Text-based macOS text engine
      (reported by Michael Rupp)
    - Change: When using DrawPath() on a path whose width/height is 0, nothing will be drawn; in the case of
      PathToBrush(), you'll get a 1x1 fully transparent brush (suggested by Ralf Gruner)
    - Fix: Memory access fault with the inbuilt vectorgraphics engine when constructing paths that had empty
      subpaths in them (reported by Ralf Gruner)
    - Change: JoyFire() is now known as JoyButton(); the old name is still supported for compatibility, though
    - New: JoyDir() also accepts an optional index parameter now which allows you to choose which joystick to
      query
    - New: Added support for querying joystick hats (also known as point-of-view d-pads); call the JoyHat()
      function to query the current state of the hat; this will be -1 if the hat is in the center, otherwise
      a value between 0 and 27000 will be returned; multiple hats are supported via the optional index argument
    - New: Added support for querying individual joystick axes; you can use the new JoyAxisX(), JoyAxisY(),
      and JoyAxisZ() functions to query the state of the individual axes; multiple joysticks are supported via
      an optional index parameter; the return value will be between -1000 and 1000
    - New [SDK]: Added HWEXT_DISPLAYADAPTER_POPUPMENU extension flag; if this flag is set, display adapters
      can set HWSDAFLAGS_POPUPMENU to make Hollywood call the new display adapter function OpenPopupMenu()
      when a popup menu should be shown; this allows display adapters to support popup menus too
    - New: IsMenuItemDisabled(), IsMenuItemSelected(), DisableMenuItem(), EnableMenuItem(), SelectMenuItem(),
      and DeselectMenuItem() accept an optional argument now that allows these functions to operate on menus
      that aren't attached to a display; this is very useful for popup menus because those aren't attached to
      the display but are manually shown by the script via calls to the new PopupMenu() function
    - New [Amiga/Windows/macOS]: Added support for popup menus (context menus); to show a popup menu, simply
      call the new PopupMenu() function and pass the id of a menu object to it; this is typically done when the
      user presses the right mouse button; you can also specify the position of the popup menu; note that the
      title of the menu object passed to PopupMenu() is ignored, only its actual items are shown; just as with
      normal menus, events will be sent via the "OnMenuSelect" event handler; note that on Amiga and compatible
      popup menus require popupmenu.library (but this is a standard component on AmigaOS 4 and AROS; for OS3
      it is available on Aminet); on MorphOS, MUI is required
    - Fix: Potential memory trashing when using the \u escape code in JSON files
    - New: ReadTable(), WriteTable(), SerializeTable() and DeserializeTable() now support new "SrcEncoding" and
      "DstEncoding" tags in their optional table argument now; these tags allow you to pass the source and
      target encoding to serializers; this can be useful for the JSON serializer in case the JSON file you want
      to deserialize isn't in UTF-8 or you want to serialize to something different than UTF-8 (even though the
      JSON specification says that it must be UTF-8)
    - New [SDK]: Added HWSERIALIZEFLAGS_KEYVAL; this will be set if a table consists only of "key" and "value"
      indices; it will be set by the element that opens and closes the table only
    - New [SDK]: Added HWSERIALIZEFLAGS_NUMIDX and HWSERIALIZEFLAGS_STRIDX; HWSERIALIZEFLAGS_NUMIDX will be set
      for all tables that have keys at numeric indices and HWSERIALIZEFLAGS_STRIDX will be set for all tables
      that have string indices; note that tables can also have both, numeric and string indices
    - New [SDK]: Added HWISZTAG_SERIALIZEMODE and HWISZTAG_SERIALIZEOPTS; plugin serializers can use these to
      find out the currently active serialization mode
    - New: Hollywood's inbuilt JSON serializer now supports #SERIALIZEMODE_LIST; just like #SERIALIZEMODE_NAMED
      this mode allows you to deserialize any JSON data into Hollywood but it doesn't support any Hollywood
      extensions; the advantage over #SERIALIZEMODE_NAMED is that #SERIALIZEMODE_LIST preserves the original
      order of elements in the JSON by storing elements in sequential lists; thus, when serializing a table in
      list mode you can be sure that the elements will appear in the JSON exactly as they appear in the list;
      such a thing isn't guaranteed for #SERIALIZEMODE_NAMED
    - New: Hollywood's inbuilt JSON serializer now supports #SERIALIZEMODE_NAMED; with this mode you should be
      able to deserialize any JSON data into Hollywood because #SERIALIZEMODE_NAMED doesn't use any Hollywood-
      specific extensions; #SERIALIZEMODE_HOLLYWOOD uses some markers to inform Hollywood about the data type
      (e.g. functions, raw data) which makes it unsuitable as a generic JSON serializer; #SERIALIZEMODE_NAMED
      solves this problem but the downside is that it won't allow you to serialize functions or binary data;
      note that like #SERIALIZEMODE_HOLLYWOOD, #SERIALIZEMODE_NAMED will convert key names to lower-case by
      default; if you don't want that set the new "NoLowerCase" option
    - New: ReadTable(), WriteTable(), SerializeTable() and DeserializeTable() accept "Mode" and "Options" tags
      in their optional table argument now; they have the same function as the functions SetSerializeMode() and
      SetSerializeOptions() except that they are only effective for the respective function call
    - New: Added SetSerializeOptions() to set some serialization options; currently, the only option defined is
      "NoLowerCase" which will prevent the JSON serializer from converting key names to lower case when set
      to TRUE
    - New: Added SetSerializeMode(); this can be used to set the desired serialization mode; currently there
      are three available serialization modes: #SERIALIZEMODE_HOLLYWOOD (the default), #SERIALIZEMODE_NAMED and
      #SERIALIZEMODE_LIST; how these modes are interpreted is up to the (de)serializers; also added the new
      command GetSerializeMode() to get the current serialization mode
    - Fix: Memory could get trashed when non-UTF-8 strings were passed to a function that converted strings to
      upper or lower case; since this is used quite a lot internally, several functions were affected by this
      bug, e.g. the JSON serializer
    - New: Added FormatDate() function; this can be used to convert a Hollywood date into a new format using a
      date/time template; e.g. it is possible to convert a Hollywood date to a localized date by passing the
      a date/time template returned by GetLocaleInfo() to FormatDate()
    - Change: FormatStr() no longer limits the width and precision fields in the format string to two digits
    - Fix: Chr() didn't accept 0 as the codepoint when using UTF-8 encoding
    - New: Added FormatNumber() function; this can be used to convert a number to a string; in contrast to the
      StrStr() function, FormatNumber() will separate the digits by the thousands and it's also possible to
      specify a custom thousand separator and decimal point; this can be useful to convert numbers to strings
      in a localized way (requested by Michael Rupp)
    - Fix: Memory access fault when passing #KEEPASPRAT to one of Hollywood's scaling functions and applying
      the aspect-ratio resulted in a zero width/height; in this case, the size is now padded to 1 (reported
      by Lazar Zoltan)
    - New: Added GetLocaleInfo() function; this returns several pieces of information about the current user's
      locale settings like decimal separator, thousand separator, date format, time format, weekday and month
      names, currency symbols etc. (requested by Michael Rupp)
    - New: Added @APPENTRY preprocessor command; this can be used in includes to specify the script file that
      contains the entry code for the project; when Hollywood encounters @APPENTRY in a script, it will stop
      parsing that script and run the script specified in @APPENTRY instead (requested by Christos Tsaldaris)
    - Fix [Windows]: ShowPointer() wasn't effective until a mouse event came in (reported by Ralf Gruner)
    - New [OS4]: Added support for AmigaInput; you can activate AmigaInput support on OS4 by setting the
      "UseAmigaInput" tag to TRUE in the new ConfigureJoystick() function; the advantage of using AmigaInput
      instead of lowlevel.library is that you can query more than 7 buttons and users don't have to use the
      AmigaInput prefs to map their controllers to lowlevel.library ports (requested by Leo den Hollander)
    - New: TextExtent() and TextWidth() support an optional table argument now that allows you to specify the
      desired charspacing value
    - New: SetLayerStyle() and GetLayerStyle() also support the new "Charspacing" tag now
    - New: Added "Charspacing" tag to TextOut() and CreateTextObject(); this can be used to define a spacing
      value for the characters of the text to be drawn; positive spacing values increase the character distance
      and negative spacing values move the characters closer together (requested by Samuli Holopainen)
    - New: Added SetDefaultAdapter(); this function can be used to set default adapters for various adapter
      types supported by Hollywood (file, network, serializer); the new GetDefaultAdapter() function returns
      the current default adapter for the specified type
    - New: Added SetDefaultLoader(); this function can be used to set default loaders for various file formats
      (image, anim, sound, video...); the new GetDefaultLoader() function returns the loader of the specified
      file format
    - New: The following functions from Hollywood's DOS library support filesystem adapters now: MoveFile(),
      CopyFile(), Rename(), MakeDirectory(), GetCurrentDirectory(), ChangeDirectory(), SetFileAttributes(),
      and DeleteFile(); they all support a new "Adapter" and "UserTags" tag in the optional table argument now
      which can be used to specify a filesystem adapter that should be used
    - New [SDK]: Added support for filesystem adapters; filesystem adapters can be used to hook into Hollywood
      functions like creating directories, renaming or moving files and directories, setting file attributes,
      etc; this allows plugins to do quite some magic, e.g. you could copy files or whole directories directly
      into a zip file using CopyFile() if the zip plugin implements Hollywood's filesystem adapter interface;
      you could also delete files or whole directories from zip files using DeleteFile(); you could even move
      files from one zip file to another using MoveFile() etc.; it's a powerful new interface; note that a
      filesystem adapter makes most sense when combined with file and directory adapters which have been
      supported since Hollywood 6.0; note that filesystem adapters are never used automatically (unless a
      plugin explicitly requests that); normally, you have to specifically address them by specifying the
      "Adapter" tag in supported functions
    - Fix: Memory access fault when moving complete directories across partitions using MoveFile()
    - Change: For optimized lists created using CreateList(), TableItems() behaves the same as ListItems() now
      (requested by Ralf Gruner)
    - New: Added GetFreePen() function; this allows you to get an unused pen in the current palette image; if
      there is no free pen, -1 will be returned
    - Fix: GetPen(), ReadPen() and SetCycleTable() couldn't be used on write-protected objects even though
      they don't modify anything
    - New: CopyBrush() can now also convert palette brushes to hardware brushes (requested by Lazar Zoltan)
    - New: Added WaitMusicEnd(); this will halt the script execution until the specified music has finished
      playing (requested by Juan Carlos Herran Martin)
    - New: Added Sleep() function; this does the same as Wait() except that its argument is in milliseconds so
      it saves typing; for historic reasons, Wait()'s argument is in ticks and can only be switched to use
      milliseconds by passing the optional #MILLISECONDS argument but this quite inconvenient
    - New: Added advanced console functions; this new library contains over 50 functions to make all your
      console dreams come true; it allows you to create all kinds of TUIs (textual user interfaces) with just
      a few function calls; the following new console functions have been added: EnableAdvancedConsole(),
      DisableAdvancedConsole(), ClearConsole(), EraseConsole(), SetConsoleCursor(), GetConsoleCursor(),
      GetConsoleSize(), GetConsoleOrigin(), ReadConsoleKey(), ReadConsoleStr(), SetConsoleOptions(),
      SetConsoleStyle(), GetConsoleStyle(), ClearConsoleStyle(), RefreshConsole(), SetConsoleColor(),
      GetConsoleColor(), InitConsoleColor(), AllocConsoleColor(), FreeConsoleColor(), SetConsolePen(),
      DeleteConsoleChr(), InsertConsoleChr(), InsertConsoleStr(), DeleteConsoleLine(), InsertConsoleLine(),
      BeepConsole(), FlashConsole(), GetConsoleChr(), GetConsoleStr(), ScrollConsole(), FormatConsoleLine(),
      SetConsoleBackground(), GetConsoleBackground(), MakeConsoleChr(), DecomposeConsoleChr(), OpenConsole(),
      CloseConsole(), HaveConsole(), DrawConsoleBorder(), DrawConsoleBox(), DrawConsoleHLine(),
      DrawConsoleVLine(), SetConsoleTitle(), CreateConsoleWindow(), FreeConsoleWindow(), TouchConsoleWindow(),
      SelectConsoleWindow(), GetConsoleWindow(), CopyConsoleWindow(), MoveConsoleWindow(), ShowConsoleCursor(),
      HideConsoleCursor(), StartConsoleColorMode(), GetConsoleControlChr(), GetConsolePen() (requested by
      Fabio Falcucci)
    - Fix [Linux]: Font directories are now scanned recursively because newer Linuxes often store fonts in
      subdirectories inside the system font directories (reported by Ralf Gruner)
    - Fix [Linux]: MoveFile() didn't work correctly when using backslashes instead of slashes in the source
      (reported by Dick Valk)
    - New: #ATTRFONTFORMAT allows you to get the format of a font and can be queried for #FONT, #DISPLAY,
      #LAYER and #TEXTOBJECT
    - New: #ATTRFORMAT can now be queried for #BRUSH, #BGPIC, #ANIM, #SAMPLE, #ICON, #FILE and #DIRECTORY as
      well; querying this attribute will return a human-readable format name string
    - New [SDK]: Added HWFOPENTAG_FORMAT and HWOPENDIRTAG_FORMAT; plugins can return a human-readable format
      name using these tags
    - New [SDK]: Added HWEXT_IMAGE_FORMATNAME, HWEXT_ANIM_FORMATNAME and HWEXT_ICON_FORMATNAME; those new
      extensions allow plugins to return a human-readable string describing the format of the file loaded
    - New [SDK]: Added UtilityBase.CloneUserTagList() and UtilityBase.FreeUserTagList(); these two functions
      can be used to clone and free a user tag list
    - New [SDK]: Added HWEXT_SAVEANIM_BEGINANIMSTREAM; if this extension tag is defined, Hollywood will call
      the BeginAnimStreamExt() function instead of the BeginAnimStream() function; this allows plugins to
      get information about the desired file adapter, user tags and also the desired output format; the
      original BeginAnimStream() is broken by design because it accepts neither a tag list nor a structure
      argument so it can't be extended
    - Change: GetFileAttributes() accepts an optional table argument as the second parameter now; the only
      official tag in that table is "Adapter" but you can also use it to pass user tags to file adapter
      plugins, which was the reason for this change; the old syntax that expected an optional string in the
      second parameter is still supported for compatibility reasons
    - Change [SDK]: struct hwRequireUserTagList is now known as struct hwUserTagList since many plugin types
      supported user tags now; a compatibility definition has been added to keep source code compatibility
    - New [SDK]: Added HWFOPENTAG_USERTAGS for both DOSBase.FOpenExt() as well as for FOpen() implementations
      of file adapter plugins; this tag can be used to pass plugin-specific user tags to file adapters, e.g.
      the ZIP plugin for Hollywood could define a "Password" user tag so that it's possible to set a password
      that should be used when accessing files in ZIP archives; also added HWOPENDIRTAG_USERTAGS that does
      the same just for directory adapters
    - New [SDK]: Added user tags support for image, anim, sound, video, icon, save image, save sample, save
      icon, display adapter, serializer and network adapter plugin types
    - Change: SerializeTable() and DeserializeTable() accept an optional table in their second argument now
      to accommodate the new user tags feature; the old syntax is still supported for compatibility
    - New: Added support for user tags; user tags are plugin-specific tags that can be passed inside a table
      named "UserTags" that is part of the optional table argument; all tags specified in the "UserTags" table
      are then automatically forwarded to plugins which can decide how to handle them; the following commands
      and preprocessor commands support user tags now: OpenMusic(), IsMusic(), @MUSIC, LoadSample(), IsSample(),
      @SAMPLE, LoadBrush(), @BRUSH, LoadBGPic(), @BGPIC, IsPicture(), LoadAnim(), LoadAnimFrame(), OpenAnim(),
      IsAnim(), @ANIM, LoadSprite(), @SPRITE, CreateDisplay(), @DISPLAY, OpenFile(), @FILE, DownloadFile(),
      UploadFile(), OpenConnection(), FileToString(), StringToFile(), LoadIcon(), @ICON, BeginAnimStream(),
      SaveAnim(), SaveBrush(), SaveIcon(), SavePalette(), SaveSample(), SaveSnapshot(), OpenFont(), SetFont(),
      @FONT, LoadPalette(), @PALETTE, OpenVideo(), IsVideo(), @VIDEO, OpenDirectory(), CopyFile(), ReadTable(),
      WriteTable(), SerializeTable(), DeserializeTable(), LoadPrefs(), and SavePrefs(); user tags are quite
      powerful because they also support passing raw binary data to plugins so they can be used for lots of
      different purposes
    - New: DownloadFile() and UploadFile() support a new "FileAdapter" tag now in the optional table argument;
      this allows you to specify a file adapter to use when opening or saving the file
    - New [SDK]: Added file adapter support for the plugin types HWPLUG_CAPS_SAVEIMAGE, HWPLUG_CAPS_SAVEANIM,
      HWPLUG_CAPS_SAVESAMPLE and HWPLUG_CAPS_SAVEICON
    - New: CopyFile() supports an "Adapter" tag now in the optional table argument; this is only ever used for
      the specified file or directory source; using a file or directory adapter for the copy target is
      currently not supported
    - New: SaveAnim(), SaveBrush(), SaveIcon(), SavePalette(), SaveSample(), SaveSnapshot(), BeginAnimStream(),
      StringToFile() and FileToString() support an "Adapter" tag now in the optional table argument; this
      allows you to specify a file adapter to use for saving the file
    - New: Added GetRawArguments() function; this can be used to get all arguments passed to your program or
      script either via the console or via Workbench on Amiga or via the Shell API on Windows; the arguments
      will be returned in a table and will also include arguments parsed by Hollywood, e.g. "-window" or
      "-quiet"; the first table entry will always contain the name of the program; note that this will not
      necessarily contain a qualified path but just the name of the program as it was called on the console;
      GetRawArguments() can be useful if your script should be capable of handling multiple file arguments;
      GetFileArgument() will only allow you to get the very first file passed to your program but by using
      GetRawArguments() you can also support multiple file arguments (requested by Ralf Gruner and Christos
      Tsaldaris)
    - New [SDK]: Added HWLOCKMODE_FILE and HWLOCKMODE_DIR for DOSBase.Lock(); these new modes allow you to make
      DOSBase.Lock() only accept a file or a directory, respectively; if both are acceptable, pass the new
      HWLOCKMODE_ANY mode constant
    - Change [SDK]: HWLOCKMODE_READ is now obsolete and has been replaced with HWLOCKMODE_ANY
    - New [SDK]: Added HWFOPENFLAGS_WONTSEEK flag for FOpen(); Hollywood will set this flag in case it doesn't
      need to seek the file that should be opened; this allows file adapters to use optimized I/O in case the
      file will never be seeked; note that even if HWFOPENFLAGS_WONTSEEK is set, Hollywood can still call
      FSeek() to query the current cursor position, to query the file size by seeking to position 0 with mode
      set to HWFSEEKMODE_END or to rewind the file back to 0 so your plugin must be able to handle that; there
      is also a HWFOPENMODE_WONTSEEK mode now that plugins can use to declare that they don't require seeking
    - New [SDK]: Added HWEXT_VECTOR_CUSTOMFT2 extension flag; vectorgraphics plugins can set this flag to tell
      Hollywood that they're using a custom freetype2 implementation that is not compatible with the one that
      is built into Hollywood; so Hollywood will call your plugin whenever it needs to turn a font into an
      FT_Face; plugins which set HWEXT_VECTOR_CUSTOMFT2 must implement the OpenFont() and CloseFont() symbols;
      on WarpOS this must always be done because Hollywood will activate HWEXT_VECTOR_CUSTOMFT2 automatically
      for WarpOS plugins as those can only access a PPC build of freetype2 whose FT_Face handles are not
      compatible with the 68k ones expected by Hollywood
    - Fix: Computation of vector paths' extent included some padding pixels; this only affected vector paths
      drawn by the vectorgraphics.hwp plugin, not the inbuilt vectorgraphics engine which is the default one
    - New: Improved border positioning for scaled but non-rotated rectangles drawn with Box(); the border space
      is always distributed equally now
    - Fix: Circles, ellipses, arcs or boxes with round corners weren't drawn correctly in case they were to be
      drawn with transformation, the border style was active and the anchor point was different from 0.5/0.5
    - New: Added support for custom-drawn vector brushes; to create such brushes, set the new "Callback" tag in
      CreateBrush() to a function that draws the brush graphics; your callback will then be called whenever the
      dimensions of the brush change; your callback function has to redraw the brush then; this can be used to
      create custom brushes which can be scaled/transformed without any losses in quality because your callback
      redraws the brush whenever its dimensions change instead of just scaling its pixels; this is especially
      useful when using the layerscale engine with custom graphics; if you use custom-drawn vector brushes for
      a layer you can be sure that that layer will scale losslessly to all resolutions; your callback function
      has to call SelectBrush() to draw the new graphics to the brush; it will also be passed a transformation
      matrix containing the current projection of the vector brush
    - New: Added RenderLayer() function; this can be used to convert a layer to a brush layer; this usually
      means sacrificing quality because brushes are rasterized and thus cannot be scaled or transformed
      without losses in quality which is why this function is probably of not much use
    - New: Added RefreshLayer() function; this will simply redraw the layer and isn't of much use except for
      the new merged layers created by MergeLayers(); when called on a merged layer, RefreshLayer() will
      update the merged layer with the current graphics from the merged layer's source layers; alternatively,
      you can also call SetLayerStyle() and set the "Refresh" tag to TRUE to achieve the same effect
    - New: Added MergeLayers() function; this function provides an alternative way of layer grouping; in
      contrast to GroupLayer(), MergeLayers() will merge the specified layers into a single new layer that uses
      the new special #MERGED type; layers of type #MERGED can't be transformed (except by the layer scaling
      engine) and they'll typically contain all settings of their child layers, e.g. shadow, border, filters,
      opacity settings etc. rendered into the layer; the advantage of such layers is that you could show them
      using transition effects and they would be treated as a whole whereas showing layers that are part of a
      group created by GroupLayer() using transition effects would apply the transitions to each group member
      individually; this limitation of GroupLayer() can thus be overcome by using MergeLayers(); by default,
      MergeLayers() will hide all source layers automatically; this behaviour can be changed via the optional
      table argument; note that merged layers aren't updated automatically when their child layers change
      their graphics; you need to use the new RefreshLayer() function to force an update of a merged layer
      (see above)
    - Fix: Layer border was wrong for layers that used a filter that modified the shape of the layer (i.e.
      xflip, yflip, swirl, water ripple and pixelate)
    - Fix: Generic layer bordering algorithm didn't take the layer transformation into account when deciding
      over whether or not anti-aliased interpolation should be applied
    - Fix: Text layer borders with a size less than 8 never adapted their size when the layer was transformed
    - Fix: #SNAPDISPLAY didn't work correctly with layer borders and shadows in case layerscaling was active
    - New: Drawing of layers that use alpha channel and a layer transparency setting is faster now because of
      several optimizations
    - New: Added GroupLayer() and UngroupLayer() to organize layers in groups and access them via a group id;
      this is a feature that was originally planned for Hollywood 4.5 and code was written back then but it was
      never completed; remnants of the code, however, have been in Hollywood from as early as version 4.5
      e.g. the #ATTRGROUP attribute for #LAYER, the "Group" tag set by GetLayerStyle() and error codes like
      #ERR_GROUPNAMEUSED; after more than 10 years, layer grouping has finally been implemented properly; the
      following functions can be used with layer groups now: ShowLayer(), HideLayer(), RemoveLayer(),
      ShowLayerFX(), HideLayerFX(), RemoveLayerFX(), MoveLayer(), RotateLayer(), ScaleLayer(), LayerToFront(),
      LayerToBack() (both only in case the swap argument is set to FALSE), SetLayerAnchor(), SetLayerBorder(),
      SetLayerFilter(), SetLayerShadow(), SetLayerStyle(), SetLayerTint(), SetLayerTransparency(),
      TransformLayer(), TranslateLayer(), RefreshLayer(), MergeLayer(); additionally, all drawing functions
      accept a new "Group" tag now that allows you to attach the layer to a group at creation time; the
      #ATTRGROUP attribute allows you to find out which group a layer is attached to; finally, there are some
      additional functions to deal with layer groups, namely GetLayerGroups(), GetLayerGroupMembers() and
      LayerGroupExists(); note that layer groups will automatically vanish as soon as no more layers are
      attached to them (requested by Samuli Holopainen)
    - Fix: Shadow opacity wasn't handled correctly for single color layers which Hollywood internally stored as
      chunky pixels
    - Fix: SelectLayer() and TranslateLayer() didn't set an internal modification flag which could lead to
      problems in case they were used while a transition effect in BGPic emu mode was running
    - Fix: Transforming graphics was often rather imprecise; this should be much better now
    - Fix: When rotating or affine transforming graphics (e.g. brushes), a pixel was sometimes cut off at the
      right or bottom edge
    - Fix: When drawing rectangles with round corners and not all four corners were rounded, the non-rounded
      corners often still had very slight rounding visible when anti-aliasing was turned off
    - Fix: When the layer scaling engine was active and ShowLayer() or MoveLayer() was called to move a layer
      to a certain position, the result was often a pixel off from the real position; this also affected some
      other parts of Hollywood that positioned layers like the #SCROLLXXX transition effects
    - Fix: Wrong positioning of layer shadows and borders for shapes drawn using either the graphics primitive
      or the vectorgraphics library when non-proportional scaling was active; this bug was a consequence of a
      fix in 9.1 which unfortunately was only fixed in one instance in the code even though the same code was
      there multiple times; consider this a punishment for not following the DRY paradigm!
    - Fix [Amiga]: Contrary to the documentation, OpenSerialPort() didn't support passing a string containing
      the device and port to open; it always opened serial.device, allowing the user to merely specify the unit
      number in portname$ (reported by Nigel Tromans)
    - Fix: Once ScaleBrush(), RotateBrush(), TransformBrush(), or ScaleAnim() were called on a vector brush or
      anim, it was impossible to undo the transformation so that the vector brush/anim could be added as a
      vector layer
    - Fix: ScaleAnim() was only handled correctly for vector anims that were not loaded from disk when called
      the first time; starting with the second time, the dimensions of the anim started to get messed up
    - Fix: Calling ScaleBrush() on a vector brush and then RotateBrush() on the same brush wasn't handled as
      it should; it generated a rotated brush whose dimensions were incorrect
    - Fix: Small memory leak when using DisplayAnimFrame() with layers turned off and transformation active
      through the standard draw tags and the anim object being loaded from disk and using a palette
    - Fix: SetLayerShadow() and SetLayerBorder() didn't work correctly when the palette mode had been set to
      #PALETTEMODE_PEN using SetPaletteMode()
    - Fix: TrimBrush() didn't work correctly with palette brushes
    - New: Added support for disabling text object adjustment; you can set the new tag "NoAdjust" to TRUE when
      you call CreateTextObject() to disable text object adjustment; the new #ATTRADJUSTX and #ATTRADJUSTY
      attributes allow you to get the text object adjustment offset in case you want to handle this manually
    - New: CreateTextObject() supports a new "Linespacing" tag now which allows you to set an additional line
      spacing value for the text object
    - New: ConvertToBrush() can also convert vector brushes, animations, BGPics, layers, and text objects to
      vector brushes now; previously, all vector objects were converted to raster brushes; you can now make
      ConvertToBrush() create vector brushes for you by setting the new "Vector" tag in the optional table
      argument to TRUE
    - Change: ConvertToBrush() uses a new syntax now that accepts an optional table argument instead of single
      optional parameters
    - Fix: Brushes created from anti-aliased text objects using ConvertToBrush() could easily crash Hollywood
      when using certain features such as applying color filters
    - New: Added TransformPoint(), TransformBox() and Matrix2D() to conveniently work with 2x2 transformation
      matrices in Hollywood
    - New: Added TransformTextObject() command; this allows the transformation of a text object using a 2x2
      transformation matrix which is often more convenient than using ScaleTextObject() which expects absolute
      pixel values
    - Fix: Crash when using DisplayTextObject() to show an anti-aliased text object and passing color-modifying
      filters in the standard draw tags (e.g. tint)
    - Fix: DisplayTextObject() didn't handle any of the standard draw tags when layers were turned off
    - Fix: Bad quality when scaling text and rotating the text by -90, -180 or -270 degrees at the same time
    - Fix: CopyTextObject() didn't clone everything which could lead to problems when trying to transform a
      copy of a text object using ScaleTextObject() or RotateTextObject()
    - Fix: The "AnchorX" and "AnchorY" tags in DisplayTextObject() were ignored and were always treated as 0
    - Fix: Memory access fault when using the layer scale engine together with layers of type #TEXTOBJECT
    - Fix: Pressing backspace on InKeyStr() when no cursor was active messed up internal state values in case
      the last character of a line was removed so that InKeyStr() skipped to the previous line; pressing a
      key after such a backspace operation would place the character on a wrong line
    - New: Added #ATTRFONTHEIGHT attribute; this returns the pixel height of the font; this is often the same
      as #ATTRFONTSIZE but not if the font has been opened in points mode or if the underlying text engine
      interprets the font size as something different from the font height; in any case, #ATTRFONTHEIGHT will
      always be the same as #ATTRFONTASCENDER + #ATTRFONTDESCENDER
    - New: SetLayerStyle() now also handles the "ID" tag for layers of type #PRINT and #TEXTOUT; you can pass
      the id of a font object to conveniently change the font of the layer; this is more convenient than having
      to set "Font" and "FontSize" separately
    - New: Added support for vector text objects; currently, those can only be created by font plugins that set
      the HWFONTFLAGS_LAYOUT flag; you can use the new #ATTRTYPE attribute for #TEXTOBJECT to check whether a
      text object is a raster or vector one
    - New [SDK]: Added HWFONTFLAGS_LAYOUT for the new font loader plugins; if this flag is set, a font plugin
      signals that it wants to take over the complete layout engine from Hollywood; this flag allows plugins
      to completely override Hollywood's inbuilt text layout engine with a custom one provided by the plugin;
      this finally makes it possible for plugins to add support for a fully Unicode capable text engine that
      supports right-to-left layouts, exotic scripts and also color emojis embeddded inside the text using
      Unicode and possibly more; this feature can be used to overcome the limitations of Hollywood's inbuilt
      text engine; plugins setting the flag must also be capable of handling 2D affine transformations so this
      new feature can also be used to work around other limitations of Hollywood's inbuilt text engine, e.g.
      the fact that it doesn't support real vector text rotation (Hollywood's inbuilt text layout engine will
      rotate text using a raster-based algorithm which leads to quality losses)
    - New [SDK]: Added support for HWFILETYPE_FONT (also available as #FILETYPE_FONT from Hollywood scripts)
    - New [SDK]: Added support for font loader plugins; this allows you to write plugins which add support for
      new font formats; this is the last piece in the puzzle because fonts were the only part of Hollywood that
      couldn't be extended via plugins; by adding support for font loader plugins, this is a thing of the past
      now and plugins can add support for custom font formats; usage is very similar to other Hollywood APIs
      supporting plugins, i.e. SetFont(), OpenFont(), and @FONT support new "Loader" and "Adapter" tags now
      that can be used to tell Hollywood which loaders and adapters should be used and in which order those
      should try to open the font; there's also a new #ATTRFONTLOADER attribute now which allows you to find
      out the loader that has opened a font; note that because of the introduction of the "Loader" tag, the
      "Engine" tag is now deprecated and shouldn't be used any longer; it is still supported for compatibility
      but it's recommended to use the new "Loader" tag instead; for consistency reasons, however, there is a
      new constant named #FONTENGINE_PLUGIN that is returned for #ATTRFONTENGINE in case the font was opened
      by a plugin; font plugins can be identified by looking for the new #PLUGINCAPS_FONT capability bit; the
      font plugin interface is very flexible and supports 1-bit monochrome fonts, CLUT color fonts, fonts with
      anti-alias and 32-bit color fonts
    - New [MorphOS]: ShowNotification() supports the MagicBeacon system now; two different kinds are supported:
      normal and error notifications; to show an error, set the "Icon" tag in the optional table argument to
      #REQICON_ERROR; otherwise, a normal notification is shown; the notification will use app name defined in
      the @APPTITLE preprocessor command
    - Fix: When compiling executables or applets, Hollywood will no longer fail in case a plugin is missing;
      this allows you to cross-compile scripts on platforms that don't have all plugins available on the target
      platform, e.g. it's now possible to compile scripts that need the Plananarama plugin on Windows even
      though Plananarama isn't available on Windows (reported by Lazar Zoltan)
    - Change [Non-Amiga]: Removed all graphics routines for 16-bit displays; they weren't used but were still
      in the executable; this decreases the Hollywood executable size by about 40 kilobytes
    - New: Added CreateFont() command to construct a custom font from a brush source; you have to pass the
      character dimension as well as a character mapping string; in the brush source all characters must have
      the same size but you can adjust the character width via an optional table tag; CreateFont() can come in
      useful to easily construct fonts from images as they were often used in scene demos and 1980/90s games;
      CreateFont() supports palette brushes as well as brushes with mask or alpha channel; if the source brush
      is a 1-bit palette brush, you will also be able to change the color of the font; otherwise the font is
      treated as a color font that always uses the same color no matter what the current font color is set to;
      CreateFont() is quite flexible and could also be used as a tilemapper; just map each tile to a character
      and then draw the whole tilemap using a single call to TextOut(); also added the new #FONTTYPE_BRUSH
      return value for #ATTRFONTTYPE
    - Fix: #UNDERLINED text style didn't use the correct color when drawing color fonts in non-palette mode
    - Fix: #SHADOW and #BORDER text styles didn't work at all for color fonts when layers were turned off
    - Fix: The internal fast text draw mode didn't work correctly when drawing color fonts to palette targets
      when palette mode was set to #PALETTEMODE_REMAP (also the default)
    - Fix: SetPalette() will no longer set the transparent pen when changing the palette of the current BGPic
    - Fix [IDE]: Syntax parser didn't handle escaped quotes in strings correctly (reported by Anbjorn Myren)
    - Fix: The digits argument in StrStr() wasn't handled correctly in case the string used the exponential
      notation (reported by Samuli Holopainen)
    - Fix: Crash when the number of digits passed to StrStr() were more than the string had characters
    - New: Added NearlyEqual() function for comparing floating point numbers for near equality; comparing
      floating point numbers using the equality operator can lead to problems in case there are very minimal
      differences on the bit level, e.g. caused by (de)serialization; that's why it's recommended to compare
      floating point numbers against near equality instead of absolute equality for more reliability
      (requested by Michael Rupp)
    - New: Added ExtendBrush() function; this can be used to enlarge a brush; the additional pixels can be
      specified individually for each side; you can also specify a filling color/pen and whether or not the
      newly added area should be transparent or opaque in case the brush has a mask or an alpha channel
    - Fix [Doc]: The optional table argument accepted by SetLayerDepth() was undocumented
    - New: SetBrushDepth(), SetLayerDepth(), and SetDepth() support the "Remap" and "ClipPen" tags in their
      optional table argument now; if "Remap" is set to FALSE, out-of-range pens will not be remapped to
      existing pens but instead they will simply be set to the pen specified in the "ClipPen" tag, i.e. no
      remapping will take place; note that those tags are only effective when reducing colors; if the new
      depth has more pens than the old depth, the new tags won't do anything
    - New: ReplaceColors() also supports palette brushes now; if you pass a palette brush to it, you need to
      pass pens instead of colors in the table argument
    - New: CreateBrush() accepts a "Depth" tag in the optional table argument now; this allows you to create
      a palette brush without specifying the "Palette" tag; you can also specify the "Palette" tag on top of
      the "Depth" tag; if the specified palette has more colors than the specified depth, those colors will
      be discarded; if it has less colors, the unused pens will be set to black; alternatively, the "Depth"
      tag can also be set to 32 in which case a brush with alpha channel will be created
    - Fix [MorphOS]: Stack size for the video and audio handler threads was too low for some hungry decoders
      (reported by Petteri Valli)
    - Fix [Amiga]: Stack size for the audio decoder thread was not enough for some stack hungry decoders like
      AAC parametric stereo (reported by Petteri Valli)

    Version 9.1     (23-Apr-22)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - Fix: When Hollywood was in layerscale mode and the display size was changed to the original, unscaled
      size, layers that had a border and were shown using the #SCROLLXXX transition effect kept their scaled
      border imagery instead of using the unscaled one
    - New [SDK]: Added HWOPENCONNTAG_ENCODED tag; this allows network adapters to find out if the "Encoded"
      tag has been set to TRUE in DownloadFile()
    - New [SDK]: Added HWOPENCONNTAG_FAILONERROR tag; this allows network adapters to find out if the "Fail404"
      tag has been set to TRUE in DownloadFile()
    - Fix [Non-Windows]: Passing values greater than 32-bits to Hollywood functions which cannot deal with
      values greater than 32-bits led to the value getting clipped to $FFFFFFFF; on Windows, however, all bits
      higher than 31 were simply discarded; the Windows behaviour is now used on all other platforms as well
      because it is consistent with how Cast() behaves, i.e. when converting a value greater than the target
      type's range Cast() won't clip the value to the maximum acceptable by the type but it will simply kill
      all bits higher than the target type's range, e.g. Cast()ing 65537 to unsigned #SHORT will result in 1
      because Cast() will simply kill bit 16 in that case making bit 0 remain (reported by Fabio Falcucci)
    - Fix: Escaped slash character couldn't be deserialized from JSON (reported by Petteri Valli)
    - Fix: UnmidStr() didn't sanity check the position value that was passed to it (reported by Ralf Gruner)
    - Fix [IDE]: The "Default" keyword wasn't highlighted when followed by a colon (reported by Ralf Gruner)
    - Fix [OS4/MorphOS]: #CROSSFADE could crash when used with chunky graphics and hardware acceleration on
    - Fix: Setting ScaleX/ScaleY to 1/1 using SetLayerStyle() didn't work for layers which were scaled using
      the Width/Height tags (reported by Anbjorn Myren)
    - Fix [Windows]: CanonizePath() didn't work correctly with network paths (reported by Ralf Gruner)
    - New: Added #TIMESTAMP_RAW type to GetTimestamp(); this will return a raw clock value that is independent
      of the system clock and is monotonically increasing; this can be useful because #TIMESTAMP_UNIX depends
      on the system clock because it returns the number of seconds since January 1st, 1970 so you could be in
      trouble in case the system clock is changed between two GetTimestamp() calls
    - Change: The parameter to GetTimestamp() has been changed into a type parameter that accepts the special
      constants #TIMESTAMP_START or #TIMESTAMP_UNIX; since those constants are 0 and 1 respectively, there are
      no compatibility issues with previous versions
    - Fix [Linux/Android]: Timer functions are now independent of the system clock, i.e. they will never return
      spurious values in case the system clock changes while the script is running (reported by Ralf Gruner)
    - New [Windows]: Added "Verb" tag to the optional table argument accepted by Execute() and Run(); this can
      be used to pass a special verb to Windows to tell it what to do with the file (e.g. "print", "find" etc.)
      (requested by Torgeir Vee)
    - Fix: Showing single list items in layers created by TextOut() in frame mode didn't always work correctly
      when wordwrapping was involved
    - New: Added "ListSpacing" and "DefListSpacing" tags to TextOut() and SetLayerStyle(); this allows you to
      set an individual line spacing value for lists; this works in the same way like the "ListBullet",
      "ListOffset" etc. tags, i.e. you have to pass a table containing line spacing values for the different
      lines
    - New: Added "SimpleList" tag for TextOut(); if this is set to TRUE, TextOut() won't successively extract
      the list bullet configuration from the "ListBullet" et al. tables but just statically use the item at
      the specified tab index, i.e. tab position 1 will always use the bullet specified in ListBullet[1], tab
      position 2 will use ListBullet[2] and so on; this will restrict your flexibility but can make things
      easier if you always want to have the same configuration for each tab position
    - New: Added "GlobalTransparency" standard draw tag; this is only handled when layers are enabled; if it
      is set to TRUE, the layer's transparency setting set using the "Transparency" tag or using functions
      like SetLayerTransparency() is also applied to the layer's shadow; for some reason Hollywood never did
      that by default and in order to maintain compatibility with scripts which expect the old behaviour the
      functionality has been added using a new tag; if you want to globally enable the new behaviour, just
      call SetDrawTagsDefault() with "GlobalTransparency" set to TRUE
    - Fix: AddBoxToPath() crashed when the rectangle width or height was less than 1 and round corners were
      active (reported by Ralf Gruner)
    - Fix [Amiga]: Hollywood is now also compatible with reqtools.library v38; previously, functions like
      StringRequest() required reqtools.library v39 to be installed
    - Fix: SetLayerStyle() crashed when changing border settings for an antialiased monochrome colored layer
      and applying a color filter at the same time (reported by Tom C.)
    - New: SetLayerStyle() accepts a new tag named "IgnoreAnchor" now; if that tag is set to TRUE, Hollywood
      will ignore the layer's anchor point when changing its position or style; this means that the anchor
      point will be treated as 0/0; this can be useful e.g. if you'd like to change the text of a layer whose
      anchor point is not 0/0; in such cases changing the text would also re-position the layer; this can be
      prevented by setting "IgnoreAnchor" to TRUE now; "IgnoreAnchor" can also be useful in case you want to
      position layers whose anchor point is not 0/0 relative to their top-left corner
    - New: Added #BULLET_HOLLOWCIRCLE bullet type when using TextOut() in list mode 
    - New: Type #LAYER supports the new #ATTRBUTTON attribute now with GetAttribute(); this allows you to get
      the id of the button associated with the layer or Nil if there is none
    - Fix: The "Color" tag in SetLayerStyle() didn't work when combined with one of the transformation tags
      like "Rotate" etc.
    - New: The database passed to the LINKFONTS argument or to the "Fonts" tag in the @LINKER preprocessor
      command can now also contain direct links to *.ttf/*.otf files instead of just font names
    - New [SDK]: Added HWRPFTAG_X and HWRPFTAG_Y tags for GfxBase.RawPolyFill(); these allow you to specify
      the destination offset for the polygon; the destination offset can't be in the vertices themselves since
      GfxBase.RawPolyFill() will always normalize the vertices
    - Fix [SDK]: GfxBase.RawPolyFill() was broken
    - Change: #BIGSINE move mode looks better in higher resolutions now
    - New: Line() can optionally add arrowheads now to one or both ends of the line; to do that, simply pass
      the new optional "Arrowhead" tag; this tag is also supported by SetLayerStyle() and GetLayerStyle()
    - Fix [Doc]: The optional format and table arguments of SaveIcon() weren't documented
    - New: Added HasItem() as a more grammatical synonym for HaveItem() (reported by Tom C.)
    - Fix [Windows]: #FONTENGINE_NATIVE on Windows was also able to open raster fonts even though Hollywood
      doesn't support them through the native font engine; this could sometimes lead to a crash as well
    - Fix: Calling StopMusic() or PauseMusic() on a music that wasn't playing could mess up certain internal
      states required when running Hollywood in the legacy single music mode
    - Fix [MorphOS]: Improved precision when serializing and deserializing floating point values (reported by
      Petteri Valli)
    - Fix [WarpOS/SDK]: All plugin functions introduced in Hollywood 9.0 weren't available to WarpOS-native
      plugins; also GfxBase.GetIconForDensity(), GfxBase.FreeIcon() and GfxBase.RawScale() didn't work on
      WarpOS
    - New [SDK]: Added GfxBase.MapCoordinate() to map one of Hollywood's special coordinate constants to an
      absolute coordinate
    - New [SDK]: Added HWDISPTAG_XPOSITION, HWDISPTAG_YPOSITION, and HWDISPTAG_FLAGS; display adapters can
      write to these tags in case they open their display at a different position or in a different mode than
      requested by Hollywood
    - Fix: Crash when using border transparency on a non-antialiased text layer (reported by Ralf Gruner)
    - Fix: The last entry in a catalog in Hollywood's platform-independent format was only handled correctly
      if it had a terminating newline character (reported by Tony Canazza)
    - Fix [Amiga/SDK]: Messages sent through SendMessage() weren't correctly handled by plugins replacing
      Hollywood's inbuilt display adapter, e.g. GL Galore and Plananarama (reported by Lazar Zoltan)
    - New: Added "ColorSource" tag to FloodFill(); if this is set together with the "AlphaChannel" tag, the
      area to be filled is determined by the color channels whereas all output will be written to the alpha
      channel; this means that the border color passed to FloodFill() must be an RGB color (or #NOCOLOR) and
      the fill color must be an alpha value between 0 and 255 (requested by Tony Canazza)
    - Fix: Hollywood's inbuilt vector graphics renderer didn't position ellipses and arcs correctly on the
      y-axis if their radii weren't identical; this affected AddArcToPath(), AddEllipseToPath() and also
      Ellipse() and Arc() if ForcePathUse() was activated (reported by Tony Canazza)
    - Fix: Removed some restrictions that Hollywood imposed on JSON key names against the specification; all
      characters are valid now in key names except the space character because Hollywood sometimes uses that
      to specify the type of the binary data (reported by Petteri Valli)
    - Fix: JSON deserializer didn't recognize the \u escape sequence
    - Fix: Some control characters weren't serialized/deserialized correctly when Hollywood was in UTF-8 mode
      (reported by Ralf Gruner)
    - New [OS3]: On AmigaOS 3, CreatePointer() also supports palette brushes and sprites now; pointers on
      classic Amiga hardware are always palette-based because they are hardware sprites so if you pass palette
      brushes or sprites to CreatePointer() you have full control over the exact pens used by the pointer;
      previously, palette brushes/sprites were first converted to RGB on AmigaOS 3 and then mapped back to
      palette graphics; this can be avoided now by directly passing palette brushes/sprites to CreatePointer()
      (requested by Juan Carlos Herran Martin)
    - Fix [IDE]: When pasting contents into plain text or XML files edited in the IDE, the text formatting was
      pasted into the IDE's edit control as well (reported by Michael Rupp)
    - Fix: Borderless mode wasn't restored correctly when switching between windowed and fullscreen modes
      (reported by Juan Carlos Herran Martin)
    - Fix [Non-Amiga]: Menu states weren't restored correctly when switching between windowed and fullscreen
      modes (reported by Petteri Valli)
    - New: Hollywood's text renderer also supports zero-width spaces and soft hyphens now; note that those
      characters will only work when drawing text in UTF-8 because both characters, zero-width space and the
      soft hyphen character, are Unicode characters (requested by Ralf Gruner)
    - Fix: Changing certain layer attributes after changing the color of a vector or text layer often reset
      the color to the original layer color (reported by Paul Bloedel)
    - Fix: Changing the color to a color with alpha transparency didn't work for vector and text layers under
      certain circumstances (reported by Paul Bloedel)
    - Fix: Plot() didn't draw anything if the pixel to be drawn collided with the opaque area of a sprite
      (reported by Petteri Valli)
    - Fix: "Continue" didn't work correctly inside the Switch-Case statement (reported by Ralf Gruner)
    - Fix: When opening a file in UTF-8 mode, ReadLine() could get confused when reading a byte that is part
      of the UTF-8 BOM ($ef, $bb, $bf) (reported by Ralf Gruner)
    - Fix: When using the new JSON serializer, integers were often serialized as doubles on some platforms
      (MorphOS, AmigaOS 4, maybe more) (reported by Petteri Valli)
    - Fix [Amiga]: Plugins in LIBS:Hollywood loaded by executables compiled by Hollywood that used ISO 8859-1
      encoding weren't informed about the text encoding (reported by Petteri Valli) 
    - Fix [Amiga]: Ports created by CreatePort() and CreateRexxPort() often changed their names to garbage
      because Hollywood didn't preserve the memory used for storing the port name (reported by Petteri Valli)
    - Fix: Hollywood crashed when loading broken GIF/IFF anims or broken MJPEG AVIs (reported by Tony Canazza)
    - New: Added "AutoFullScreen" and "LayerFullScreen" display mode to the @DISPLAY tag; if this is used,
      Hollywood will use auto-scaled or layer-scaled full screen mode if the host system is powerful enough to
      handle it; this means that on slower systems like AmigaOS, a physical resolution of the monitor will
      occur and no autoscaling or layerscaling will be used whereas on faster systems that support scaling
      using the GPU full screen mode will be emulated by scaling the display to the monitor's dimensions using
      either the autoscaling or layerscaling engine; you can also activate this full screen mode by using the
      new AUTOFULLSCREEN or LAYERFULLSCREEN console argument/tooltype
    - Fix: Soft styles like bold, italic and underlined are no longer applied to bullets when using TextOut()
      with list mode enabled
    - Fix: Crash or gfx glitch with many transition effects when using them on a layer that had either shadow,
      border or filter enabled and was created by TextOut() in list mode
    - Fix: Several problems when using #SCROLLXXX on a layer created by TextOut() with list mode set to TRUE
      (border wasn't drawn correctly, crash when aborting the effect before it's finished when layer had a
      shadow effect, start position wasn't correct for layers with an anchor point different from 0:0)
    - New: MoveLayer() also accepts three arguments now; in that case, it simply moves the specified layer to
      the new position specified, i.e. it does the same as ShowLayer() but using MoveLayer() in such cases
      leads to better readable code because the layer is actually moved
    - New: Added CopyLayer() command which can be used to make an identical copy of an existing layer; all
      layer attributes are cloned except the layer name (if present) because that must be unique; a new name
      for the layer can be passed in the optional table argument (requested by Samuli Holopainen)
    - New: RotateTextObject() and ScaleTextObject() support a new optional parameter now which can be used to
      toggle text transformation with anti-aliased interpolation
    - Fix: Subpar image quality when applying non-proportional scaling to rotated vector text
    - Fix: Layer scaling engine didn't apply scaling matrices correctly to rotated layers when non-proportional
      scaling was active (this was visible for example in the rotated red box in the LayerStyle example)
    - Fix: Transforming alpha channel-only graphics (e.g. text layers) could lead to a crash
    - Fix: The "Edge" text formatting tag only worked if the first character of the tag name was in lower case
      (reported by Fabio Falcucci)
    - Fix: The "Border" text formatting tag didn't work at all (reported by Fabio Falcucci)
    - Fix: RaiseOnError() wasn't fully compatible with RapaGUI 2.0 (reported by Paul Bloedel)
    - Fix [Amiga]: ROM or resident commands couldn't be executed using Execute() (reported by Petteri Valli)
    - Change [IDE]: The Windows IDE uses the RichEdit control 4.1 now (where available); this will fix some
      bugs with the old control like an app freeze under very rare circumstances (reported by Ralf Gruner)
    - Fix: Ror() and Rol() didn't return correct results when the rotation count was greater than the rotation
      bit length (reported by Fabio Falcucci)
    - Fix: Hollywood could crash when using an "OnMusicEnd" event handler and calling CloseMusic() immediately
      after a music had finished playing (reported by Ralf Gruner)
    - Fix [SDK]: Timer states could get messed up when using SysBase.RunTimerCallback() to run a timer callback
      (which RapaGUI 2.0 does, for example) (reported by Michael Rupp)
    - Fix [Windows]: Hollywood didn't scan %USERPROFILE%\AppData\Local\Microsoft\Windows\Fonts when looking for
      fonts to link; on Windows 10, however, user fonts will be installed in that path instead of in the path
      C:\Windows\Fonts (reported by Lars Brämer)
    - Fix [Android]: Using requester functions (e.g. SystemRequest(), StringRequest() etc.) in RapaGUI scripts
      only worked after calling WaitEvent() first
    - Fix [Android]: When "KeepProportions" was set to TRUE, Hollywood also reported touch events outside the
      actual display boundaries (reported by Xabier Payet)
    - Fix [Android]: Immersive mode didn't work correctly when "FitScale" and "KeepProportions" were both set
      to TRUE (reported by Xabier Payet)
    - Fix [Android]: Applets that had the "Encoding" tag set to #ENCODING_ISO8859_1 in @OPTIONS didn't work
      correctly (reported by Thomas Igracki)
    - Fix [IDE]: The IDE could easily crash when a Hollywood program's output contained non-UTF-8 characters
      (reported by Ralf Gruner)
    - Fix [OS4/MorphOS]: Passing #NOCOLOR to FloodFill() didn't work correctly (reported by Lazar Zoltan) 

    Version 9.0     (20-Mar-21)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New: Added Sugarcane example as the official Hollywood 9: Sugarcane welcome presentation
    - New: Added "Quiet" tag for the @OPTIONS preprocessor command; if this is set to TRUE, Hollywood won't show
      its standard startup output
    - Fix [macOS]: GetSystemLanguage() and GetSystemCountry() didn't work correctly when Hollywood was launched
      from the GUI on macOS 10.14+
    - Fix [GUI/macOS]: Hollywood.app didn't work correctly when installed in a path with spaces
    - Change [IDE]: When compiling executables or applets, the IDE's "Save executable" dialog box will not ask
      users to confirm if the destination file can be overwritten if it already exists because Hollywood will
      ask anyway (reported by Anbjorn Myren)
    - Fix [IDE]: Removing the last character of preprocessor command arguments didn't cause a live refresh in
      the preprocessor command scanner window (reported by Michael Rupp)
    - Fix [IDE]: "Replace all" didn't replace all occurrences but just the ones down from the current cursor
      position (reported by Ralf Gruner)
    - New [IDE]: Added "Find previous" menu item to conveniently search backwards (requested by Michael Rupp)
    - Fix [IDE]: The IDE will no longer allow you to save scripts as files that are currently open
    - Fix [IDE]: Scrollbars sometimes weren't updated correctly when switching tabs
    - Fix [IDE]: Changing some options like "Auto spelling adaptation" didn't have an effect before opening a
      new project or restarting the IDE
    - New [IDE]: When typing in the name of a user-defined function the IDE now shows its declaration in the
      status bar so that you can see the parameters it expects
    - New [IDE]: When "Auto spelling adaptation" is active, the IDE will also adapt the spelling of user-defined
      functions now; this can be turned off by setting the new "Adapt spelling of user functions" option in the
      settings (requested by Michael Rupp)
    - New [IDE]: Pressing F2 (or selecting the "Goto function declaration" item from the edit menu) will now
      also scan all open files for the function (requested by Michael Rupp)
    - Fix: Trying to draw an empty path using the inbuilt vectorgraphics engine crashed Hollywood (reported by
      Ralf Gruner)
    - Fix: SetTimeout() didn't return a timeout handle when a timer adapter was installed and Nil was passed as
      the identifier (reported by Michael Rupp)
    - Fix [macOS]: Hollywood, the Hollywood GUI and executables compiled by Hollywood ignored the system's dark
      mode setting and always appeared in normal mode (reported by Michael Rupp)
    - Fix [IDE]: When a line was highlighted because it caused an error and the user moved the scrollbar to a
      new position and tried to change the cursor position, the scrollbar jumped back to the line containing
      the error (reported by Ralf Gruner)
    - New [IDE]: Added a splitter control between the function list and the preprocessor scanner so that you
      can conveniently customize the dimensions of both controls (requested by Michael Rupp)
    - New [IDE]: The IDE also scans for all includes now and adds them to a listview in the dock window on the
      right (requested by Michael Rupp)
    - New [IDE]: Added commenting/uncommenting facilities; if there is no selection or if the selection is on
      a single line, the whole line is disabled using a semicolon comment; if multiple lines are selected, the
      text is commented using /* ... */ (requested by Michael Rupp)
    - New [IDE]: If text is marked when opening the find dialog, it will be used as the dialog's default find
      text now (requested by Michael Rupp)
    - New [IDE]: Pressing Ctrl+H now opens "Replace" as it is common on Windows (requested by Michael Rupp)
    - New [IDE]: Ctrl+TAB now allows you to cycle through all open tabs, Ctrl+Shift+TAB will cycle backwards
      (requested by Michael Rupp)
    - Fix: ResetTimer() will no longer accept negative values (reported by Ralf Gruner)
    - Change [GUI/macOS/Linux]: The Hollywood GUI will now automatically activate SYSTEMSCALE for most of its
      example scripts so that they appear in the correct size on high-DPI monitors; this won't be done for
      user scripts, however; in your scripts, you explicitly have to request this feature by setting the
      "SystemScale" tag to TRUE in @DISPLAY
    - Change [Windows]: Hollywood is no longer DPI-aware by default now; this change has the advantage that
      your programs will now automatically be adapted by the operating system to appear correctly on high-DPI
      monitors, so you don't have to care about the target system monitor's DPI setting at all and just let the
      OS handle it, which is probably what most people want because it's the most convenient solution for the
      programmer (even if the graphics will look blurry because of upscaling on high-DPI displays but that's
      still better than appearing too small which would happen to scripts on high-DPI displays before Hollywood
      9 in case the programmer didn't explicitly take care of handling high DPI displays correctly!); if you
      really want to take care of this yourself, you now have to set the new "DPIAware" tag in the @OPTIONS
      preprocessor command to TRUE to signal to Hollywood that your program is DPI-aware; alternatively, you
      can also pass the new DPIAWARE console argument when compiling your script; setting "DPIAware" to TRUE
      is mostly useful when creating GUIs with Hollywood because GUIs will look blurry when the application is
      not DPI-aware; also, when using the layer scaling engine with layers containing vector graphics, it can
      make sense to set "DPIAware" to TRUE because the layer scaling engine can then scale your script to the
      monitor's resolution without any losses in quality because of the vector graphics involved; note that you
      can also have automatic upscaling on non-Windows systems by setting the "SystemScale" tag to TRUE in the
      @DISPLAY preprocessor command
    - Change: Removed "win32console" and "win64console" target types for the EXETYPE console argument; if you
      want to compile your script as a console program, you need to set the new "ConsoleMode" tag in the
      @OPTIONS preprocessor command to TRUE now and then pass just "win32" or "win64" to the EXETYPE console
      argument; alternatively, you can also pass the new CONSOLEMODE console argument when compiling scripts;
      this change finally makes it possible to easily compile Windows console programs from the Hollywood IDE
      and GUI as well
    - New [SDK]: Added StatDir() function for HWPLUG_CAPS_DIRADAPTER; directory adapter plugins can choose to
      implement this function in order to enable Hollywood to get attributes like date stamps, protection flags
      or comments from directories handled by a directory adapter; note that you also have to set the new
      HWEXT_DIRADAPTER_STAT extension bit if you want to implement StatDir(); this is needed in order to keep
      compatibility with older plugins which don't implement StatDir()
    - New: Added "MapVariables" tag to Eval(); if this is set to TRUE, Eval() will also take normal Hollywood
      variables into account when evaluating the expression; note that the variables must be numeric variables
      only and the ones declared in the "Variables" tag will take precedence
    - New: Added "NoDeclare" tag to Eval(); if this is set to TRUE, all undeclared variables in the expression
      will simply be treated as 0 (reported by Lazar Zoltan)
    - New [GUI/Amiga]: The "OK" button in the "Save executable" dialog is now active by default (requested by
      Lazar Zoltan)
    - New [Linux/macOS]: Run() and Execute() accept a new optional table tag named "ForceExe" now; if this is
      set to TRUE, Run()/Execute() will always treat the file passed in argument 1 as an executable; note that
      by default on Linux and macOS, files that have an extension will be treated as data files that can only
      be opened by a viewer; thus, trying to Run() or Execute() an executable named "test.exe" will not work
      on Linux and macOS because of the *.exe extension; by setting "ForceExe" to TRUE, you can make it work
    - New: Run() accepts a new optional table tag named "ReturnCode" now; set this to TRUE if your "RunFinished"
      event handler should also receive the program's return code when it terminates; note that the return code
      will only be passed if you set the "ReturnCode" tag to TRUE because on AmigaOS 4 and MorphOS, Hollywood
      can't quit before all programs started using Run() with "ReturnCode" set to TRUE have terminated; this
      restriction only applies to programs started using "ReturnCode" set to TRUE and only on AmigaOS 4 and
      MorphOS; when "ReturnCode" is FALSE, which is also the default, Hollywood can quit on those platforms
      even though programs started using Run() are still running; also note that because of a bug in MorphOS,
      retrieving the return code needs at least MorphOS 3.16 (requested by Ravn Gundersen)
    - New: Added "Verbose" tag to DownloadFile() and UploadFile(); if this is set to TRUE, plugins may choose
      to log some detailed output about the connection efforts; note that "Verbose" currently only has an
      effect when a plugin handles the connection; when using Hollywood's inbuilt network adapter, "Verbose"
      won't do anything
    - New [SDK]: Added new tags for HWPLUG_CAPS_NETWORKADAPTER/OpenConnection(); these tags make it possible
      for OpenConnection() to signal that it wants to take over protocol interaction completely; this makes it
      possible to write plugins which add support for custom protocols to DownloadFile() and UploadFile() so
      that they are no longer limited to HTTP and FTP (reported by Xabier Payet)
    - Fix [SDK/Amiga]: DOSBase.FStat() didn't return the file's name in UTF-8; this also impacted Hollywood
      functions such as FileAttributes() which didn't return UTF-8 either
    - Fix [Android]: ReadSerialData() didn't return all data when requesting less bytes than were in the queue
      (reported by Christos Tsaldaris)
    - New [SDK]: SysBase.GetEncoding() supports a new tag named HWGENCTAG_STRING now which will return the
      current string encoding
    - New [SDK]: SysBase.ConvertString() supports a new HWCSTAG_LENGTH tag now which allows you to specify
      the length of the input string
    - Fix: Internal BMP reader didn't handle 32-bit BMPs correctly
    - New: Added #ATTRINTERPOLATE for #DISPLAY; when a scaling engine is active, this will return whether or
      not interpolation is used
    - Fix [Doc]: The optional argument of LayerToFront() and LayerToBack() was documented in the wrong way; it
      should be "swap" but it was documented as "noswap"
    - Change: SetLayerZPos() no longer fails if both positions are the same; it will simply do nothing then
    - New: The "Width" and "Height" arguments of SetLayerStyle() also accept #KEEPASPRAT now
    - Change: Loaders and adapters are now handled in the order they appear in the string that is passed to a
      "Loader" and "Adapter" table argument; e.g. if you pass the string "digibooster|xmp" to OpenMusic(), it
      will first try to open the music using digibooster.hwp and only if that fails will xmp.hwp be asked to
      open the file; this also allows you to prioritize generic loaders like "native", "inbuilt", and "plugin";
      e.g. if you want native and inbuilt loaders to be used before plugin ones, you could pass the string
      "native|inbuilt|plugin" to achieve that; note that this is an API change but there are probably no
      scripts which depend on the old behaviour because it was mostly random
    - New: When used with type #LAYERBUTTON, MakeButton() now supports a new table tag named "ZOrder"; if this
      is set to TRUE, the layer button will respect the layer z-order; this is useful for buttons attached to
      overlapping layers; if those buttons have the "ZOrder" tag set, they will trigger in the order defined
      by the layer stack z-order (requested by Petteri Valli)
    - Change: MakeButton() accepts a new table-based syntax for type #LAYERBUTTON now
    - New: FloodFill() now accepts an optional "AlphaChannel" table tag; if this is set to TRUE, FloodFill()
      will operate on the brush's alpha channel instead of on its color channels; when used in alpha channel
      mode, values in the range of 0 to 255 must be passed instead of RGB colors (requested by Tony Canazza)
    - Fix [IDE]: Hollywood output that didn't contain valid UTF-8 wasn't shown in the debug window; the IDE
      will now assume that the text is ISO 8859-1 encoded in such cases (reported by Christos Tsaldaris)
    - Fix [Android]: Passing a timeout value different than 0 to ReadSerialData() usually crashed Hollywood
      (reported by Christos Tsaldaris)
    - New [Windows]: Hollywood's native anim loader also supports the Windows Imaging Component (WIC) now;
      this makes it possible to load WebP anims and multi-page TIFFs through Hollywood's anim interface; note
      that by default the WIC loader will be used after Hollywood's internal and plugin loaders; to prioritize
      it, pass "Native" in the "Loader" tag
    - New [Windows]: Added support for image loading via the Windows Imaging Component (WIC); this makes it 
      possible for Hollywood to load all image formats you have a WIC codec for (e.g. newer versions of Win10
      ship with a WebP codec pre-installed); Hollywood will try to load images via WIC if all of its internal
      loaders and plugins have failed; alternatively, you can also force Hollywood to use WIC by setting the
      "Loader" tag to "Native"; in that case, WIC will be used directly on Windows and Hollywood's internal
      loaders and plugins will be skipped; note that WIC is not available before Windows XP Service Pack 2
    - Fix: IsMusicPlaying() sometimes returned TRUE even after the "OnMusicEnd" event callback had triggered
      (reported by Juan Carlos Herran Martin)
    - New [Android]: The Hollywood Player for Android has a "Keep proportions" option now
    - Fix [Android]: "KeepProportions" was broken on Android (reported by Alex Carmona)
    - New [SDK]: Added HWDISPFLAGS_KEEPPROPORTIONS; Hollywood will pass this flag to OpenDisplay() if the
      display has the "KeepProportions" tag set
    - Fix: "OnDropFile" event handler didn't report the correct drop position when auto or layer scaling was
      active 
    - Change [Windows/macOS]: Videos handled by the operating system's native video renderer (i.e. DirectShow
      and Media Foundation on Windows, AVFoundation and QuickTime on macOS) are now automatically resized and
      repositioned when a display is resized by the user, even if no scaling engine is active; this is done
      for aesthetic reasons because otherwise it looks really ugly; you can forbid this behaviour by setting
      the NOLIVERESIZE option; note that videos managed by Hollywood's inbuilt video renderer won't be resized
      and repositioned automatically, only videos managed by the OS
    - Fix [macOS/Cocoa]: Paused videos handled by Hollywood's inbuilt video handler didn't refresh correctly
      when changing the display size with auto or layer scaling enabled
    - Fix: Some other transition effects like #HOPENGATE were broken when used with auto- or layer-scaling and
      internal BGPicEmu and single refresh modes enabled; note that single refresh mode is only used by the
      Android backend and some plugins like RebelSDL and GL Galore which is why probably nobody ever noticed
      this bug because it only showed with lots of conditions (see above)
    - Fix: Effects of the #PUSHXXX group were broken when used with auto- or layer-scaling enabled in the
      special BGPicEmu-mode which is internal and only used by Hollywood Designer
    - Fix: Layer scale engine didn't work correctly when adding layers to an off-screen BGPic created using
      CopyBGPic() from a BGPic that had already been layer-scaled
    - Fix [Windows]: Videos that used the OS native renderer (DirectShow) weren't positioned correctly when
      resizing a display that had the "KeepProportions" tag set
    - Change: When "KeepProportions" is active for a display and DisplayBGPic() or ChangeDisplaySize() is
      called, the scaling dimensions are now re-calculated to fit the aspect-ratio of the new BGPic or display
      size; this change also affects SetDisplayAttributes() when it is called with "Width" and "Height"
      parameters (reported by Paul Bloedel)
    - Change: #ATTRMODE for #DISPLAY returns #DISPMODE_FULLSCREEN now also if the display covers the whole
      screen, e.g. when FULLSCREENSCALE or FITSCALE is used or the scaling dimensions match the screen's
      dimensions etc.
    - New: Added #DISPMODE_MODESWITCH; this does the same as pressing ALT+RETURN, i.e. it switches between
      windowed and fullscreen, depending on which mode is currently active; note that the only Hollywood
      commands that accepts #DISPMODE_MODESWITCH is ChangeDisplayMode()  
    - Change [Windows/macOS]: On Windows and macOS (Cocoa) pressing the ALT+RETURN hotkey will now switch to
      scaled fullscreen mode instead of changing the monitor's resolution; changing the monitor's resolution
      doesn't make too much sense on modern hardware any more as it leads to a noticeable glitch, takes 
      considerable time and not all monitors support it any more (especially laptops often don't support it
      at all); so simply using fullscreen scaling instead solves all those problems but Hollywood only uses
      it by default on systems that support GPU-accelerated scaling because otherwise it's too slow; if you
      want the old behaviour back, you can set the new "ScaleSwitch" tag to FALSE; you can also use this tag
      to enable the new behaviour on systems that don't use it by default (e.g. Amiga); by default, Hollywood
      will use proportional scaling with anti-aliased interpolation; this can be turned off by setting the
      "KeepProportions" and "SmoothScale" tags to FALSE; there are also some new command line arguments that
      allow you to fine-tune the behaviour: SCALESWITCH, NOSCALESWITCH, NOKEEPPROPORTIONS, NOSMOOTHSCALE; you
      can also query #ATTRSCALESWITCH (reported by Anbjorn Myren) 
    - New: ChangeDisplayMode() now supports #DISPMODE_FULLSCREENSCALE as well; this can be used to easily put
      a display into fullscreen scale mode; by default, autoscaling is used; you can change this by setting
      the new "Layerscale" table tag to TRUE; you can also specify whether or not proportional scaling should
      be used by setting the new "KeepProportions" tag and "SmoothScale" can be used to toggle anti-aliased
      interpolation when scaling  
    - Change: The optional table argument of ChangeDisplayMode() can now also be passed in the 2nd argument;
      the desired dimensions can be passed in the new "Width" and "Height" table tags; the old syntax is
      still supported for compatibility of course
    - Change: if the "Monitor" tag isn't set in the optional table argument, ChangeDisplayMode() will now
      always automatically detect the monitor the display is on; so if it is on a second monitor and you call
      ChangeDisplayMode(#DISPMODE_FULLSCREEN), that monitor will be put into fullscreen mode; previously,
      always the first monitor was used (except if the "Monitor" tag was set for the display)
    - New [macOS/Cocoa]: BeginRefresh()/EndRefresh() are now supported for even more efficient drawing; if
      your script doesn't use a double buffer and you want to have the most efficient drawing, make sure to
      use BeginRefresh()/EndRefresh()
    - Change [Windows]: Flip() will also use the new VSYNC mode now if the vsync argument is set to TRUE
      (which is also the default); this allows you to get butter-smooth double-buffered animations with
      Hollywood on Windows but note that this is only available with Direct2D, which needs Vista SP2 and up
    - New [Windows]: Added "VSync" tag for @DISPLAY and CreateDisplay(); if this is enabled, the Direct2D
      renderer will be configured to never draw faster than the monitor's refresh frequency; this tag is only
      useful for projects targetting Windows only because it's not available on the other platforms; note that
      VSYNC is also available as a console argument which is probably only useful for testing purposes
    - New [Windows]: Added support for Direct2D; this is very important since it allows Hollywood to use
      GPU-accelerated scaling which will radically boost scaling performance when using autoscale mode, even
      with antialiasing enabled; this is especially important when scaling Hollywood scripts to very high
      resolutions like 4K or 8K; scaling gfx to such resolutions is too much for the CPU and definitely needs
      GPU acceleration; note that Direct2D needs at least Windows Vista SP2; Hollywood will use the Direct2D
      rendering backend by default now on all systems that have Direct2D, i.e. Vista SP2 and up; on all other
      systems, the old, non-accelerated renderer will be used; you can also force the use of the old renderer
      on Windows systems that have Direct2D by setting the new SOFTWARERENDERER console argument; this is also
      available as a @DISPLAY and CreateDisplay() tag; note that if your script doesn't use a double buffer and
      you want to have the most efficient drawing, you should use BeginRefresh()/EndRefresh() now on Windows
      too because Direct2D is most efficient when drawing in full frames
    - Fix: Circles and ellipses with very small radii were shaped rather oddly (reported by Tony Canazza)
    - New: If you pass #NOCOLOR as the border color to FloodFill(), borderless flood filling will be used,
      i.e. all pixels matching the color of the starting pixel will be filled (requested by Tony Canazza)
    - Fix: Layer border was always drawn in full during transition effects; this has been changed now but
      only for transparent layers with text or pixel graphics (not for vector graphics!); for non-transparent
      and vector graphics layers the old behaviour will still be used because the new one would lead to small
      glitches in the transition between the penultimate and the final frame because of differences in the
      border algorithms; you can force the new behaviour (or disable it) by setting the new "BorderFX" tag to
      TRUE or FALSE (reported by Enrique Mecklenburg)
    - Fix [Android]: Extremely short samples weren't played correctly (reported by Anbjorn Myren)
    - New: CopyFile(), DeleteFile(), and MoveFile() accept an optional table argument named "Force" now; if
      this is set to TRUE, write- or delete-protected files will automatically be unprotected without asking
      the callback function first
    - Fix [Windows]: #COPYFILE_UNPROTECT is now also triggered when CopyFile() tries to overwrite a hidden file
      because those can't be overwritten by default on Windows either (reported by Torgeir Vee)
    - Change [Amiga]: Executables compiled by Hollywood will no longer load all plugins from LIBS:Hollywood by
      default; scripts which want to have that behaviour need to use the new GLOBALPLUGINS argument/tooltype
      or the new "GlobalPlugins" tag in @OPTIONS now; note that plugins you @REQUIRE will still be loaded from
      LIBS:Hollywood, though (but only if they can't be found in the program directory)
    - New [OS4/Windows]: MonitorDirectory() accepts a new "ReportChanges" tag now; if this is set to TRUE, your
      event callback will also be notified about what exactly has changed; there will be two new parameters:
      "Type" informing you about the type of change (add, remove, change) and "Name" will contain the name of
      the file or directory that has been changed; note that the "All" argument has no effect when setting
      "ReportChanges" to TRUE (requested by Christos Tsaldaris)
    - New [OS3/OS4/MorphOS]: Linked plugins will now be loaded directly from the executable or applet without
      using temporary files; note that this only works for uncompressed executables or applets; if you activate
      compression, temporary files will be created (requested by Petteri Valli)
    - New [SDK]: Added support for vector animations; anim plugins have to set the new HWEXT_ANIM_VECTOR
      extension flag to mark themselves as capable of loading vector anims; there are also some new functions
      that vector anim plugins have to implement; the actual behaviour of these functions is very similar to
      the image vector plugins
    - New: Added support for vector animations; vector animations behave the same way as vector brushes, i.e.
      they can be transformed without losses in quality; currently, vector animations can only be created by
      Hollywood plugins; it's not possible to create a vector animation in Hollywood code directly; you can
      query the new #ATTRTYPE attribute on #ANIM to find out if an animation is a raster or a vector one
    - Fix: CreateSprite() didn't work with disk-based animations
    - Fix: @SPRITE crashed when used with animations that were loaded by a plugin
    - Fix: ScaleBrush() didn't work correctly when using a vector brush and passing the brush's original size
      after it had already been scaled using ScaleBrush() before
    - New: Added GetLocalInterfaces() to the network library; this will return a list of all interfaces that
      are currently available; it will return a table that contains "Name", "Address", and "Protocol" for each
      item; this allows you to conveniently determine a system's local IP address (requested by Alex Carmona) 
    - Fix: Manually resizing a Hollywood display using the mouse didn't work correctly when using the new
      "ScaleFactor" scaling mode introduced in Hollywood 8.0; this also affected the "SystemScale" mode which
      uses the "ScaleFactor" mode internally
    - Fix: Scripts included via the @INCLUDE preprocessor command weren't automatically converted to UTF-8 in
      case they used some different encoding (reported by Lazar Zoltan)
    - Fix: The Dim and DimStr statements broke the @IF, @ELSEIF, and @ELSE preprocessor commands when used
      directly after a preprocessor command whose condition was FALSE (reported by Dick Valk) 
    - Fix: When closing and reopening a display, menu states like selected and disabled items were lost; on
      AmigaOS this also happened when hiding displays and showing them again (reported by Paul Bloedel)
    - Fix [Windows]: Hollywood Player didn't open its file requester when started from the Windows 10 start
      menu (reported by Tejinder Brar)
    - New [Windows]: Added support for Microsoft's Media Foundation framework; this allows scripts to play MP4
      and some other video formats with full hardware acceleration in decoding, drawing, and scaling; because
      of this it is much faster with MP4 than Hollywood's AVCodec plugin and can easily be used for Full HD
      60fps playback; to make Hollywood use this video backend just pass "native" in the "Loader" argument of
      OpenVideo() or @VIDEO; note that Media Foundation needs at least Windows 7 (requested by Niels Schapke)
    - Fix [IDE]: Text color wasn't correctly set for unformatted text (e.g. when opening *.xml or *.txt files
      in the Hollywood IDE) (reported by Christos Tsaldaris)
    - Fix [Windows]: Hollywood will no longer try to install a menu for transparent windows; this doesn't make
      sense on Windows and caused some problems with mouse events (reported by Paul Bloedel)
    - Change [OS4]: OpenURL() no longer uses openurl.library but AmigaOS4.1's launch-handler, which can be
      configured using SYS:Prefs/URL, now (reported by Jörg Renkert)
    - Fix [OS3]: GetVolumeInfo() returned negative values when used with partitions that are bigger than 2 GB
      (reported by Petteri Valli)
    - New: OpenFile() accepts a table tag named "WriteBOM" now; if this is set to TRUE and the IO mode is set
      to #MODE_WRITE, OpenFile() will write the UTF-8 BOM to the beginning of the file  
    - New: OpenFile() accepts a new table tag named "Encoding" now; this can be used to set the encoding if
      the file contains text; if you set this to #ENCODING_ISO8859_1, functions like ReadLine(), ReadString(),
      etc. will automatically convert the ISO 8859-1 characters in the file to UTF-8 which is expected by
      Hollywood's string functions in case Hollywood is in Unicode mode (which it is by default); on writing,
      functions like WriteLine(), WriteString(), etc. will automatically convert Hollywood's UTF-8 strings
      back to ISO 8859-1 then; quite useful when dealing with non-UTF-8 text files; there's also a new
      function named SetFileEncoding() now which allows you to set the file encoding after it has been opened
      and the current encoding can be queried using #ATTRENCODING now
    - Fix: ReadLine() didn't skip the UTF-8 BOM in case the default string encoding was set to #ENCODING_UTF8
      (which is the default when Hollywood is in Unicode mode)  
    - Fix: ReadLine() didn't handle traditional Macintosh text files correctly (those use just a carriage
      return to break lines)
    - New: Added #IO_FAKE64 for ReadInt() and WriteInt(); this can be used to read/write a 64-bit integer
      value; note that since Hollywood's numeric type is a floating point 64-bit value you can't use the whole
      64-bit integer range; that's why the flag is called "fake 64"; however, it can store numbers much bigger
      than 32-bit integers; precisely, the range is [-9007199254740992,9007199254740992] which should be
      fairly enough for everything; note that #IO_FAKE64 only supports #IO_SIGNED; you cannot use it together
      with #IO_UNSIGNED
    - Change: The little endian parameter of ReadByte(), ReadShort(), ReadInt(), WriteByte(), WriteShort(),
      and WriteInt() has been changed into a generic flags parameter to make it possible to pass some more
      options to these functions; these are #IO_SIGNED and #IO_UNSIGNED; note that ReadInt() and WriteInt()
      use #IO_SIGNED by default whereas the byte and short functions use #IO_UNSIGNED by default; there's also
      the flag #IO_LITTLEENDIAN which provides full compatibility with the previous behaviour
    - New: OpenFile() also accepts the special constants #STDIN, #STDOUT, and #STDERR now to open a program's
      standard input/output/error stream; this can be useful for advanced users (requested by Fabio Falcucci)
    - Fix: OpenFont(), SetFont(), and @FONT crashed with #FONTENGINE_INBUILT when trying to open *.ttf files
      that didn't have a style tag set (reported by Tony Canazza)
    - New: Added #ATTRFONTCHARMAP to query a font's charmap using GetAttribute()
    - New: OpenFont(), SetFont(), and @FONT support a new tag named "CharMap" now; this allows you to specify
      the charmap to use; normally, this is not necessary but some fonts (e.g. Wingdings, Webdings) use custom
      charmaps that can't be consistently mapped to Unicode; note that the "CharMap" tag is only supported if
      the font engine is set to #FONTENGINE_INBUILT; to find out the charmaps supported by a font, use the new
      GetCharMaps() command (reported by Domenico Lattanzi)
    - Fix [Windows]: TrueType fonts with non-ANSI encodings couldn't be opened using the Windows' native font
      engine
    - New [SDK]: Display satellites can now also be notified about mouse pointer commands; to do that, you
      need to set the HWADS_MOUSEPOINTER tag to TRUE; your dispatcher will then receive HWSATOP_SETPOINTER,
      HWSATOP_SHOWHIDEPOINTER and HWSATOP_MOVEPOINTER events
    - New [SDK]: Added HWEXT_DISPLAYADAPTER_TRAYICON and HWSDAFLAGS_SETTRAYICON; if those are set, display
      adapters can hook into Hollywood's SetTrayIcon() function and override it with a custom implementation;
      to post "TrayIcon" events to Hollywood's event queue, use the new HWEVT_TRAYICON type
    - Fix: Constants weren't preserved correctly when compiling an applet to an applet or executable; please
      note that this affected only scripts which tried to resolve a constant by its string name, e.g. by
      using the GetConstant() function; constants used literally in the script weren't affected by this bug
    - New: @DIRECTORY also supports the "Link" tag to specify whether or not the directory contents should be
      linked to the output executable or applet when compiling
    - New: Added @CATALOG preprocessor command; this preprocessor command can be used to define a catalog for
      your script that is used for internationalization ("i18n"); all catalogs found inside the subdirectory
      "Catalogs" will be linked to your applet or executable when compiling your script; this is especially
      useful on Android because external file access is more difficult on mobile platforms; note that there
      can only be one catalog per script; the only additional tag supported by @CATALOG is "Link"; also note
      that catalogs linked to your script should be in Hollywood's catalog format, not in Commodore's one
      which Hollywood still supports for compatibility
    - Fix: OpenCatalog() didn't handle the UTF-8 BOM correctly
    - New [SDK]: Added LuaBase.luaL_getconstant() for getting information about a Hollywood constant
    - New [SDK]: Added LocaleBase.OpenCatalog(), LocaleBase.CloseCatalog(), and LocaleBase.GetCatalogString();
      these allow you to deal with Hollywood catalogs from plugins; you can pass NULL to GetCatalogString() in
      order to specify the currently open catalog
    - New [SDK]: Added IPC adapter support; this new plugin capability flag allows you to override Hollywood's
      inbuilt handler for inter-process communication; this is especially useful for plugins installing their
      own display adapter because Hollywood's inbuilt IPC handler is only compatible with Hollywood's inbuilt
      display adapter (except on Amiga); to replace Hollywood's inbuilt IPC handler, plugins have to set the
      HWPLUG_CAPS_IPCADAPTER bit; HWEVT_USERMESSAGE is then used to post IPC message events to Hollywood's
      event queue
    - Fix: Hex numbers bigger than 2^32-1 weren't handled correctly by the parser and by Val(), ToNumber(),
      and HexStr()  
    - New: Shl(), Shr(), and Sar() accept an optional parameter now that, when set to TRUE, allows you to put
      these functions into "big number" mode; this means that they will be able to operate on numbers larger
      than 2^32-1; keep in mind, though, that full 64-bit integers aren't supported in Hollywood because its
      numeric datatype is a 64-bit floating point one; while this can store very very large numbers too it's
      of course not possible to store the full 64-bit integer range because it needs some bits to store the
      fractional parts; the integer range that can be represented by Hollywood's 64-bit floating point type
      is [-9007199254740992,9007199254740992]
    - Fix: The modulo (%) and integer division (\) operators as well as the Int() command always converted all
      operands to signed 32-bit; they now use signed 64-bit integers instead (reported by Fabio Falcucci)
    - New [Linux/x64]: Hollywood uses GTK3 now on x64 Linux; all other Hollywood versions for Linux (x86, arm,
      ppc) still use GTK2, however, because Linux versions for those architectures are typically older and
      GTK3 might not be available on all of them; on x64, however, GTK3 has been the standard GUI toolkit for
      a very long time now so it is widely available (note, however, that at the time of this writing GIMP
      is still using GTK2!)
    - Fix [OS4]: DateToTimestamp() and DateToUTC() didn't work correctly because of a bug in AmigaOS4's clib2
      (reported by Lazar Zoltan)
    - New: Added IgnoreCase() command; this can be used to globally control whether or not functions like
      FindStr() should be case sensitive or not; by default they are but you can now change this default by
      using IgnoreCase(); the following functions are affected by IgnoreCase(): FindStr(), ReverseFindStr(),
      ReplaceStr(), CountStr(), CompareStr(), StartsWith(), EndsWith() 
    - Fix [OS4]: Small memory leak when linking fonts loaded using the bullet.library API
    - Fix [Amiga]: Requesters were shown on Workbench screen in case the current front screen wasn't a public
      screen but a custom screen  
    - New [SDK]: Added HWDISPFLAGS_TRAPRMB which will be set if the "TrapRMB" tag has been set to TRUE
    - New [SDK]: Added support for menu adapters; this allows display adapters to hook into Hollywood's menu
      library and replace it with custom code that fits to the respective display adapters; to install a
      menu adapter, you need to set the HWEXT_DISPLAYADAPTER_MENUADAPTER extension bit, implement all required
      functions, and then pass HWSDAFLAGS_MENUADAPTER to GfxBase.SetDisplayAdapter(); Hollywood will then pass
      menus to you via the new HWDISPTAG_MENU or by calling SetMenu(); to post menu events to Hollywood, use
      the new HWEVT_MENUITEM type
    - New: Added DisableVWait() and EnableVWait(); these can be used to globally disable Hollywood's VWait()
      command; this is only useful for testing purposes; it allows you to disable internal calls to VWait()
      done by functions like the transition effect library, PlayAnim(), MoveXXX() functions, etc.; if VWait()
      is disabled, there will be no throttle on drawing and Hollywood will draw as fast as the system permits
    - Change [OS3]: for usability reasons, Plananarama is now automatically activated if neither CyberGraphX
      nor Picasso96 is available; if you don't want this, pass Plananarama in the SKIPPLUGINS argument
    - Fix [Amiga]: Keyfile validation during the installation didn't work on systems without CyberGraphX or
      Picasso96 (reported by Dirk Wieczorek)
    - Fix [SDK]: HWLBMFLAGS_READONLY wasn't completely supported when locking mask and alpha channel bitmaps;
      also, Hollywood often accessed the raw data of such bitmaps even outside a LockBitMap()/UnLockBitMap()
      scope; now LockBitMap() and UnLockBitMap() are strictly enforced by Hollywood for mask and alpha channel
      bitmaps as well and the pointer returned by LockBitMap() will only be accessed while it is valid
    - Fix: Potential memory access fault in rare cases when converting UTF-8 characters to Unicode/ISO 8859-1
    - Fix: #WALLPAPERXXX and #ROLLXXX sometimes didn't refresh correctly when used in reverse mode
    - Fix: #HFLOWXXX and #VFLOWXXX effects caused pixel trash when used with graphics that required clipping
      and layers were turned off (reported by Zoltan Lazar's 12 year old daughter)
    - Fix: #FILLTEXTURE caused Hollywood to crash when used as the backfilling style in @BGPIC or LoadBGPic()
    - New: Changing colors of layers using SetLayerStyle() is much faster now because of specially optimized
      routines that have been put in place
    - New: Mono-colored shapes and text drawn using antialias is now stored in a much more memory efficient
      way; this also increases drawing performance for those layers; also layer borders are much more
      memory efficient now
    - Fix [Amiga]: #SELMODE_COMBO with combomode 1 didn't work correctly when using CyberGraphX's obscure
      24-bit screen mode; nobody probably ever used this mode because it is rather inefficient because it
      stores pixels as 3 bytes
    - Fix: Line() often didn't handle standard drawing tags passed to it in the optional table argument
    - New: Added #ATTRFONTENGINE and #ATTRFONTTYPE to query the engine and type of a font; this is supported
      for #FONT, #DISPLAY, #TEXTOBJECT, and #LAYER
    - New: #ATTRFONTDEPTH, #ATTRFONTPALETTE and #ATTRFONTTRANSPARENTPEN are supported now for type #FONT,
      #TEXTOBJECT, #LAYER, and #DISPLAY; they can be used to get color and transparency information from
      palette-based fonts, e.g. Amiga color fonts
    - New: Added #BORDER style tag for SetFormStyle() and SetFontStyle(); this is a synonym for #EDGE which
      is considered a legacy style flag now; also, the text library supports a "Border" tag now which does
      the same as the "Edge" tag (which is still supported for compatibility)  
    - New: Added write support for IFF ANIM; if you pass #ANMFMT_IFF to SaveAnim() or BeginAnimStream(), an
      IFF ANIM will be created for you; Hollywood will use mode 5 compression for the anim, which is the most
      common compression mode for IFF ANIM and often results in smaller anims than when using GIF; note that
      only palette-based IFF ANIMs are supported; an optional transparent pen can also be specified
    - New [OS4]: ChangeApplicationIcon() can also be used with icons instead of brushes now; to do that, just
      pass #ICON in the new optional argument
    - New [SDK]: Added GfxBase.Remap() for reducing colors in images or mapping images to a different set
      of colors; transparent pens and optional dithering are supported
    - New: SetIconProperties() and GetIconProperties() are now also available on non-Amiga platforms and 
      support a new syntax that accepts an icon object instead of an icon file as an argument; many more
      properties are supported now when using this new syntax so that all properties are passed to and from
      this function using tables; it is also possible to access raw tooltype values using these functions
      now in case a plugin supports this
    - Change: Moved the functions SetIconProperties(), GetIconProperties(), SetWBIcon(), SetTrayIcon(), and
      ChangeApplicationIcon() to Hollywood's icon library
    - New [SDK]: Added two new plugin capability flags: HWPLUG_CAPS_ICON and HWPLUG_CAPS_SAVEICON; plugins can
      use these two capability flags to provide custom loaders and savers for icons, i.e. plugins can hook
      into Hollywood's LoadIcon() and SaveIcon() functions; using the new HWLD/SVICONTAG_AMIGAEXT it is also
      possible to return information stored in Amiga icons to Hollywood (e.g. tooltypes, default tool, size
      and position information...) or pass this information back to an icon saver plugin; a plugin with read/
      write support for many different icon formats is coming up!
    - New: Added SetTransparentThreshold() to palette library; this can be used to specify a threshold value
      between 0 and 255 that should be used when quantizing alpha transparency to monochrome transparency;
      all pixels whose alpha value is less than or equal to the threshold value will be considered transparent
      this defaults to 0 which means that only completely invisible pixels will be considered transparent;
      depending on the actual image data you want to quantize, it might be necessary to choose a different
      threshold value here; that's why this function has been added
    - New: Added missing Amiga icon types #AMIGAICON_GARBAGE, #AMIGAICON_DEVICE and #AMIGAICON_KICKSTART
    - New [SDK]: Added functions DOSBase.CreateVirtualWriteFile(), DOSBase.GetVirtualWriteFileBuffer(), and 
      DOSBase.FreeVirtualWriteFile(); these can be used manage virtual files that can be written to; note
      that none of these functions must be called in your ClosePlugin() implementation because by that time
      Hollywood's writable virtual file handler is already gone
    - New [SDK]: Added GfxBase.SaveImage(); this can be used to save pixel data in one of the image formats
      supported by Hollywood or its plugins; CLUT and (A)RGB pixel data are both fully supported
    - New [SDK]: Added HWFILETYPE_ICON; plugins can use SysBase.RegisterFileType() to register new icon file
      formats with Hollywood and scripts can query them via GetPlugins() and the new #FILETYPE_ICON constant
    - Fix: ConvertToBrush() crashed when trying to convert a vector icon to a brush
    - New [SDK]: Added HWLDIMGTAG_ADAPTER and HWLDIMGTAG_LOADER for GfxBase.LoadImage(); these can be used to
      set a loader and/or adapter for loading the image; note that HWLDIMGTAG_LOADER is especially useful
      here because by default, GfxBase.LoadImage() only supports image formats that Hollywood itself can
      load, i.e. HWLDIMGTAG_LOADER defaults to "inbuilt" instead of "default"; therefore, if you want
      GfxBase.LoadImage() to support plugins and OS-native loaders as well, pass "default" or NULL
    - New [SDK]: Added ZBase.compress() and ZBase.uncompress() functions from zlib
    - Fix [Windows]: All file timestamps reported by Hollywood functions such as GetFileAttributes() are now
      consistent with what Explorer returns; previously, they could be one hour off because of DST settings
      (but they were consistent with the timestamps returned by "dir" in cmd.exe which doesn't seem to apply
      DST adjustments for compatibility reasons; however, for Hollywood it's more important to be consistent
      with Explorer which is the case now)
    - Fix: Hollywood didn't validate the integrity of timestamps returned by the file system which could lead
      to crashes in case invalid timestamps were returned
    - New [SDK]: Extended struct hwIconList and struct hwIconEntry to support additional properties needed
      for palette images (depth, transparent pen, palette); note that you may only access these fields if the
      new HWICONFLAGS_EXTENDED flag is set; alternatively, you may set your plugin to require Hollywood 9.0;
      in that case, HWICONFLAGS_EXTENDED will always be set and you may always access the new fields
    - New [SDK]: Added HWGIITAG_PALETTE tag for GfxBase.GetIconImages(); if this tag is set to TRUE, palette
      images will be returned as well; this is needed to maintain compatibility; plugins need to explicitly
      signal that they are able to deal with palette images by setting the tag to TRUE
    - New: #ATTRDEPTH, #ATTRTRANSPARENTPEN and #ATTRPALETTE are supported now for #ICON; note that you have
      to pass two additional arguments to GetAttribute() in that case: the first one specifies the index of
      the image inside the icon to use and the second argument specifies whether or not you want to query the
      selected state image; this defaults to FALSE which means the normal image; note that this additional
      argument is necessary because normal and selected state images can have different depth, transparency
      and palette settings 
    - New: CreateIcon() and @ICON support palette-based images now too; this means that it is now possible to
      have images in multiple color resolutions inside icon containers, e.g. for each icon size you could add
      individual images in 32 bits, 8 bits, 4 bits, 1 bit monochrome, etc.; to do this, just pass brushes
      that are palette-based to CreateIcon() or set the new "LoadPalette" tag when using source type #FILE to
      make CreateIcon() or @ICON load the palette of the image file; note that when "LoadPalette" is set to
      TRUE Hollywood will also automatically load the transparency settings from the image file (if there are
      any); also note that SaveIcon() currently doesn't support palette-based images so it will fail on all
      icons that contain anything else than 32-bit images
    - New: SaveAnim(), BeginAnimStream() and WriteAnimFrame() support palette-based animations now
    - Change: Removed "Transparency" and "UseAlpha" optional tags from BeginAnimStream(), WriteAnimFrame()
      and SaveAnim() because they didn't really make sense; transparency settings are now determined by the
      source image data passed to these functions; there is a new "FillColor" table tag which can be used to
      fill transparent areas with the specified color but that's probably of not much use; also, there is a
      "Depth" tag now which supersedes the "Colors" tag as a more convenient way of specifying the number of
      colors for palette animations; the "Colors" tag is still supported for compatibility, though
    - New: Inbuilt image savers for IFF ILBM, PNG, and BMP also support saving palette-based images now; this
      will result in images being smaller than when saved as 24-bit as it was previously always the case; but
      of course there is a maximum of 256 colors for palette-based images; furthermore, IFF ILBM and PNG
      savers also support pen-based transparency now (requested by Tony Canazza) 
    - Change: SaveBrush() accepts a new, more convenient table-based syntax now that no longer requires you
      to pass the rather obscure "transcolor" argument; this is called "FillColor" now and is part of a
      larger table-based parameter structure; also, it defaults to #NOCOLOR now instead of #BLACK because
      it didn't really make sense have this default to black because in most cases you wouldn't want to have
      a fill color at all but just save whatever is there in the original graphics; furthermore, there is a
      new "Depth" tag which is probably more convenient to use than the old "Colors" tag (but that is still
      supported for compatibility); the "Depth" tag is also available to SaveSnapshot()
    - Fix [SDK]: The string pointer returned by HWPLUG_CAPS_SOUND/GetFormatName() was accessed even after
      CloseStream() had been called; this happened only when using IsMusic()
    - Change [Examples]: Improved HollyAmp example to support infinitely looping sound streams and also made
      it ignore non-seekable sound streams silently; additionally, it will also play Protracker modules now
      (reported by Samuel Crow)
    - New: Protracker modules support #ATTRPOSITION now and will no longer returned -1 here
    - Fix: For dynamic music streams created using CreateMusic(), #ATTRDURATION returned a spurious value; it
      will now return -1
    - New [SDK]: Added HWSNDFLAGS_INFINITE flag; OpenStream() can set this flag to tell Hollywood that this
      stream will loop forever and will never finish; if that is the case, #ATTRDURATION will return -1 when
      a script tries to determine the length of a music
    - New: Added GetProgramDirectory() function; this function returns the program's directory; when running
      scripts, it will be the directory of the Hollywood interpreter; note that this function is just here
      for convenience; the same functionality is supported by GetProgramInfo() but that one is rather hidden
      and somewhat confusing in design
    - New [SDK]: Added HWSYSPATH_STARTPATH for SysBase.GetSystemPath() which returns the start directory
    - New: Added GetStartDirectory() function; this returns the directory that was the current directory
      when the Hollywood script was started; this is only of use when running Hollywood scripts because in
      that case Hollywood will always change the current directory to the script's directory (unless you
      use NOCHDIR); for compiled programs, the start directory will obviously always be identical to the
      program's directory
    - New: WaitTimer() accepts an alternative syntax now: if you pass a table containing a list of timers
      WaitTimer() will wait until the first timer in that list has elapsed; you can also pass an empty table
      which means WaitTimer() will check all timers that are currently running and return as soon as the
      first one elapses; in any case, the return value will be a table containing a list of all timers
      that have elapsed; the optional argument can be used to specify whether or not elapsed timers should
      be automatically reset; this defaults to TRUE
    - Change: The milliseconds argument in WaitTimer() is optional now; if it is omitted (or set to -1),
      WaitTimer() will wait for the specified timer to elapse (which requires the timer to have an elapse
      value, obviously)
    - New: StartTimer() accepts an optional argument now which allows you to set an elapse value for the
      timer; you can then use the new TimerElapsed() function to check when the timer has elapsed; you can
      also set the elapse value later using SetTimerElapse() and you can query it using #ATTRELAPSE
    - Fix: User data associated with #TIMER objects using SetObjectData() was accidentally nuked and leaked
      by WaitTimer() in case the reset argument was set to TRUE (which is the default); the same behaviour
      happened when using StartTimer() on a timer with an id that already existed
    - Fix [Amiga]: Pausing Protracker modules didn't work when using Hollywood's legacy audio driver (which
      is still the default driver on OS3); this was actually broken since Hollywood 4.0
    - Fix [OS3/Non-FPU]: When converting a string to a number using Val() and an "e" followed the number, e.g.
      "16e", Val() accidentally counted the "e" as part of the number, i.e. it returned 3 as the length when
      trying to convert the string "16e" to a number but it obviously should be 2 because "16e" is not an
      exponential notation; only the non-FPU version on OS3 is affected because this is a SAS/C bug
    - Fix: The text layouter stripped spaces at the end of lines; this was only visible when the font style
      was set to #UNDERLINED; now the spaces will only be stripped in case the layouter wraps lines
    - New: SetMargins() accepts an optional argument now that, if set to TRUE, will allow you to set margins
      outside the current BGPic's boundaries, e.g. negative positions or positions bigger than the BGPic
      width; by default, margins are clipped to 0 and the BGPic width
    - New: SetFontStyle() and SetFormStyle() alternatively accept a table in parameter 2 now; the table uses
      the same format as the one returned by GetFont/FormStyle() so you can easily save and restore all font
      or form style settings using a combination of GetFont/FormStyle() and SetFont/FormStyle(); it also
      allows you to set shadow and edge parameters at the same time
    - Fix: GetFontStyle() always had the #NORMAL bit set in its return value which caused SetFontStyle() to
      disregard all other bits that were set
    - Fix [OS3]: Fixed requester asking for volume JPEGTMP: when trying to load certain JPEGs
    - New [Examples]: Added Palette example which demonstrates palette cycling, which is now easily possible
      with Hollywood 9's new palette library!
    - New [SDK]: Added HWADS_PALETTE tag for GfxBase.AttachDisplaySatellite(); if this tag is set to TRUE, 
      HWSATOP_BLTBITMAP needs to be able to handle CLUT bitmaps as well; in that case, BitMapType will be set
      to HWSATBMTYPE_CLUTBITMAP and BitMapPixFmt will be set to HWOS_PIXFMT_ALPHA8 (but only when using the
      internal bitmap adapter; when using a custom bitmap adapter, you'll get HWSATBMTYPE_BITMAP as usual);
      in case a CLUT bitmap is posted to HWSATOP_BLTBITMAP, the new "Palette" field in hwSatelliteBltBitmap
      contains its palette
    - New [SDK]: Added HWBMAHOOK_BLTCLUTBITMAP; bitmap adapters can set this flag if they want to be called
      whenever Hollywood blits CLUT bitmaps to an RGB software bitmap; note that this flag is only supported
      if HWSDAFLAGS_PALETTE is set as well
    - New [SDK]: Added HWSDAFLAGS_CLUTBITMAPADAPTER; bitmap adapters can set this flag to indicate that they
      support the new HWBMTYPE_CLUT bitmap type; if this flag isn't set, HWBMTYPE_CLUT is emulated using the
      HWBMTYPE_ALPHA type; NB: when locking a bitmap of type HWBMTYPE_CLUT, the pixel format needs to be set
      to HWOS_PIXFMT_ALPHA8 (same as with HWBMTYPE_ALPHA)
    - New [SDK]: GfxBase.LockBitMap() and GfxBase.GetBitMapAttr() also support CLUT bitmaps now
    - New [SDK]: GfxBase.GetARGBBrush(), GfxBase.AddBrush() and GfxBase.LockBrush() support palette-based
      brushes now
    - New [SDK]: Added HWBM2ARGBTAG_CLUT, HWBM2ARGBTAG_PALETTE, and HWBM2ARGBTAG_TRANSPEN; those can be used
      to make GfxBase.BitMapToARGB() convert CLUT image data to an RGB pixel array; if HWBM2ARBTAG_CLUT is
      set to TRUE, the input bitmap must be a CLUT one
    - New [SDK]: Added HWSDAFLAGS_SETPALETTE flag; display adapters can set this flag to indicate that they
      can change pixel colors by changing the palette; this is very useful on classic Amiga hardware where
      you can simply modify the hardware's color registers to change pixels without drawing anything; if
      display adapters set this flag, Hollywood will call into the display adapter's SetPalette() function
      whenever the palette changes instead of re-drawing all pixels with the new palette by calling your
      BltBitMap() function; to make your display adapter support the new SetPalette() function, you also need
      to set the HWEXT_DISPLAYADAPTER_PALETTE extension bit in your plugin; note that this is only supported
      for displays that have set HWDISPTAG_PALETTEMODE to TRUE in OpenDisplay()
    - New [SDK]: Added HWSDAFLAGS_PENDRAW; display adapters can set this flag to indicate that their Line(),
      RectFill(), and WritePixel() implementations can handle pen values instead of colors as well; in that
      case, the "color" argument of those functions will be set to a pen index instead but only if the
      display that is passed to the functions is a display that has set HWDISPTAG_PALETTEMODE to TRUE on
      OpenDisplay()
    - New [SDK]: Added HWDISPTAG_DEPTH and HWDISPTAG_PALETTE tags which are now passed to your OpenDisplay()
      implementation; note that HWDISPTAG_PALETTE is only passed if the BGPic attached to the display is a
      CLUT one; in that case, Hollywood will also pass the new tag HWDISPTAG_PALETTEMODE to OpenDisplay();
      if you set the int pointer in the pData tag member to TRUE, you can signal to Hollywood that your
      display is a special CLUT display that can handle the new HWSDAFLAGS_PENDRAW and HWSDAFLAGS_SETPALETTE
      flags (see above); setting HWDISPTAG_PALETTEMODE to TRUE is useful on classic Amiga hardware whose
      chipset uses CLUT-based pixel data  
    - New [SDK]: Added HWSDAFLAGS_PALETTE for GfxBase.SetDisplayAdapter(); display adapters can set this flag
      to tell Hollywood that they can handle CLUT graphics; if HWSDAFLAGS_PALETTE is set, display adapters
      need to be prepared to deal with the new HWBBFLAGS_SRCCLUTBITMAP flag in BltBitMap(); if this flag is
      set, the bitmap passed to BltBitMap() is a CLUT one and you need to draw it using the palette and
      transparent pen passed in the new "Palette" and "TransPen" fields of struct hwBltBitMapCtrl; note that
      the TransPen field will normally be HWPEN_NONE; it can only ever be set to a transparent pen in case
      your plugin supports custom double buffers
    - New: "FillPen" is now also supported for @BGPIC and LoadBGPic(); this can be used to specify a filling
      pen in case a transparent BGPic is loaded
    - New: CreateDisplay() and @DISPLAY can also create palette-based displays now by setting the "Palette"
      tag (see below for details); the filling pen can be set using the optional "FillPen" tag
    - New: CreateBrush() and CreateBGPic() can also create palette images now; to do that, you need to set
      the new "Palette" tag to a palette object previously created using CreatePalette() or @PALETTE; 
      alternatively, you can also set it to one of the predefined #PALETTE_XXX palettes; the new "FillPen"
      and "TransparentPen" table tags can be used to specify a pen for filling the new object (defaults to 0)
      and a pen to be made transparent (defaults to #NOPEN); note that when creating a palette image using
      CreateBrush() or CreateBGPic(), the color argument will be ignored
    - New: Added the commands SetLayerPen(), GetLayerPen(), SetLayerTransparentPen(), SetLayerPalette(), and
      SetLayerDepth(); those are shortcuts for the respective counterparts from the palette library; the same
      functionality is available through palette library functions but needs more typing
    - New: Added the commands SetBrushPen(), GetBrushPen(), SetBrushTransparentPen(), SetBrushPalette(), and
      SetBrushDepth(); those are shortcuts for the respective counterparts from the palette library; the same
      functionality is available through palette library functions but needs more typing  
    - Change: The color argument is CreateBrush() and CreateBGPic() can also be left out now if the last
      argument is an options table; this change is just for your convenience
    - Change: The color argument in Arc(), Box(), Circle(), DrawPath(), Ellipse(), Line() and Polygon() is
      optional now also in case you pass a table as the last argument; in that case, you can leave the color
      argument out now too (previously you could only leave it out in case it was the last argument); the new
      behaviour is especially useful when using #PALETTEMODE_PEN because in that case, the color argument
      isn't needed because #PALETTEMODE_PEN will use the draw pen set using SetDrawPen() instead
    - New: The standard draw tags also support "ShadowPen" and "BorderPen" tags now; these are used instead of
      "ShadowColor" and "BorderColor" when palette mode is set to #PALETTEMODE_PEN; note that when palette
      mode is set to #PALETTEMODE_PEN, antialias is automatically disabled for graphics primitives and text;
      also, the "Transparency" tag is not supported for #PALETTEMODE_PEN except when layers are active
    - New: Added new font format tag named "Pen"; this can be used with all text drawing functions to change
      the drawing pen when the palette mode is set to #PALETTEMODE_PEN; note that when using the "Shadow" and
      "Edge" tags, the color value is expected to be a pen value instead now when #PALETTEMODE_PEN is active
    - New: TextOut() and CreateTextObject() support a new "Pen" tag in their optional table argument; this can
      be used to specify the drawing pen that shall be used in case palette mode is set to #PALETTEMODE_PEN;
      if it is not specified, then the drawing pen set using SetDrawPen() is used
    - New: SetLayerStyle() and GetLayerStyle() now allow you to set and get the palette mode, dither mode and
      drawing pens using the new "PaletteMode", "DitherMode", "DrawPen", "ShadowPen", and "BorderPen" tags
    - New: GetAttribute() supports #ATTRPALETTEMODE, #ATTRDITHERMODE, #ATTRPEN, #ATTRSHADOWPEN, #ATTRBORDERPEN
      for #DISPLAY now; those will return the drawing pens as well as the palette and dither mode set using
      SetPaletteMode() and SetXXXPen(), respectively
    - New: Added support for #PALETTE type for GetAttribute(); the following attributes are supported for
      #PALETTE: #ATTRCOUNT, #ATTRTRANSPARENTPEN, #ATTRDEPTH, #ATTRPALETTE, #ATTRCYCLE, #ATTRLOADER; NB: the
      new #NOPEN constant is returned by #ATTRTRANSPARENTPEN in case there is no transparent pen  
    - New: Added support for CRNG color range chunks inside IFF ILBM/PBM images; if the "LoadPalette" tag in
      LoadBrush() or LoadBGPic() is TRUE, CRNG chunks are loaded automatically from IFF images and you can
      access their data using the new #ATTRCYCLE tag; this is also possible for palettes loaded using the
      @PALETTE preprocessor command or LoadPalette(); you can also manually create CRNG chunks using the
      CreatePalette() function and you can apply them to several objects using SetCycleTable()
    - New: Added palette library; this library contains a lot of functions to easily deal with palettes; the
      following functions are now available: CreatePalette(), FreePalette(), LoadPalette(), SavePalette(),
      SetPalette(), TintPalette(), InvertPalette(), PaletteToGray(), SolarizePalette(), GammaPalette(),
      ContrastPalette(), ModulatePalette(), GetBestPen(), CopyPalette(), ExtractPalette(), SetPaletteMode(),
      SetDepth(), SetDrawPen(), SetPen(), GetPen(), SelectPalette(), SetTransparentPen(), ReadPen(),
      WritePen(), SetPalettePen(), GetPalettePen(), SetPaletteDepth(), SetPaletteTransparentPen(), @PALETTE,
      SetGradientPalette(), SetStandardPalette(), CyclePalette(), SetDitherMode(), CopyPens(), SetShadowPen(),
      SetBorderPen()
    - New: Added RemoveBrushPalette() function; this function can be used to remove the palette from a palette
      brush, thus converting it into an RGB brush; the optional argument allows you to specify what to do
      if there is a transparent pen; it can be mapped to either a mask or an alphachannel
    - New: Added RemapBrush() function which can be used to remap the colors of a (palette) brush to a new
      set of colors with optional dithering (defaults to TRUE); you have to pass the id of a palette to
      RemapBrush() which contains the new colors for the brush; the palette can contain up to 256 RGB entries;
      note that RemapBrush() will always convert the brush to a palette brush; also note that if the brush uses
      transparency, you have to use SetTransparentPen() on the palette first to define a pen that should be
      made transparent
    - New: QuantizeBrush() accepts a new table-based syntax now that allows you to tell QuantizeBrush() to
      directly quantize the brush into a palette-based one; if the brush has a mask, pen 0 will be set to
      the color you specify in the new "TransparentColor" tag (defaults to #BLACK) and pen 0 will be made
      transparent; to make a different pen transparent, set the new "TransparentPen" table tag to the
      desired pen number; if the brush passed to QuantizeBrush() already has a palette, its colors can be
      further reduced
    - New: GetAttribute() now supports #ATTRPALETTE, #ATTRDEPTH, and #ATTRTRANSPARENTPEN for types #DISPLAY,
      #BRUSH, #BGPIC, #SPRITE, #ANIM, #TEXTOBJECT, and #LAYER; this is mainly useful if the source objects
      have a palette; note that when used with #ANIM or #SPRITE (or anim layers) you also need to pass a frame
      parameter as each frame could have its own palette and transparency setting; for anims loaded from disk
      you can only query the data from the last frame loaded 
    - New: Video recorder supports palette-based BGPics now  
    - New: Video playback supports palette-based BGPics now; note that this will be quite heavy on the CPU
      because all video frames will have to be remapped to the BGPic's palette  
    - New: All transition effects supported palette-based images now; all combinations are possible, e.g.
      show CLUT image on RGB BGPic, show RGB image on CLUT BGPic, show CLUT image on CLUT BGPic, and show
      RGB image on RGB BGPic; layers are fully supported and the different palette modes that can be set
      using SetPaletteMode() are also supported; lots of optimizations were put into place to make CLUT
      image drawing efficient; this was a lot of work! 
    - New: ReadBrushPixel() and WriteBrushPixel() support palette-based brushes now; in that case, they'll
      read/write pen values from/to the brush
    - New: BeginDoubleBuffer() can now also create palette-based double buffers; it will do so if the BGPic
      that is active when BeginDoubleBuffer() is a palette-based one  
    - New: SelectBrush(), SelectBGPic(), SelectAnim(), and SelectLayer() can draw to palette-based image data
      now too; you can use SetPaletteMode() to configure the drawing mode to use (see below)  
    - New: Hollywood's sprite engine supports palette-based graphics now as well  
    - New: Hollywood's layer engine supports palette-based graphics now as well; all features of the layer
      engine are supported for palette-based images now too, e.g. transformations, filters, transparency,
      etc.; single-colored layers created by functions like Box(), Ellipse(), TextOut() etc. will internally
      now be stored as CLUT images to save memory
    - New: Transparent BGPics can also be palette-based now  
    - New: When using a palette-based BGPic, Hollywood now behaves as if it was operating on a palette-based
      output device; this means that the available colors will be limited to the BGPic's palette; by default,
      all graphics that you draw to a palette-based BGPic are remapped to the BGPic's palette; dithering is
      optionally available using the new SetDitherMode() command; note that drawing graphics like this is
      rather slow because the image data has to be remapped on-the-fly; faster drawing can be achieved by
      changing the palette mode to #PALETTEMODE_PEN using the SetPaletteMode() command; if #PALETTEMODE_PEN
      is active, Hollywood will simply copy the image data to the BGPic without adapting any colors; this will
      obviously only work if the image data to be copied is CLUT as well; RGB images of course still have to
      be remapped; furthermore, if #PALETTEMODE_PEN is active, all single color graphics like shapes and text
      will be drawn using the pen you can specify using SetDrawPen(); using palette-based BGPic's is a nice
      way of emulating old palette-based displays so it can be very convenient for porting old software 
      written for palette-based systems; also note that if #PALETTEMODE_PEN is active, the draw and text
      library will ignore the #ANTIALIAS style flag; alpha values in colors will also be ignored in case
      #PALETTEMODE_PEN is active because drawing colors will be taken from what was set using SetDrawPen(),
      SetBorderPen(), and SetShadowPen()
    - New: Added PenArrayToBrush() and BrushToPenArray(); these two functions do the same as RGBArrayToBrush()
      and BrushToRGBArray() but instead of RGB colors they use pen values; this means that they can only be
      used with palette brushes
    - New: All brush manipulation functions support palette brushes now too; exceptions: ReplaceColors(),
      SetBrushTransparency(), BlurBrush(), EmbossBrush(), EdgeBrush(), SharpenBrush(), SepiaToneBrush(), 
      CharcoalBrush(), BrushToMonochrome(), ChangeBrushTransparency(), OilPaintBrush(); note that the
      following brush manipulation functions will merely modify the brush's palette in case there is one
      and thus will be extremely quick: InvertBrush(), TintBrush(), BrushToGray(), SolarizeBrush(),
      GammaBrush(), ContrastBrush(), ModulateBrush()  
    - New [Amiga]: The "LoadPalette" tag is now also supported for the OS native image and anim loaders via
      picture.datatype and animation.datatype; "LoadTransparency" is also supported in combination with
      "LoadPalette" through the native OS loader
    - New [SDK]: Updated PCX example image loader plugin to support the new "LoadPalette" tag
    - Fix [SDK]: Fixed crash in the PCX example image loader plugin when trying to load CLUT images
    - New [SDK]: Added HWANMFLAGS_LOADPALETTE and Palette, Depth, and TransPen fields to struct LoadAnimCtrl;
      this allows anim plugins to support Hollywood 9.0's new "LoadPalette" functionality now as well; usage
      is exactly the same as with the image plugin API (see below)
    - New [SDK]: Added HWIMGFLAGS_LOADPALETTE; Hollywood will set this flag to tell LoadImage() to load the
      image pixels as CLUT instead of RGB values; note that if this flag is set and the picture doesn't have
      a palette, your LoadImage() implementation must return NULL; new members have also been added to struct
      LoadImageCtrl (Palette, Depth, TransPen); if HWIMGFLAGS_LOADPALETTE is set, you must set those members
      to the correct values; Depth & TransPen must be set by LoadImage() and Palette must be set to a static
      buffer that contains 256 ULONGs (even if depth is less than 8!) by GetImage(); if HWIMGFLAGS_TRANSPARENCY
      is set, you must set TransPen to the transparent pen or to HWIMGTRANS_NONE if there is no transparent
      pen; a word of warning: make sure to test for Hollywood 9.0 before writing to these structure members
      or you will trash memory!     
    - New: A blast from the past: Hollywood now has full support for palette-based images! Hollywood has
      already been able to load and process these images before of course but internally they were always
      stored as true colour graphics; now it's possible to tell Hollywood to store palette-based images as
      such; this saves memory and more importantly, it can be used for some nice retro effects like color
      cycling; you can tell Hollywood to store images as CLUT ones by setting the new "LoadPalette" tag to
      TRUE; this tag is available for @BRUSH, @BGPIC, @ANIM, and @SPRITE (and the respective loader commands);
      a transparent pen can be specified using the new "TransparentPen" tag or you can set "LoadTransparency"
      to TRUE to load the transparent pen information from the image file; the "LoadPalette" tag is supported
      by the following image formats: IFF ILBM, GIF, PNG, and BMP; furthermore, it is also supported by the
      following anim formats: IFF ANIM and GIF
    - Fix [Amiga]: The OS native anim loader via animation.datatype didn't handle the EHB flag correctly  
    - Fix [Amiga]: The OS native image and anim loaders (via picture.datatype and animation.datatype) didn't
      handle the "LoadTransparency" tag correctly  
    - Fix: Some GIF anims weren't loaded correctly (reported by Paul Bloedel)  
    - Fix: Plot() didn't respect sprites with no transparency and alpha transparency
    - Fix: IFF ILBM extra halfbrite images weren't always loaded correctly 
    - New: Hollywood can now load compressed and uncompressed IFF PBM pictures as well; those were typically
      saved by the MS-DOS version of Deluxe Paint II; in contrast to IFF ILBM they store pixels as chunky
      instead of planar data
    - Fix [OS3]: GetMACAddress() now returns the correct MAC address if the TCP stack supports it; note that
      as of now, the only TCP stack on AmigaOS3 which supports the obtaining of MAC addresses is Roadshow;
      with all other TCP stacks you'll get 00:00:00:00:00:00 (reported by Tony Canazza)
    - Fix: When recording a video with layer scale active, transition effects weren't recorded correctly in
      case the effect wasn't running in Hollywood's real layer mode
    - New: Added RefreshDisplay() function; this can be used to force a Hollywood display to refresh itself;
      an optional table argument can be used to configure what shall be refreshed; this function is mostly
      useful for debugging purposes because it's normally not needed to manually call it
    - Fix: #ATTRLOADER didn't return the correct loader in case a brush or an animation created from an image
      source was loaded from Hollywood's internal image cache that is active at preprocessor time
    - Change: The frame number parameter to #ATTRFRAMEDELAY is optional now; if not specified, it defaults
      to the first frame now
    - New: Added OpenAnim() and CloseAnim() functions; OpenAnim() does exactly the same as LoadAnim() except
      that it sets "FromDisk" to TRUE by default; this is for convenience and consistency to functions like
      OpenMusic(), OpenVideo(), etc. which are also disk-buffered; CloseAnim() does the same as FreeAnim()
      and was added for consistency only
    - Fix [SDK]: GfxBase.RawScale() didn't work correctly if SrcX or SrcY were different from 0
    - New [SDK]: struct LoadImageCtrl has a "Depth" field now which your IsImage() implementation can use to
      set the pixel depth of the image
    - New: The table returned by IsPicture() contains a new "Depth" field now that indicates the pixel depth
      of the image; this is useful for detecting palette-based images which will have a depth <= 8; on top of
      that, IsPicture() will also set the table field "Transparency" now to indicate whether or not the image
      has transparent pen that can be loaded by setting "LoadTransparency" to TRUE; note that this can only
      be TRUE for palette-based images
    - Change [Amiga/Player/GUI]: Text in the "description" widget of the Hollywood Player and GUI is no longer
      selectable as single lines because that doesn't make much sense (reported by Samir Hawamdeh)
    - Fix: Text objects created using CreateTextObject() with wordwrapping active didn't resize correctly
      when using layer scaling mode
    - Change: For consistency with TextOut(), SetLayerStyle() also accepts a "Wordwrap" tag now; this tag was
      previously named "RightMargin" in SetLayerStyle(); the old name is still supported for compatibility
    - New [Examples]: Added Enumerations example which demonstrates the new list features now supported by
      TextOut() 
    - New: Added SetBulletColor(), GetBulletColor(), SetBulletPen(), and a #BULLETPEN attribute; these allow
      you to set and get the bullet color; you can also use the new format tags "BulletColor" and "BulletPen"
      to change the bullet color during text layout; note that the format tags mustn't be closed; they just
      act as instructions to change the bullet color starting from the item they are placed in; "BulletColor"
      and "BulletPen" are also supported by SetLayerStyle()
    - New: When using TextOut() to create an ordered or unordered list and layers are enabled, the resulting
      layer of type #TEXTOUT will have multiple frames that you can cycle through using NextFrame() or all
      other layer functions that support anim layers; this makes it possible to cycle through the list items
      one by one or show one item after the other; the first frame always contains all items; the content of
      the other frames depends on what was specified in the new "FrameMode" tag; this allows you to either
      have all list items up to the current one visible (#FRAMEMODE_FULL) or only the current one as a single
      visible entry (#FRAMEMODE_SINGLE); TextOut() also accepts a "Frame" table tag now to specify which
      frame should be shown initially; both tags are also available from SetLayerStyle()
    - New: Added support for ordered and unordered lists for TextOut(); to enable list output for TextOut(),
      set the new "ListMode" tag to TRUE; you can then create lists with TextOut() by inserting tabs to
      denote leaves and nodes; the appearance of the list can be configured by using new optional tags called
      "(Def)ListBullet", "(Def)ListIndent", and "(Def)ListOffset"; "ListBullet" allows you to specify a
      bullet to use for a list item; this can be one of the predefined #BULLET_XXX symbols or a custom
      Unicode codepoint; "ListIndent" specifies the number of space characters to use for indentation and
      "ListOffset" can be used to set the start offset for numbered lists; when passing a table for these
      tags, TextOut() will extract a new value from your table for each new list that it starts; if there
      are more lists than table elements, the value specified in the "DefListXXX" tag will be used; all tags
      are also available from SetLayerStyle(); please note that the "ListMode" and "Tabs" tags are mutually
      exclusive 
    - New: TextOut() supports tabs now; if you want to use them, pass a table containing a list of tabs in
      the "Tabs" tag; the tabs must be pixel values relative to the x-position passed to TextOut(); if you
      don't specify the "Tabs" tag, all tabs will be converted to spaces (which is also the default); "Tabs"
      is also available from SetLayerStyle()
    - New: TextOut() now supports an additional tag named "Linespacing"; this allows you to add or remove
      space between lines; it must be set to a pixel value that specifies the space to add (positive value)
      or to remove (negative value); the tag is also accessible via SetLayerStyle() and GetLayerStyle()
    - Fix [Non-Amiga]: UTF-8 to ISO-8859-1 charset conversion was broken for some ISO 8859-1 characters
    - Fix [SDK]: SysBase.UnregisterCallback() was broken and messed up the internal callback lists
    - New [SDK]: Added SysBase.UnregisterEventHandler(); this can be used to unregister event handlers that
      were previously registered through SysBase.RegisterEventHandler[Ex]()
    - Fix: CreateBorderBrush() didn't apply the alpha transparency if it was present in the color passed to
      it (reported by Paul Bloedel)
    - Fix: Using SetDisplayAttributes() to move a display using fake fullscreen mode to a new monitor, its
      shielding black window wasn't moved along with it to the new monitor (reported by Sandro Barbagelata)
    - Change [macOS]: macOS's notification center will no longer show a permission request for every app
      compiled by Hollywood; instead, permission requests from the notification center will only be shown
      if a script actually calls ShowNotification()
    - Change [Installer/Amiga]: Installer warns now when trying to install the 68k FPU version because it can
      show all sorts of issues on emulations because the FPU emulation is often not as precise as on real
      hardware so it's recommended to use the non-FPU-version of emulators for best compatibility
    - Fix [Installer/Amiga]: Icons weren't installed correctly when the 68k FPU version or the WarpOS version
      was chosen
    - New [IDE/GUI]: Added support for Android and iOS targets when compiling scripts; compiling for these
      targets will yield applets that can be used with the Hollywood APK Compiler or Hollywood Player for
      Android and Remedios for iOS but the difference from just compiling normal applets is that Hollywood
      will set the #HW_ANDROID and #HW_IOS preprocessor keywords when compiling applets specifically for
      Android or iOS (requested by Christos Tsaldaris)
    - Fix [GUI/macOS]: When adding new projects to the "My projects" listview, they weren't sorted correctly
      (reported by Achim Kern)
    - New [IDE]: Added "Indent block" and "Unindent block" menu items to the "Edit" menu and to the context
      menu (requested by Anbjorn Myren)
    - New [Android]: Added "ShowSystemBars" and "HideSystemBars" event handlers; these will trigger when the
      system bars are shown/hidden in immersive mode; you can also query #ATTRSYSTEMBARS to learn about the
      system bars' current visibility state
    - New [Android]: Added support for immersive full screen mode; if that mode is used, all Android system
      bars will be hidden completely; you can enable immersive mode by setting the "ImmersiveMode" tag either
      in @DISPLAY, CreateDisplay() or SetDisplayAttributes(); there are three different immersive modes:
      #IMMERSIVE_NORMAL, #IMMERSIVE_LEANBACK and #IMMERSIVE_STICKY; you can also query the current immersive
      mode of a display using the new #ATTRIMMERSIVEMODE attribute (requested by Niels Schapke)
    - New [Android]: You can now show and hide the status bar by setting the "HideTitleBar" attribute using
      SetDisplayAttributes() (requested by Paul Bloedel)
    - Fix: When changing display size and position in one SetDisplayAttributes() call, SetDisplayAttributes()
      automatically centered the display in case the coordinates passed in "X" and "Y" were identical to the
      current display position (reported by Nathan Hesterman)  
    - Fix: Some TrueType fonts which contained style keywords in their face name (e.g. "Albertus Extra Bold")
      couldn't always be opened (reported by Lars Brämer)
    - Change [MorphOS]: Hollywood uses timer.device's GetUTCSysTime() function now to avoid abysmal slowdowns
      on MorphOS 3.10 and 3.11; on MorphOS 3.12- the performance is better because of an optimization in
      GetSysTime() but it's still not as fast as it used to be; using GetUTCSysTime() will fix this and make
      Hollywood as fast as it used to be on MorphOS (reported by Konrad Czuba)
    - Fix: #ATTRTRANSPARENTCOLOR returned #NOTRANSPARENCY as a signed value whereas it should be unsigned
      (reported by Paul Bloedel)
    - New [Amiga]: OpenSerialPort() can also be passed a string in the format "<devicename>:<port>" now in
      case you want it to open an alternative serial device, e.g. "serialpl2303.device:0" will try to open
      serialpl2303.device port 0 (requested by Christos Tsaldaris)
    - New [SDK]: Added HWEXT_REQUIRE_LUALESS extension; set this to indicate that your RequirePlugin()
      implementation doesn't require a Lua state pointer; this will enable Hollywood Designer to require your
      plugin as well
    - Fix [Doc]: Added information about an inconsistency in #ATTRCURFRAME when used with type #LAYER
      (reported by Paul Bloedel)
    - Fix: DownloadFile() didn't always handle relative redirect requests in the HTTP location header field
      correctly (reported by Petteri Valli)
    - New: Added IsAbsolutePath(); this simply returns TRUE if the path passed to this function is an
      absolute one on the current operating system; otherwise, FALSE is returned
    - New: Added CanonizePath() function; this can be used to turn relative paths into absolute ones, i.e.
      it can eliminate ".." from paths; on AmigaOS it will also resolve assigns in path specifications and
      replace them with the real drive; on systems with case-insensitive file systems, it will also adapt
      the spelling of the path's components to the canonical one; also, slashes and backslashes are adapted
      according to the operating system Hollywood is running on; the path passed to CanonizePath() needn't
      exist; if it doesn't exist, CanonizePath() will try to resolve as many components in the path as
      possible; note, however, that CanonizePath() doesn't perform path validation; the result is undefined
      for invalid paths
    - Change: SavePrefs() will serialize the preferences to JSON now by default; if you don't want that,
      pass "inbuilt" in the "Adapter" table field to force serialization in Hollywood's proprietary table
      serialization data format; alternatively, you can also pass the name of any other serializer that
      is available on your system; LoadPrefs() features a compatibility layer that will accept preferences
      both in Hollywood's proprietary table serialization data format and in JSON; this default behaviour
      can also be overridden by the new "Adapter" tag
    - New: Added JSON support; SerializeTable() and DeserializeTable() will now (de)serialize its data to/
      from the JSON format by default; you can change this behaviour by specifying the optional adapter
      argument; ReadTable() and WriteTable() will continue to use Hollywood's proprietary table serialization
      data format for compatibility reasons; you can force those functions to use JSON, however, by passing
      "default" in the "Adapter" table field; Hollywood's proprietary table serializer can be accessed by
      passing "inbuilt" in the "Adapter" table field
    - New: Added GetItem() function for getting an item from a list; the only case where this is more
      convenient than just using list[idx] probably is to pass -1 to get the last item of a list
    - New: Added SetListItems(); this can be used to convert an existing table to a table uses the new
      table library optimizations (see below)
    - New: Major optimization for table library: InsertItem(), RemoveItem(), and ListItems() will now be
      massively faster but only if your code adheres to several rules: the table needs to have been created
      using the new CreateList() function and adding/removing items must only be done through InsertItem()
      and RemoveItem(); if you add or remove table items in any other way, the behaviour is undefined; if
      you follow the rules described above, InsertItem(), RemoveItem() and ListItems() will be massively
      faster
    - New: CountDirectoryEntries() accepts a new type named #COUNTSEPARATE now; if this is specified, two
      count values will be returned: the first one specifies the number of files, the second one the number
      of directories in the specified directory
    - New: CountDirectoryEntries() accepts a new argument named "Recursive" now; if this is set to TRUE, the
      directory entries will be counted recursively
    - Change: Hollywood can be closed now while CopyFile(), MoveFile(), or DeleteFile() is currently in
      progress; this is possible because internally everything is implemented through the new asynchronous
      object functionality now 
    - Fix: DownloadFile() and UploadFile() weren't able to handle files larger than 2 GB  
    - New: Added "Async" tag to DownloadFile(), UploadFile(), CopyFile(), MoveFile(), and DeleteFile(); if
      this tag is set to TRUE, the respective function will return an asynchronous object handle that can be
      used to asynchronously execute the operation using the new ContinueAsyncOperation() function; to cancel
      an asynchronous operation, use the new CancelAsyncOperation() function; asynchronous execution is very
      useful in connection with RapaGUI or MUI Royale to update progress bars, for example, or to write GUIs
      that don't block during certain operations; asynchronous objects are stored as objects of type #ASYNCOBJ;
      you can associate user data with them using the object library functions and you can query #ATTRCOUNT
      to find out how many asynchronous objects are currently in memory
    - Fix: The "Post" tag in DownloadFile() was broken since Hollywood 6.0 (reported by Alex Carmona)
    - Fix: When using UploadFile() for FTP upload from a string source set in the "Data" tag and a callback
      function, the callback function's message "Total" field was set to 0 instead of the total upload size
    - Fix [Android]: MakeDirectory() couldn't create directories when using absolute paths (reported by
      Anbjorn Myren)
    - Fix [Doc]: MakeButton() didn't mention that buttons of type #LAYERBUTTON would receive two additional
      message parameters named "Layer" and "LayerName" since Hollywood 4.5 (reported by Michael Jurisch)
    - New: Added SerializeTable() and DeserializeTable() for conveniently converting a table into a string
      and back using a serializer plugin
    - New: LoadPrefs() and SavePrefs() accept a new optional table argument now which accepts an "Adapter" 
      tag which allows you to specify a plugin to be used for serializing the data
    - New [SDK]: Added HWPLUG_CAPS_SERIALIZE which allows plugins to hook into Hollywood's new serializing
      capabilities offered by WriteTable() and ReadTable()
    - New: WriteTable() and ReadTable() accept a new "Adapter" tag now which can be used to route those
      calls through external plugins supporting Hollywood's new serialization interface 
    - Change: WriteTable() uses a table argument for its options now; the old syntax is still supported for
      compatibility
    - New [SDK]: Added HWFILEREQTAG_FILTERS to interface with the new extended filter table supported by
      FileRequest() now
    - New: You can also pass a table in FileRequest()'s "Filters" table tag now to specify filters for the
      file requester; the table allows you to pass a description for each filter group (e.g. "Image files",
      "Sound files", etc.) that will be shown in the file requesters on platforms which support it (that is
      currently Windows and Linux)
    - New: FileRequest(), PathRequest(), StringRequest(), ListRequest(), FontRequest(), and ColorRequest()
      support "X/Y/Width/Height" tags in the new optional table argument now; this can be used to specify the
      position and size for the requester on the screen; note that not all platforms support all of those
      tags; on some platforms only positioning or nothing at all of those tags might be supported
    - Change: Requester functions FileRequest(), PathRequest(), StringRequest(), ListRequest(), FontRequest(),
      and ColorRequest() alternatively accept a table-based syntax now for all their optional arguments 
    - Fix [Windows]: When omitting the pattern argument, FileRequest() set up two filters for all files (*.*)
      in the requester but there should be only one
    - Change [Amiga]: FileRequest() and PathRequest() are guaranteed to return fully qualified paths now
      for consistency with all other platforms
    - New: ReadLine() accepts an optional argument now; if this is set to TRUE, ReadLine() will include the
      line break characters (LF or CRLF) in the returned string (if there are any)
    - New: Added MakeHostPath() command; this converts a Hollywood platform-independent path to a path that
      is compatible with the current host system, e.g. on AmigaOS it'll remove things like ".." and convert
      backslashes to slashes whereas on Windows slashes will be converted to backslashes
    - New: FullPath() accepts an unlimited number of arguments now; this allows you to construct a path from
      more than two components
    - Fix [OS3]: StringRequest() didn't work with #NUMERICAL in case a string that didn't contain a number
      was specified as the default string (reported by Juan Carlos Herran Martin)
    - Fix [Windows]: Refresh error when restoring a display that had the "RememberPosition" tag set and was
      minimized on program termination, e.g. by closing it from the taskbar (reported by Torgeir Vee)
    - New [SDK]: Added HWMCP_SETFORBIDMODAL attribute; this can be used to force Hollywood to disable all
      library functions which start a modal event loop, e.g. WaitLeftMouse(), WaitSampleEnd(), InKeyStr(),
      and so on; note that Wait() isn't affected by HWMCP_SETFORBIDMODAL; you can control the behaviour of
      Wait() by implementing your own Sleep() function using HWSDAFLAGS_SLEEP
    - Change: Core event handler completely rewritten; it is a much cleaner design now than the old one which
      dates back all the way to Hollywood 2.0 and had several flaws
    - Fix [Amiga]: Stack overflow when a Rexx script started using RunRexxScript() made lots of calls back
      into the Hollywood script
    - Fix: Hollywood crashed when using the video recorder and an error occurred before the video recorder
      wrote the very first video frame
    - New: Added RunCallback() function to event library; this function can be used to push a user callback
      into the event queue; the callback won't be run immediately but the next time the event queue is emptied
      by WaitEvent() or CheckEvent() (requested by Michael Jurisch)
    - Fix [Android]: Hard-coding an orientation in the "Orientation" tag of @DISPLAY didn't work correctly if
      the orientation was the same as the current device orientation (reported by Niels Schapke)
    - New: Added RawDiv(); this does the same as Div() but doesn't check the divisor against 0 which allows you
      to compute machine-specific representations of NaN and Inf by computing the results of 0/0 or 1/0
    - New: Added IsNan(), IsInf(), and IsFinite() to math library to check a value against NaN, infinity, and
      finiteness; also added the constants #NAN and #INF which contain the values of NaN and infinity; note
      that due to the design of the parser, you cannot use #NAN as a literal value in your scripts; instead,
      you have to use GetConstant("#NAN") to get the value of #NAN; #INF, on the other hand, can be used in
      scripts; note: do not test for NaN by comparing the number with itself, expecting to get FALSE; this
      won't work on all platforms; always use IsNan() (requested by Michael Jurisch)
    - New: Added "IgnoreHandlers" argument to Run(); if you have handlers installed for "RunFinished" and/or
      "RunOutput" you can set the new "IgnoreHandlers" optional table argument to a string indicating which
      handlers to ignore, e.g. "RunFinished|RunOutput" will ignore both handlers for the respective call to
      Run()
    - New: Added ReverseFindStr() command; this does the same as FindStr() but searches from the end of a
      string towards its beginning
    - New: Added PRINTERROR console argument/tooltype; if this is set, Hollywood will not show a dialog box
      in case an error happened, but will print it to stdout; useful for integrating Hollywood in your
      favourite IDE; also added FORMATERROR console argument/tooltype; if this is set, errors printed to
      stdout will be formatted in a specific way so that IDEs can catch them and easily extract relevant
      error information from them
    - New: Execute() and Run() accept an optional table argument now that allows you to set the current
      directory for the program that is started
    - New [SDK]: Added HWDISPFLAGS_SCALEFACTOR to find out if a display has scale factor mode enabled; note
      that scale factor mode can be enabled if HWDISPATTR_SCALEFACTOR returns 1
    - Fix: When using SCALEFACTOR=1 (or SYSTEMSCALE on a system whose host scale factor was 1) Hollywood 
      ignored the fact that scale factor mode was requested; it now behaves correctly
    - Fix [OS4]: When running a program using Run(), its output wasn't printed to stdout at all
    - Fix [OS4/MorphOS]: "RunFinished" sometimes didn't trigger when the program to be executed ran only for
      a very short time (e.g. "echo hello"); furthermore, using "RunFinished" on OS4 and MorphOS could easily
      crash the system because it had several issues that should all be fixed now
    - New: Added "RunOutput" event handler; this can be used to capture the output of programs started using
      Run(); note that output will normally not be delivered in real-time because of stdio buffering but
      if the external program continually outputs text it will arrive pretty instantly at your "RunOutput"
      callback; note that due to OS limitations, this is currently unsupported on AmigaOS 3.x; MorphOS
      users require at least MorphOS 3.12; by default, the output will be converted to the current default
      encoding; if you don't want that, set the new optional "RawMode" argument to TRUE to get the program's
      raw output (requested by Petteri Valli)
    - Change: Execute() and Run() accept a new syntax now that allows you to pass the program and its
      arguments separately; this is more convenient because it doesn't require you to enclose the program
      path in quotes to make sure paths with spaces work; the third argument is a table now that can be
      used to pass further options; the old syntax is still supported for compatibility, though
    - Fix [Doc]: "SystemScale" was documented as its own tag whereas it is just a display mode that can
      be specified as part of the "Mode" tag (reported by Paul Bloedel)
    - Fix: @REQUIRE-ing RapaGUI before other plugins made all hidden Hollywood displays visible (reported
      by Sasha Pont)
    - Fix [Android]: Execute() and Run() can now be used to install APKs again; note that when using the
      Hollywood APK Compiler you need to request the "REQUEST_INSTALL_PACKAGES" permission via the manifest
      because by default apps can't install other apps and it doesn't make sense to generally request this
      permission for all apps because very few will actually need this (reported by Paul Bloedel)
    - Fix [Android]: Execute() and Run() weren't able to open files from the external storage any longer
      because of new security restrictions for all apps targetting Android Nougat (7.0) or higher
    - Fix [IDE]: Illegal memory access when typing non-alphabetical characters outside strings and comments
      after a colon (reported by Anbjorn Myren)
    - Fix [Doc]: The return value FALSE for #COPYFILE_UNPROTECT was documented as "file shall not be
      unprotected" but it actually means that the file shall be skipped (which implies that it shall not
      be unprotected)
    - New: #COPYFILE_UNPROTECT can return -2 now to signal that nothing should be done which will
      typically mean that an error will be triggered shortly thereafter because CopyFile() won't be able
      to write to the file but you can catch the error by setting "FailOnError" to FALSE
    - Change: CopyFile() will no longer silently skip files that can't be copied because the destination
      file is write-protected; it will fail now; this is an API break but it is necessary because 
      otherwise CopyFile()'s new "FailOnError" mode doesn't really make sense
    - New: For historical reasons, DeleteFile() never fails when it is passed a non-existing file or
      directory; since this cannot be changed without breaking existing scripts, there is now a new
      options table argument called "MustExist"; if this is set to TRUE, DeleteFile() will fail if the
      specified file or directory doesn't exist
    - New: DeleteFile()/CopyFile()/MoveFile() accept a new "FailOnError" argument in their options table
      now; normally, those commands will fail when an error occurs; if you don't want that, set the new
      "FailOnError" argument to FALSE; in that case, the commands won't fail on an error but instead your
      callback, if there is one, will be notified using the new #DELETEFILE_FAILED/#COPYFILE_FAILED/
      #MOVEFILE_DELETEFAILED/#MOVEFILE_COPYFAILED messages and your callback can tell the commands how to
      proceed (retry, continue, abort); note that for DeleteFile(), "FailOnError" is not handled when
      deleting a single file, only when deleting whole directories or multiple files using patterns; for
      MoveFile(), "FailOnError" is only handled when moving files across volumes which implies copying
      and deleting them
    - New: DeleteFile() accepts a new "Recursive" argument in its options table now; DeleteFile() has
      recursion into subdirectories enabled by default; if you don't want that, set this new argument to
      FALSE
    - New: CopyFile() and MoveFile() accept a new "BufferSize" argument in their options table now; this
      can be used to set the buffer size to be used for copying files (defaults to 16384, i.e. 16kb)
    - Change: CopyFile(), DeleteFile(), and MoveFile() accept a table-based syntax now which should make
      it easier to add new options for those powerful functions; the old syntax is still supported for
      compatibility reasons
    - New [Windows]: Path specifications longer than 260 characters are supported now; the only limitation
      is that ChangeDirectory() can't handle paths longer than 260 characters, but that it is a Windows
      limitation
    - Fix [Windows]: Passing drive letters without a terminating (back)slash to DOS library functions
      (e.g. "C:" instead of "C:/") didn't work correctly; this also affected MoveFile() when trying to
      move a file or directory to the root of a volume 
    - Fix [Amiga/Linux/Android]: Unicode sorting in CompareStr() and Sort() didn't always work correctly
      for words only differing in their diacritics (reported by Lazar Zoltan)
    - New: Added support for #BAUD_600 and #BAUD_1200; this is useful for some older devices (requested
      by Leo den Hollander)
    - New [SDK]: Added HWSYSPATH_LOCALAPPDATA for SysBase.GetSystemPath(); this returns the path to the
      local (i.e. non-roaming) application data; only supported on Windows and macOS (on macOS this will
      be the same as HWSYSPATH_COMMONAPPDATA)
    - New [Windows/macOS]: The table returned by GetSystemInfo() now has an additional field named
      "LocalAppData" which contains the path to the local (i.e. non-roaming) application data; on macOS
      this will be the same as "CommonAppData"
    - Fix: ChangeDirectory() didn't fail on error; it does now, which is an API change but hopefully it
      won't break any scripts; for DeleteFile(), we'll keep the legacy behaviour that it doesn't fail if
      a non-existent path is specified because Designer (and probably other scripts) depend on it
    - Fix [Amiga]: #ATTRPOSITION for #SAMPLE didn't return correct values with the new audio driver that
      was introduced with Hollywood 6.0 (reported by Jörg Renkert)
    - New: GetFileArgument() accepts an optional parameter now; if this is set to TRUE, GetFileArgument()
      will return the full path to the file (requested by Petteri Valli)
    - Fix: PathRequest() and FileRequest() didn't allow you to mix slashes and backslashes in the path that
      was passed as the default directory (reported by Sandro Barbagelata)
    - Fix: When entering an empty string in InKeyStr(), the cursor position was reset to the top-left corner
      (reported by Justin Webb)
    - New [SDK/Amiga]: Added HWMCP_GETAMIGASIGNALS; this new attribute allows plugins to get the Amiga
      signal mask returned by the last call to Wait()
    - Change [Amiga]: HWCB_AMIGASIGNAL callback is now always called immediately before Wait(); this fixes
      certain refresh problems with MUI Royale and RapaGUI (reported by Petteri Valli)
    - Change [Android]: GetAsset() will only try to access the assets directory when running APKs created
      by the Hollywood APK Compiler; when running normal applets through the Hollywood Player for Android,
      GetAsset() will behave as on desktop systems now (suggested by Paul Bloedel)
    - Fix [Android]: Vertical offsets were slightly shifted when using a display that is initially set to
      "FullScreenScale" mode (reported by Christos Tsaldaris)
    - Fix [Android]: "FitScale" didn't work correctly if an orientation different from the current device
      orientation was set using the "Orientation" tag, forcing Hollywood to change the device's orientation
      (reported by Gianluca Girelli)
    - Fix [Android]: Scaling size wasn't calculated correctly when using "FitScale" while the action bar
      was visible as well (reported by Paul Bloedel)
    - Fix [Android]: Wrong touch to mouse offset mapping when using "FullScreenScale" mode on Android
      (reported by Christos Tsaldaris)
    - Fix: Starting from Hollywood 6.0 VWait() only waited if the current display was open; this was not a
      good idea because it is often used as a throttle (e.g. by Hollywood Designer) and with that design
      the CPU usage dramatically increased as soon as a display was minimized (reported by Torgeir Vee)
      
    Version 8.0     (08-Feb-19)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New: Added Supremacy example as the official Hollywood 8: Supremacy welcome presentation
    - Change: Updated the Welcome, Epiphany, and AlphaChannel examples
    - Change: Changed spelling of "Mac OS X" to "macOS" as this is now the official spelling
    - Change: All Hollywood commands are now defined on all platforms to make it easier to get a complete
      list of the full Hollywood command set using the EXPORTCOMMANDS option; when calling a command that is
      not available on a certain platform, e.g. CreateRexxPort() on Windows, Hollywood will show an error
      message
    - Fix [Win32]: Audio driver for video playback and Protracker modules sometimes overwrote data in the ring
      buffer that hadn't been played yet
    - Fix [macOS]: Borderless windows were always resizable even if "Sizeable" wasn't set to TRUE 
    - New: SplitStr() also supports strings longer than one character as the splitting token (requested by
      Samuli Holopainen)
    - Fix: SplitStr() didn't work with UTF-8 characters that contained more than one byte (reported by Samuli
      Holopainen)
    - Fix: Inbuilt AVI MJPEG loader only supported AVISTREAMHEADER of 56 bytes in size; the 64 bytes version
      is now also supported
    - Fix [Linux/arm]: Memory access fault when trying to link Hollywood plugins to an executables (reported
      by Enrique Martos)
    - Change [Android/iOS]: Setting "Mode" to "FullScreen" in @DISPLAY will automatically put the display in
      "FullScreenScale" mode with autoscaling and bilinear interpolation activated; this is a sensible
      solution because mobile devices can't change their physical monitor resolution
    - New [Android]: Added CallJavaMethod(); this is a very powerful function which allows you to call into
      Java code directly from the Hollywood script; most of the Java data types are supported and it is also
      possible to pass arrays to a Java method or make it return an array back to the script; finally, it's
      also possible to call into static Java methods; beware that the Hollywood VM runs on its own thread so
      your Java method will be executed on the Hollywood thread as well which means that if you want to do
      things that must be done on the UI thread you need to delegate to the UI thread first; obviously, this
      function can only be used in connection with the Hollywood APK Compiler
    - Change [Android]: Plugins linked to APKs using the Hollywood APK Compiler are now loaded in a fully
      system-friendly way; no more hacks here!
    - Change [Android]: Self-contained APKs created by the APK Compiler will no longer automatically load
      Hollywood plugins stored in ~/Hollywood/Plugins on the external storage because they don't have any
      permissions to do that by default; make sure to link all plugins directly to your APK!
    - Change [Android]: Preferences are no longer saved to the external storage because self-contained APKs
      don't automatically have permission to read from/write to the external storage space; instead, prefs
      are now stored in the internal storage which doesn't have such restrictions
    - New [Android]: Added PermissionRequest() function to request certain permissions at runtime; starting
      with Android 6.0 (Marshmallow) apps can no longer request read and write permission to the public
      external storage at install time; they need to do so at runtime; you can use PermissionRequest() to
      do that; the public external storage path can be accessed via the "SDCard" item returned in the table
      that is returned by GetSystemInfo()  
    - New [Android]: Added "OnAccelerometer" and "OnGyroscope" event handlers; these will trigger whenever
      the device's sensors report new values; note that typically those event handlers will deliver lots
      of messages so you should only enable them if you really need them (requested by Xabier Payet)
    - New [Android]: Added Vibrate() function; this will vibrate the device for the specified duration in
      milliseconds (requested by Xabier Payet)
    - New [Android]: Added ImageRequest() function; this function can be used to ask the user to select an
      image from Android's gallery; the image will then be returned as a Hollywood brush to the script; if
      you pass the #REQ_CAMERA type, ImageRequest() will pop up the device's camera instead of the gallery
      and the user can take a picture which is then returned to the Hollywood script as a brush (requested
      by Xabier Payet)
    - Fix: Hollywood's internal JPEG loader didn't handle the orientation tag of the Exif specification; all
      8 orientations are handled correctly now
    - Fix: The extremely quick JPEG header analyzer used in IsPicture() to quickly return the dimensions of
      a JPEG picture didn't work correctly with JPEGs that had the Exif marker directly after the SOI marker  
    - Change [GUI/Amiga]: GUI no longer stores its temporary files in the PROGDIR: but in T: so that there
      are no temp file leftovers in case the system is rebooted without closing the GUI first (reported by
      Paul Bloedel)
    - New: Added MonitorDirectory() function; this allows you to monitor all changes in a directory and get
      notified as soon as something changes through the new "DirectoryChanged" listener that you can install
      using InstallEventHandler(); note that this function might not work correctly on network drives
    - Fix [Doc]: #ATTRCOUNT was undocumented for several types although it is supported since Hollywood 5.0
    - Change [MorphOS]: UTC time functions now use the new timezone functionality introduced with MorphOS
      3.10; if you're on 3.10 and up, all timezone and UTC functions will be completely reliable, below 3.10
      there can be deviations
    - Fix [Android]: Querying file attributes on an asset or using DOSBase.FStat() on it led to a crash
      (reported by Paul Bloedel)
    - Change [Examples]: The AlphaChannel example uses @LINKER now to erase all external dependencies when
      compiling the example into an applet or executable
    - New: Added @LINKER preprocessor command; this preprocessor command allows you to pass some options to
      the linker; currently the tags "Files" and "Fonts" are supported by @LINKER; you can use these tags
      to pass additional files and fonts to be linked to the linker; this is the same as the LINKFILES and
      LINKFONTS options but of course it is more convenient to have those options directly in the script
    - New: The FallThrough statement can now also be put directly after the Switch statement; in that case,
      you globally declare all Case sections within the Switch statement to always fall through to the next
      one in the hierarchy; saves some typing if you need lots of fall through functionality 
    - New [SDK]: Added RewindDir() function for HWPLUG_CAPS_DIRADAPTER; directory adapter plugins have to
      implement this function in order to support the new RewindDirectory() command; note that you also have
      to set the new HWEXT_DIRADAPTER_REWIND extension bit if you want to implement RewindDir(); this is
      needed to keep compatibility with older plugins which don't implement RewindDir()
    - New: Added RewindDirectory() command; this command can be used to reset a directory iteration session
      to the beginning; after calling RewindDirectory(), NextDirectoryEntry() will start at the beginning
      of the directory again
    - New: Added CountDirectoryEntries() command which can be used to count all items in a directory (i.e.
      files, directories or both); note that you mustn't use this while iterating over the contents of a
      directory using NextDirectoryEntry(); use it only outside a NextDirectoryEntry() iteration session
    - Change [Examples]: The AsyncFX example uses the new @DIRECTORY preprocessor command now; this makes
      it very easy to compile it to a standalone applet because of all images are linked into the applet at
      compile time; the Welcome example also has been reworked to use @DIRECTORY which makes it easier to
      compile it to a standalone applet (suggested by Michael Rupp)
    - New: Added @DIRECTORY preprocessor command; this preprocessor command allows you to conveniently link
      all files in a directory (and optionally all files inside all subdirectories too) into applets or
      executables compiled by Hollywood; you can then use the new GetDirectoryEntry() command to access the
      individual files from your script code; note that GetDirectoryEntry() can also be used to access sub-
      directories of the directory specified in @DIRECTORY; you can then pass the result to OpenDirectory()
      to iterate over all files in the respective subdirectory; check out the documentation for an example;
      this is a very convenient feature if you have to link lots of files!; note that only datestamps,
      comments and file attributes aren't linked to applets, just the file name and its actual data; if
      you attempt to query datestamps, comments and attributes, they will be set to generic values
    - Fix: Re-compiling applets as applets (or executables) didn't always link all files correctly
    - Change [Doc]: Hollywood's HTML documentation is now part of the Amiga distribution of Hollywood again
      (requested by Petteri Valli)
    - Change [Doc]: In the AmigaGuide documentation, the manual pages of all library functions have an
      additional "SEE ALSO" entry at the bottom now which links back to the index of functions for the
      specific library (requested by Thomas Igracki)
    - Change: Hollywood will now append the version string defined in @APPVERSION to compressed applets in
      plain text; previously, the version string was only present as part of the compressed data which of
      course made it impossible to access (reported by Thomas Igracki)
    - New [SDK]: Added HWEVT_MOUSEWHEEL; this allows display adapter plugins to post mouse wheel events to
      Hollywood's event queue (requested by Niels Schapke)
    - New: DownloadFile(), UploadFile(), and OpenConnection() support a new tag named "SSL" now; if this is
      set to TRUE, Hollywood will set the SSL flag on any network adapters that might be installed; note that
      this tag is only effective for network adapters; Hollywood itself doesn't have any SSL support so when
      using Hollywood's inbuilt network adapter this tag doesn't have any effect; also note that you don't
      have to set this tag when the scheme already indicates SSL, e.g. by a "https://"-prefix in the URL
    - New: DownloadFile(), UploadFile(), and OpenConnection() support a new "Adapter" tag now which allows
      you to explicitly route them through the specified network adapter; furthermore, you can also query the
      tag #ATTRADAPTER for objects of type #CLIENT now
    - New [SDK]: Added network adapter interface (HWPLUG_CAPS_NETWORKADAPTER); this allows plugins to hook
      into Hollywood's network library and provide custom handlers; this can be very useful to provide
      support for additional technologies not supported by Hollywood itself, e.g. SSL; note that network
      adapters aren't activated automatically but you'll have to call SysBase.AddLoaderAdapter() to add
      them
    - Fix [Doc]: The 3rd and 4th optional arguments of CreateServer() were undocumented since Hollywood 5.0  
    - Change [Doc]: ReceiveUDPData() and SendUDPData() didn't mention that they didn't respect the timeout
      set using SetNetworkTimeout()  
    - Fix: UDP connections were sometimes spuriously closed (reported by Dieter Groppe)  
    - Change: GetConnectionIP() and GetConnectionPort() can now also query the remote side of a connected
      UDP object (i.e. of type #UDPCLIENT); to query an UDP object instead of a TCP one obtained from
      OpenConnection(), pass #NETWORKUDP in the new optional argument (default is #NETWORKCONNECTION); this
      is very similar to the way GetLocalIP() and GetLocalPort() work
    - Change: The ip$ and port arguments are now optional for SendUDPData() in case you use it with an UDP
      object of type #UDPCLIENT; client objects are always connected to the same server so there is no
      need to pass an IP and port to SendUDPData()
    - New: CreateUDPObject() supports a new 'mode' argument now which can be set to #UDPSERVER (default),
      #UDPCLIENT, or #UDPNONE; this allows you to create unconnected or client UDP objects; previously,
      all UDP objects created by CreateUDPObject() were server objects; note that when creating an
      unconnected UDP object using #UDPNONE, pass an empty string for the host name and 0 for the port;
      using #UDPCLIENT is recommended for objects which always send data to the same server; if that is
      the case, use #UDPCLIENT because it will make SendUDPData() faster
    - New: Added IPv6 support; OpenConnection(), CreateServer(), CreateUDPObject(), ToIP(), DownloadFile(),
      and UploadFile() support a new argument now which allows you to set the desired protocol; this can be
      #IPV4, #IPV6 or #IPAUTO; for compatibility reasons the default is #IPV4 but this can be changed using
      the new SetNetworkProtocol() function; there are also two new functions called GetLocalProtocol() and
      GetConnectionProtocol(); these can be used to query the protocol on the remote and local side; this
      is especially useful when using #IPAUTO; additionally, there is a new function named ResolveHostName();
      this is similar to ToIP() but instead of a single IP address it will return a table containing all
      information from the resolver; this can be multiple IP addresses (e.g. one for IPv4 and one for IPv6);
      note that IPv6 isn't supported on Amiga compatible platforms because the OS doesn't support it 
    - New: Added ShowNotification() function; this is the Swiss army knife notification function because
      it works on (almost) every platform; ShowNotification() will show an informational popup which will
      disappear automatically after a certain delay; on Android/iOS, ShowNotification() does the same as
      ShowToast(), on AmigaOS 4 it does the same as ShowRinghioMessage() (which is why you need to set
      "RegisterApplication" to TRUE on OS4 in order to use the function); note that on Windows notifications
      are only supported if there is a tray icon; thus, if you haven't called SetTrayIcon() explicitly,
      ShowNotification() will do this for you because it can only show a notification if there is a tray
      icon (requested by Niels Schapke and Petteri Valli)
    - New [Windows]: SetTrayIcon() accepts the special constant #DEFAULTICON now; if this is passed as the
      source object identifier, the icon specified using @APPICON or, if there is none, Hollywood's inbuilt
      icon will be used  
    - New [Windows]: SetTrayIcon() accepts an optional argument now which allows you to set the source
      type for the tray icon; this defaults to #BRUSH but you can set it to #ICON in order to use the new
      icon object type introduced with Hollywood 8.0 as the image source; this allows you to conveniently
      provide images for different DPI settings; make sure to set 16x16 as the standard size in the icon
      since that is the default tray icon size on Windows 
    - New [IDE]: Added "Keep help window on top" option to the IDE; if this is activated, the help window
      will always stay on top of all other windows, which is also the default (requested by Christos
      Tsaldaris and Michael Jurisch)
    - New: Added #SERIAL type; currently only the #ATTRCOUNT attribute is supported for #SERIAL  
    - New: Added serial port support; Hollywood now comes with a dedicated library for communication on
      the serial port; the following functions are available: OpenSerialPort(), CloseSerialPort(),
      ReadSerialData(), WriteSerialData(), FlushSerialPort(), SetBaudRate(), SetStopBits(), SetParity(),
      SetDataBits(), SetFlowControl(), SetDTR(), SetRTS(), GetBaudRate(), GetStopBits(), GetDataBits(),
      GetParity(), GetFlowControl(), GetDTR(), GetRTS(), PollSerialQueue(), ClearSerialQueue(); this
      library should make it very easy and convenient to communicate with other devices using the RS/232
      standard; note that FlushSerialPort(), PollSerialQueue(), and ClearSerialQueue() aren't supported
      on Android (requested by Tony Canazza, Leo den Hollander, Christos Tsaldaris and Xabier Payet)
    - Fix [Linux]: Hollywood didn't work without an X server (reported by Carl Moppett)
    - Fix [Amiga]: Files ending in one or multiple dots couldn't be opened (reported by Jörg Renkert)
    - Fix [Windows/Linux]: In case of overlapping drag and size regions, the size region is now given
      precedence in order to be consistent with the behaviour on Amiga compatible systems (reported by
      Radoslaw Czernik)
    - Fix: Transforming brushes created by PathToBrush() crashed Hollywood (reported by Radoslaw Czernik)
    - New: Added ForceSound() command and FORCESOUND console argument/tooltype; normally, Hollywood will
      fail silently if a script tries to access the audio hardware and it isn't available; by activating
      the FORCESOUND option, however, Hollywood will trigger a runtime error if a script tries to access
      the audio hardware and it can't be allocated
    - New: Added OpenAudio() and CloseAudio() functions; these can be used to explicitly open and release
      the audio hardware; note that this is normally not needed because Hollywood will automatically open
      the audio hardware when it first needs it and it will be closed upon program termination; on Amiga
      systems, however, you might want to call CloseAudio() manually in case you want to allow other
      programs, which may require exclusive access, to acquire the audio hardware; note that calling
      CloseAudio() will not only stop all audio output but it will also free (!) all samples because
      samples are usually uploaded to sound card memory; musics and videos, however, aren't affected by
      CloseAudio(), though (requested by Petteri Valli)
    - Fix [MacOS/x86/x64]: Mouse wheel events weren't generated reliably (reported by Petteri Valli)
    - Fix [MacOS/PPC/Carbon86]: Mouse wheel events were always generated twice (reported by Petteri Valli)
    - New [IDE]: Block indenting with TAB is supported now; if you mark a block and press TAB, the whole
      block is indented; if you press SHIFT+TAB, the identation is decreased (requested by Robin Hueskes
      and Michael Jurisch)
    - New: Added Beep() function which can be used to play the system beep; on Windows systems, you can
      also specify which system sound you want to have played (#BEEPSYSTEM, #BEEPINFORMATION, #BEEPERROR,
      #BEEPWARNING, #BEEPQUESTION); on all other systems only #BEEPSYSTEM is supported
    - New: Added ConsolePrint(), ConsolePrintNR(), and ConsolePrompt(); these do the very same thing as
      DebugPrint(), DebugPrintNR(), and DebugPrompt() except that they'll always work, i.e. even if
      "EnableDebug" is set to FALSE (which happens automatically when compiling scripts unless you set it
      explicitly to TRUE)
    - New: Offsets can also be added to and subtracted from #USELAYERPOSITION now in the same way you can
      fine-tune other special constants like #CENTER or #RIGHT (requested by Michael Jurisch and Samuli
      Holopainen)
    - New [Amiga]: HideDisplay() accepts a new optional argument now; if this argument is set to TRUE, the
      display will be hidden by moving it behind all other windows, i.e. to the bottom of the window stack
      (requested by Petteri Valli)
    - New [Amiga]: Added GetFrontScreen() command; this will return the name of the public screen that is
      currently up front or an empty string in case a non-public screen is currently the frontmost screen;
      note that because of the multitasking environment screens managed by other programs can go away at
      any time so there is no guarantee that the screen is still there (or front) when GetFrontScreen()
      returns (requested by Petteri Valli)
    - New: InKeyStr() also supports pasting text via CTRL+V (Windows/Linux) or CMD+V (all other platforms)
      now (requested by Niels Schapke)
    - New: InKeyStr() supports an additional optional argument now which allows you to enable a cursor;
      if this argument is set to TRUE, InKeyStr() will show a cursor and you will also be able to move
      the cursor by pressing the left and right cursor keys; this also allows you to insert new characters
      at arbitrary positions within the string; additionally, it's also possible to delete characters at
      arbitrary positions by pressing DEL when InKeyStr() is in cursor mode (requested by Niels Schapke
      and Fabio Falcucci)
    - Fix: Using backspace on non-ASCII characters didn't work correctly with InKeyStr()
    - Fix: InKeyStr() simply returned a string full of asterisks when password mode was active, which is
      not quite what password mode was made for (reported by Fabio Falcucci)
    - Fix [Doc]: Documentation didn't mention that "Balance" was ignored when creating multi-color conical
      gradients using the "Colors" table (reported by Tony Canazza)
    - New: The table returned by IsPicture() now contains a new field named "Format" which will be set to
      the image's format; this can be #IMGFMT_BMP, #IMGFMT_PNG, #IMGFMT_JPEG, #IMGFMT_ILBM, #IMGFMT_GIF,
      #IMGFMT_TIFF, #IMGFMT_NATIVE, or #IMGFMT_PLUGIN (requested by Petteri Valli)
    - Fix [Win32]: Non-alphanumerical characters as menu shortcuts didn't work (reported by Petteri Valli)
    - New: Added HaveVolume() command to check if a volume is available (requested by Tony Canazza)
    - New [Amiga]: Added NOCOMMODITY console argument/tooltype; this does the same as the @OPTIONS tag of
      the same name (requested by Paul Bloedel)
    - New [OS4]: Added NODOCKY console argument/tooltype; this does the same as the @OPTIONS tag bearing
      the same name (requested by Paul Bloedel)
    - New: Poke() and Peek() both accept an additional argument now that allow you to poke and peek in
      little endian byte order; this is probably more useful than the native endian argument because
      that isn't really portable and thus somehow contradicts Hollywood's very concept
    - New: Added ByteStrStr() command; this allows you to convert a value to raw binary data; the value
      can be either an 8-bit (#BYTE), 16-bit (#SHORT), 32-bit (#INTEGER) value, or a 32/64-bit floating
      point value (#FLOAT and #DOUBLE); optionally, you can also specify if the byte order should be big
      endian or little endian (requested by Dieter Groppe)
    - New: Added ByteVal() command; this allows you to read raw bytes from a string and return them as
      either an 8-bit (#BYTE), 16-bit (#SHORT), 32-bit (#INTEGER) value, or 32/64-bit floating point
      value (#FLOAT and #DOUBLE); optionally, you can also specify if the byte order is big endian or
      little endian (requested by Dieter Groppe)
    - New: Added IsBrushEmpty() function; this returns TRUE in case a brush has an alpha channel or a
      mask and all pixels are invisible (requested by Tony Canazza)
    - Fix [Doc]: Rnd() and RndF() were both documented as being inclusive whereas they are exclusive in
      reality; for RndF() the documentation was wrong since Hollywood 1.5, for Rnd() only Hollywood 7.1's
      manual was wrong (reported by Enrique Mecklenburg)
    - Fix: ByteChr() returned an empty string when passing 0 (reported by Dieter Groppe)
    - Fix [Amiga]: Several fixes in Hollywood's internal file buffering mechanism when using #MODE_READWRITE
      (reported by Petteri Valli)
    - Fix [GUI/Amiga]: GUI crashed completely on systems without MUI (reported by Michael Jurisch)
    - Fix [Windows]: Menu hotkeys didn't always work correctly (reported by Petteri Valli)
    - New [SDK]: Added HWVBMCAPS_BLITTRANSFORM and HWVBMCAPS_BLITALPHAMOD to HWSDATAG_VIDEOBITMAPCAPS;
      if a display adapter supports one (or both) of those tags, the BltBitMap() implementation has to
      handle the new "Matrix", "AnchorX", "AnchorY" tags (for HWVBMCAPS_BLITTRANSFORM) and "AlphaMod"
      (for HWVBMCAPS_BLITALPHAMOD); note that if "Matrix" in "struct hwBltBitmapCtrl" is non-NULL, the
      coordinates passed to your BltBitMap() implementation are not clipped; they will be set to the raw
      coordinates passed to DisplayBrush() is "Matrix" is non-NULL; this is different to the case where
      "Matrix" is NULL; in that case, all coordinates are clipped to the current display boundaries
    - New: When drawing a hardware brush using DisplayBrush() and one of the transformation tags (e.g.
      "ScaleX", "ScaleY", "Rotate", ...) or the "Transparency" tag, the hardware brush adapter may now
      choose to directly draw the hardware brush with the desired draw settings applied; previously, a
      new temporary hardware brush was allocated which was quite a throttle; the hardware brush adapter
      on Android supports this feature now so you can use DisplayBrush() to draw GPU-transformed graphics
      with very little overhead 
    - New [SDK]: HWAVBMFLAGS_SMOOTH is now passed to AllocVideoBitMap() if the "SmoothScale" tag has been
      specified in the @BRUSH, LoadBrush(), CreateBrush(), or CopyBrush() command
    - New: CreateBrush() and CopyBrush() support a new tag named "SmoothScale" now; this is only used if
      the "Hardware" tag has been set to TRUE as well; in that case, Hollywood will tell the hardware
      brush handler that linear interpolation is to be used when scaling and transforming this hardware
      brush; note that not all hardware brush implementations might handle that tag; additionally, the
      "SmoothScale" tag in LoadBrush() and @BRUSH is now also handled if "Hardware" has been set to TRUE
      (previously it was only handled if "ScaleWidth" and "ScaleHeight" had been set)
    - New [Android]: Added support for hardware-accelerated drawing; Hollywood now supports hardware
      double buffers, hardware brushes, and hardware-accelerated drawing for plain rectangles and lines
      (i.e. without any additional styles applied); additionally, hardware brushes can be scaled, rotated
      and transformed using the GPU now which gives a great boost; hardware-accelerated drawing on Android
      is implemented in a very similar way to the hardware-accelerated drawing features offered by RebelSDL;
      all you have to do is start a hardware double-buffer and draw on it using hardware brushes; this
      should give a great speed boost!; NB: if you don't use fullscreen mode, make sure to call Cls() after
      every Flip(), otherwise there will be artefacts because there is some unused space around the
      Hollywood display
    - Fix [Android]: ColorRequest() adapts correctly to different densities now
    - New [SDK]: Added HWRBBTAG_CLIPRECT, HWRRFTAG_CLIPRECT, HWRLITAG_CLIPRECT, and HWRWPTAG_CLIPRECT for
      clipping the render output of GfxBase.RawBltBitMap(), GfxBase.RawRectFill(), GfxBase.RawLine(), and
      GfxBase.RawWritePixel(); you need to pass a pointer to a hwRect
    - Fix [Android]: SetVideoVolume() wasn't implemented at all on Android
    - New [SDK]: Added HWCRDSTAG_SCALEWIDTH and HWCRDSTAG_SCALEHEIGHT for GfxBase.ChangeRootDisplaySize();
      in case a scale factor has been set, these tags allow you to override the scaled dimensions of the
      root display; normally, they are calculated from the size you pass multiplied by the scale factor
    - New [SDK]: Added HWLDIMGTAG_SCALE and HWLDIMGTAG_INTERPOLATE for GfxBase.LoadImage(); setting those
      will automatically return a scaled version of the image
    - Fix [SDK]: When a display adapter was active and a satellite was attached to it and a video was
      playing, Hollywood wrongly generated a mask for the HWSATOP_BLTBITMAP command; this is no longer
      done because when a display adapter is active, video clipping is done internally using a single
      pseudo-sprite per video
    - New: Added #ATTRHOSTSCALE for #DISPLAY object type; this returns the UI content scaling factor for
      the current display
    - New [SDK]: Added HWPLUGINFLAGS_SCALEDISPLAYS and HWPLUGINFLAGS_INTERPOLATE for HWRPTAG_PLUGINFLAGS;
      if HWPLUGINFLAGS_SCALEDISPLAYS is set, Hollywood will set the display mode to "SystemScale" for all
      displays; setting the HWPLUGINFLAGS_INTERPOLATE flag will enable bilinear interpolation
    - New [SDK]: Added HWGAB_FLAGS for GfxBase.GetARGBBrush(); this allows you to set some flags for the
      operation; the following flags are currently supported: HWGABFLAGS_SCALE scales the brush by the
      system's scaling coefficient and HWGABFLAGS_INTERPOLATE will activate bilinear interpolation for
      scaling; it only has an effect if HWGABFLAGS_SCALE is set as well
    - New [SDK]: Added GfxBase.RawScale(); this allows you to scale raw pixel buffers with optional
      bilinear interpolation and cropping
    - Fix: Slight pixel inaccuracy and memory access fault in the bilinear interpolated pixel scaler
    - New [SDK]: Added HWDISPATTR_SCALEFACTOR which allows you to query whether the display is scaled by
      a hard-coded scale factor
    - New: Added SYSTEMSCALE argument; setting this argument will make Hollywood query the host system's 
      DPI scaling coefficient and set it as the SCALEFACTOR; if SCALEFACTOR is specified as well, it
      will be multiplied by the system's DPI scaling coefficient; setting SYSTEMSCALE is a good way to
      make sure that your script appears large enough on high dpi displays; you can also set the scaling
      mode by passing AUTOSCALE or LAYERSCALE as an argument; if no scaling mode is specified, Hollywood
      will default to AUTOSCALE; the SYSTEMSCALE argument is also available from the CreateDisplay() and
      the @DISPLAY commands
    - New: Added SCALEFACTOR argument; when setting this argument to a scaling coefficient, which may be
      fractional, the whole script is scaled by the specified coefficient; note that setting SCALEFACTOR
      will make the script behave slightly different than setting SCALEWIDTH and SCALEHEIGHT does; the
      latter will enforce a fixed display size for the script which will never be changed unless the user
      manually uses the mouse to change the display size; setting SCALEFACTOR, however, will apply the
      scale factor to all new BGPics and display sizes so the display size may change if the BGPic size
      changes or the script changes the display size; when using SCALEFACTOR, your display will also
      still receive "SizeWindow" messages which are normally not delivered when using a scaling engine;
      SCALEFACTOR's behaviour is perfect for scaling a script for a high dpi display because it makes
      sure that the script behaves exactly the same but just appears larger (or smaller if you want!);
      SCALEFACTOR is also available from the @DISPLAY preprocessor command and from CreateDisplay(); note
      that SCALEFACTOR will only have an effect when also setting either LAYERSCALE or AUTOSCALE  
    - Fix: The #SCROLLXXX effects didn't work correctly with layer scaling and activated BGPic emulation
    - Fix: Bug in the autoscaling engine that could trigger when using satellite displays
    - New [SDK]: Added HWADS_CUSTOMSCALING tag to GfxBase.AttachDisplaySatellite(); when this is set,
      Hollywood won't do any autoscaling for the satellite but expects the dispatcher to do that; also
      added HWADS_BUFFERWIDTH and HWADS_BUFFERHEIGHT which can be used to obtain the back buffer
      dimensions of the root display (similar to HWDISPATTR_BUFFERWIDTH/HEIGHT)
    - New [SDK]: Added HWICONFLAGS_OPAQUE; this is currently only used by GfxBase.GetIconForDensity()
      and GfxBase.GetIconImages()
    - New [SDK]: Added GfxBase.GetIconForDensity(); this function can be used to retrieve a copy of a
      single icon for a desired density; if you pass 0 as the density, the default monitor's density
      is used; use GfxBase.FreeIcon() to free the icon returned by this function
    - New [SDK]: Added GfxBase.GetIconImages(); this can be used to retrieve copies of all images inside
      an icon object; use GfxBase.FreeIcons() to free the list returned by this function
    - New: @APPICON also accepts the filename of a Hollywood icon now instead of the old table argument;
      this should make icon linking much easier because you no longer have to specify all those different
      size tags; just one filename specifying an icon with different sizes is sufficient now; the old
      syntax is still supported for compatibility of course
    - New: ConvertToBrush() also supports the new #ICON type; a new optional parameter allows you to
      specify whether you want to convert the selected or the normal icon to a brush
    - New: Added GetAttribute() support for the new icon objects; the following attributes are now
      recognized for #ICON: #ATTRWIDTH, #ATTRHEIGHT, #ATTRNUMFRAMES, #ATTRNUMENTRIES, #ATTRSTANDARD, and
      #ATTRCOUNT
    - New: Added icon support; icons are a new Hollywood object type that can store a collection of
      images in different sizes; this is very important when working with bitmap graphics and high density
      displays which are becoming more and more common; in that case, you can store several copies of
      an image for several resolutions in a single icon object; additionally, icons can contain two
      states for every size; this is important for Amiga support where icons always have two states;
      images in the icon object will always be sorted in ascending order and each size can only be
      there once inside an icon object; alternatively, you can also store a single vector graphics image
      inside the icon object; in that case, Hollywood will automatically scale the icon to the desired
      size without quality losses; the new icon library has the following functions: @ICON preprocessor
      command, CreateIcon(), LoadIcon(), SaveIcon(), FreeIcon(), AddIconImage(), RemoveIconImage(),
      SetStandardIconImage(); note that SaveIcon() will save the icons in a custom format that is compatible
      to PNG so that you can view Hollywood icons in your favourite image viewer; note, however, that you
      cannot edit those PNGs in an image processor because of some custom data stored by Hollywood; it's
      also not possible to use SaveIcon() on icons that contain vector graphics; Hollywood icons can only
      be created by the SaveIcon() function
    - New [SDK]: Added HWMCP_GETDENSITY; this allows you to query the density for the default display
      device; note that different monitors can have different density settings so HWMCP_GETDENSITY will
      only be meaningful in case there is only one display device
    - New [SDK]: Added SysBase.HaveObject(); this function allows you to check if the specified object
      is currently available in Hollywood
    - Fix: Major bug in event handler that could cause a complete crash under very special circumstances
    - Change [OS3]: The following keys are supported on OS3 now too: INSERT, PAGEUP, PAGEDOWN, F11, F12,
      PRINT, PAUSE, HOME, END; note that when running on a real OS3 system (i.e. not on OS4 and MorphOS)
      you need to use "OnRawKeyDown" and "OnRawKeyUp" to listen to them because the standard keymaps on
      OS3 don't have mappers for them so they won't be delivered through "OnKeyDown" and "OnKeyUp"
    - Fix: When loading plugins at runtime using LoadPlugin(), plugin constants weren't loaded at all
      (reported by Petteri Valli)
    - Fix: Fixed potential stack overflow with deeply nested tables in ReadTable() and WriteTable()
      (reported by Fabio Falcucci)
    - New [Android]: Added "SingleMenu" tag to @DISPLAY; if this is set to TRUE, only the items of the
      first menu inside the menu strip are added to the Action Bar's options menu; this is useful if you
      only want to have a few menu options and avoid the hassle of the user having to navigate into a
      submenu first before being able to access a menu item
    - New [Android]: Hollywood's Android backend supports menu strips now; they will be mapped to the menu
      that is opened when pressing the Action Bar's options button; Hollywood supports all menu features
      on Android, i.e. submenus as well as toggle and radio menus are fully supported on Android now
    - New [Android]: Added SetSubtitle() function which allows you to set the subtitle of the Action Bar;
      pass an empty string to remove the Action Bar's subtitle; you can also set the subtitle using the
      new "Subtitle" tag available in @DISPLAY now
    - New [Android]: The display's title set using the "Title" tag in @DISPLAY or using the SetTitle()
      command is now shown in the Action Bar
    - New: Added Pack() function; this will conveniently pack all of its parameters into a table and return
      it to you; it is the counterpart to Unpack() (requested by Richard Lake)
    - New: Added RemoveLayers() function; this will remove all layers in the current BGPic
    - Fix [Doc]: An optional "keep" argument was added to FreeLayers() in Hollywood 4.0 but it was never
      properly documented
    - Fix: Converting a vector brush into a BGPic didn't work correctly; it was impossible to transform
      the BGPic afterwards
    - Fix: Eval() didn't correctly distinguish between variables whose first characters were identical
      and then changed after a "_", "$", or "!" token 
    - Fix [Android/64-bit]: Polygons were always drawn in outline mode even when the mode was set to
      #FILLCOLOR; a hotfix for this major issue which affected lots of different parts of Hollywood
      has been uploaded to the Play Store (reported by Leo den Hollander) 
    - Fix [Android]: Crash in FileRequest() and PathRequest() when trying to change to a parent directory
      that the app didn't have access to
    - Change [Android]: Hollywood on Android finally exits gracefully now and doesn't just kill itself;
      this graceful exit can be seen in the fact that Hollywood will quit with a system animation now  
    - Change [Android]: NOHARDWARESCALE is now obsolete; Hollywood will always use hardware scaling
      now because it is supported by all Android 4.0 and up devices
    - New [Android]: Added support for right mouse button, middle mouse button, mouse wheel, and mouse
      move events when a mouse is connected to the Android device (requested by Xabier Payet)
    - New [Android]: Hollywood will always show Android's Action Bar now unless you set the "HideTitleBar"
      tag to TRUE in @DISPLAY
    - New [Android]: Added support for multiple displays; as soon as more than one display is open,
      Hollywood will put an item into the menu bar for every display that is open so that you can
      conveniently switch to this display; if you don't want to have a list of all open displays in the
      menu bar, set the new "NoCyclerMenu" tag to TRUE (either in CreateDisplay() or in @DISPLAY); you
      can programmatically bring a hidden display to the front by calling either ShowWindow() or
      ActivateWindow() (requested by Ulrich Beckers)
    - New [Android]: Completely rewrote Hollywood's core on Android; it no longer uses NativeActivity
      now because that imposed too many limitations; instead, Hollywood uses a standard activity with an
      OpenGL ES 2.0-based renderer now; this makes it possible to use many new Android features like the
      Action Bar now; it also fixes problems with devices which didn't emulate the Android 1.x/2.x options
      menu button which Hollywood was still using even though it has been deprecated since Android 3.0;
      the downsides are that Hollywood requires at least Android 4.0 now and on very old devices Hollywood
      will be slower than the previous version because OpenGL ES 2.0 does everything in 32-bit whereas the
      previous Hollywood version also supported 16-bit modes for older devices but this is impossible with
      OpenGL ES 2.0
    - Change: DebugPrint() and DebugPrintNR() now concatenate all arguments into a single string before
      sending them to the debug device; this results in better formatting on Android because previously
      every argument appeared on its own line due to the way DebugPrint() worked internally
    - Fix [Linux]: #ATTRHOSTSCALEX/Y always returned 1, even on high DPI systems
    - Fix [GUI/Linux]: Fixed some layout issues in the GUI on high DPI systems on Linux
    - New [IDE]: The Windows IDE contains high resolution icons now which are used on systems running
      a resolution with a high DPI setting; this leads to a perfectly crisp appearance even on UltraHD
      screens; big thanks to Martin 'Mason' Merz for the hires icons!
    - Change [Windows]: Hollywood's installer is now high DPI aware so the text will no longer appear
      blurry
    - NEW [Android]: Ported RapaGUI to Android; this took more than 6 months to write but the result
      is stunning; creating GUI applications that run on Windows, macOS, Linux, AmigaOS, MorphOS, AROS
      and Android has never been easier! RapaGUI on Android supports almost everything from the desktop
      versions; the only thing missing entirely is a tree view widget because Android doesn't have one;
      all the other features are pretty much all supported, including dialogs, icons, toolbars, multiple
      windows and the Hollywood widget; it is also possible to combine Hollywood displays and RapaGUI
      windows in the same application, just like on the desktop platforms; since the majority of RapaGUI
      for Android has been implemented in Java with just a small bridge layer written in C/JNI, it's not
      possible to distribute it as a plugin because plugins are just shared objects containing machine code;
      instead, RapaGUI on Android is completely built into Hollywood; for compatibility reasons, you
      still need to @REQUIRE it, though, just like you do it on desktop platforms
      
    Version 7.1     (10-Feb-18)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - Fix: When setting the "Desktop" tag to TRUE in @DISPLAY, Hollywood only enforced always on top
      behaviour on Windows systems (reported by Petteri Valli)
    - New: UseCarriageReturn() allows you to control whether or not WriteLine() will add a carriage
      return before the linefeed; on Windows this defaults to TRUE, whereas on all other systems it
      defaults to FALSE
    - New: Added "EnableDebug" tag to the @OPTIONS preprocessor command; this tag can be used to turn
      debugging support on or off; if debugging support is turned off, functions like DebugPrint()
      or DebugOutput() will do nothing; when running scripts in Hollywood, debugging support is
      enabled by default; when compiling executables debugging support is turned off by default
    - New: Added ValidateDate() which can be used to check if a given date is valid
    - New: Added DateToUTC() and UTCToDate() functions to convert between local time dates and UTC
      dates; note that on AmigaOS-based systems this currently doesn't support daylight saving time
      because the OS doesn't provide this information so the results will be off by the daylight
      saving time bias when daylight saving time is active
    - Change: ExitOnError() can now be used when RaiseOnError() is active too; the two are no longer
      mutually exclusive; you might want to use the new ?-syntax though (see below)
    - Fix [Amiga]: When the optional argument was set to TRUE in GetTimestamp(), the timestamp that
      was returned wasn't adjusted for UTC like on the other platforms
    - New: Collision() supports the new type #SPRITE_VS_BRUSH now (requested by Erlend Sakshaug)
    - Fix: GetDate() and GetDateNum(#DATEYEAR) didn't return the correct year if the system date's
      year was set to a date earlier than the year 2000
    - New: Added ParseDate() and MakeDate(); the former can be used to decompose a Hollywood date
      into its constituents and the latter can be used to compose a Hollywood date from a set of
      individual constituents
    - New: Added TimestampToDate() and DateToTimestamp() to convert between timestamps and dates
      (requested by Achim Kern)
    - Fix [Amiga/Linux/Android]: CompareStr() always returned 0 in case one of the strings was a
      substring starting at offset 0 in the other string (reported by Piotr Chmielewski)
    - Fix [Android]: Added workaround for a bug in Android 8.0 which made it impossible for Hollywood
      to get the new orientation after an orientation change
    - New [SDK]: Added HWCLAXXXFLAGS_MUSTREQUIRE for SysBase.ConfigureLoaderAdapter(); if this flag
      is set, the loader or adapter will only be available if @REQUIRE has been called on it; this
      can be useful if your RequirePlugin() function does some important initialization which you
      don't want to do in InitPlugin() for whatever reason; Hollywood will then make sure to only
      call your loader or adapter if it has been properly @REQUIRE'd
    - New [SDK]: Added GfxBase.RawPolyFill() which can be used to draw a filled polygon to an
      arbitrary memory buffer
    - New: Added syntactic sugar for greatly simplifying the way of dealing with errors generated
      by Hollywood or plugin functions; you can now prefix the function by a question mark; this
      prefix means that the function will be "asked" to return an error code in its first return
      value; this greatly simplifies extraction of an error code from a single function call;
      previously, you had to first call ExitOnError(False), then do the function call, then call
      GetLastError(), and then call ExitOnError(True) again; with the new syntax you can do all
      that in just a single line; note that if the function prefixed by a question mark returns
      values, those return values will be shifted down because the first return value will always
      be the error code
    - New [SDK]: Added support for HWSATEVT_RAWKEY and HWEVT_RAWKEY; those two can be used to post
      raw key events to Hollywood's event queue
    - New: IsKeyDown() and WaitKeyDown() support an additional argument now which can be used to
      force them to use raw keys instead of normal keys
    - New: Introducing raw key support! This finally allows you to listen to combinations of normal
      keys and modifier keys like SHIFT, ALT, CTRL, and CMD; to get notified about raw key events,
      install the new event handlers "OnRawKeyDown" and "OnRawKeyUp"; the "Key" field of the event
      message will contain either a character in the range from A-Z (always upper case), 0-9,
      NP0-NP9, NPDEC, NPADD, NPSUB, NPMUL, NPDIV (NP = numpad), one of the Hollywood key definitions
      like UP, DOWN, RIGHT, etc. or modifier keys like LSHIFT, RSHIFT, LCONTROL, etc.; note that
      in contrast to "OnKeyDown" and "OnKeyUp", "OnRawKeyDown" and "OnRawKeyUp" will also trigger
      when a modifier key is pressed or released on its own; also note that for the space key you
      will get a key named "SPACE" instead of " " and for the return and enter keys the key that
      is generated will be "RETURN" or "ENTER" instead of a linefeed as it is the case with the
      "OnKeyDown" and "OnKeyUp" events; finally, the message that is sent to your event callback
      will also contain a field named "Modifiers" which contains a bitmask of the modifiers which
      were down at the time the key was pressed; this is just for your convenience; of course you
      can also call IsKeyDown() to check which modifiers are down (requested by Piotr Chmielewski
      and Erlend Sakshaug)
    - Fix [MacOS]: Hollywood didn't distinguish between right and left shift, alt, control, and
      command keys; instead, it always reported the left modifier key even if the right one had been
      pressed
    - New: NOCHDIR is now also available as a script option inside the @OPTIONS preprocessor command
    - Fix [Amiga]: Text drawn through bullet.library wasn't always aligned correctly to the baseline;
      note that this only affected the original bullet.library, not the OS4/MorphOS/AROS font
      engines transplanted on top of the bullet.library interface (reported by Michael Rupp)
    - Fix: GetPlugins() didn't handle ISO 8859-1 characters correctly in case a plugin returned such
      characters in the InitPlugin() return strings
    - Fix [GUI/IDE]: Plugin information which was stored as ISO 8859-1 in the strings returned by
      InitPlugin() wasn't shown correctly in the GUI and the IDE
    - Fix [GUI/Amiga]: Starting a second instance of the GUI when one was already running didn't work
    - Fix: All of the MoveXXX() commands often applied horizontal or vertical adjustments when the
      move was diagonal and not straight; the implementation has been improved to use a line-based
      algorithm for diagonal moves now (reported by Michael Rupp)
    - Fix [OS4/GUI]: Fixed plugin loader to be compatible with dos.library v54.40 and up; this was
      necessary because of a compatibility break in OS4 DOS (reported by Javier de las Rivas)
    - New [SDK]: Added CRTBase.getstdin(), CRTBase.getstdout(), CRTBase.getstderr(), CRTBase.fputs(),
      CRTBase.fgets(), and CRTBase.geterrnoptr()
    - Fix [MorphOS]: Hollywood crashed when trying to open a window with alpha transparency on a
      16-bit screen; it now exits cleanly and reports an error (reported by Petteri Valli)
    - New: EmptyStr() returns TRUE if a string contains only whitespace characters
    - New: StripStr() removes whitespace characters (space, tab, carriage return, line feed...) from
      both ends of a string
    - Change: ReadChr() and ReadString() automatically skip the UTF-8 BOM now whenever they operate
      in Unicode mode (suggested by Erlend Sakshaug)
    - New [SDK]: Added LocaleBase with three useful functions to obtain information about the current
      locale settings: GetSystemLanguage(), GetSystemCountry(), and GetTimeZone(); these are exact
      counterparts of the respective Hollywood functions 
    - New [SDK]: Added SysBase.TmpNamNew(); this is the third of the temporary filename generation
      functions but it was necessary because the other two didn't accept a buffer size and didn't
      indicate whether the generation of a temporary filename succeeded; all these flaws are remedied
      by this third and hopefully last incarnation of hw_TmpNam()
    - Fix: Fixed some potential buffer overflow errors
    - Fix: Sometimes there were refresh problems when drawing non-formatted text to a double buffer
      (reported by Lazar Zoltan) 
    - Fix: When setting the optional argument to FALSE, CopyTable() didn't work; nobody probably
      ever did that, though, because FALSE is also the default
    - Fix: CopyTable() could easily cause a stack overflow when using more than 3 nested subtables
      (reported by Fabio Falcucci)
    - New: GetDate() accepts a new #DATEUTC constant now; if this is specified, GetDate() will return
      the current UTC time; note that on AmigaOS 3, MorphOS, WarpOS, and AROS this currently doesn't
      support daylight saving time because the OS doesn't provide this information 
    - Change: GetDate() accepts #DATELOCAL and #DATELOCALNATIVE now instead of a boolean value; the
      new constants reflect the old boolean value so GetDate() remains completely compatible
    - New: Added GetTimeZone() command; the first return value describes the number of minutes from
      UTC and the second return value indicates whether daylight saving time is currently active;
      note that this isn't completely reliable on AmigaOS 3, MorphOS, WarpOS, and AROS  
    - New [SDK]: Added CRTBase.strerror() to get a string describing an error number
    - Fix: Potential memory access fault when linking files managed by a file adapter plugin which
      used the container link mode (e.g. the zip.hwp plugin does that)
    - New [SDK]: Added SysBase.GetSystemPath() which can be used to obtain a path to a standard
      directory in the system from Hollywood in a platform-independent manner
    - New: GetSystemInfo() returns an additional table argument named "TempFiles" now; this will be
      set to a path where you can store temporary files
    - New [SDK]: Added HWMCP_GETLUASTATE; this allows you to obtain a pointer to the Lua state via a
      call to SysBase.MasterControl()
    - Fix [Doc]: The range parameter in the Rnd() function was documented as being exclusive whereas
      it is inclusive in reality
    - New [SDK]: Added SysBase.StrongRandom() which is a wrapper for the new RndStrong() function
    - New: Added RndStrong() function which can be used to generate cryptographically secure pseudo
      random numbers; numbers returned by RndStrong() are much more random than Rnd() and RndF()
      and you can use it for encrypting data using AES or similar algorithms; note that RndStrong()
      is very slow; if you need to call it lots of times, it is much faster to first generate a
      bunch of random numbers in a string and then access those numbers from the string; also note
      that on AmigaOS 3.x and AROS RndStrong() just falls back to Rnd() so it isn't cryptography
      proof on this platform 
    - Fix: Box() with a partly transparent foreground colour wasn't mixed correctly when drawn to an
      offscreen brush with #SELMODE_COMBO and combo mode 2 (reported by Fabio Falcucci)
    - Fix [OS3/SDK]: CRTBase.stat() didn't set errno to ENOENT in case the file/directory could not be
      found; this led to trouble with libs explicitly checking for ENOENT
    - New: SETCONSTANTS also allows you to define string constants now; just enclose the string between
      two square brackets [...]; if you need to include square brackets themselves, escape them by
      duplicating them, i.e. use [[ and ]] (requested by Samuel Crow)
    - Fix: SETCONSTANTS didn't work when running scripts, only when compiling them
    - New: GetSystemInfo() returns an additional table item named "Preferences" now; this will be set
      to the path Hollywood uses for storing user preferences
    - Fix [IDE]: Plugin settings no longer expects settings program or file to be in a sub-directory
      named "PluginSettings" but simply uses the path returned by the plugin  
    - Fix [SDK]: DOSBase.FStat() didn't return the correct file size for file-based virtual files
    - New [SDK]: DOSBase.MakeVirtualFile() can be used to create a virtual file specification from a
      number of input parameters; this is the counterpart to DOSBase.TranslateFileName()
    - Fix: LoadBGPic()'s undocumented palette mapper which is only there for exclusive use by Malibu
      could sometimes use wrong colors
    - Fix: Transparency wasn't handled correctly for monochrome IFF ILBM images in which pen 1 was the
      transparent color and pen 0 was the jam color in internal Malibu mode (reported by Michael Rupp)
    - Fix: Crash when displaying the same BGPic twice while layerscale was active
    - Fix: #VFLIPCOIN, #VLOWFLIPCOIN, #HFLIPCOIN, #HLOWFLIPCOIN, #SLIDELEFT, #SLIDETOP, #SLIDEBOTTOM,
      #SLIDERIGHT, and #ZOOMIN didn't draw correctly when recording videos
    - Fix: When using DisplayTransitionFX() with layers enabled the layers of the BGPic to be shown
      were always drawn on top of the effect when using the video recorder (reported by Michael Rupp)
    - Change [Examples]: The MenuDemo example also demonstrates radio menu items now
    - New: CreateMenu() and @MENU support the creation of radio menu items now; to create a radio menu
      item, just set the new #MENUITEM_RADIO flag; all neighbouring items which have that flag set will
      then be combined into a radio group whose items are mutually exclusive (requested by Lazar Zoltan)
    - Change: StringRequest() had a limit of 1024 characters; on AmigaOS and compatibles Hollywood still
      imposes this limit but on all other platforms it has been removed (requested by Paul Bloedel)
    - Fix: Adding or subtracting values from #LEFT, #RIGHT, or #CENTER and passing this value as the x
      coordinate to TextOut() didn't always work (reported by Piotr Chmielewski)
    - Fix [Android]: When forcing a certain orientation using the "Orientation" tag in the @DISPLAY
      preprocessor command, the "Powered by Hollywood" logo didn't enforce this orientation but used
      the device's orientation (reported by Tapio Koivuniemi)
    - Fix: CreateGradientBGPic() didn't work with types #RADIAL and #CONICAL; this bug was introduced in
      Hollywood 5.3; it worked before that (reported by Radoslaw Czernik)
    - New [SDK]: Added display adapter example to the SDK distribution; this is actually a cut-down
      version of RebelSDL which shows the minimal code required for a display adapter; there is lots of
      room for optimizations but they have been deliberately left out in order to make the code as easy
      to understand as possible
    - New [SDK]: Added HWDISPFLAGS_ALWAYSONTOP which is passed if the "AlwaysOnTop" flag has been set for
      a display
    - New: Added "AlwaysOnTop" tag to @DISPLAY and CreateDisplay(); if this is set to TRUE, the respective
      display will always stay above all other windows on the desktop; the new tag is also available as
      a command line argument; always-on-top windows are currently only supported on MorphOS, AmigaOS 4,
      Linux, Mac OS X, and Windows (requested by Thomas Scheller)
    - New: LayerToFront() and LayerToBack() accept an optional argument now; if this is set to FALSE, the
      layer isn't brought to front or back by swapping layers but by simply moving the specified layer
      to the front or the back; this is a much more logical behaviour but by default LayerToFront() and
      LayerToBack() will use the old behaviour for compatibility reasons (reported by Samuli Holopainen)
    - New [SDK]: Added GfxBase.FindBrush(); this can be used to find a handle to a hardware brush allocated
      by the plugin; usage is identical to GfxBase.FindDisplay()
    - New [IDE]: Added syntax highlighting and online help for methods installed by the new method APIs;
      this is used in Polybios for example and allows you to get direct help for all of Polybios' APIs
    - New [SDK]: If the base table name returned by GetBaseTable() ends with a colon (:), all functions in
      the table returned by GetCommands() will be treated as methods; Hollywood will create a metatable
      in the form of "modulename.hwp.basetable" and set all functions as members of that metatable; the
      metatable's __index metamethod will also be set to the metatable itself so that you can simply set
      the metatable to your desired object and calling methods in it will work
    - New: Added MoveFile() function to move files and directories; the file or directory passed as the new
      location in the second argument must not exist and the source file or directory must not be a volume
      root directory; if the file or directory is moved on the same volume, the operation will be really
      quick; when moving files or directories across volumes, the files are copied and then deleted; an
      optional callback allows you to monitor the progress of this operation; when moving around files or
      directories on the same volume, the callback won't be called since such an operation takes almost no
      time (requested by Juan Carlos Herran Martin)
    - Fix [Amiga]: Using ".." or "." at the end of a path didn't work, e.g. it wasn't possible to use
      DirectoryItems() with a ".." path
    - Fix: When passing a non-existing directory to DirectoryItems(), the error message didn't contain the
      right directory
    - New: Hollywood's platform-independent catalog format now supports comments and the individual catalog
      entries can be spread over multiple lines by ending a line with a backslash; empty lines are also
      ignored now; to add a comment, start a line with a semicolon; if a catalog entry starts with a
      semicolon, then you need to escape it by using backslash plus semicolon; if semicolons occur at other
      positions in a catalog entry, they don't have to be escaped since comments must always start at the
      beginning of a line; all these changes allow you to create catalog files which are much better
      readable than the ones in the old format with strictly one entry per line; note that these changes
      might break compatibility with older catalogs so make sure to adapt them 
    - Fix [Android]: When using FULLSCREENSCALE display mode and rotating the device, Hollywood didn't
      automatically scale the display to the new resolution
    - Fix [Doc]: ConvertToBrush() didn't mention that Nil could be passed as the identifier for the new
      brush to use automatic id selection (reported by Lazar Zoltan)
    - New: GetLanguageInfo() can be used to get additional information about a specific language
    - New: GetCountryInfo() can be used to get additional information about a specific country
    - New: GetSystemLanguage() supports almost all languages of the world now; lots of new language
      constants have been added  
    - New: GetSystemCountry() supports almost all countries of the world now; lots of new country
      constants have been added
    - Fix: When using TextOut() with left alignment and Hollywood deemed the text appropriate for its
      internal fast draw optimization, the AnchorX and AnchorY values weren't applied to the positioning
      (reported by Xabier Payet)
    - New [SDK]: struct PathStyle contains an additional member named "MiterLimit" now which contains the
      user's current miter limit
    - New: SetMiterLimit() and GetMiterLimit() allow you to set/get the miter limit for the vectorgraphics
      library; the default miter limit is 10
    - Fix: Inbuilt vectorgraphics engine used a very high miter limit which led to very long line joins
      in case two lines met at a sharp angle; it now uses a miter limit of 10 which is the same as the
      external vectorgraphics plugin (reported by Lazar Zoltan)
    - Fix: Crash when calling DrawPath() on an empty path while using the inbuilt vectorgraphics engine
      (reported by Lazar Zoltan)
    - Fix: When using a statement which marks the end of a block like Next, Wend, EndIf, etc. without first
      having opened the corresponding block, the line number in the error message was inaccurate when the
      closing statement was not in the main script scope 
    - Fix: Using a statement which marks the end of a block like Next, Wend, EndIf, etc. at the end of a
      Hollywood script included using @INCLUDE didn't trigger an error
    - New: Added StartsWith() and EndsWith() commands to the string library; they're just for convenience;
      the same can be achieved with LeftStr() and RightStr() but StartsWith() and EndsWith() don't need
      you to know the string length and also can do a case insensitive comparison
    - New [SDK]: Added DOSBase.AddDeleteFile(); this command allows you to add a file to be deleted by
      Hollywood immediately before it exits
    - New [SDK]: Added HWEXT_LIBRARY_UPVALUES extension; this extension allows library plugins to use Lua
      upvalues; you have to implement the function PushUpvalues() in your plugin which pushes the upvalues
      required by your plugin functions and returns the number of upvalues pushed
    - New: GetMemString() converts a memory block range into a string; note that Hollywood strings can
      also contain binary data so the string returned will really contain all data from the memory block;
      note that Peek() can also convert memory blocks into strings but GetMemString() is faster for
      larger blocks
    - New: ByteAsc() and ByteChr() can be used to get single bytes from strings or convert a single byte
      into a string without any Unicode conversion; this is just a shortcut for calling Asc() and Chr()
      with #ENCODING_RAW
    - New [IDE]: Added online help for all control structure functionality like If, For, While, Break,
      Return, Continue, Function, etc. (requested by Piotr Chmielewski)
    - Fix: When saving transparent GIF images or animations from an image or animation source loaded
      with transparency, Hollywood didn't apply the transparency setting correctly and only made parts
      of the image/animation transparent (reported by Petteri Valli)
    - Fix [GUI/Amiga]: DebugPrint() output is now visible when running Hollywood scripts from the GUI
      (reported by Pierre Giroux)
    - Fix: Using a backslash to span a string across multiple lines didn't work when a carriage return
      instead of a newline character followed the backslash (reported by Piotr Chmielewski)
    - Fix [Win32/Cocoa/iOS]: When playing a non-layered video with layerscaling enabled the video wasn't
      correctly resized to the new dimensions when changing the display's size (reported by Torgeir Vee)
    - New [Amiga]: Added HideScreen() command which sends a screen to the back of the display; the
      optional argument is the name of a pubscreen; if omitted, the front-most screen is sent to the
      back which is typically what you want (requested by Petteri Valli)
    - New: Added several functions to get information about the current style settings: GetFontStyle(),
      GetFontColor(), GetFillStyle(), GetFormStyle(), GetLineWidth(), GetLineJoin(), GetLineCap(),
      GetFillRule() and GetDash() (requested by Fabio Falcucci)
    - Fix: Linking plugins could fail at random because of a memory buffer being one byte too small
      (reported by Juan Carlos Herran Martin)
    - New [IDE]: "Open file under cursor" and the context menu as well as the lister in the "Files"
      tab recognize text files now; in case a text file is detected, it is opened directly in the
      IDE instead of in an external editor now
    - New [IDE]: The file browser contains a new tab named "Files" now; all external files declared
      using the @FILE preprocessor command will be listed in this tab now
    - New [IDE]: The IDE can open and save non-Hollywood scripts now too, e.g. *.txt or *.xml files;
      when opening a file that doesn't use the *.hws file extension, syntax highlighting, function
      and preprocessor command scanning, auto indenting and auto spelling correction and the
      display configurator will be disabled automatically 
    - Fix: @INCLUDE didn't handle the UTF-8 BOM correctly (reported by Achim Kern and Tom C.)
    - Fix [IDE]: Loading and saving empty files didn't work (reported by Samuli Holopainen)
    - Fix: Loading very old *.ttf files which didn't contain a native Unicode cmap wasn't possible
      (reported by Lazar Zoltan)
    - Fix: Passing a *.ttf file using an absolute path to OpenFont() or SetFont() will no longer
      result in Hollywood trying to access invalid paths in case OpenFont() or SetFont() can't
      handle the file (reported by Lazar Zoltan)
    - New: SplitStr() accepts an optional argument now that, if set to TRUE, will treat multiple
      occurrences of the token as just a single occurrence; useful for stripping an arbitrary number
      of whitespace between words for example
    - New [SDK]: HWMCP_GETEXITONERROR allows you to get the state of Hollywood's ExitOnError() flag
    - Fix: NewIcons couldn't be used as icons for executables compiled by Hollywood because the icon
      pixels stored in the tooltypes confused Hollywood (reported by Artur Ostrowski)
    - New: ValidateStr() returns a second value now that returns the number of characters in the
      string, or, in case of an error, the offset of the first invalid character
    - Fix [Win32]: PlayVideo() crashed when using a display adapter with no autoscaling being active
      (this affected for example the RapaGUI video player example)
    - Fix [Doc]: ReadString() documentation didn't mention that the length argument was optional
    - New [GUI]: File requester filter also includes ".hwa" extension now; this is especially useful
      on Mac OS where it was previously impossible to run Hollywood applets using the GUI because
      the file requester filter didn't include it and there was no "all files" mode
    - Fix [MacOS]: GUI didn't show thumbnails on Mac OS 10.6
    - Fix [MacOS]: Hollywood didn't work on 32-bit Mac OS Snow Leopard (10.6); the 64-bit version
      ran fine on 10.6 though
    - Fix [Amiga]: Wait task wasn't shut down correctly in the rare case that Hollywood was shut down
      right after the wait task was set up
    - Fix: When saving a GIF ANIM whose frames didn't have to be quantized because they fit into
      desired number of colors, the transparency pen wasn't set correctly (reported by Petteri Valli)
    - Fix: Opening IFF ANIMs using "FromDisk=True" and forcing the anim reader to skip frames by
      using non-sequential frame access messed up internal delay values (reported by Petteri Valli) 
    - Fix: ModifyAnimFrames() didn't adapt the internal delay table which could lead to memory faults
      when trying to modify or query delay values of newly added frames (reported by Petteri Valli)
    - Fix: Memory freed twice when a URL passed to DownloadFile() redirected to a URL that used an
      unsupported protocol like HTTPS (reported by Petteri Valli)
    - New [Android]: Added 64-bit support for Android; the internal architecture name for the 64-bit
      architecture on Android is arm64-android-v8a; this is also the name you will have to use when
      linking plugins using the Hollywood APK Compiler
    - Fix: CloseCatalog() didn't reset internal states which led to Hollywood trying to close the
      catalog again on exit, typically resulting in a memory access fault (reported by Lazar Zoltan)
    - Fix: Wrong window refresh when changing the size of a display that used a double buffer but
      not the auto scaling engine (reported by Lazar Zoltan)
    - Fix: "SizeWindow" events could get lost when using multiple windows and the size events came
      in at about the same time (reported by Lazar Zoltan)

    Version 7.0     (11-Mar-17)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New: Amiga installer validates the keyfile now
    - New: Modernized the installer on Windows; it now uses a wizard-based interface and also makes
      sure the keyfile is installed properly
    - Fix [GUI/MacOS]: GUI no longer crashes if no keyfile could be found but shows an error message
    - Fix [Linux/PPC]: Reducing volume of a Protracker module or a video stream didn't work correctly
      because of a big endian issue
    - Fix: GIF anim saver got broken by a fix implemented in Hollywood 6.0 (reported by Petteri Valli)
    - Fix [Amiga]: Wrong bitmap alignment in USEWPA mode (used by default on WinUAE and AROS); this
      could lead to drawing issues when using clip regions or monochrome masks
    - New: Added Eternity, UnicodeDemo and VectorTest3 examples
    - Fix [IDE]: Syntax highlighting wasn't correctly adapted when ending a multi-line comment inside
      a string, i.e. using */ inside a "..." sequence
    - Fix [IDE]: Single space characters could get lost under rare conditions
    - New [IDE]: Added syntax highlighting for long strings using the [[ ... ]] syntax; everything
      inside the long string is ignored like a comment; this new feature also solves problems with the
      test scripts of the XML parser plugin in which the IDE adapted the spelling of long strings which
      consequently broke the script (reported by Michael Suther)
    - New: Added DirectoryItems() function; this function can be used as an iterator function of the
      generic for loop to conveniently traverse all files and sub-directories inside a directory; this
      is also possible using OpenDirectory(), NextDirectoryEntry() and CloseDirectory() but the new
      DirectoryItems() function simplies this process
    - Fix: FileLines() leaked its file handle in case the general for loop was interrupted by a "Break"
      or a function throwing an error
    - Fix [Doc]: DumpLayers() wasn't documented although it has been there since Hollywood 2.0
    - New: PathToBrush() allows you to convert one (or more) path object(s) into a vector brush; the
      individual paths can be given different colors and drawing styles which is quite a powerful
      feature to create multi-coloured paths by combining them in a vector brush; alternatively,
      ConvertToBrush() also supports a #VECTORPATH source now; usage is similar to the new PathToBrush()
      command (requested by Lazar Zoltan)
    - New: PathItems() returns an iterator function which you can use together with a generic for loop
      to iterate over all items in a path object (requested by Lazar Zoltan)
    - Change [Doc]: Updated screenshots in documentation
    - Fix: Wrong text layout calculation when drawing a string that ended with a bunch of white-space
      characters and a table that did not contain the "Align" field was passed to TextOut() or
      CreateTextObject() (reported by Piotr Chmielewski)
    - Fix [Doc]: #DEFAULT_BITMAP and #DEFAULT_TRUETYPE weren't documented (reported by Piotr Chmielewski)
    - Fix [GUI/MacOS]: Debug output window now allows horizontal scrolling if line width exceeds the
      list view's width
    - Change [Android]: For consistency reasons, plugins should now be in a "Plugins" instead of a
      "_Plugins" directory inside the "Hollywood" directory on the SD card; the old "_Plugins" directory
      is still supported for reasons of compatibility, but the "Plugins" directory is given precedence
    - Change [Win32/Linux/MacOS]: Plugins for the Hollywood Interpreter need to be placed inside a
      "Plugins" directory that is in the same directory as Hollywood's main executable now; for compiled
      scripts nothing has changed and plugins still can be placed next to the compiled executable;
      note that on Mac OS, the "Plugins" directory must be inside the "Resources" directory of the
      HollywoodInterpreter.app application bundle; also the "LinkerPlugins" directory must be inside
      the "Resources" directory on Mac OS
    - Change [MacOS]: Hollywood.key and Hollywood.sys need to be placed inside the "Resources" directory
      of the HollywoodInterpreter.app application bundle now; note that in the standard Hollywood
      distribution HollywoodInterpreter.app is stored inside the "Resources" directory of the
      Hollywood.app application bundle; also "Catalogs" must be inside the "Resources" directory now
    - Fix [Win32]: Pressing F10 or L-ALT to open a window's menu bar didn't work
    - New [Win32/MacOS Cocoa]: When a display is resized, Hollywood will now use live resizing, i.e.
      the display's contents will be scaled while the user is resizing the window; you can disable
      this behaviour by passing the new NOLIVERESIZE console argument or by using the new "NoLiveResize"
      tag for @DISPLAY and CreateDisplay()
    - New [Win32]: Windows renderer has been completely rewritten; the autoscaling engine uses GPU-
      accelerated scaling now which yields a huge performance boost; non-scaled drawing may also use
      the GPU now depending on the video driver's capabilities; all in all the renderer integrates much
      better with Windows now; before v7.0, the renderer on Windows was rather unorthodox
    - New: Added NATIVEUNITS console argument and tag for @DISPLAY and CreateDisplay(); if this tag is
      set, Hollywood will use the host system's native coordinate space and units instead of pixels;
      this currently only has an effect on Mac OS and iOS because both operating systems use custom
      units instead of pixels when running on a Retina device; by default, Hollywood will enforce the
      use of pixels on Retina Macs and iOS devices for cross-platform compatibility reasons but you
      may want to override this setting by using the new NATIVEUNITS console argument
    - New [MacOS]: Added support for Retina screens; note that in contrast to Mac OS, Hollywood will
      still operate in pixels even on Retina Macs; see above for a way to override this behaviour
    - New: Added NOSCALEENGINE console argument and tag for @DISPLAY and CreateDisplay(); this tag is
      only handled if you use the new FULLSCREENSCALE display mode; if FULLSCREENSCALE is active and
      NOSCALEENGINE is set to TRUE, Hollywood will not use any scaling engine but will simply open
      your display in the same dimensions as the monitor resolution and your script can handle the
      scaling
    - New: Added WINWIDTH and WINHEIGHT console arguments; these allow you to set the initial size of
      the display without activating one of the scaling engines; if you specify these, your display
      will receive a "SizeWindow" event right after Hollywood was started
    - New [GUI/IDE]: Added "Plugins help" menu which allows you to view the manuals of plugins from
      the GUI
    - New [GUI]: Amiga/Linux/MacOS GUI supports "Full screen (scaled)" mode now; also, when selecting
      a full screen view mode, the sizeable and scaling options are now disabled; they are only 
      available for windowed mode
    - New [MacOS]: Autoscaling engine uses GPU-accelerated scaling now on all Macs running at least 10.6
    - New: When using one of the ICONXXX arguments to link icons and compiling for Mac OS X, Hollywood
      will automatically include a default icon for all sizes that you didn't provide icons for
      (this currently affects icon sizes 16, 32, 64, 128, 256, 512, and 1024)
    - New: Added ICON1024X1024 argument and its respective counterpart in the @APPICON preprocessor
      command; this allows you to link a 1024x1024 icon to your executable; 1024x1024 icons are currently
      only used on Retina Macs  
    - Change: When compiling for Mac OS X, Hollywood no longer needs a JPEG2000 plugin to link icons
      in the sizes of 256 and 512 pixels; this is possible because starting with Mac OS 10.6, high
      resolution icons can also be in PNG format; if a JPEG2000 plugin is available, Hollywood will
      still save icons in JPEG2000 format for compatibility reasons, though
    - Fix [Android]: Fixed "Detected problems with app native libraries, text relocations" error message
    - New: #ATTRXDPI and #ATTRYDPI are now also supported on non-mobile platforms
    - Change [Amiga]: Hollywood will now use real screen-based backfills instead of window-based ones
      when in full screen mode; this should solve all problems with backfills in full screen mode
      (reported by Tony Canazza)
    - Fix: #ATTRMONITOR didn't return the correct monitor when the display was manually moved to
      another monitor (reported by Torgeir Vee)
    - New: RotateBrush(), TransformBrush() as well as all other functions that rotate images now use
      dedicated code to handle the special cases of a rotation by 90, 180, 270, and 360 degrees to
      transform the image data; this is much faster and the transformation is also done in a lossless
      way (requested by Tony Canazza)
    - New [IDE]: Added support for some new display features: "FitScale" and "DisableBlanker" tags
      are supported now; also, "FullScreenScale" is supported now; support for the deprecated mode
      "OwnScreen" has been removed
    - Change [IDE]: The Windows IDE no longer uses the deprecated @SCREEN preprocessor command;
      instead, the display mode is now stored in the @DISPLAY preprocessor command as recommended
      since Hollywood 6.0
    - New: #ATTRHOSTSCALEX and #ATTRHOSTSCALEY are now supported for GetAttribute() and #DISPLAY;
      they return the scaling coefficient currently in use in the display's monitor; normally,
      both coefficients will be 1 but they can be higher in case the user is running a very high
      resolution
    - Change: FileLength() no longer does any seeking which speeds it up dramatically
    - Fix: Eof() didn't work correctly with files opened in either #MODE_WRITE or #MODE_READWRITE
      (reported by Paul Bloedel)
    - New: Added EXPORTHELPSTRINGS console argument; if this argument is used together with the
      EXPORTPLUGINS argument, Hollywood will write three lines for every command in the export
      file; the first line will be the command's name, the second line will be its help text and
      the third line will be the command's help node; note that both the second and the third
      line can be empty if the plugin doesn't export a help string or a help node for the
      command 
    - New [IDE]: The IDE now also highlights commands and constants made available by plugins;
      if supported by the plugin, it will also show short help for plugin commands in the
      status bar and pressing F1 will open the respective page in the manual; note that plugin
      manuals in the *.chm format need to be copied to a directory named "PluginHelp" inside
      the Hollywood installation directory
    - New [SDK]: Library plugins support the extension HWEXT_LIBRARY_HELPSTRINGS now; if a
      plugin supports this extension bit, it needs to implement a function named GetHelpStrings()
      which returns a table containing a help string and a node in the plugin's help file
      for each command; the table needs to have exactly the same number of items as the table
      returned by GetCommands() in exactly the same order; both help string and node can be
      NULL for commands that don't support it; if the node is NULL, Hollywood will assume the
      name of the command (minus any dots) as the default node
    - Change [IDE]: Dragging docking windows on Vista and up is no longer flickery because a
      new Vista-compliant drawing mechanism is used now; on XP we still use the old mechanism
      for performance reasons
    - New [IDE]: The Hollywood IDE on Windows is now DPI aware; this means that it will look
      perfectly crisp even on 4K Ultra HD screens; it will no longer uses DPI virtualization
      but will automatically adapt to all modes that are higher than 96dpi; in order to draw
      the thumbnails perfectly crisp in higher resolutions, the IDE now also supports @2x
      thumbnail images; those @2x images should be in 320x240, e.g. twice as a big as the
      default of 160x120 (requested by Tom C.)  
    - New [Win32]: Hollywood is now DPI aware; this means that Windows will no longer use DPI
      virtualization when running Hollywood on resolutions with a DPI higher than 96 (thanks
      to Tom C. for the hint)
    - Fix: StringRequest(), ListRequest(), ColorRequest(), and PathRequest() didn't reset the
      key states which could lead to keyboard events still being triggered after those requesters
      were closed (reported by Piotr Chmielewski)
    - New: OpenFont(), SetFont(), and @FONT support a new tag named "UsePoints" now; if this
      is set to TRUE, the font size will be interpreted as a point size instead of a pixel
      size; note that point sizes are DPI-dependent and these can differ between platforms
      (e.g. Mac OS X uses 72dpi whereas Windows uses 96dpi by default, and on high resolution
      monitors the DPI are even higher); since everything else in Hollywood is pixel-based,
      using DPI alongside pixels means that fonts will appear larger on higher DPI displays;
      thus, normally you don't want to use "UsePoints" unless you also adapt your pixel
      graphics to the monitor's current DPI setting; "UsePoints" was mainly included as a way
      to bypass all the code that Hollywood uses to achieve near identical font rendering
      on all platforms; it can be used to quickly open a font in the specified point size
      without Hollywood having to run its pixel-matching font height algorithms first
    - Fix: BGPics with rotated gradients or multiple color stops didn't work; this bug was
      introduced in Hollywood 6.1; it worked before (reported by Fabio Falcucci)
    - New: Added FallThrough statement to the VM; this statement can be used within the scope
      of a Switch-EndSwitch statement to fall through to the next Case statement in line or
      to the Default statement
    - Fix: #RIGHT and #CENTER alignment styles didn't work correctly with lines in which the
      line width was smaller than the word to be right-aligned or centered
    - New: Added #JUSTIFIED alignment for TextOut() and CreateTextObject(); this will lay out
      your text in justified lines by inserting padding space between the individual words
    - Fix: The logical OR operator in numeric constants evaluated by the preprocessor didn't
      work correctly if the left operand was false and the right operand was true; the Eval()
      command was also affected by this bug; the runtime logical OR operator wasn't affected
    - New: You can now also specify IOS and ANDROID in the EXETYPE argument; this will just
      compile Hollywood applets which you can then convert into real apps by using the
      Hollywood APK Compiler or REMEDiOS; the advantage of using IOS or ANDROID instead
      of just APPLET is that if you use IOS or ANDROID, Hollywood will set the platform-
      specific constants #HW_IOS and #HW_ANDROID for the applet that is compiled
    - New: Added SETCONSTANTS console argument; this argument allows you to define one or
      more constant(s) from the command line; multiple constants have to be separated by
      vertical bars (|); to assign a value to the constant use the "=" character; if that
      is omitted, the constant will be defined as 1; this argument is especially useful for
      doing conditional compiles with the new @IF preprocessor command
    - New: Added #HW_VERSION and #HW_REVISION constants; these will contain the current
      Hollywood version; note that using #HW_VERSION and #HW_REVISION is only recommended
      for the @IF preprocessor commands or when compiling executables; do not use these
      constants when compiling applets because in that case, the constants' values will
      be written to the applet and you won't be able to detect Hollywood Player versions;
      for a safe way to detect the Hollywood version at runtime, use GetVersion()   
    - New: Added a set of platform-specific constants; the following constants are only
      available if Hollywood is either running on or compiling for the respective platform:
      #HW_ANDROID, #HW_AMIGA, #HW_AMIGAOS3, #HW_AMIGAOS4, #HW_AROS, #HW_IOS, #HW_LINUX,
      #HW_MACOS, #HW_MORPHOS, #HW_WARPOS, #HW_WINDOWS, #HW_LITTLE_ENDIAN, #HW_64BIT; note
      that when compiling, only the constants for the target architecture are set, not the
      ones of build system, i.e. when compiling for AmigaOS 3 on Windows, only #HW_AMIGA
      and #HW_AMIGAOS3 will be set, #HW_WINDOWS and #HW_LITTLE_ENDIAN won't be set in this
      case; you can use the new @IF preprocessor commands to do conditional compiles with
      these constants; also note that when compiling applets, none of the constants will
      be set because applets are meant to be completely platform-agnostic  
    - New: Added support for conditional compiling using the new preprocessor commands @IF,
      @ELSEIF, @ELSE, and @ENDIF; these preprocessor commands can be used to compile certain
      code only if the specified expression evaluates to TRUE; otherwise, the code will be
      completely ignored and isn't even checked for syntactical correctness; this is very
      useful when writing code for specific platforms only; by using the @IF preprocessor
      command you can make sure that the code isn't even compiled in on certain platforms;
      this is quite powerful because it operates at preprocessor level, i.e. you could also
      link different graphics for different platforms using the @IF preprocessor command etc;
      note that @IF and @ELSEIF won't complain when using non-existent constants; those
      simply evaluate to 0; this has been done to allow you to use Hollywood's new platform
      detection constants (see above)
    - Fix: Potential memory fault in WriteInt() and WriteShort(); WriteTable() and SavePrefs()
      were also affected by this bug because they call WriteInt() and WriteShort() internally
    - Fix: Cancelling the overwrite confirmation requester didn't work when compiling an applet
      and the destination file already existed
    - New [iOS]: Hollywood's backend for iOS now sends "ShowWindow" and "HideWindow" messages
      when the app is iconified; note that this makes only sense when using REMEDiOS because
      the Hollywood Player for iOS cannot run in background; it will always quit when you
      press the home button   
    - New [iOS]: ShowToast() is now also supported on iOS  
    - New [iOS]: Added PerformSelector() function; when using REMEDiOS, this function allows
      your script to run a method implemented in native code; the method must be part of your
      app's delegate; it receives an NSMutableArray as its sole argument; index 1 contains the
      lua_State and index 2 contains a pointer to a hwPluginAPI structure, allowing you to
      access all public APIs and especially the Lua VM; indices 3 and 4 contain the UIViewController
      and UIView, respectively; upon return, you must set index 0 to an NSValue containing an
      int which specifies the return code of your function; keep in mind that your selector
      function will not be run on the main (UI) thread but on Hollywood's VM thread; so when
      accessing UIKit functionality you need to delegate this code to the main thread first   
    - New [iOS]: Hollywood's iOS backend now runs the VM on a dedicated thread which leads to
      a better performance and flawless integration with UIKit's event loop   
    - New [iOS]: Added support for iOS's native text renderer; this means that OpenFont(),
      SetFont() and @FONT can now also access iOS's system fonts; accessing system fonts is
      not possible with the platform-independent font renderer because all iOS apps run inside
      a sandbox which makes it impossible for the platform-independent renderer to access
      system fonts  
    - New [iOS]: Added support for iOS's native video renderer; if you pass "Native" in @VIDEO's
      (or OpenVideo()'s) "Loader" tag Hollywood will try to load the video using the native
      video renderer on iOS; this also enables Hollywood to make use of hardware acceleration
      when decoding the video; iOS's native video renderer supports MP4 and QuickTime
    - New [iOS]: Added full clipboard support; text and images can now be exchanged between apps
      via the clipboard; the "ClipboardChange" event handler is supported as well
    - New [iOS]: OpenURL() is now supported on iOS too; it requires at least iOS 9.0; note that
      in contrast to other platforms, OpenURL() on iOS will block the script until the user
      has closed the browser
    - Change [MacOS/iOS]: Changed audio buffering method when playing videos to avoid glitchy
      audio on iOS
    - New [iOS]: Added plugin support; plugins need to be code signed and compiled as Cocoa Touch
      Frameworks; you also need to build them as fat binaries ("universal") so that they work on
      32-bit and 64-bit iOS devices
    - New [iOS]: Network library is now supported on iOS too
    - New [iOS]: GetSystemInfo() now returns correct paths for "MyDocuments", "AppData", and
      "AppBundle"; "MyDocuments" and "AppData" are actually the only paths where you are allowed
      to write to on iOS; use "MyDocuments" for files that should be visible to the user and
      "AppData" for private application data
    - Fix [iOS]: GetTempFileName() didn't work correctly on iOS
    - New [iOS]: "KeepScreenOn" is now supported on iOS as well
    - New [iOS]: Added support for the "HideTitleBar" tag in @DISPLAY; just like on Android, if
      this is set, Hollywood will hide the iOS status bar
    - New [iOS]: Added support for SystemRequest(), StringRequest() and ListRequest(); the other
      requester functions are still unsupported because iOS doesn't allow file and path access
      outside the application bundle
    - New [iOS]: The autoscaling engine uses GPU acceleration now; this is very important because
      software scaling every frame to high resolution Retina displays would be a ridiculous waste
      of CPU cycles
    - New [iOS]: Added support for Retina devices
    - Change [Android]: Renamed "Auto scale" and "Layer scale" options in the Hollywood Player for
      Android as "Full screen (auto scale)" and "Full screen (layer scale)"; selecting such an
      option will automatically activate FITSCALE as well; the "Fit scale" option is thus no longer
      necessary and has been removed  
    - New: All events posted by WaitEvent() or CheckEvent() now contain an additional field in their
      message named "Timestamp"; this contains the timestamp when the event was first received by
      Hollywood's event handler; you can compare this time stamp to the latest time stamp obtained
      through GetTimestamp() and filter old events (requested by Lazar Zoltan)
    - New: Added GetTimestamp() function; this returns the number of seconds that have elapsed since
      Hollywood was started (or since the host system's epoch) as a fractional number
    - New: You can also pass the special value -1 to SetEventTimeout() now to indicate that events
      should never time out
    - Fix [Doc]: The event timeout was raised from 1500 seconds to 60000 seconds in Hollywood 6.0
      but this change wasn't documented in the SetEventTimeout() chapter in the manual
    - New [Amiga]: ConvertStr() also supports #ENCODING_AMIGA now; note that you can only convert
      between #ENCODING_UTF8 and #ENCODING_AMIGA; it's not possible to convert between ISO-8859-1
      and #ENCODING_AMIGA
    - New [SDK]: Added HWOS_ENCODING_AMIGA; this allows SysBase.ConvertString() to convert UTF-8
      strings to and from the system's charset on Amiga computers; on all other platforms,
      HWOS_ENCODING_AMIGA is unsupported
    - New [SDK]: Added HWDISPATTR_USESATELLITE; if this tag item is included in a tag list passed
      to GfxBase.GetDisplayAttr() and set to TRUE, Hollywood will interpret the handle passed to
      GfxBase.GetDisplayAttr() as a satellite handle instead of a handle managed by a display
      adapter; this is useful for querying attributes of a satellite's parent display
    - New [SDK]: Added HWDISPATTR_CANDROPFILE; this attribute can be used to query whether a display
      supports dropping files
    - New [SDK]: Added HWEVT_DROPFILE and HWSATEVT_DROPFILE; these new event types allow you to
      post "OnDropFile" events to a display or a display satellite
    - New [SDK]: Added HWCB_DROPFILECHANGE callback; this callback can be used by display adapter
      plugins who want to be notified when the user installs or deinstalls a listener on "OnDropFile"
      using InstallEventHandler()
    - New [SDK]: Added SysBase.RaiseOnError() which invokes the error handling function installed
      by RaiseOnError(); it returns 0 if there was an error handling function and it ate the error;
      otherwise it simply returns the error you passed in; note that it's normally not needed to
      call this function manually; under normal circumstances, Hollywood handles this automatically
    - New [SDK]: HWMCP_DISABLERAISEONERROR allows to temporarily disable an error handling function
      installed by RaiseOnError(); useful for doing some tricks with error codes as currently done
      internally by RapaGUI
    - Change: Changed the way DownloadFile() sends the initial HTTP request to work around problems with
      certain Android versions (reported by Ulrich Beckers)
    - New [IDE]: IDE now also supports opening scripts using the "Open with..." Shell functionality
      (requested by Tom C.)
    - New [Doc]: Major reworking of the documentation; all variable names are now highlighted and lots
      of things have been restructured with some additions here and there; apologies to all people
      maintaining translations of the Hollywood documentation because you'll have a hard time now to
      find out what has changed; I promise not to do another restructuring in the near future but keep
      this format now :)
    - Fix [MacOS]: Fixed potential memory access faults when stopping audio; commands affected by this
      bug were StopSample(), StopMusic() and StopVideo(); it could also cause a crash on program exit
      when sound was still playing because Hollywood implicitly calls the StopXXX() commands before
      termination 
    - New: Added "FullscreenScale" display mode; this does the same as "FakeFullscreen" but scales the
      display to the current monitor's resolution; by default, the autoscaling engine is used; if you
      wish to use layerscaling instead, you need to activate the layerscaling engine; the new display
      mode is also available from the command line through the new FULLSCREENSCALE argument 
    - Change [Win32]: If there is a backfill on a certain monitor, all displays will be opened as
      children of that backfill; this solves some problems (e.g. minimizing a display made it disappear)
      and also doesn't show multiple windows when cycling through the window list using ALT-TAB
    - New: End() accepts an optional argument now which allows you to set the program's exit status
      (requested by Jean Holzammer)
    - Fix: GetAttribute() wasn't able to query event handlers installed by plugins using the object
      type #EVENTHANDLER (reported by Lazar Zoltan)
    - New: @DISPLAY, CreateDisplay(), ChangeDisplaySize() and SetDisplayAttributes() accept the new
      special constant #NATIVE now for their Width/Height/ScaleWidth/ScaleHeight parameters; if this
      constant is used, Hollywood will use the width or height of the display's monitor as the display
      width/height; this is especially useful on Android; #NATIVE is also accepted by the ScrWidth/Height
      parameters of CreateDisplay(), OpenDisplay() and ChangeDisplayMode() (requested by Ulrich Beckers)
    - Fix: Removing a layer behind a layer associated with an asynchronous draw object allocated by
      PlayAnim() resulted in crashes in all further calls to AsyncDrawFrame() (reported by Dimitris
      Panokostas)
    - Fix: ]] wasn't unescaped correctly in Print() and TextOut() when drawing a string in internal
      fast draw mode (reported by Paul Bloedel)
    - Fix [Android/Linux]: Musics shorter than 1 second were either repeated (Android) or were
      followed by a short period of silence (Linux) (reported by Paul Bloedel)
    - Fix [Doc]: The table illustrating the different mask modes in SetMaskMode() didn't survive
      the transition from AmigaGuide to PDF/HTML/CHM using MetaDoc; it's finally back now in all
      versions of the manual (reported by Dominic Widmer)
    - Change [Android]: Updated to the latest libpng and zlib versions to make the Play Store's
      vulnerability check happy (reported by Achim Kern and Ulrich Beckers)
    - Fix [Android]: On error, Hollywood could freeze under certain conditions instead of showing
      the error dialog
    - Fix: With some FTP servers DownloadFile() returned a zero file size in the download callback
      (reported by Fabio Falcucci)
    - Change: Fixed HollyAmp and ClipboardDemo examples to work correctly in Unicode mode
    - New [MacOS]: The Mac OS GUI can now also act as a viewer and open *.hws and *.hwa files via
      double-click; this will automatically launch Hollywood instead of the GUI then
    - Fix [Linux]: Fixed console mode when running Hollywood without X11; this is useful with the
      SDL plugin on the Raspberry Pi which can't be run on X11 because it accesses the hardware
      drivers and kernel services directly
    - Fix [Linux/Android/SDK]: Samples created using CreateSample() or MixSample() were not always
      initialized correctly which could lead to a memory access fault during playback
    - Fix [MacOS]: When using backfills or fake full screen mode menu bar and dock were not hidden
      correctly under some certain circumstances 
    - New: Keyfiles support UTF-8 now too; this finally makes it possible to use people's real names
      on non-ISO 8859-1 systems
    - New [SDK]: Added UnicodeBase with lots of useful functions for dealing with UTF-8 in particular
      and Unicode characters in general
    - Fix [Android]: Asterisk (*) and plus (+) keys weren't sent for "OnKeyDown" and "OnKeyUp" on
      newer Android versions
    - New: Added #ENCODING_RAW constant which is a synonym for #ENCODING_ISO8859_1; it is especially
      useful if you want to have raw binary access to strings with the string library; writing
      #ENCODING_RAW instead of #ENCODING_ISO8859_1 might increase the readability of your code
    - Change: Multi-byte character constants are now expected to describe one Unicode character
      when Hollywood is in Unicode mode; if a multi-byte character constant doesn't describe exactly
      one Unicode character, an error will be generated; this is an API change but no one will probably
      notice because multi-byte character constants are used only very rarely
    - New: Added new string functions for determining the type or formatting of a character: IsAlNum(),
      IsAlpha(), IsCntrl(), IsDigit(), IsGraph(), IsLower(), IsPrint(), IsPunct(), IsSpace(),
      IsUpper(), IsXDigit(); Unicode fully supported!
    - New: Asc() accepts an optional argument now which allows you to specify an index into the
      string to get the character code of other characters than just the first (defaults to 0)
    - Change: OS-independent catalog files are now expected to be in UTF-8 format; this breaks
      compatibility but since nobody ever used those OS-independent catalog files this should still
      be okay
    - Fix [MacOS]: Inbuilt MJPEG AVI loader was broken and crashed Hollywood
    - New [GUI]: Adapted Amiga, Linux and Mac OS X GUIs to fully support Unicode now
    - New [IDE]: Added full Unicode support to the Windows IDE; this was a pile of work; this solves
      all previous problems with non-Latin 1 characters; you can use any characters you like now; in
      addition to that, all Hollywood scripts will be saved as UTF-8 with BOM by default now; if you
      don't want this, there is a new option in the settings now which allows you to reset the encoding
      to ISO 8859-1 but this isn't really recommended; scripts should always be in UTF-8 from now on;
      the Hollywood.ini files which describe the examples are now expected to be in UTF-8 format too;
      the BOM is optional in this case
    - Fix [IDE]: Certain temporary files were never deleted
    - New [SDK]: Added HWCB_ENCODINGCHANGE callback type to SysBase.RegisterCallback(); this callback
      will be run whenever the encoding changes (see below why this callback is useful); the default
      encoding is HWOS_ENCODING_UTF8 so your callback will only be called in case a script explicitly
      requests HWOS_ENCODING_ISO8859_1
    - New [SDK]: Added SysBase.GetEncoding(); this allows you to get the encoding used by the script;
      note that this will always be HWOS_ENCODING_UTF8 when called in InitPlugin() or InitLibrary()
      because the encoding will be set when parsing the script and both InitPlugin() and InitLibrary()
      will be called before parsing the script; use HWCB_ENCODINGCHANGE if you want to be notified
      as soon as the encoding changes (see above)
    - New: Added ReadBytes() and WriteBytes(); these will always operate on bytes no matter if Hollywood
      is currently in Unicode mode or not; these are substitutes for ReadString() and WriteString()
      which now operate in UTF-8 mode by default  
    - New: ReadString() and WriteString() support an optional parameter now which allows you to set
      the encoding of the string to be written; note that if this is set to #ENCODING_UTF8, the length
      parameter is expected to be in characters instead of bytes
    - New: Added ReadByte() and WriteByte() functions; these will always read/write just one byte no
      matter whether Hollywood is in Unicode mode or not; this is a substitute for the old ReadChr()
      and WriteChr() functions which read/write UTF-8 characters (up to 4 bytes wide) now by default
    - New: ReadChr() and WriteChr() accept a new optional argument now which allows you to specify the
      encoding to use; in Unicode mode this defaults to #ENCODING_UTF8 which means that ReadChr() and
      WriteChr() will read/write one UTF-8 character which can be up to 4 bytes wide; if you use
      #ENCODING_ISO8859_1 just one byte will be read/written; note that this change might break your
      old scripts if you used ReadChr() and WriteChr() with non-ASCII characters; see the API changes
      and Unicode chapters in the manual for details on how to adapt your scripts
    - New: Added IsUnicode() function which returns TRUE or FALSE depending on whether Hollywood is
      currently in Unicode mode; this is probably not of much use because scripts normally needn't worry
      about the text encoding internally used by Hollywood but it might be handy for some debugging purposes
    - Change [SDK]: CRTBase.fopen(), CRTBase.stat(), CRTBase.remove(), CRTBase.rename() and all other
      plugin APIs expect filenames now in the encoding of the current script; this is typically UTF-8;
      ISO 8859-1 is only used when Hollywood is in legacy mode; this is especially convenient on Windows
      and on AmigaOS because on those platforms functions like fopen() don't support UTF-8; if you
      use the Hollywood implementations from CRTBase, however, you can just pass UTF-8 strings to them
    - New [SDK]: If the buffer returned by GetScript() starts with the magic signature "::utf8", then
      Hollywood will use UTF-8 encoding for the script, otherwise it will switch to ISO 8859-1 mode
    - New [SDK]: Added HWFOPENMODE_FORCEUTF8; if this is set, DOSBase.FOpen() and DOSBase.FOpenExt()
      will always expect the filename to be in UTF-8 encoding; by default, the encoding is determined
      by the encoding of the current script
    - Fix: BRUSHFILE argument was broken for a long, long time
    - Fix: InKeyStr() could leave some visual artefacts on the screen 
    - Change: InKeyStr() uses the new vanilla key event handler now and thus can also handle Unicode
      characters or multiple key characters like French accented characters too
    - Change: WaitKeyDown() and IsKeyDown() can only be used with control keys and ASCII keys now;
      if you need to query the states of non-ASCII keys, use the new "VanillaKey" event handler instead;
      this is an API break but it was necessary for Unicode support
    - New [SDK]: Added HWSATEVT_VANILLAKEY and HWEVT_VANILLAKEY; these can be used to post Unicode key
      events to displays or display satellites
    - New: Added "VanillaKey" event handler; this event handler allows you to listen to keys with full
      Unicode support; the "OnKeyDown" and "OnKeyUp" event handlers are limited to control keys,
      ASCII keys and certain Latin 1 keys depending on the platform and locale; using anything except
      control keys and ASCII keys with "OnKeyDown" and "OnKeyUp" is relying on undefined behaviour
      since "OnKeyDown" and "OnKeyUp" are only guaranteed to work with control keys and ASCII keys
      on all platforms and locales; so for anything else you should use "VanillaKey" for full Unicode
      support; the only downside of "VanillaKey" is that it doesn't inform you about key up and down
      events separately but you only get one event (although it will be sent again if the user keeps
      holding the key); key up and down events for "VanillaKey" are not possible because often multiple
      key presses are necessary to generate one vanilla key code (e.g. with diacritical characters);
      note that "VanillaKey" will only be triggered for printable characters including the SPACE character;
      you won't get any control keys like ESCape, backspace etc. through the "VanillaKey" event handler
    - New [SDK]: Added SysBase.CompareString(); this is the same as the new Hollywood function (see below)
    - New: Added CompareStr() function; this is returns the relation between two strings; this is useful
      for sorting strings  
    - New: Sort() supports full Unicode collation now  
    - New: PatternFindStr() and PatternReplaceStr() support a new character class named %g now; this
      character class will match all characters that have a graphical representation
    - New: Added ReverseStr() function; this reverses the order of characters in a string
    - New: Added ConvertStr() function which allows you to convert between UTF-8 and ISO-8859-1; this
      can be useful when reading data from files or writing data to files
    - New: Added new string functions especially designed for #ENCODING_UTF8: ByteOffset(), ByteLen(),
      CharOffset(), ValidateStr(), CharWidth(); they also work with #ENCODING_ISO8859_1 but it doesn't
      really make sense to use them for ISO-8859-1 (except ByteLen() but for ISO 8859-1 this is of
      course the same as StrLen())
    - New: GetDefaultEncoding() returns the two default encodings for the text and string libraries
    - New: SetDefaultEncoding() accepts an optional argument now which allows you to set the default
      encoding of all the functions in the string library which support an optional encoding
      parameter now; when Hollywood is running in Unicode mode, the default encoding for the string
      library is automatically set to #ENCODING_UTF8 by default; if you do not want this, you can
      use SetDefaultEncoding() to revert it back to #ENCODING_ISO8859_1
    - New: Most of the functions in the string library support an optional encoding parameter now
      which allows you to use these functions with UTF-8 strings too; when Hollywood is run in
      Unicode mode (this is the default now), all text strings are stored in UTF-8 encoding; note
      that this can lead to compatibility issues in case you use the string library functions to
      operate on binary data that is stored within a string; since all string functions expect
      valid UTF-8 data when Unicode is enabled, operating on binary string data stored within strings
      using the string library functions will only work if you explicitly tell the string functions
      not to expect UTF-8 data but raw 8-bit data by passing #ENCODING_ISO8859_1 in the optional
      encoding parameter
    - Fix: Bitmap fonts didn't support #ENCODING_UTF8
    - New: Introducing Unicode support! After almost 15 years, Hollywood finally has full Unicode
      support now; this was a lot of work because substantial amounts of code had to be adapted
      for Unicode for each operating system supported by Hollywood; Unicode support is automatically
      enabled for all scripts now, i.e. Hollywood automatically expects all scripts to be in UTF-8
      format (with or without BOM); if Hollywood detects an invalid UTF-8 sequence in your script,
      it will assume that the file is ISO 8859-1 encoded (on Amiga Hollywood will assume the system's
      default encoding) and convert it to UTF-8 automatically; note that this detection isn't always
      reliable because certain combinations could be both, ISO 8859-1 or UTF-8; so the best idea is
      to convert all your scripts to UTF-8 now; also note that the automatic ISO 8859-1 to UTF-8 mapping
      will lead to problems with scripts which use non-ISO-8859-1 characters; you have to manually convert
      those scripts to UTF-8 or characters won't be mapped correctly; also note that when Hollywood is
      in Unicode mode, some functions will behave differently (e.g. functions from the string library)
      so you might need to adapt your code; alternatively, it's possible to enable legacy ISO 8859-1
      mode by using the new ENCODING argument or the new "Encoding" tag for the @OPTIONS preprocessor
      command; legacy mode shouldn't be used permanently, however, because in legacy mode Hollywood can
      have problems if files or paths use non-ISO-8859-1 characters; also note that in Unicode mode,
      Hollywood will also automatically set the default encoding to #ENCODING_UTF8 so you don't have to
      call SetDefaultEncoding()
    - Fix [Linux]: Hollywood didn't work on X servers which reported 32-bit depth instead of 24
      which seems to be the standard on most modern Linuxes (reported by Pascal Papara)
    - Fix [Linux]: StopMusic() could trigger a segmentation fault (reported by Fabio Falcucci)   
    - Fix [Linux]: Several issues in the event handler that could cause several weird problems.
      e.g. when using CheckEvent() and CheckEvents() instead of WaitEvent() interval and timeout
      functions were never triggered (reported by Fabio Falcucci)
    - Fix: Contrary to the description in the documentation, Print() and NPrint() didn't respect
      the encoding that was set using SetDefaultEncoding()
    - New: Added GetMACAddress() which allows you to obtain the MAC address of the host system
      (requested by Tony Canazza)
    - Fix: Setting "DisableBlanker" to TRUE didn't work when desktop mode was enabled in @DISPLAY
      (reported by Petteri Valli)
    - Fix [IDE]: Setting text colour to anything other than black didn't work correctly (reported by
      Moe Momayez)
    - Fix [Win32/Linux/MacOS/Android]: Using Seek() to position the cursor after the end of file when
      the file is in write mode actually filled the gap with zeros; this was inconsistent with the
      behaviour on AmigaOS; now it's impossible to position to cursor after the end of file with
      Seek() (reported by Lazar Zoltan)
    - Fix: When using #FILLGRADIENT fill style and #ANTIALIAS and #SHADOW form style with one of the
      Arc(), Circle(), Ellipse() or Box() with round corners commands, the gradient wasn't drawn
      correctly (reported by Tony Canazza)
    - New: @REQUIRE supports a new tag named "Link" now; when set to TRUE, Hollywood will automatically
      link the specified plugin into executables when it is in compile mode; this basically does the
      same as using the LINKPLUGINS argument (requested by Dominique Vanderveken)
    - Change [Amiga]: SavePrefs() and LoadPrefs() use ENVARC: instead of SYS:Prefs/Env-Archive now
      (requested by Nigel Tromans)
    - New: #ATTRSPRITES can be used for #DISPLAY and #BGPIC to query the number of sprites currently
      active on a display or BGPic
    - New: #ATTRZPOS can be used with #SPRITE to query the z-position of a sprite (requested by
      Fredrik Abramsson)
    - New: SetSpriteZPos() can be used to modify the z-position of a sprite; this functions works
      exactly the same as its sister function SetLayerZPos() (requested by Fredrik Abramsson)
    - Fix [Linux]: Initializing GTK automatically set the C runtime language to the system's default
      language which could cause problems on systems that don't use the point as the decimal mark
      (e.g. German systems); among the problems caused by this was a malfunctioning of the
      DownloadFile() function (reported by Fabio Falcucci)
    - Fix [GUI/Linux]: GUI didn't show correct version information for scripts on systems not using a
      point as a decimal mark like German systems which use a comma
    - Fix: Fixed memory fault in IFF ANIM16i and IFF ANIM32i decoder which could crash the system;
      only interlaced formats were affected by this bug (reported by Piotr Bandurski)
    - New [Win32]: #ATTRHOSTTASKBAR allows you to query information about the taskbar on Windows; it
      returns 5 values: the position and size of the taskbar and a boolean indicating its visibility
      state (hidden or visible)
    - New: #ATTRHOSTTITLEBARHEIGHT allows you to retrieve the host screen's title bar height for
      object type #DISPLAY
    - New [Amiga]: Added "TrapRMB" flag to @DISPLAY and CreateDisplay(); if this is set to TRUE,
      Hollywood will deliver right mouse button events even when a menu strip is associated with a
      display; the downside is that menu access will only be possible via the screen's title bar
      then; the "TrapRMB" flag is only handled in case your display has a menu strip, otherwise it
      has no effect at all; "TrapRMB" defaults to FALSE which means that when a menu strip is associated
      with a display, right mouse button events aren't generated; this is also the original Hollywood
      6.0 behaviour which is now restored (reported by Marko Seppänen)
    - Fix [Win32]: Certain JPEGs couldn't be loaded if the script, applet or program was stored
      on Windows' C:\ drive on Vista and up (reported by Paul Bloedel)
    - Fix [OS4/MorphOS]: Run() crashed when no event handler for "RunFinished" was installed
      (reported by Christoph Poelzl)
    - New: #ATTRRAWWIDTH and #ATTRRAWHEIGHT can be used for #DISPLAY now; they return the actual
      physical dimensions of the display, regardless of any scaling options that might be active
    - Fix [SDK]: LuaBase.lua_pcall() didn't leave a balanced stack in case an error occurred; this
      usually didn't have any implications because Hollywood would quit in case an error happened
      but it could lead to trouble when turning off the automatic error handler
    - Fix [Win32]: Calling ShowPointer() with the pointer already visible and without any custom
      pointer configuration hid the pointer (reported by Fredrik Abramsson)
    - Fix [Win32]: "RememberPosition" also applied the window position and size when switching to
      fullscreen mode leading to only partially visible displays
    - New: The length argument of ReadString() is now optional; if it is omitted, ReadString() will
      just read everything until the end of the file
    - Fix [Linux]: Icons declared using @APPICON weren't shown correctly when running scripts;
      they were only shown when compiling scripts as applets or executables
    - Fix: When freeing BGPics that are still attached to displays and using multiple displays
      the garbage collector could accidentally free BGPics although they were still needed by the
      display (reported by Paul Bloedel)
    - Fix: Fixed several issues with the layerscale engine which only occurred under very special,
      rare circumstances
    - Fix: Linehook exit is now done in a different way because the old way could leave a trashed
      VM stack which didn't have any practical implications because Hollywood didn't access the VM
      any more when shutting down except when using the "RememberPosition" display tag; this change
      should fix problems with the "RememberPosition" tag
    - Fix [Doc]: Optional notime argument for CompareDates() has been available since v4.5 but wasn't
      documented at all
    - New: Added MAXIMIZED argument and "Maximized" tag for @DISPLAY, CreateDisplay() and
      SetDisplayAttributes(); if this tag is specified, the display will be opened in maximized mode;
      #ATTRMAXIMIZED allows you to query if a display is currently maximized; all these features are
      currently only supported on Windows and it only works for sizeable displays of course (requested
      by Torgeir Vee)
    - New [GUI]: Added 64-bit versions of the GUI for Linux and Mac OS; also added support for the
      new 64-bit targets to the Hollywood GUI
    - New [IDE]: Added 64-bit version of the Windows IDE; also added support for the new 64-bit
      targets to the Windows IDE
    - New [Win32/Linux/MacOS]: Added support for 64-bit CPUs; this is especially useful on Linux because
      it is quite a hassle to install 32-bit support on modern Linux distributions and there are
      often some dependency conflicts; by using the 64-bit version of Hollywood, these problems
      should be gone now and you can just run Hollywood out of the box; note that 64-bit binaries
      cannot load 32-bit plugins so if you use the 64-bit version of Hollywood, you also need to
      install 64-bit versions of all plugins you wish to use; the following new targets are now
      available for EXETYPE: win64, win64console, linux64 and macos64. 
    - New [MacOS]: Cocoa backend uses AV Foundation instead of QuickTime for video playback now;
      this feature is only available when running 10.7 or better; on 10.6 the Cocoa backend supports
      video playback only through Hollywood's inbuilt video engine; AV Foundation requires at least
      10.7
    - New [MacOS]: Cocoa backend uses CoreText instead of ATSUI now; ATSUI is only used by the Carbon
      backend (used on Mac OS PowerPC and optionally available for Intel, see below)
    - New [MacOS]: Complete rewrite of the Hollywood backend in Cocoa; this was a lot of work but it
      is necessary for the upcoming 64-bit support; previously, Hollywood for Mac OS was written in
      Carbon but Carbon has been deprecated for a long time now (although Carbon apps still work on
      the latest OS X version) and isn't available for the 64-bit architecture; the backend for PowerPC
      Mac OS still uses Carbon for performance reasons; for Intel Macs, Hollywood will use Cocoa now
      by default but Carbon support is still available by passing "macos86carbon" in EXETYPE when
      compiling executables but it is not recommended to use Carbon any longer; you should just use
      "macos86" which will compile a Cocoa app now; note that the USEQUARTZ argument is obsolete now
      since Cocoa apps always use Quartz; only Carbon apps use QuickDraw by default for performance
      reasons; performance-wise, the Cocoa backend is usually faster than the Carbon backend because
      autoscaling is handled by the OS now and drawing is done in a more efficient way; on older Macs,
      however, scrolling might be a bit jerkier than on Carbon because Carbon disabled coalesced refresh;
      to replicate the Carbon look, you have to set the "CGDisableCoalescedUpdates" tag to TRUE in
      Info.plist but it's not recommended

    Version 6.1     (05-Mar-16)

    - Change: Updated Hollywood documentation
    - Change [SDK]: Updated Hollywood SDK documentation and includes
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - Change: The download version of Hollywood is no longer distributed as an ISO image and it's also
      no longer necessary to run a tool that generates a personalized ISO image; instead, you can just
      download installers now and copy the keyfile manually
    - New: Added NODEBUG console argument; if this argument is specified, the commands DebugPrint(),
      DebugPrintNR(), Assert(), DebugOutput(), and @WARNING will be ignored; this allows you to globally
      disable debugging functions with just a single call (requested by Dominique Vanderveken)
    - Fix [Win32]: Passing an empty string to FileRequest() in the deffile$ argument prevented the file
      requester from being shown (reported by Paul Bloedel)
    - New: Added "RunFinished" event handler; this event handler will trigger whenever a command started with
      Run() has terminated; Run() also accepts a new optional user data argument now which will be passed
      to the event handler if you specify it; this was quite some work because especially on AmigaOS and
      compatibles this required different implementations on every single incarnation of AmigaOS
    - New: WaitKeyDown() and IsKeyDown() accept the magic word "ANY" now to check if any key is down or wait
      for any key (requested by Ulrich Beckers)
    - New [Amiga]: Added OpenAmigaGuide() and CloseAmigaGuide() which allow you to view and close AmigaGuide
      files from your Hollywood script; OpenAmigaGuide() accepts an optional argument that can be used
      to specify the node which should be displayed (requested by Jean-Noel Roueste)
    - Fix [Win32]: When de-minimizing a display with a menubar attached twice, Hollywood triggered a spurious
      "SizeWindow" event which could erase the display's contents (reported by Juan Carlos Herran Martin) 
    - Fix: Drawing arcs, ellipses, circles, and rectangles with rounded corners with antialiasing and shadow
      and/or edge enabled and layers disabled and using the new vectorgraphics renderer introduced with
      Hollywood 6.0 resulted in a wrong calculation of the object's dimensions and some missing pixels at
      the borders of the object (reported by Xabier Payet)
    - New: Improved gradient interpolation algorithm; color gradients are smoother now!
    - Fix: Gradients drawn across small areas didn't look very good (reported by Tony Canazza)
    - Fix: Trying to set a non-multi-stop gradient after a multi-stop gradient using SetFillStyle() didn't
      work; the multi-stop gradient stayed active (reported by Tony Canazza)
    - New: "Ask" display mode now offers a fourth option to cancel Hollywood; this also fixes the problem
      that hitting the requester's close box on Windows didn't cancel Hollywood but opened the screenmode
      requester because there was no cancel button
    - Fix [Win32]: When hiding a menubar SetDisplayAttributes() didn't adjust the display's new y position
      correctly so that the display jumped down (reported by Lazar Zoltan)
    - Fix [Amiga]: Screenmode requester didn't work on palette screenmodes which made it impossible to use
      it with the Plananarama plugin (reported by Lazar Zoltan)
    - Fix [Amiga]: Manual select mode via a screenmode requester didn't respect scaling dimensions set using
      SCALEWIDTH and SCALEHEIGHT
    - Fix: FITSCALE didn't work when running scripts in full screen mode (both in best fit and manual select
      modes) (reported by Samuli Holopainen)
    - Fix: FreeDisplay() forgot to close the display's backfill (reported by Ulrich Beckers)
    - New: DownloadFile() and UploadFile() support a new tag named "Encoded" now; if this is set to TRUE,
      DownloadFile() and UploadFile() will assume that the URL you've passed is already percentage-encoded
      and no more encoding will be done (requested by Lazar Zoltan)
    - Fix: DownloadFile() didn't handle HTTP redirect requests correctly (reported by Dominique Vanderveken)
    - New: Added @WARNING and @ERROR preprocessor command; these are debug facilities meant to make your
      life easier in case you want to be warned about certain parts of your code
    - New [Android]: Added GetAsset() function which allows you to load applet assets; this is only
      useful when compiling your scripts into stand-alone APKs using the Hollywood APK Compiler
    - New [SDK]: Added GfxBase.FreeBrush; this allows you to easily free Hollywood brushes from plugins
    - Fix [Android]: When an applet exited with an error and an interval timer was still running, the app
      wasn't shut down properly
    - New: Added LINKPLUGINS compiler argument; this allows you to specify one or more plugins that should
      be linked into the executable created by the compiler; compression is supported; plugins for the linker
      must be placed inside a special location: you must copy them into architecture directories in
      Hollywood:LinkerPlugins on Amiga systems and in PROGDIR:LinkerPlugins on non-Amiga systems; note that
      plugins can only be linked into executables, not into applets because applets are platform-independent
      and linking plugins for all supported platforms into applets would bloat the applets massively; linking
      plugins is also supported for Android but this requires the Hollywood APK Compiler add-on; also make sure
      to read the plugins' license carefully before you link them, e.g. if you statically link a plugin that
      is LGPL your program will automatically become LGPL as well and you must release the source codes!
    - New: Added DeletePrefs() function to kill a prefs file saved using SavePrefs()
    - Change: When specifying multiple executables types using the EXETYPE argument, the individual platforms
      should be separated by a "|" now instead of a "+"; this is a change for consistency with other
      arguments; the "+" syntax is still supported for compatibility
    - New [Android]: Modified Android backend to run as a link library as well; this finally allows you to
      compile stand-alone APKs with Hollywood using a custom tool that is to be released soon
    - Fix [Android]: Potential memory faults when cleaning up
    - New [GUI/OS3]: To celebrate the release of the Plananarama plugin, Hollywood's GUI now runs on planar
      screens again! This is the first time since Hollywood 1.93 that the GUI supports planar graphics again!
      If you want to route every Hollywood script launched from the GUI through the Plananarama plugin, just
      go to the Prefs/Hollywood... menu and enter "-requireplugins plananarama" in the "Additional interpreter
      arguments" text gadget
    - New [SDK]: Added hw_GetEventHandler() which allows you to find out the registry index of plugin event
      handler functions and their user data
    - New [SDK]: Added HWADS_OPTIMIZEDREFRESH; this allows display satellites to enforce optimized refresh
      of their parents
    - New: Intersection() computes the intersection between two rectangles
    - New [SDK]: Added HWMCP_SETAMIGASIGNALERROR; this is a glue code feature which works around the design
      problem that callbacks of type HWCB_AMIGASIGNAL can't pass an error code back to Hollywood
    - New [SDK]: Added HWHEFLAGS_RUNCALLBACKS; if this flag is set, hw_HandleEvents() will also run any
      event callbacks that have triggered; this is useful on plugins which don't install a display adapter
      and hence cannot use HWMSFLAGS_RUNCALLBACKS because hw_MasterServer() must only be called by display
      adapters
    - New [SDK]: Added HWSDAFLAGS_DRAWALWAYS; if this is set, the display adapter drawing functions will
      also be called for minimized/hidden displays
    - Fix [SDK]: Potential refresh issues when unhiding a display managed by a display adapter on compositing
      window managers that don't send a refresh message on unhide
    - Fix: VWait() no longer crashes when called when a display adapter with no visible displays was active
    - New: Added CheckEvents() which is basically the same as CheckEvent() but handles all events in the
      queue instead of just the first; in contrast to CheckEvent() it doesn't return any information about
      the event(s) it handled
    - Change: CheckEvent() can also be called from event callbacks now
    - New [SDK]: Added SysBase.GetVMErrorInfo() which allows you to query advanced error information after
      an error in the VM
    - New [SDK]: Added HWMCP_RESETERRORFLAG; set this if you want the script to continue running after
      lua_pcall() threw an error
    - New [SDK]: Added HWMCP_SETLIGHTCHKEVT; if this is set Hollywood's CheckEvent() will only call the
      display adapter's HandleEvents() function and do nothing else
    - Fix [Android]: Fixed Hollywood Player for Android 6: Marshmallow
    - Fix [Linux]: Crash when querying monitor or screen mode information when using a display adapter
      that didn't set HWSDAFLAGS_MONITORINFO
    - Fix [SDK]: Drawing graphics beneath videos led to flicker when a display adapter was active; it's
      now clipped correctly
    - Fix [SDK]: Playing videos in autoscale mode didn't work when a display adapter was active
    - New [SDK]: Added HWEXT_DISPLAYADAPTER_MAINLOOP extension for display adapters which are based on a
      single call for running the main loop
    - New [SDK]: HWMCP_SETGLOBALQUIT can be used to set the global quit flag
    - Fix [SDK]: Error returned by HWPLUG_CAPS_DISPLAYADAPTER/WaitEvents() was never handled
    - Fix [OS4]: Hardware YUV decoder displayed frame data only in grayscale (reported by Richard Lake
      and Michael Brantley)
    - Fix [SDK]: GfxBase.UnLockBrush() could freeze the system on platforms with hardware bitmap locking
      like OS4, MorphOS and OS3; this was only broken in 6.0; it worked in earlier versions
    - Fix [Win32]: Fullscreen mode didn't work on Windows 10 (reported by Torgeir Vee and others)
    - New [SDK]: Added HWLDIMGTAG_USEARGB tag to GfxBase.LoadImage(); if this tag is set to TRUE, the
      pixel data will be loaded as ARGB
    - Fix [SDK]: Documentation of GfxBase.LoadImage() and GfxBase.GetImageData() stated that the returned
      pixel data was in ARGB order but in reality these functions return the pixels in RGBA order
    - New [SDK]: Added HWCB_SHOWHIDEAPP callback type for SysBase.RegisterCallback(); this callback will
      trigger when the user changes the visibility of an application via commodities or application.library
      on OS4; this callback type is only supported on AmigaOS
    - Fix [Win32]: Menu item toggle and enable state wasn't always preserved correctly when changing
      one of the states (reported by Dominic Widmer)
    - Fix: Inbuilt JPEG loader didn't recognize files which didn't have one of the JFIF, Exif, or Lavc
      markers (reported by Achim Kern)
    - New [SDK]: Added SysBase.RunEventCallback() which can be used to run an event callback outside
      Hollywood's standard event handler managed by WaitEvent() and CheckEvent(); be careful to call
      this function only in meaningful places; see the similar function SysBase.RunTimerCallback() for
      more information
    - Fix: GetErrorName() crashed when called with #ERR_NONE (reported by Lazar Zoltan)
    - Change [GUI/IDE]: Using a better sorting algorithm now
    - Fix: LoadBrush() was broken for display-dependent hardware brushes; loading display-dependent
      hardware brushes with LoadBrush() could cause all sorts of weird behaviour and crashes; the @BRUSH
      preprocessor command was not affected by the issue, though (reported by Jesper Schultz-Pedersen) 
    - Fix: MakeButton() didn't work while in double-buffer mode (reported by Jesper Schultz-Pedersen)
    - Fix [AROS]: Wrong colours when taking desktop snapshots or using the "Desktop" tag with @DISPLAY;
      unfortunately, this fix will break MUI Royale versions prior to and including 1.3 in the way that
      you cannot embed Hollywood displays any more into your GUIs; this has been fixed in MUI Royale 1.4
      so make sure you use at least 1.4 on AROS
    - Fix [SDK/WarpOS]: All functions from FT2Base which operated on files didn't work correctly, e.g. 
      FT2Base.FT_New_Face() or FT2Base.FT_Open_Face() when using a path source
    - New: AllocMemFromVirtualFile() allows you to access the raw memory contents of a virtual file created
      by DefineVirtualFileFromString(); note that you must not write to the memory unless the virtual file
      was created as writable; also note that any write operation to the virtual file might invalidate
      the memory pointer so you must call FreeMem() first and then AllocMemFromVirtualFile() again to be
      on the safe side
    - Fix: TextOut() and Print() crashed when used with a hardware doublebuffer managed by a display
      adapter plugin like GL Galore (reported by Jali Heinonen)
    - New: DefineVirtualFileFromString() supports virtual files that can be written to now! To create a
      writable virtual file, simply pass TRUE in the new optional third argument; you can initialize
      the virtual file with contents by passing a string in argument 1; for an empty writable file, just
      pass an empty string in argument 1 (requested by Fabio Falcucci)
    - Fix: Crash when trying to get file attributes of a virtual file created using DefineVirtualFileFromString()
      with FileAttributes()
    - New: ForEach() and ForEachI() accept an optional user data argument now which will be passed as the
      third parameter to the callback function if specified (requested by Samuli Holopainen)
    - Fix [IDE]: On Vista and up the IDE no longer uses owner-drawn menus but Vista-style menus; this fixes
      some gfx glitches with grayed out menu items
    - New [SDK]: Added HWEXT_LIBRARY_NOAUTOINIT extension; if this is defined, the constants and commands
      of library plugins won't be added to Hollywood unless the user calls @REQUIRE on the plugin; this
      is useful for plugins which install many commands which could flood Hollywood's namespace; it makes
      more sense to install these commands and constants only if the user really wants them
    - New [IDE]: Added "Jump back" menu item; this jumps back to the previous line after jumping to a 
      function or preprocessor reference (requested by Samuli Holopainen)
    - Fix [IDE]: Selecting text with SHIFT+cursor key resulted in graphics glitches (reported by Ray)
    - New [IDE]: @REQUIRE is now parsed as well and the plugins thus detected will be listed in an additional
      listview inside the preprocessor command tool
    - New [IDE]: The preprocessor command tool contains a widget that lists all videos used by the script
      now; Hollywood's media preview supports video files now too
    - Fix [IDE]: CTRL-V and CTRL-X shortcuts also triggered on ALT GR-V and ALT GR-X which could lead
      to problems with key layouts like the Hungarian one which map the @ character to ALT GR-V
      (reported by Lazar Zoltan)
    - Fix [GUI]: Plugin function names weren't sorted alphabetically in the system information dialog
    - Change [IDE]: The IDE no longer uses virtualization; this means that you will no longer be able to
      modify and save the examples that come with Hollywood because they're stored inside Hollywood's
      directory in program files; if you want to modify and save one of the examples, just make a local
      copy; you'll also have to reconfigure the settings because ide.ini is now stored in the application
      data folder
    - Change [Win32]: Hollywood no longer uses virtualization but it will fail now when you try to write
      a file to a folder that your application doesn't have write access to; previously, Hollywood always
      ran in legacy mode which automatically redirected unauthorized writes to the virtual store; this is
      no longer done now because it can lead to all kinds of unwanted behaviour and issues; so please write
      your settings to the application data directory which you can obtain by calling GetSystemInfo()
    - New: Added NOCHDIR console argument; if this is set, Hollywood won't automatically change the current
      directory to the script's directory; this is probably of not much use but it's needed by the Windows
      IDE now
    - Fix: Passing start and end degrees in the wrong order in Arc() wasn't handled correctly by Hollywood
      when antialiasing was on
    - New: Added OVERRIDEPLACEMENT argument; when this is set, any position and size information saved
      using the "RememberPosition" tag is ignored  
    - New: Added "RememberPosition" tag for @DISPLAY; if this is set to TRUE, Hollywood will automatically
      remember the last position and size of this display and restore it when the script is started the
      next time; this only works for non-fullscreen displays with a numeric identifier; you also have to
      set @APPIDENTIFIER for this feature to work (requested by Torgeir Vee)
    - New: Added LoadPrefs() and SavePrefs() functions; these can conveniently save and load a table
      containing user preferences for your script; you have to pass a table to both functions; the table
      should be initialized to default values when passing it to LoadPrefs(); LoadPrefs() will then
      replace all the default values with the keys it finds; note that these functions require a valid
      application identifier set with @APPIDENTIFIER
    - New: Added @APPIDENTIFIER preprocessor command which allows you to specify a unique identifier for
      your application in reverse DNS format (e.g. com.airsoftsoftwair.Hollywood); GetApplicationInfo()
      also returns a new item named "Identifier" now and HWMCP_GETAPPIDENTIFIER in the SDK allows plugins
      to read this identifier; when compiling application bundles for Mac OS X, the identifier specified
      in @APPIDENTIFIER will automatically be written to the Info.plist file of the app bundle
    - New: HaveObjectData() allows you to check whether a certain key exists inside a specified object
      (requested by Samuli Holopainen)
    - Fix [SDK]: Example plugins didn't exit cleanly in case no FPU was present when building for 68881/2
      and the FPU was not initialized
    - Fix [SDK]: Modified Linux and Mac OS makefiles to create position-independent code
    - Change: If the third argument of MidStr() is omitted, it will automatically be set to the number of
      remaining characters in the string, starting from the offset specified in the second argument
    - New: IsTableEmpty() checks whether a table is empty
    - New: Added TableItems() function which returns all items inside a table; remember that ListItems()
      only counts successive integer index items
    - Fix [Win32]: Fixed a long-standing bug in SetInterval(): on Windows the interval always triggered
      immediately after the call to SetInterval(); on all other platforms Hollywood first waited for the
      interval to elapse before running the callback for the first time; the Windows version is now
      consistent with the other platforms, i.e. the callback function will be run when the interval
      has elapsed for the very first time
    - Fix [Amiga]: Listening to the right mouse button didn't work when a display used a menu bar
      (reported by Sandro Barbagelata)
    - Fix [Amiga]: When using displays on top of a full screen borderless display, the borderless display
      could be clicked to front thus covering the other displays; this is prevented now (reported by
      Simone Monsignori)
    - Fix: Multithreading fixes in PauseVideo() and ResumeVideo() that could also affect SeekVideo() when
      called right after PauseVideo(); the issues fixed were likely to occur on systems with a slow CPU
      that couldn't catch up with video decoding which could lead to a crash
    - Change: StopMusic() and PauseMusic() will no longer present an error in case the music is not playing;
      this change has been done for consistency with StopSample() which doesn't fail either; it makes sense
      to have the functions behave in this way because playback might stop at any time because a music
      has finished, i.e. playback finish could happen between calls to IsMusicPlaying() and StopMusic(),
      thus the only safe way was to enclose StopMusic() in a ExitOnError(False) section; now this is no
      longer necessary because StopMusic() and PauseMusic() will just exit silently in case the music is
      not playing
    - Fix: Video recorder respects the NUMCHANNELS setting correctly now
    - New [Amiga]: Added fine-tuned control for app icons on the Workbench; you can manually show and hide
      Hollywood's app icon by using the new #AMIGAICON_SHOW and #AMIGAICON_HIDE constants with SetWBIcon();
      to change the app icon's title and position, you can use the new #AMIGAICON_SETTITLE and #AMIGAICON_SETPOSITION
      constants; pass -1/-1 to use the next available position; omit the optional parameters to use the
      position as specified in the *.info file (suggested by Simone Monsignori)
    - Fix [Win32]: Qualifier keys weren't always detected correctly when using IsKeyDown() (reported by
      Fabio Falcucci)
    - Fix [OS4]: 16-bit stereo samples weren't loaded correctly when using the loader based on sound.datatype
      (reported by Gianluca Girelli)
    - Change [Amiga]: HideDisplay() can now also be called when a video is playing
    - Fix: When playing a dynamic music set up by CreateMusic() the "FillMusicBuffer" callback was often not
      called regularly which could lead to audio glitches
    - Fix: Several potential multithreading issues in the sound driver which in practice probably never
      occurred but in theory they could have crashed the program
    - Fix: Internal RIFF WAVE reader supports the extended header format now (reported by Gianluca Girelli)
    - Fix [Win32]: Potential problems when restarting a music after it finished playing
    - Fix: EndDoubleBuffer() crashed when called after changing the window size with autoscaling disabled
      (reported by Fabio Falcucci)
    - Fix: Setting "UseLayer" to TRUE with PlayVideo() to play the same video twice or more at the same time
      didn't work at all
    - New: Introducing the new sound channel API: These functions allow you to deal with sound channels directly
      which solves the problem of running out of channels; previously, it wasn't really possible to detect
      whether there were free channels or not because a single sample or music could be playing on multiple
      channels, thus making IsSamplePlaying() and IsMusicPlaying() not precise enough; using the new APIs
      it is now possible to check the individual channels directly; the following commands have been added:
      GetChannels(), IsChannelPlaying(), HaveFreeChannel(), SetChannelVolume() and StopChannel(); additionally,
      PlaySample(), PlayMusic(), and PlayVideo() support an optional "Channel" tag now which allows you to
      specify the channel that should be used for playback (suggested by Xabier Payet)
    - Change: When Hollywood is started without any arguments, a file requester asking for a script or applet
      will be opened now; if you want to see Hollywood's usage information, use the new HELP console argument
    - Fix: The table returned by GetPlugins() didn't always contain the fields "URL", "Date", "Settings", and
      "HelpFile" but only if the plugin explicitly set them; now they're set to an empty string if undefined
      (reported by Richard Lake)
    - New [MacOS]: GetSystemInfo() returns a new table element named "AppBundle" now; this contains a fully
      qualified path to the location of the current program's application bundle
    - New [MacOS/Win32]: GetSystemInfo() sets a new table element named "CommonAppData" now which is set to
      the common (global) application support folder for all users
    - Fix [MacOS]: GetSystemInfo() returned the global application support folder in "AppData" instead of
      the user's application support folder
    - New [Linux/GUI]: Finally added GUIs for the Linux and Mac OS X versions of Hollywood; the GUI is
      identical to the Amiga version which has been made platform-independent now; the core of all three
      GUIs is now the same but there are different OS-dependent backends (GTK/AppKit/MUI); this change
      finally allows stand-alone distributions of Hollywood for Linux & Mac OS X as well
    - Fix [MacOS]: Fixed a long-standing bug that caused refresh problems when unhiding scripts which do not
      refresh the full display for every frame they draw
    - Fix [MacOS]: Opening scripts and applets from Finder was broken in 6.0
    - Fix [MacOS]: Crash when selecting an item from the application's default menu bar
    - New [GUI]: Added an option to suppress Hollywood's output to the preferences
    - New: Added FORCEFLUSH console argument to force line buffering on stdout; this is only needed when
      redirecting Hollywood's output to a pipe or file because when in console mode, stdout will always be
      line buffered
    - Fix: In contrast to the description in the documentation, Hollywood didn't treat parameters 2 and 3 in
      PlayAnim() as optional (reported by Richard Lake)
    - New [MorphOS]: Added support for streaming through sound.datatype; MorphOS is the only Amiga compatible
      operating system that has an extension for sound.datatype streaming; because of bugs in earlier
      MorphOS versions you should use at least MorphOS 3.8 for this feature; seeking not supported because
      current MorphOS versions don't support it (requested by Jean Holzammer)
    - New [Amiga]: Menus are now supported in fullscreen mode too (requested by Simone Monsignori)
    - Fix [Amiga]: When a display is in fullscreen mode and other windowed Hollywood displays are opened on
      this screen as well and the mode is changed from fullscreen to windowed mode, Hollywood will close
      and reopen all other displays as well just as Hollywood 5.3 did (reported by Simone Monsignori)
    - Fix [OS4]: Hollywood didn't work correctly with screens defined in the OS4 Screens preferences utility
      (reported by Simone Monsignori)
    - Fix: Wrong layer pickup when using the MoveXXX() commands to move an object that has already been attached
      to a layer (reported by Samuli Holopainen)
    - Fix [Amiga]: Refresh problems when cancelling a window dragging operation using the right mouse button
      (reported by Nick Sommer)
    - New: WriteTable() and WriteFunction() accept an optional parameter now that can be used to turn off
      automatic linewrapping when saving functions or tables in text mode
    - Fix: The optional 'txtmode' parameter for WriteTable() was documented but never implemented; it's working
      correctly now (reported by Rüdiger Solbach)
    - Fix [AROS]: Wrong calculation of date stamps for all years >= 2010; this could make SetFileAttributes()
      fail and cause other issues (reported by Nigel Tromans)  
    - New: DebugPrintNR() prints a string to the current debug device without appending a carriage return or
      line feed (requested by Jali Heinonen)
    - Fix: Combo mode passed to SelectBrush() wrongly affected SelectAlphaChannel() when set to either 1 or 2
      (reported by Paul Bloedel)
      
    Version 6.0     (14-Feb-15)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New: Added Epiphany, VideoFX, DockyDemo and MenuDemo examples
    - Change: Major cleanup in the example sources; removed some very old and trivial examples
    - New: Public player supports non-compressed applets now, too
    - Fix [Amiga]: Execute() and Run() didn't work with executables or paths that had spaces in them
    - Fix [Android]: Added workaround for what seems to be a bug/incompatibility in Android Lollipop and always
      caused a crash right before Hollywood exited
    - Change [Android]: Layerscale is no longer offered as an option in the menu that is available while a script
      is running; it was removed because layerscale only makes sense for some very special scripts (e.g. scripts
      that use vector graphics and text instead of pixel graphics); for all other scripts it slowed things down
      unnecessarily; that's why layerscale has been removed from the standard options menu; you can still select
      it from the main menu and from the script of course
    - Change: When passing the empty string ("") to SystemRequest(), ListRequest(), StringRequest() and
      ColorRequest() in the first parameter, Hollywood will now fall back to what was specified in the @APPTITLE
      preprocessor command
    - New: Added GetApplicationInfo() which allows you to query the values of the @APPXXX preprocessor commands
    - Change [Win32/MacOS/Linux]: SystemRequest() uses Windows message boxes now in case the button string is
      one of the following: "OK", "OK|Cancel", "Yes|No", "Yes|No|Cancel"; in that case, icons are supported on
      Win32 as well now
    - Change [GUI/IDE]: The Amiga GUI and the Windows IDE will now scan the "Examples" drawer and generate a
      tree of available examples on-the-fly; this allows 3rd party plugins (e.g. MUI Royale) to install their
      own examples into Hollywood's collection of examples and make them easily accessible from the GUI or
      IDE 
    - Fix [Amiga]: Potential border overdraw when resizing a window (reported by Lazar Zoltan)
    - New: Added ReduceAlphaChannel() function which can be used to scale alpha pixels of a brush's alpha
      channel (requested by Paul Bloedel)
    - New: Added EndianSwap() function to easily convert numbers between big and little endian byte order
    - New: Added IncreasePointer() and DecreasePointer() for simple pointer arithmetic
    - New: GetVersion() returns a new table element named "BigEndian" now which will be set to TRUE in case
      Hollywood is running on a big endian CPU
    - New: Peek() and Poke() accept an optional parameter which allows you to specify whether the data should
      be written in native endian byte order (defaults to FALSE)
    - New: Peek(), Poke(), TableToMem(), and MemToTable() support #FLOAT (4 bytes) and #DOUBLE (8 bytes) now
    - New: Added "NoDocky" tag to @OPTIONS; if this is set together with "RegisterApplication", Hollywood
      will add your script as an invisible application that doesn't appear in AmiDock
    - Change: ToNumber() can also convert variables of type #LIGHTUSERDATA to a number now  
    - New: Added ToUserData() function which turns a number into a light user data pointer
    - New: Added GetMemPointer() which allows you to get a pointer as light user data from a memory block and
      AllocMemFromPointer() which turns a pointer into a memory block; be careful with the latter function: it
      is dangerous if you don't know what you're doing!
    - New [SDK]: Added UtilityBase with some often needed checksum functions as well as a Base64 decoder/encoder
    - New [SDK]: HWIMGFLAGS_TRANSPARENCY and HWANMFLAGS_TRANSPARENCY make the new "LoadTransparency" feature
      available to plugins as well
    - New: IsPicture() returns another table member named "Transparency" now that will be set to TRUE in case
      the picture has a monochrome transparency channel
    - New: Added "LoadTransparency" tag to @BRUSH, @BGPIC, @ANIM, @SPRITE and the respective LoadXXX() commands;
      if set to TRUE, this will attempt to load a monochrome transparency channel that is supported by many
      palette-based formats (e.g. IFF ILBM and GIF); this finally makes it possible to load transparent GIFs
      anim GIF anims conveniently without having to mess with the color-based "Transparency" tag
    - Fix [SDK]: LoadAnimCtrl.ForceAlphaChannel was broken
    - New: ReceiveData() accepts an optional callback argument now which can be used to have the received data
      delivered to a user callback; this is useful in case you need to receive large packets of data which
      are better stored in a file instead of a string etc. (suggested by Fabio Falcucci)
    - Fix [SDK]: hw_AttachDisplaySatellite() didn't work correctly when the host display had autoscaling or
      layerscaling enabled
    - Fix: Another bug fixed in DownloadFile() when downloading files from HTTP servers that do not send the
      "Content-Length" header field and do not use chunked transfer mode
    - New: DownloadFile() and UploadFile() accept an optional table argument named "CustomHeaders" now that
      allows you to specify a string with custom headers that Hollywood should send when communicating with
      HTTP servers; don't forget to use the trailing carriage return and line feed characters! (requested
      by Fabio Falcucci) 
    - Fix: Uncompressed 24-bit IFF ILBMs weren't handled correctly by Hollywood's inbuilt IFF ILBM reader
    - New: Added "Quantize" layer filter which allows you to reduce colors in a layer with optional dithering
    - New: QuantizeBrush() allows you to reduce colors in a brush with optional dithering; useful to achieve
      a retro chunky pixels look!
    - Fix: Exact precision for color quantization on images that use colors that can be represented in 8bit or
      less, for example when using the #IMGFMT_GIF saver (reported by Nick Sommer)
    - New: UploadFile() also supports HTTP upload now; you have to pass an array of tables to the new "FormData"
      table argument; this array must contain all form data fields (including files) that should be sent to
      the HTTP server; note that when used for HTTP uploading, UploadFile() will actually return a string and
      a byte count of the resulting HTML page generated by the server (similar to DownloadFile()'s behaviour);
      note that your callback will be called first while uploading and then while downloading the server's
      response; a new constant #UPLOADFILE_RESPONSE had to be introduced since both #DOWNLOADFILE_STATUS and
      #UPLOADFILE_STATUS are defined as 0; authentification for HTTP upload is also supported (requested by
      Matthew Leaman) 
    - New: DownloadFile() supports HTTP authentification now; just pass username and password as part of the URL
      (requested by Matthew Leaman)
    - New: Base64Str() allows you decode strings from Base64 or encode them into Base64
    - Change [Amiga]: Changed the way the event handler works; this will dramatically improve the raw performance
      of your script; the number of instructions per second is now significantly higher in comparison to older
      versions; just compare the performances of the Pang intro in 5.3 and 6.0 and you'll see what I mean
    - Change [Amiga]: VWait() uses a different method now which should prevent speed loss when the system is
      not fast enough anyway
    - New [SDK]: HWMCP_GETFPSLIMIT allows you to query the FPS limit set using SetFPSLimit()
    - New: ReadShort(), ReadInt(), ReadFloat(), WriteShort(), WriteInt(), and WriteFloat() accept an optional
      argument now which allows you to switch to little endian byte order
    - New: ReadFloat() and WriteFloat() accept a new precision argument now which can be used to read/write
      4 and 8 bytes floats (defaults to 8 bytes)
    - New: Added DisableLineHook() and EnableLineHook() functions; you can use these to increase the raw
      performance of your script; please note that the line hook should only be disabled for brief periods of
      time or your display will become unresponsive; you have to ensure that the line hook gets called at
      least several times per second for your window to stay responsive
    - New [SDK]: Added hw_FFlush() and hw_TmpNamExt() functions to DOSBase; the latter is an extended version
      of hw_TmpNam() that is only interesting on Amiga since it allows you to specify whether or not the file
      should be created in RAM
    - Change: Platform-specific constants like #AMIGAICON_XXX are now defined on all platforms; this should make
      cross-compiling more convenient (suggested by ilbarbax)
    - Fix [MorphOS]: Wrong size calculation for files larger than 4 GB when using FileSize(), GetFileAttributes()
      or NextDirectoryEntry()
    - Change [MacOS]: Hollywood no longer uses the OS to save images in JPEG and PNG format
    - Fix [MacOS]: Pasting alpha channel images from clipboard didn't work correctly
    - Change [Amiga/MacOS]: For better cross-platform consistency, the inbuilt image loaders are now given
      priority over the OS native image loaders; Hollywood will first try to use its inbuilt loaders and fall
      back to the OS loaders only in case the inbuilt loaders fail
    - New [SDK]: Image, anim, sound, and video plugins now support the optional HWEXT_XXX_NOAUTOINIT extension;
      if this extension bit is set, Hollywood won't automatically initialize the plugin on startup; instead,
      you'll have to activate it manually using the hw_AddLoaderAdapter() functions, for example from your
      RequirePlugin() function; in that case, the image/anim/sound or video plugin will only be activated
      if the user explicitly calls @REQUIRE on it
    - New [SDK]: Added new APIs to deal with the chunk loader: hw_ChunkToFile() and hw_TranslateFileNameExt()
    - Change: Linker no longer checks if the files specified in the preprocessor commands are in a supported
      file format; this allows you to compile applets/executables also on systems that don't support a
      certain file format
    - New: GetFileAttributes() supports an additional argument now which allows you to specify the adapter
      that should be used to examine the file system object (see below)
    - New: OpenFile(), OpenDirectory(), and @FILE and all other functions and preprocessor commands dealing with
      files (image, anims, sounds, videos) support a new optional table element named "Adapter" now which allows
      you to specify the file or directory adapter that should be used to open the file system object; this is
      similar to the "Loader" tag (see below); note that the "Adapter" tag can also be used to access plugins
      which haven't been activated yet; directly specifying its name with the "Adapter" tag will use the plugin
      even if it hasn't been activated; note that image/anim/sound/video plugins won't recognize the "Adapter"
      tag automatically; they need to be adapted to support this new feature before it's going to work
    - New: #ATTRLOADER can be queried for types #BRUSH, #BGPIC, #SAMPLE, #MUSIC, #VIDEO, and #ANIM now  
    - New: IsPicture(), IsAnim(), IsSample(), IsVideo(), and IsMusic() accept an optional table argument now
      that allows you to specify the loader to use for checking the file (see below)
    - New: Many Hollywood functions which load files now support an optional "Loader" argument that can be
      used to specify which engine should be used to load the file; this is pretty useful to minimize
      overhead on loading operations; for example, if you load an image file with LoadBrush(), Hollywood
      will ask all image plugins if they want to open the file or not, then it will ask its inbuilt
      handler, then it will ask the OS's default handler; this can be quite some overhead which you can
      avoid by setting the "Loader" tag if you already know which engine should handle the file; you can
      also set the "Loader" tag to a combination of strings separated by the vertical bar character (|);
      the following special values are supported: "inbuilt", "native", "plugin", and "default"; the
      following commands and preprocessor commands support the new tag: LoadBrush(), LoadBGPic(), LoadAnim(),
      LoadSample(), LoadSprite(), OpenVideo(), OpenMusic(), @BRUSH, @BGPIC, @ANIM, @SAMPLE, @SPRITE, @VIDEO,
      @MUSIC; note that the "Loader" tag can also be used to access plugins which haven't been activated
      yet; directly specifying its name with the "Loader" tag will use the plugin even if it hasn't
      been activated
    - New: Added FileAttributes() function which is similar to GetFileAttributes() but accepts a file object
      id instead of a filename; it also supports streaming and no seek file handles introduced with
      Hollywood 6.0 by setting the new fields "Streaming" and "NoSeek"; note that in contrast to
      GetFileAttributes(), FileAttributes() doesn't set the "Virtual" field
    - New: Added streaming support to I/O handler; most of Hollywood's functions that deal with files can
      now handle files whose size is unknown or files which can only be read sequentially without the
      option to reposition the read/write cursor; streaming support can be useful for plugins which install
      a file adapter; FileLength() and FileSize() will return -1 now in case Hollywood doesn't know the
      size of the file at the time of the call
    - New: Seek() accepts an optional third argument now which allows you to specify the seek mode; this
      can be either #SEEK_BEGINNING (the default), #SEEK_CURRENT, #SEEK_END; if you use #SEEK_CURRENT or
      #SEEK_END you can also specify negative seek offsets
    - Fix [Android]: The "Orientation" tag in SetDisplayAttributes() did not lock the orientation in case
      it was the same as the current one (reported by Paul Bloedel)
    - Fix [MacOS]: Crash when taking a screenshot of the desktop or when running in "DisplayDesktop" mode
      on 10.10 and up
    - Change [MacOS i386]: The i386 version of Hollywood for Mac OS X now requires at least 10.6 (aka
      "Snow Leopard"); this change was necessary because Hollywood requires a new API introduced in 10.6 
    - Change: All versions compiled with gcc use different optimization parameters now that help to reduce
      Hollywood's executable size without considerably reducing performance
    - Fix: When using HexStr() with numbers that do not fit into 32-bits, the behaviour will no longer
      be undefined but HexStr() will simply wrap at the upper 32-bit boundary (reported by Nick Sommer)
    - Change [Win32]: Initial window refresh is done immediately now which works around some problems
      with the legacy transition effect renderer
    - New: Several vectorgraphics plugins can be used side by side now; this also allows you to use the
      new inbuilt vectorgraphics engine together with external vectorgraphics plugins; if layers are
      enabled, you can check the "VectorEngine" field set by GetLayerStyle() to find out which vector
      engine has created the layer; you can also switch vector engines by setting the "VectorEngine"
      field using SetLayerStyle(); pass "default" to use the new inbuilt vectorgraphics engine
    - New: Hollywood's vectorgraphics library no longer needs an external plugin but also works without
      one; the inbuilt vectorgraphics engine currently doesn't support line dashing and has some problems
      with filling complex shapes but for most use cases it should work just fine; note that this inbuilt
      vectorgraphics engine is the default one now; if you want to use a vectorgraphics engine made
      available by a plugin you have to call the new SetVectorEngine() command first
    - New: Functions that draw round shapes with antialiasing finally use real Bézier splines instead of
      polygon lines; this makes antialiasing in the Circle(), Ellipse(), and Arc() functions completely
      smooth now; drawing boxes with round corners using Box() will also use real Bézier splines now;
      applets that have been compiled using previous Hollywood versions will automatically use the old
      polyline based approach; if you really want to have this old approach with Hollywood 6.0 as well,
      set the "LineBasedShapes" tag to TRUE in the new LegacyControl() function
    - Fix: DrawPath() didn't draw a correct shadow for types #SHDWWEST, #SHDWNORTHWEST, #SHDWNORTH,
      #SHDWNORTHEAST, and #SHDWSOUTHWEST when layers were disabled
    - New: Added NUMCHANNELS console argument which allows you to increase (or decrease) the number of
      audio channels available to Hollywood scripts; by default this is set to 8 which has been the
      standard since Hollywood 1.0 and should be enough for most uses; still, you now have the possibility
      to change this setting 
    - Fix: Crash when using certain transformation parameters on layers with a #FILLTEXTURE fill style
    - New: PlayMusic() is no longer limited to playing just one music at a time; you can play as many
      music streams as you want now; this is useful, for example, if you have a game that plays background
      music as well as a talkie soundtrack on top of it; PlayMusic() will now no longer stop a music that
      is already playing; this is an API break so you need to adapt your scripts; for compatibility, though,
      PlayMusic() will automatically stop a playing music unless you explicitly enable the new multi-music
      feature by setting the "SingleMusic" tag to FALSE in the new LegacyControl() function
    - New: Added LegacyControl() function which allows you to enable/disable certain legacy features  
    - New: Added MemToTable() and TableToMem() functions to quickly copy table data into memory blocks and
      vice versa; item sizes of #BYTE, #SHORT and #INTEGER, signed and unsigned and with an optional endian
      switch are supported
    - New: FlushMusicBuffer() can be used to flush a music's sample buffer; FlushMusicBuffer() will remove
      all buffered samples and immediately call your FillMusicBuffer() function to refill the music buffer
      with new data; this allows you to play audio and have changes take effect immediately without a
      two second buffering lag or so (requested by Ulrich Beckers)
    - Fix [Win32]: When loading a sound file streamed via DirectShow as a sample, Hollywood installed a
      DirectShow server thread and allocated resources for it although that is not needed in this case;
      this could conflict with music playback and left a memory leak
    - New [SDK]: Finally added a full documentation of all available plugin types and the plugin interfaces
      exposed by Hollywood; it turned out to be much longer than expected: it is now over 300 pages as a
      PDF and over 700 kilobyte as an AmigaGuide; this took quite a long time to write but it's very
      important to have this documented so that people can finally start writing plugins without having
      to ask me all the time
    - Change: Added documentation for previously undocumented functions GCInfo() and CollectGarbage() which
      have been there since Hollywood 2.0
    - Fix: Number of subsongs was always set to 1 for music streams loaded by plugins
    - New [SDK]: Added hw_MapRGB() and hw_GetRGB() functions to GfxBase for easy conversion between pixel formats
    - Change [Amiga]: cybergraphics.library is no longer required for Hollywood itself; it is only required for
      the default display adapter; this makes it possible to write custom display adapters which use other
      means of drawing graphics; it is possible to write a display adapter now which allows Hollywood to run
      on planar screens again!
    - New [SDK]: Added hw_GetBitMapAttr() for querying bitmap attributes
    - New [SDK]: GfxBase can now conveniently convert bitmaps (including their optional external mask or alpha
      channel) into a raw ARGB buffer using the new hw_BitMapToARGB() function; useful in connection with custom
      display adapters
    - New [SDK]: GfxBase has support for several graphics operations on raw pixel buffers now: hw_RawBltBitMap(),
      hw_RawRectFill(), hw_RawWritePixel(), hw_RawLine() might come in handy in some situations, especially when
      implementing a custom display adapter
    - New [SDK]: Added support for audio adapters; by installing an audio adapter a plugin can replace
      Hollywood's inbuilt audio driver completely and provide a custom way of audio playback; this might be
      useful in connection with some display adapters but it can also be used without a display adapter,
      e.g. if you want to do some recording etc.
    - New: Added DEBUGOUTPUT console argument to enable debug output; this has the same effect as calling
      DebugOutput(True) at the beginning of your script
    - New: Added REQUIRETAGS console argument; this is useful in connection with the REQUIREPLUGINS argument
      and can be used to pass additional arguments to a plugin's require function (arguments which would normally
      be specified after @REQUIRE); the format is like this: "name1[tag1=value1,...,tagN=valueN]...nameN[...]";
      note that REQUIRETAGS can only be used for plugins which have been passed to REQUIREPLUGINS as well; note
      that if you use REQUIREPLUGINS and REQUIRETAGS for a plugin its @REQUIRE preprocessor statement in the
      script will be ignored!
    - New: SelectBrush(), SelectMask(), and SelectAlphaChannel() can now also be used with hardware brushes
      for hardware accelerated offscreen drawing; as only the Amiga version of Hollywood supports hardware
      brushes by default, this feature is only available on other platforms if there's a video bitmap adapter
      that supports it; on Amiga, SelectBrush() is supported by the default hardware bitmap renderer but not
      SelectMask() and SelectAlphaChannel()
    - New: CreateBrush() can also create hardware brushes now if you specify the optional "Hardware" tag; it's
      also possible to create display dependent hardware brushes by specifying the new "Display" tag  
    - Fix [Win32/MacOS]: Autoscaling using antialiased pixel interpolation didn't work without a double buffer
      being active
    - Fix: When drawing graphics primitives with a border with auto scaling being active, Hollywood treated the
      border as if it was in layer scale mode
    - New [Amiga]: ForceVideoMode() accepts a second optional argument now which can force the video renderer
      to draw from the main thread only; this is mainly for testing/debug purposes
    - New [Amiga]: The datatype image loader now falls back to Hollywood's inbuilt image loader in case there
      is an error; this is useful in the rare case that there are no PNG, JPEG, BMP, or GIF datatypes available
      or the system is using an ancient picture.datatype that doesn't support the v43 capabilities
    - New: CopyTable() can also create 'shallow' copies of a table, i.e. all items are just copied by reference
      instead of creating a completely independent copy; this saves resources and can also come in handy in
      case of self-referential tables which will lead to a stack overflow in a 'deep' copy (requested by Fabio
      Falcucci)
    - Fix: CopyTable() and some other lowlevel VM functions didn't exit cleanly in case of a stack overflow
      (reported by Fabio Falcucci)
    - New [IDE/GUI]: Added quick links to the Hollywood forums in both the Windows IDE and Amiga GUI
    - New [IDE/GUI]: Added support for compiling for Linux ARM and support for compiling compressed applets and
      executables both in the Windows IDE and Amiga GUI
    - Fix: Fixed a bug with wrong escaping of percent signs when running Hollywood with the COMPRESS argument;
      on AmigaOS 3 this was responsible for a complete freeze of Hollywood while it only had a cosmetic effect
      on other platforms
    - Change: Full path to original script is no longer written to applets (suggested by Matthew Leaman)
    - Change [IDE]: Windows IDE now also recognizes commands and constants from all other platforms supported
      by Hollywood; useful for doing cross-platform development using the Windows IDE
    - New [GUI]: Added new switch to enable antialiased scaling when in auto- or layerscale mode
    - Change [GUI]: Switch to make displays sizeable is no longer activated by default to avoid confusion with
      scripts that rely on "SizeWindow" being sent which is not done in case AUTOSCALE or LAYERSCALE are active
      (reported by Jörg Renkert)
    - New [Amiga]: Added support for setting the screen's title text and pubscreen name when running in fullscreen
      mode; you can use the new tags "ScreenName" and "ScreenTitle" with @DISPLAY, CreateDisplay() and
      SetDisplayAttributes() for this; "ScreenName" can also be passed to OpenDisplay(); additionally, there's
      a new command named SetScreenTitle() which allows you to quickly change the screen title
    - Fix [OS4]: Hollywood's error requester was not always put to the front
    - New [Amiga/Linux]: OpenDisplay()'s optional table argument supports the two new options "XServer" (Linux)
      and "PubScreen" (Amiga) now; this is just a convenience feature to save a call to SetDisplayAttributes()
    - Fix [Amiga]: Backfill windows can no longer be brought to the front by double-clicking them
    - Change: OWNSCREEN console argument and "OwnScreen" display mode are no longer supported; the OWNSCREEN
      display mode was useful on AmigaOS only and it can now be replicated by specifying FULLSCREEN together
      with the new NOBACKFILL and NOSTYLEOVERRIDE arguments; they allow you to run Hollywood in fullscreen
      mode without a backfill and special fullscreen window styles
    - Fix [Linux]: Hollywood didn't hide the launcher panel and title bar on Ubuntu when in full screen or 
      fake full screen mode
    - New [Linux]: Added NOMOUSEHOOK argument which prevents Hollywood from installing a mouse hook that
      constantly polls the position of the mouse; this is only needed if the connection to the X server is
      slow and you need to save on bandwidth; on desktop systems it isn't required; if Hollywood is running
      without the mouse hook, you won't receive any more "OnMouseMove" events once the mouse pointer leaves
      your display's boundaries
    - New [Linux]: Hollywood is no longer restricted to running on a single X server; instead, the X server
      can be different for each display; you can use the new "XServer" tag with @DISPLAY, CreateDisplay()
      and SetDisplayAttributes() to specify the X server the display should try to connect to; you can also
      query #ATTRXSERVER to find out the X server of a display; the XSERVER command line argument is still
      supported but will only affect the first display (requested by Tom C.)
    - New: ChangeDisplayMode() now also allows you to change the resolution of your script if it is already
      running in fullscreen mode, e.g. you could switch from a 640x480 to a 800x600 fullscreen display now
    - Change [Linux]: Hollywood supports libXrandr for dealing with fullscreen modes now; libXxf86vm is still
      supported for older systems but libXrandr is given priority over it (if available)
    - New: Added MONITOR console argument to specify on which monitor the display should be opened
    - Fix [Linux]: On systems with more than one monitor Hollywood often did wrong position calculations, e.g.
      when using convenience constants like #CENTER, #RIGHT, etc.; this is handled correctly now (reported
      by Tom C.)
    - Change: @SCREEN and @BACKFILL are deprecated now; instead, you should use the corresponding tags in
      @DISPLAY, CreateDisplay(), OpenDisplay() or ChangeDisplayMode(); the reason why @SCREEN and @BACKFILL
      have to be deprecated is that multi-monitor support allows you to have multiple displays running in
      fullscreen mode and they could also contain multiple backfills; that's why screen and backfill settings
      are part of the display settings now (again! it was already like that prior to Hollywood 4.5); the
      @SCREEN and @BACKFILL preprocessor commands are still supported for compatibility; everything you
      specify here will be mapped to the first display
    - New: Added MODEREQUESTER and ASKDISPLAYMODE console arguments; these correspond to the respective tags
      that can be passed to @DISPLAY, CreateDisplay() and OpenDisplay()  
    - New: OpenDisplay() and CreateDisplay() can handle the following new modes now: "Ask" and "FakeFullScreen"
    - New: You can force the mode requester to be popped up by setting "Mode" in @DISPLAY to "ModeRequester"
      or passing "ModeRequester" to OpenDisplay() or CreateDisplay()
    - New [Win32/MacOS/Linux]: The mode requester that allows the user to select a screen mode from all modes
      supported by the monitor is now available on non-Amiga systems too
    - Change: Display attributes specified in @DISPLAY no longer override the arguments specified on the
      command line; instead, it's the other way round now; command line arguments override @DISPLAY arguments,
      but only for display #1 (see below); for all other displays the command line arguments don't have any effect;
      i.e. specifiyng {Borderless=False} in @DISPLAY but running the script using the BORDERLESS argument
      will still give you a borderless display; to prevent this, compile your script using the LOCKSETTINGS
      option 
    - Change: Two changes in the console arguments for the sake of consistency: The DEPTH argument is now
      called SCRDEPTH and AUDIODEV is now called AUDIODEVICE  
    - New: The new console argument ALLDISPLAYS will apply all options that affect the display's style to all
      displays instead of only the first; this argument can be used to replicate the behaviour of previous
      Hollywood versions
    - Change: All the command line arguments that affect the display's style (e.g. BORDERLESS, SIZEABLE...)
      are only applied to the very first display; before v6.0 they were applied to all displays  
    - Fix: Unnecessary allocation of back bitmap in case a transparent display was opened using OpenDisplay()
      on all systems except AmigaOS 3  
    - New: @BACKFILL supports "SmoothScale" argument now which turns on interpolated scaling if "ScalePicture"
      has been set to TRUE  
    - Fix: Picture backfill mode did not handle alpha channel brushes correctly
    - New: The optional table argument of OpenDisplay() and ChangeDisplayMode() supports a new option tag
      named "Backfill" now; this table field allows you to configure the settings for the backfill window
      if the display is to be opened in fullscreen mode; the fields supported by this option are similar to the
      @BACKFILL preprocessor command  
    - New: OpenDisplay() accepts a table argument in the optional argument 2 now which, among other things,
      allows you to specify whether or not the display should be opened in fullscreen mode; previously, this
      wasn't possible directly; you always had to open the display first and switch modes then using
      ChangeDisplayMode(); now this is possible within a single call to OpenDisplay(); the following other
      options are supported by this new table argument as well: "Monitor", "ScrWidth", "ScrHeight", "ScrDepth",
      "NoSelect"; the old syntax with a boolean to turn off display selection in the second argument is still
      supported for compatibility
    - Change: The mode switch hotkey (CMD+RETURN) now checks which monitor the display is currently on and
      then puts this monitor into fullscreen mode; previously, always the first monitor was put into fullscreen
      mode no matter which monitor the display was currently on
    - New: ChangeDisplayMode() accepts an optional table argument now which allows you to specify the target
      monitor if the display is to be put in fullscreen mode; this has the same functionality than setting
      the "Monitor" tag in @DISPLAY or CreateDisplay() 
    - New: Added support for monitor-based fullscreen modes; this means that if you have multiple monitors
      installed, you can put several displays into fullscreen modes on separate monitors; to specify the target
      monitor for a display's fullscreen mode, use the new "Monitor" tag that is available in @DISPLAY or
      CreateDisplay() 
    - Change: ChangeDisplayMode() no longer puts all displays into fullscreen mode but only the active one;
      this is an API break and might require you to update your scripts; the old behaviour only made sense
      on AmigaOS anyway because on all other systems fullscreen mode was restricted to one display; if you
      want to replicate the old behaviour on AmigaOS, just move all other displays to the screen that will
      be opened by ChangeDisplayMode(); the new behaviour of ChangeDisplayMode() on AmigaOS is that the command
      will open a new screen for every display you put into fullscreen mode with it  
    - Change: GetDisplayModes() accepts an optional argument now which allows you to specify the monitor whose
      display modes should be queried and returned
    - New: #ATTRMONITOR allows you to query the display's current monitor and #ATTRHOSTMONITORS allows you
      to query the number of available monitors  
    - New: Added support for multiple monitors; you can use the new GetMonitors() command to get information
      about all available monitors and the new "Monitor" tag with @DISPLAY, CreateDisplay() and SetDisplayAttributes();
      if the "Monitor" tag is specified, all display coordinates used with MoveDisplay(), CreateDisplay(),
      ChangeDisplaySize(), SetDisplayAttributes(), etc. will be relative to the specified monitor's top-left
      corner; monitors are enumerated starting from 1 for the first monitor (this is also the default); note
      that the geometry returned here is platform dependent: on Windows monitors to the left of the primary
      monitor will be mapped to negative coordinate space so that the primary monitor always has its origin
      at (0,0) whereas on Linux negative coordinate space isn't used so that it can happen that the primary
      monitor starts at (1920,0) in case a 1920x1080 secondary monitor is aligned to the left of the primary
      monitor; Hollywood cannot take these platform dependencies away from you because they're tied to the
      whole system coordinate space  
    - Change: Last two arguments of ChangeDisplayMode() are now optional if you pass #DISPMODE_FULLSCREEN; they
      default to the current display dimensions  
    - Fix [OS4]: Minor datatype alpha channel handling problem (reported by Nick Sommer)
    - Fix [MorphOS]: Read beyond memory boundaries when playing YUV encoded videos using hardware acceleration
    - Fix: Inbuilt BMP loader didn't handle 16-bit BMPs correctly (reported by Nick Sommer)
    - Fix [Win32]: DebugPrint() truncated the strings at 2048 bytes when the Win32 built of Hollywood opened
      a custom console (reported by Fabio Falcucci)
    - Fix [Win32]: When working with the IDE DebugPrint() never forwarded more than 2048 bytes from Hollywood
      to the IDE (reported by Fabio Falcucci)
    - Fix: Mouse pointer wasn't hidden when over backfill windows in fake fullscreen mode
    - Change [Win32]: ListRequest() also accepts double-click on items now
    - Fix [Win32]: Window positions and sizes are no longer messed up when switching back from fullscreen mode
    - Fix [Android]: SystemRequest() didn't work correctly in case the gadget string had more than 3 different
      choices (reported by Xabier Payet)
    - Fix: Memory access fault when freeing a display at a certain point of time in the WaitEvent() cycle
      (reported by Fabio Falcucci)
    - New: #SELMODE_COMBO supports a new mode now: if you pass 2 as the mode argument, Hollywood will merge
      alpha and color channels of the source and destination images as if they were drawn on top of each other
      (requested by Niels Schapke and Fabio Falcucci)
    - Fix: Layers with alpha channel weren't redrawn correctly while #SELMODE_COMBO was active
    - New: TEMPDIR argument allows you to configure where Hollywood should store its temporary files; pass
      "." to indicate the current directory; this is especially useful on AmigaOS where Hollywood stores
      temporary files in RAM by default; if you're low on RAM or need to compile huge scripts you can use
      TEMPDIR to have temporary files stored somewhere else (e.g. on hard disk)
    - New: All icons specified in @APPICON or the respective ICXXX command line arguments are now also linked
      into the applet if you compile scripts as applets; on Windows, Linux, and AmigaOS 4 these icons are
      now also loaded from the applet in case you're running an applet with Hollywood
    - Fix [Win32]: Specifying an initial path in FileRequest() didn't work on Windows 7; this is actually
      an incompatibility in Windows 7; I have added a workaround for it (reported by Juan Carlos)
    - Fix: Fixed a possible race condition in connection with temporary files; GetTempFileName() will now
      create an empty file instead of just returning a non-existing filename; by creating an empty file
      for you Hollywood can prevent other processes from trying to use the very same temporary filename
      (reported by Matthew Leaman)
    - New: #ATTRSCALEWIDTH, #ATTRSCALEHEIGHT, and #ATTRSCALEMODE can be queried now for #VIDEO as well
    - Fix: When using the "Desktop" tag in @SCREEN or @DISPLAY the initial BGPic had some wrong flags set
      which could cause trouble when trying to display it later using DisplayBGPic() or DisplayTransitionFX()
      (error could be seen by running the Intro.hws example)
    - New [OS4]: Added support for hardware accelerated video scaling; this should also give older
      systems that do not support hardware accelerated YUV to RGB conversion a good speed-up when playing
      scaled videos with Hollywood
    - New [OS4]: Added support for hardware accelerated video rendering; this gives a great speed-up on
      systems that support hardware accelerated YUV to RGB conversion like the new Radeon HD driver for
      the X1000
    - Change [Amiga]: Dropped support for mpega.library; mpega.library caused quite some trouble because
      it usually recognized every file format as an MPEG stream leading to several unwanted effects; if
      you need to play MP3s you can just use a plugin like avcodec.hwp instead
    - New [Amiga]: Audio driver completely rewritten; it now uses non-exclusive device audio by default
      which means that Hollywood's audio output will no longer block other programs' audio output; this
      feature was requested by many users so here it is; the only feature that is currently unsupported
      by the new audio driver is on-the-fly changing of volume, pitch or panning of samples that are
      currently playing; the old audio driver is still available and can be activated by using the new
      LEGACYAUDIO command line argument; note that for performance reasons, the 68k version of Hollywood
      will use the old audio driver by default; you can force the 68k version to use the new audio driver
      by specifying the NOLEGACYAUDIO command line argument
    - New [OS4]: Added an alternative for specifying the initial AmiDock icon: You can specify the identifier
      of a brush in the new "DockyBrush" tag in the @OPTIONS preprocessor command; if this is specified,
      Hollywood will use this brush as the initial docky icon; your script will also get an app docky then;
      this is useful if you'd like your docky to have a custom size, i.e. different from the icon sizes
      supported by @APPICON, or if you want your script to use an app docky right from the start
    - New [OS4]: Added ChangeApplicationIcon() which allows you to change the docky icon of your application
      at runtime; the command accepts one or two brushes; if you specify two brushes, your docky icon will
      have two different states; if you specify just one brush, you will get an app docky; the advantage of
      app dockies is that they can have a context menu and that you can change their image very quickly, even
      making docky animations possible; change two state docky icons, however, always requires a complete
      relayout of AmiDock which is very slow
    - New [OS4]: Added support for docky context menus: You can assign a menustrip to your application's
      docky by specifying the new "DockyContextMenu" tag in the @OPTIONS preprocessor command; note that
      docky context menus are only supported by app dockies; thus, if you choose to add a context menu to
      your application's docky, Hollywood will automatically use an app docky instead of a standard docky;
      the main difference between the two is that app dockies only have a single state image in the dock
      while standard dockies support icons with two states; the specified menu strip must only contain a
      single menutree with no subitems; short cuts are not supported because it doesn't make any sense in
      dockies
    - New: Object type #MENU is now available and can be used for storing custom data; you can also query
      #ATTRCOUNT on it
    - New: #ATTRMENU can be queried for #DISPLAY now using GetAttribute(); it will return the id of the
      menustrip currently associated with a display or -1 for no menustrip
    - New: Added some more functions to deal with menustrips: SelectMenuItem(), DeselectMenuItem(),
      IsMenuItemSelected(), DisableMenuItem(), EnableMenuItem(), IsMenuItemDisabled(); they all require
      the id of a display as their first argument because menustrips can be associated with multiple
      displays
    - New: Added support for menustrips; many users have asked for that feature over the last years so here
      it is! You can use the function CreateMenu() or the new @MENU preprocessor command to create a new
      menustrip; the menustrip can then be assigned to a display by using the new "Menu" tag with the
      @DISPLAY preprocessor command or the CreateDisplay() or SetDisplayAttributes() functions; please note
      that because of limitations in AmigaOS, Hollywood generally doesn't allow any nesting levels in menu
      trees that are greater than 2; two different menu item types are supported: standard and toggle items;
      additionally, you can also define hotkeys for your menu items; to listen to menu events, install an
      event handler for the new "OnMenuSelect" event which will trigger whenever the user selects a menu item;
      note that full screen displays don't support menustrips; to remove a menustrip from a display, call
      SetDisplayAttributes() with "Menu" set to -1; this is currently not supported on Linux and Android
      because there is no easy way to get menustrips on these systems
    - Change [OS4]: Hollywood no longer creates a temporary file when iconifying a script that does
      not provide a default app icon
    - Change [OS4]: Default app icon uses 64x64 pixels in true colour with alpha channel now (thanks to
      Martin Merz for the icon!)
    - Fix: Memory leak when assigning custom data to objects of type #TIMER using SetObjectData()
    - New [OS4]: Added "OnDockyClick" event handler; this event handler will trigger if the user clicks the
      app's docky icon
    - New: @APPICON preprocessor command supports a new "DefaultIcon" tag now; this allows you to specify a
      default icon size; this is currently only used on AmigaOS4; if you set "RegisterApplication" to TRUE
      and specify a default icon size, Hollywood will use this icon for AmiDock (instead of the program's
      *.info file)
    - New: All size tags in @APPICON support a second icon state now, i.e. there is a now a second tag for
      each size that allows you to specify a second state image, e.g. "IC32x32S" for "IC32x32"; this is
      needed because icons on Amiga-compatibles usually have two different states
    - New: Added support for 64x64 and 96x96 icon sizes through new ICONXXX arguments and tags in @APPICON
      respectively; 96x96 sized icons are currently not used on any platform but 64x64 is the default icon
      size on AmigaOS 4.1
    - New [OS4]: Added ShowRinghioMessage() command which allows you to show a Ringhio notification; this
      will only work if your script is a registered OS4 application (see below); it's also possible to get
      notified through an "OnApplicationMessage" message if the user double-clicks the Ringhio notification
    - New [OS4]: InstallEventHandler() supports the "OnApplicationMessage" event handler now; if you enable
      this event handler, you'll be able to receive messages from other OS4 programs registered through
      application.library
    - New [OS4]: Added support for application.library; if you want your script to register as an OS4 application,
      simply set the "RegisterApplication" tag in @OPTIONS to TRUE; you'll then be able to use the following
      new functions that deal with OS4 application objects: GetApplicationList(), SendApplicationMessage()
    - New [Amiga]: Added "NoCommodity" tag to the @OPTIONS preprocessor command; if you set this to TRUE,
      Hollywood won't add itself to the system's commodity list
    - New: Added DISABLEBLANKER console argument and "DisableBlanker" tag for @DISPLAY; you can use these options
      to disable the screen blanker either for the specified Hollywood display or globally if you use the
      console argument (requested by Richard Lake and Rüdiger Solbach)
    - New: HavePlugin() allows you to check whether a certain plugin is available
    - New: Added support for on-the-fly plugin loading using the new LoadPlugin() command; this command
      allows you to dynamically load plugins at runtime; additionally, LoadPlugin() can also be used to
      call the plugin's @REQUIRE constructor code; note that not all plugins support dynamic runtime loading;
      i.e. it is not possible for plugins which install a display adapter or a script parser
    - New: Table returned by GetPlugins() and GetVersion().Plugins contains the new fields "ModuleName" and
      "Disabled" now for every plugin now; "ModuleName" can be used to safely identify this plugin because
      the module name is unique among all loaded plugins and "Disabled" tells you about the plugin's state
    - New: Added EnablePlugin() and DisablePlugin() commands; you can use these commands to temporarily disable
      plugins; note that this is only supported for plugins that provide loaders/savers for additional formats
      or file/directory adapter plugins; it is not supported for plugins that install new commands or provide
      other lower level facilities
    - New [SDK]: hw_ConvertString()/hw_FreeString() can be used for converting strings between different
      encodings
    - New [Amiga]: #FILEATTR_HIDDEN is now supported for Get/SetFileAttributes(); it wasn't supported before
      because this attribute's bit definition was actually "hidden" in the AmigaOS SDK
    - New [Amiga]: FileRequest() accepts a new mode flag now: #REQ_HIDEICONS will suppress the listing of
      icon files (*.info) in the requester (requested by Jörg Renkert)
    - Fix [Amiga]: Requester functions didn't open on the front screen in case the current display was hidden
      (reported by Jörg Renkert)
    - New [GUI]: Preferences allow you to specify additional arguments to be passed to the interpreter or
      compiler now; handy if you temporarily need to use -resourcemonitor or some other switches
    - New: GetAttribute() allows you to query #ATTRADAPTER for #FILE and #DIRECTORY now; it returns the name
      of the adapter that was used to open the file/directory or "default" for no adapter
    - New [SDK]: ZBase exports some more functions from zlib now
    - New [SDK]: CRTBase has support for several new functions from the C runtime now (date and time functions
      and several DOS functions)
    - New [SDK]: Added hwos_Stat() and hwos_Seek64() to DOSBase
    - New [SDK]: Added support for file and directory adapters; these plugin interfaces allow plugins to hook
      into Hollywood's file handler and intercept IO for certain file or directory types by providing custom IO
      implementations for them; these plugin interfaces could be used to write plugins that allow all Hollywood
      functions to be able to load certain packed files "automagically" or parse archiver formats like ZIP or TAR
      like normal directories using OpenDirectory(), etc.; file and directory adapters can be registered using
      the new hw_AddLoaderAdapter() and hw_RemoveLoaderAdapter() functions in SysBase; please note you
      should only register file and dir adapters when the user explicitly requests it by calling @REQUIRE on
      your plugin; do NOT install them on InitPlugin() unless you have a very good reason!
    - Change: When switching from windowed to fullscreen mode, Hollywood will memorize the old display settings
      now and restore them when switching back from fullscreen to windowed mode
    - Fix: Small drawing error in WavyLogo.hws when using wave level 5
    - New: @REQUIRE allows you to specify an arbitrary number of tags now using an optional {} argument; all the
      tags specified here are directly forwarded to the plugin enabling it to do some user-defined initialization;
      there is a slight syntax change: the table containing these arguments must follow directly after the
      module name; the desired version and revision numbers may be specified using the new "Version" and "Revision"
      tags; the old syntax is still supported for compatibility reasons
    - New [IDE/GUI]: Number of plugins and number of functions made available by plugins is now shown in the
      system information dialog
    - New [IDE/GUI]: Plugins can be enabled/disabled from the Windows IDE and the Amiga GUI now; pressing the
      new enable/disable button will just rename the plugin to include/exclude the "_" prefix
    - New: Plugins that have their filename prefixed with a "_" are automatically skipped on startup but scripts
      can load them later using @REQUIRE
    - Fix: SKIPPLUGINS was broken in version 5.3
    - New: Hollywood supports Linux for the ARM architecture now; this allows you to compile your scripts for
      several embedded Linux systems including the popular Raspberry Pi!
    - New [Linux]: 16-bit screenmodes are now supported
    - Change [MacOS]: Timer scheduler runs in a separate, higher-priority thread now which should result in some 
      better precision
    - New: SaveBrush() can also save hardware brushes now
    - New: #ATTRADAPTER can be queried for #DISPLAY and reports the current display adapter in use or "default"
      for no adapter
    - New: "ModeSwitch" event callback message contains two new fields now (Width/Height) which inform you about
      the display's width and height after the mode change
    - Fix [Win32]: PauseMusic() didn't work correctly for non-seekable music objects (the music was rewinded
      instead of paused)
    - Fix [SDK]: SeekStream() is no longer called if HWSNDFLAGS_CANSEEK wasn't set; exception: it is still
      called to rewind a stream; in that case 0 is passed as the new position; every sound plugin has to
      support rewinding
    - Fix: Box() didn't respect the AnchorX and AnchorY tags when running in fastdraw mode (reported by Ray)
    - Fix: Drawing partly transparent shapes with shadow and anti-aliasing enabled did not work correctly
      (reported by Matthias Rustler)
    - Fix [Amiga]: SetWBIcon() didn't allow you to change the app icon while Hollywood was in iconified state
      (reported by Niels Schapke)
    - Change [Amiga]: Hollywood is more economical in its message port usage now so that it doesn't run out of
      message ports so easily when using MUI Royale and a Rexx port for example (reported by Richard Lake)
    - Fix: Possible crash in OpenConnection() and IsOnline() when trying to close Hollywood's window while
      Hollywood was trying to make a connection
    - Fix: Several memory access fault fixes in DownloadFile() (reported by Richard Lake)
    - Fix: AnimPlayer.hws didn't verify frame range before calling GetAnimFrame() (reported by Lazar Zoltan)
    - Fix [Amiga]: IsPicture() didn't return correct alpha channel information for TIFF images
    - Fix [Win32]: NextDirectoryEntry() was unable to handle files starting with a dot correctly (reported
      by Fabio Falcucci)
    - New: GetAttribute() allows you to query #ATTRDISPLAY for type #BRUSH now; this will return the identifier
      of the display the specified brush is attached to or -1 if the brush is a display-independent brush
    - New: Added support for display-dependent hardware brushes; to create a display dependent hardware brush
      simply specify the ID of the display in the new "Display" tag in @BRUSH, LoadBrush(), or CopyBrush();
      note that all display-dependent hardware brushes can only be drawn to the display they belong to and
      they'll be automatically freed when the display is closed; also note that display-dependent hardware
      brushes are currently only supported by plugins not by Hollywood itself; the hardware brushes supported
      on Amiga systems are not display-dependent
    - Fix [OS3]: Palette-based and gray channel PNGs with alpha channel couldn't be loaded (reported by Nick Sommer)
    - Fix [Amiga]: IsPicture() didn't return correct alpha channel information for palette-based and gray-channel
      PNGs with alpha channel (reported by Nick Sommer)
    - New: Added REQUIREPLUGINS argument which can be used to initialize plugins from the command line instead
      of from the script; specifying a plugin here has the same effect as defining the respective @REQUIRE
      preprocessor command; if you want to specify multiple plugins, separate them using the "|" character
    - Change [MacOS i386]: The i386 version of Hollywood for Mac OS X doesn't work on 10.4 any longer; it now
      requires at least Mac OS X 10.5 ("Leopard"); this change was necessary because of some upcoming plugins
      which require 10.5
    - Change: Second argument in FileRequest() is optional now (defaults to "" which means show all files)
    - New [SDK]: The icons installed by the script can now also be accessed by plugins using the new
      hw_GetIcons() and hw_FreeIcons() functions in GfxBase; this is useful when implementing a custom display
      adapter
    - New [Win32/Linux]: The icons specified in @APPICON or using the ICONXXX command line arguments will now
      also be loaded when just running a script; previously, the icons specified here were just used by the
      linker to compile them into executables (so you could only see them when running Hollywood-compiled
      programs); now they will also be visible when you run Hollywood scripts without compiling them into
      executables
    - Change [SDK]: Satellite displays will now also get a HWSATOP_VWAIT notification when Hollywood executes
      a vblank wait; closed displays will no longer run their own vblank waits; in order to maintain
      compatibility with older versions you have to request HWSATOP_VWAIT notifications explicitly by setting
      the HWADS_DISPATCHVWAIT tag when calling hw_AttachDisplaySatellite()
    - Fix: Memory corruption in BeginDoubleBuffer() when autoscaling was active and the current BGPic's size
      was bigger than the destination scaling size
    - New [SDK]: GfxBase provides bitmap locking functions now: hw_LockBitMap() and hw_UnLockBitMap(); note
      that these only work with normal bitmaps; video bitmaps cannot be locked
    - New [SDK]: Added support for bitmap adapters; this new plugin capability allows you to completely
      replace Hollywood's inbuilt bitmap handler with your own functions; note that these normal bitmaps should
      be stored in memory that can be efficiently accessed (read/write) by the CPU because Hollywood will
      need to access the raw pixel data of normal bitmaps quite oftenly; for bitmaps that should be handled
      by the GPU, you should use a video bitmap adapter; also note that bitmap adapters (both video and normal
      bitmap adapters) can only be used in connection with a custom display adapter
    - New [SDK]: Added support for double buffer adapters; if your plugin installs a custom display adapter
      and a video bitmap adapter it might also want to provide a double buffer adapter to do optimized
      drawing without having Hollywood get in the way with anything that could throttle performance; by
      providing a custom double-buffer adapter, you have complete freedom how double-buffering is handled;
      note that your custom double-buffer will only be used if the user sets "Hardware" to TRUE in
      BeginDoubleBuffer(); otherwise, Hollywood's inbuilt double-buffering technique is used
    - New [SDK]: Added support for video bitmap adapters; this feature allows plugins to provide their own
      way of allocating and handling bitmaps managed by the GPU; whenever the user allocates a bitmap with the
      "Hardware" tag set to TRUE, Hollywood will ask the plugin to allocate this bitmap; this makes it possible
      to use hardware bitmaps on other platforms as well (if there's a plugin that can handle them); this is
      useful because only the Amiga version of Hollywood has inbuilt support for hardware bitmaps at this time;
      using the new plugin API, this can be extended to other platforms as well; note that if a plugin provides
      a video bitmap adapter it also has to provide a display adapter
    - New [SDK]: Added support for requester adapters; a requester adapter can be used to replace Hollywood's
      inbuilt requester functions with custom ones; this can be useful in connection with some display adapters
      that have their own requester functionality etc.
    - New [SDK]: Added support for timer adapters; this allows you to replace Hollywood's inbuilt timer
      functionality with a custom one; this might be useful in connection with some display adapters
    - New [SDK]: hw_LogPrintF() can be used for debug output
    - New [SDK]: Added hw_RegisterEventHandlerEx(); this allows you to register a custom event handler
    - New [SDK]: Extended support for callbacks in SysBase: hw_DisableCallback() and hw_UnregisterCallback()
      are available now
    - New [SDK]: SysBase provides functions for semaphore handling now
    - New [SDK]: SysBase provides new functions now that are necessary to implement the event handler of
      display adapters
    - New [SDK]: LuaBase exports several new Lua functions now
    - New [SDK]: Added support for Lua gates to SysBase; this is probably of not much use for now
    - New [SDK]: Added support for display adapters; this is a revolutionary feature because it allows you to
      replace Hollywood's default display adapter completely and install a custom display adapter which might
      want to use an entirely different toolkit; this opens up great new possibilities and can be used to
      adapt Hollywood to all kinds of new environments (e.g. OpenGL or other toolkits...); to install a new
      display adapter, use the new hw_SetDisplayAdapter() plugin API
    - New [SDK]: Plugins can now request to be called whenever the script calls the @REQUIRE preprocessor
      command; this is useful if you do not want your plugin to be activated by default whenever Hollywood
      starts; instead, you can choose to activate your plugin only when the user calls @REQUIRE on your
      plugin
    - Change: Core event system rewritten; it no longer uses an event sink that is of a static size but uses a
      garbage collecting mechanism instead; event timeout has been raised to 60 seconds from (1.5 seconds);
      you can use SetEventTimeout() to change this limit
    - Fix [Win32]: Crash when "OnMusicEnd" callback caused an immediate exit, e.g. by calling End() or causing
      an error
    - New: Added EXPORTPREPROCS argument which allows you to export a list of all native preprocessor commands
      to a file; useful for IDEs that want to offer syntax highlighting for preprocessor commands
    - New: HaveItem() allows you to check whether a table item exists; this is a convenience function for an
      IsNil(RawGet(...)) call but in comparison to RawGet() it also does a case insensitive comparison while
      RawGet() is case sensitive
    - Fix: Hollywood also recognizes standard JPEG images that use "Lavc" instead of JFIF now (reported by Paul
      Bloedel)
    - Fix [Win32]: Deadlock when calling PlayMusic() after an "OnMusicEnd" notification without explicitly
      stopping the music using StopMusic()
    - New: Added ArrayToStr() function as a pendant to StrToArray() which has been there since Hollywood 2.0
    - Fix: Function name could not be determined correctly for functions made available by Hollywood plugins;
      their names were always presented as "?"
    - New: Added PatternFindStrShort() function which basically does the same as PatternFindStrDirect() but doesn't
      return the find positions; instead, the captured strings are returned directly
    - New: Added PatternFindStrDirect() function which does the same as PatternFindStr() but can be used without
      a generic For loop; PatternFindStrDirect() will return the start and end indices of the first match of the
      specified pattern and it will also return the captured strings
    - Fix: RepeatStr() now also works with a count value of 0; simply returns an empty string
    - New: Added IsNil() function; this is a convenience function to check a variable against Nil; previously,
      this had to be done using GetType()
    - Change: GetAttribute() can access objects now which have been flagged as gone internally because they
      have been freed but are still attached to a layer; you may still access them via GetAttribute() now
      but all other commands will refuse working with them; affected types of this change are #ANIM, #BRUSH,
      #BGPIC, #TEXTOBJECT, and #VIDEO
    - New: Added DisplayVideoFrame() command which works in the same way as the DisplayAnimFrame() command
      except that it inserts a video layer; currently only works with layers enabled
    - Fix: Crash when using effects from the following groups in the undocumented BGPicEmu mode (for internal use
      of Hollywood Designer only) together with layerscale when layerscale was cancelled internally because
      the dimensions arrived back at the original dimensions, e.g. after maximizing a window and then undoing
      this maximization again; the following effects were affected: #PUSHLEFT, #PUSHRIGHT, #PUSHTOP, #PUSHBOTTOM,
      #HOPENGATE, #VOPENGATE, #HCLOSEGATE, #VCLOSEGATE, #ZOOMIN, #ZOOMOUT, #CRUSHLEFT, #CRUSHRIGHT, #CRUSHTOP,
      #CRUSHBOTTOM, #HFLIPCOIN, #HLOWFLIPCOIN, #VFLIPCOIN, #VLOWFLIPCOIN, #SLIDELEFT, #SLIDETOP, #SLIDEBOTTOM,
      #SLIDERIGHT, #CARDTOP, #CARDBOTTOM, #TURNDOWNLEFT, #TURNDOWNTOP, #TURNDOWNBOTTOM, #TURNDOWNRIGHT, #PIXELZOOM2;
      this bug was introduced in Hollywood 5.0
    - New: Added #ATTRPLAYING and #ATTRPAUSED attributes which allow you to query the state of a video or a video
      layer; supported for types #LAYER and #VIDEO; also supported for #MUSIC and #SAMPLE (#ATTRPAUSED not
      supported for #SAMPLE because sample playback currently can't be paused)
    - New: Added #ATTRID for GetAttribute() type #LAYER; this returns the identifier of the object selected into
      the specified layer (only applicable for layer types #ANIM, #BRUSH, #BRUSHPART, #BGPICPART, #TEXTOBJECT,
      #VECTORPATH, #VIDEO)
    - New: GetAttribute() now supports #ATTRDURATION, #ATTRPOSITION, #ATTRCANSEEK, and #ATTRFORMAT for type #LAYER
      if the specified layer is a video layer
    - New: #ATTRNUMFRAMES now also supported by video layers
    - New: SetLayerStyle() and GetLayerStyle() work with video layers now; you can modify the following fields:
      PartX, PartY, PartWidth, PartHeight; GetLayerStyle() will also return the id of the video handle but you
      cannot change it using SetLayerStyle()
    - New: Added several functions to deal with video layers: PlayLayer(), StopLayer(), PauseLayer(), ResumeLayer(),
      SeekLayer(), and SetLayerVolume(); these work in the same way as their counterparts in the video library
      but they expect a layer id instead of a video object id; of course, they'll only work with video layers
    - New: InsertLayer() can also insert layers of type #VIDEO now; note that if you use the same video handle
      for multiple layers, Hollywood will silently clone the video handle; you can use GetLayerStyle() to find
      out the id of the video handle used for a specific layer
    - New: Added support for video layers; this allows you to apply all of Hollywood's layers functions to videos
      as well, e.g. you can rotate and transform them, apply filters, transparency, show and hide videos using
      transition effects etc.; this is very powerful and requires lots of CPU power to work smoothly; to create
      a video layer, simply call PlayVideo() with the "UseLayer" field set to TRUE in the new optional table
      argument; this optional table argument also accepts Hollywood's standard drawing commands now but only in
      connection with "UseLayer" set to TRUE; note that in contrast to non-layered videos, video layers will not
      be stopped when displaying a new BGPic because they can also be selected into an off-screen BGPic using
      SelectBGPic(); also note that video layers only work with #VIDDRV_HOLLYWOOD as the video driver (but this is
      the default)
    - Fix: DisplayAnimFrame() and PlayAnim() (the latter only affected when layers were disabled) didn't respect the
      scaling settings of the anim if that anim had been loaded with "FromDisk" set to TRUE and its size had been
      changed through ScaleAnim() instead of through the standard draw commands 
    - New: @VIDEO and OpenVideo() accept an additional table argument named "Driver" now which allows you to specify
      the video driver to use on a per-call basis; previously it was impossible to enforce this because the
      ForceVideoDriver() command could not be called at preprocessor level [VOID; please use the new "Loader" tag
      instead]
    - Fix [MacOS/Win32]: OpenVideo() no longer uses temporary files when driver is #VIDDRV_HOLLYWOOD and Hollywood's
      chunk loader is used; should speed up loading videos compiled into executables significantly
    - Change: Hollywood will automatically compile an applet now if EXETYPE isn't specified and the specified output
      filename ends in *.hwa
    - Fix: InsertLayer() ignored the position argument when used with #ANIM and always inserted the anim layer as
      the last layer on the stack (topmost)
    - Fix: Unnecessary double refresh on internal layer regeneration under certain circumstances
    - Fix: StopVideo() could also be called on a non-playing video which resulted in a massive crash
    - Fix: Position inconsistency due to rounding inaccuracies between ShowLayer() and internal layer regeneration
      after a major change, e.g. after changing the contents of a brush layer
    - Fix: EndSelect() didn't check if one of the SelectXXX() commands had been called earlier which could lead to
      a corrupted environment when you called EndSelect() without calling SelectXXX() before; the corrupted environment
      was then prone to random crashes
    - Fix: FreeDisplay() didn't complain when trying to free a display that had a video attached which resulted in a
      crash
    - Fix: Minor visual artefact when using #WALLPAPERLEFT, #WALLPAPERTOP, #ROLLLEFT, or #ROLLTOP with HideLayerFX(),
      RemoveLayerFX(), or UndoFX() in asynchronous mode
    - Fix: #SUN, #STAR, and #CLOCKWIPE didn't work correctly with HideLayerFX(), RemoveLayerFX(), and UndoFX() when
      used in asynchronous mode

    Version 5.3     (05-Jul-13)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - Fix [Amiga]: Installer didn't work with paths that had spaces in them; astonishing that it took
      over 10 years for somebody to notice this bug (reported by Richard Lake)
    - Fix [OS3/WarpOS]: Transparent areas of display weren't displayed correctly when the display was
      opened manually using OpenDisplay() and the initial display didn't contain any transparent areas
      (reported by Nick Sommer)
    - New: Version string is now always compiled into the main program so it should always be accessible;
      this also fixes the issue that the version string specified in @APPVERSION wasn't visible when
      compiling with COMPRESS enabled
    - Fix [OS4]: Version string was not compiled into the main program and thus could not be accessed by
      C:Version; this made it impossible to use Hollywood-compiled programs with AmiUpdate (reported by
      Daniel Hutchinson)
    - Fix [OS3]: The version string specified in @APPVERSION wasn't stored in compiled executables in a
      way that could be detected by Workbench 3.x's the C:Version command
    - Fix: Hollywood often compiled corrupted executables when COMPRESS was used together with executables
      for platforms AmigaOS3, AmigaOS3 FPU, and WarpOS (reported by Nick Sommer)
    - New [SDK]: DOSBase exports hwos_TranslateFileName() now; this function can be used to convert an
      encoded filename of Hollywood's chunk reader to a valid filename with a read range defined by offset
      and length
    - Change [Amiga]: File I/O is done through a custom buffered mechanism now because the buffered I/O
      functions of dos.library are still as unoptimized as on OS3 even on modern systems like OS4 and AROS;
      the custom buffered ones should result in a major speed increase on larger files (reported by Lazar
      Zoltan)
    - New: LoadBrush(), LoadBGPic(), @BRUSH and @BGPIC now support the new tags "ScaleWidth", "ScaleHeight",
      and "SmoothScale"; these tags allow you to scale an image already at loading time; this can produce
      a significant speed-up if you only want to load a thumbnail from a huge image for example; but the
      image driver has to support scaled loading; otherwise there won't be any significant speed-up against
      loading the brush and then scaling it; currently, none of Hollywood's inbuilt image loader supports
      load-time scaling, but plugins might make use of this functionality (requested by Lazar Zoltan) 
    - Fix: ScaleBrush() didn't work correctly when used more than once on vector brushes
    - Fix [Win32]: IsKeyDown() and WaitKeyDown() didn't work correctly with non-ASCII characters (reported
      by Martin Schaffrinski)
    - Change: When used on Protracker modules to skip to a certain song position, PlaySubsong() can now also
      be used when the Protracker module is not playing
    - New: #ATTRNUMSUBSONGS and #ATTRCURSUBSONG can be used to query the number of subsongs in a music file
      and the currently playing subsong
    - New: PlaySubsong() can now play subsongs of music files if this is supported by the music format driver;
      PlaySubsong() is actually an old Hollywood 1.0 command, so it uses a slightly different syntax: the
      second argument specifies the music identifier to play; if it is omitted, PlaySubsong() will use the
      currently playing music; all table arguments supported by PlayMusic() are also supported by PlaySubsong()
    - New [SDK]: Sound plugins support several subsongs in a single music file now; useful for implementing
      plugins for ancient tracker formats
    - Change [Amiga]: Hidden displays can now have an arbitrary size; this makes it possible to embed displays
      which are larger than the current screen in scrollgroups with MUI Royale (reported by Matthias Rustler)
    - New [GUI]: Default viewer and editor are configurable now in a new preferences menu
    - New [GUI]: "Edit" button opens the current project in a text editor now; to access the project properties,
      you have to use the "Edit..." item in the menu now (requested by Lazar Zoltan)
    - New: Added "Deinterlace" tag to LoadAnim() and @ANIM which allows you to specify the deinterlace mode
      Hollywood should use on interlaced anims (ANIM16i and ANIM32i); default deinterlacing combines two
      half-frames into one full frame whereas double line deinterlacing doubles all lines in a half-frame
      to get a full frame
    - Fix [Win32]: "OnMusicEnd" events could get lost under certain conditions
    - New: Added "SkipLoopFrames" tag to LoadAnim() and @ANIM; if it is set to TRUE, Hollywood will assume
      that loop frames are present in the IFF ANIM and will skip them; note that Hollywood doesn't do any
      checks if the anim really has loop frames because that would be very expensive (Hollywood would have
      to decode the whole anim); thus you should only use this tag if you know that the anim's last two
      frames are loop frames
    - New: Hollywood supports the following new IFF ANIM compression modes: ANIM7, ANIM8, ANIM16, and ANIM32;
      support for ANIM32 makes it possible to run the Twisted Minds wild demo from Aminet using Malibu now
      (reported by Tony Aksnes)
    - Change: AnimPlayer, VideoPlayer, and HollyAmp examples now query for additional file types made available
      by plugins and add them to the file requester mask
    - New: The table returned by GetPlugins() now has a "FileTypes" subtable that contains information about the
      file types made available by the individual plugins; useful for adapting the mask field of your file
      requester or for offering the user a choice of output save formats based on available plugins
    - New [SDK]: Added hw_RegisterFileType() function which can be used to expose some information about the
      file types that this plugin can load
    - New [SDK]: Plugins capable of saving images/anims/sounds can now expose multiple save formats by setting
      the HWSAVEXXXCAPS_MORE flag in the RegisterXXXSaver() plugin function; Hollywood will call the Register()
      function until the MORE bit is cleared
    - New: System library now exports the constants #PLUGINCAPS_CONVERT, #PLUGINCAPS_LIBRARY... so that you can
      check the type of the plugin returned in the "Capabilities" field of the plugin table returned by GetPlugins()
    - New: Added GetPlugins() function which returns information about all available plugins; this is the same
      as the "Plugins" table returned by GetVersion()  
    - Fix: PlayAnim() no longer blocks the whole application when used on anims with long frame delays
    - Fix [Linux]: On some Linux systems Hollywood didn't find the correct *.so to load (reported by Achim Kern)
    - New [Win32]: SetClipboard() and GetClipboard() also support copy and paste of images with mask or alpha
      channel now if clipboard type is #CLIPBOARD_IMAGE
    - New [Android]: Added support for hardware accelerated scaling when autoscale mode is used; this brings a
      great speed boost to all scripts that use autoscaling; hardware scaling is used by default now for the
      autoscale engine; some devices may have problems with it (especially older Android versions when scaling
      odd resolutions that are not divisible by 4); if you experience problems use the new NOHARDWARESCALE
      command/@DISPLAY option to disable hardware acceleration on autoscale; the NOHARDWARESCALE option is also
      accessible from the Android starter menu
    - New [Android]: Sound can be disabled in starter menu now
    - Change [Android]: Faster refresh for double buffers that only require a partial screen redraw
    - Fix [Android/MacOS]: Potential freeze in the internal sleep timer handler
    - Change: Updated Snowflakes, AsyncFX, BallsDemo, Fireworks, Infinity, Welcome, Aquarium, Animation techniques
      (Layers and Sprites), Circles, and WobbleText examples to use the new BeginRefresh() and EndRefresh()
      commands; leads to a much better performance on Android and when autoscaling is enabled!
    - New: Added BeginRefresh() and EndRefresh() commands; these commands can be used to speed up drawing
      significantly on systems that have lots of overhead when drawing small graphics; Hollywood will cache all
      drawing operations that happen between BeginRefresh() and EndRefresh() and draw them in a single run
      when EndRefresh() is called; on the desktop versions of Hollywood these commands only do something if
      Hollywood is in autoscale mode; on the Android version, however, all drawing commands are collected and
      drawn in a single run which speeds up drawing significantly; BeginRefresh() and EndRefresh() were already
      present in beta versions of Hollywood 2.0 but removed in the final builds because it was deemed unnecessary
      but now with the arrival of the Android backend of Hollywood the commands are really useful 
    - Fix [Win32]: When resizing a borderless window it's no longer possible to resize it to 0/0 (Windows supports
      windows that have a width and height of 0 but Hollywood can't handle this)
    - Fix [Win32]: CreatePort() didn't check whether the specified port name was already in use
    - Change: CreatePort() also works with hidden displays now (requested by Paul Bloedel)
    - Fix [Android]: Crash when hiding the virtual keyboard on Android 4.1 and up; this is not really a fix but a
      workaround for an issue either in Android itself or in the glue code for NativeActivity; more is not known
      at this time because Android authors refuse to comment on the issue (reported by Paul Bloedel)
    - Fix: DownloadFile() crashed when using very long URLs (reported by Richard Lake)
    - New [Android]: Errors are now displayed in a system requester instead of a custom error screen
    - New [Android]: Android player uses a native GUI now which should be much more intuitive to use than the
      pixel-based one which was difficult to use especially on high resolution devices (requested by Michael
      Jurisch and Achim Kern)
    - New [MacOS]: When compiling executables for Mac OS X, ICON256x256 and ICON512x512 are now supported if you
      have a JPEG2000 plugin installed
    - New [Android]: You can now force your script to use a fixed orientation by setting the "Orientation" tag
      in the @DISPLAY preprocessor command; the orientation can be changed later by using the SetDisplayAttributes()
      command; to unlock the orientation again pass #ORIENTATION_NONE in "Orientation" to SetDisplayAttributes()
      (requested by Paul Bloedel)
    - New [Android]: Added "OnTouch" event handler which allows you to get detailed information about touch events
      including support for multi touch events; useful for implementing gestures in Hollywood (requested by Michael
      Jurisch)
    - Fix [Android]: Touchscreen handler that maps touch events to mouse events always triggered "OnMouseUp" right
      after the first "OnMouseDown" (reported by Lazar Zoltan and Paul Bloedel)
    - Fix: Memory leak when loading anims using the @SPRITE keyword
    - New [SDK/WarpOS]: LuaBase and all missings stubs are exposed correctly now; this allows you to write plugins
      of type HWPLUG_CAPS_LIBRARY for WarpOS too; keep in mind though that all calls to LuaBase functions require
      a context switch so use them carefully
    - Fix [SDK/WarpOS]: CRTBase.realloc() didn't work when used on a memory block allocated using CRTBase.malloc()
    - New [Linux]: GetSystemInfo() also supported on Linux now; it currently returns the following two items in a
      table: UserName, UserHome
    - Fix [AROS]: Hollywood checks for enough stack space now before starting; prevents random crashes with
      recursive functions like FloodFill() (reported by Matthias Rustler)
    - Change [Win32]: GetSystemInfo() returns path to the user's home directory in "UserHome" and name of the
      current user in "UserName" now
    - New [MacOS]: GetSystemInfo() also supports Mac OS X now and returns the following values in a table: AppData,
      ProgramFiles, UserHome, UserName, MyDocuments (requested by Richard Lake)
    - Change [MacOS]: for cross-platform consistency SystemRequest(), ListRequest(), and StringRequest() are now
      centered on the screen instead of the currently active display (reported by Richard Lake)
    - New [AROS]: 32-bit mouse pointers are now supported on AROS too (thanks to Matthias Rustler for letting
      me know that AROS finally supports this)
    - New [Amiga]: When in iconified mode, Hollywood's app icon can now be snapshot using the Workbench menu
      (requested by Niels Schapke)
    - Fix [Amiga]: "OnDropFiles" event handler never triggered when dropping files on Hollywood's app icon; why
      did nobody notice this earlier? has been present since v4.5
    - Change [OS4/MOS/Android]: Removed some unnecessary FreeType2 components which makes the executable a bit
      smaller
    - Fix [Android]: Hollywood is now also working on devices which fail to load apps that do not contain any
      Java code (reported by Tom C.)
    - Fix [SDK]: hw_PostSatelliteEvent() didn't inject mouse coordinates into the event handler for mouse button
      events (reported by Matthias Rustler)
    - Fix: When setting "ScaleMode" to #SCALEMODE_NONE using SetDisplayAttributes() and a doublebuffer that is
      only refreshed partly every frame was active, there were some refreshing problems 
    - New [Android]: Hollywood allows you to toggle scaling options (autoscale and layerscale) on the fly now by
      pressing the menu button (pre-Android 3.0 devices) or the respective button in the system navigation bar;
      to prevent Hollywood from showing the options menu, use the new HIDEOPTIONSMENU argument; you can also
      use this argument from the @DISPLAY preprocessor command and together with SetDisplayAttributes()
    - New [Android]: SetDisplayAttributes() is now also supported on Android
    - New [Android]: Execute() and Run() can now also start other Android apps; you have to pass the package name
      of the app to these functions because the actual app name is often localized and thus different in each
      country; synchronous execution is not yet supported; thus, there is currently no difference between Run()
      and Execute()
    - New [SDK]: Plugins can now create brushes (vector and raster brushes are possible) and it is also possible to
      define custom object types that are dynamically chained into Hollywood's object system; you can use all of
      the object library functions with them as well as track them via the resource monitor
    - Fix [Android]: InitPlugin() function gets passed the correct path to the *.hwp file now
    - New [SDK]: Plugin interface exposes some new functions of the FreeType2 library and also most common libz and
      libjpeg functions are exposed now
    - Fix [Doc]: PolarDistortBrush() had the "rmin" and "rmax" parameters swapped (reported by Matthias Rustler)
    - Fix [Android]: Virtual keyboard now handles non-ASCII keys correctly (if they are part of the ISO-8859-1 codeset
      which is Hollywood's internal charset)
    - New [Android]: The Hollywood Player can now act as a viewer for *.hwa files too; just set Hollywood as the
      default viewer for *.hwa files and it will automatically be launched when you click on a *.hwa file; NB: when
      the applet is located in "/sdcard/Hollywood", the applet's initial current directory will be changed to
      "/sdcard/Hollywood/<appletname>" (same as when applet is launched through the Hollywood Player UI); if the
      applet is located somewhere else, the applet's initial current directory will be the applet directory itself
    - New [Android]: Added ShowToast() function which can be used to pop up an Android toast with a short message;
      optionally you can change the position of the toast and you can specify the toast duration (long or short)
    - New [Android]: Added support for SetClipboard(), GetClipboard(), PeekClipboard(), and ClearClipboard(); only
      #CLIPBOARD_TEXT is currently supported; the "ClipboardChange" event handler is also currently unsupported
      (requested by Paul Bloedel)
    - New [Android]: Android version of Hollywood now supports the following requester functions: SystemRequest(),
      FileRequest(), PathRequest(), StringRequest(), ListRequest() and ColorRequest(); FontRequest() is not supported
      because Hollywood currently doesn't support Android's native font interface
    - Fix: DefineVirtualFile() didn't work with files linked with the LINKFILES argument (reported by Fabio Falcucci)
    - Fix: GetLayerStyle() didn't set the "Type" field (reported by Paul Bloedel)
    - Fix [OS4]: Bug in the hardware transformation code could lead to wrong results when rotating a hardware
      brush (reported by Lazar Zoltan)
    - New [Android]: #ATTRDENSITY, #ATTRXDPI, and #ATTRYDPI allow you to find out more about the actual physical
      size of the device's screen; unfortunately, many devices return spurious values here so it's probably
      not of much use (requested by Fabio Falcucci)
    - New [Win32]: Implemented a new attribute named "HideFromTaskbar" which can be used with @DISPLAY,
      CreateDisplay() or SetDisplayAttributes() to hide the display from the taskbar; useful if you already have
      a tray icon for your app and don't need the taskbar button (requested by Niels Schapke)
    - Fix: SetDisplayAttributes() often accidentally modified the fill style of the current BGPic (reported by
      Paul Bloedel)
    - Change: Layer border now respects the "XFlip", "YFlip", "Pixelate", "WaterRipple", and "Swirl" filters; this
      change might lead to a different visual appearance if your script depends on the old behaviour and is thus
      considered an API change; it was necessary, however, to keep the consistency because the layer shadow already
      respected these settings so it doesn't make any sense for layer border to ignore them because it looked wrong
      then
    - Change [Amiga]: If WinUAE is detected, Hollywood's video player will use a larger audio buffer now to prevent
      audio glitches that seem to happen even on very fast systems because Windows can't handle very small buffer sizes
    - Fix [Amiga]: Workbench's current directory wasn't restored when Hollywood was started as a default tool; this
      led to a crash on AROS (reported by Matthias Rustler)
    - Fix: Major bug in SendData() when trying to send large amounts of data in a single call; SendData() could get
      stuck completely (reported by Paul Bloedel)
    - Fix: GetLayerAtPos() didn't respect layerscale mode (reported by Fabio Falcucci)
    - New [Amiga]: GrabDesktop() accepts an optional table argument named "PubScreen" now which can be used to grab
      any screen to a brush; the specified pubscreen does not have to be the frontmost one (requested by Richard Lake)
    - New [Amiga]: GetPubScreens() returns an additional table now which contains information about screen resolution
      and depth (requested by Richard Lake)
    - New [Win32]: Added SOFTTIMER argument which uses a low resolution software timer instead of the high resolution
      hardware timer which sometimes leaps on older hardware with Windows XP; this option can also be accessed through
      the "SoftTimer" tag in @OPTIONS (requested by Torgeir Vee)
    - Fix [Doc]: CloseServer() and "OnDisconnect" were missing some essential information (reported by Paul Bloedel)

    Version 5.2     (12-Nov-12)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - New [Android]: OpenURL() is now supported (requested by Christoph Poelzl)
    - New [Android]: Execute()/Run() can now be used to view data files like pdf or image files using their default
      viewers (requested by Torgeir Vee)
    - Fix [Linux]: Crash when StopSample() gets called at exactly the same time when sample playback gets
      finished (reported by Fabio Falcucci)
    - Fix [Linux/Android]: Potential deadlock when using high resolution interval functions (reported by
      Fabio Falcucci)
    - Fix [Amiga]: GetEnv() didn't work with global variables (reported by Niels Schapke)
    - Fix: Val() didn't work correctly with floating point numbers that started with the decimal point, i.e. ".5"
      for 0.5 (reported by Lazar Zoltan)
    - New [Win32]: GetShortcutPath() can be used to get the destination path from a *.lnk file; the second return
      value contains the description for the link if there is any (requested by Nick Sommer)
    - New: GetFileAttributes() works with linked files now as well; additionally, the return table contains a new
      element named "Virtual" now which is set to TRUE if the file that was passed to GetFileAttributes() is a
      virtual file
    - New: DownloadFile() accepts a new tag named "UserAgent" now which allows you to specify a custom user agent
      name that DownloadFile() should send to the server (requested by Niels Schapke)
    - Fix [Win32]: IsVideo() no longer returns TRUE for static JPEG and BMP pictures (reported by Juan Carlos)
    - Fix [Linux]: Potential memory trash in startup code on newer Linuxes
    - New [IDE]: Font for the console window is user-configurable now; useful in case you want to use a monospace
      font for the debug output here (requested by Fabio Falcucci)
    - Fix [Non-Amiga]: Fix in the IFF24 loader for very small images (reported by Lazar Zoltan)
    - New [Win32]: SetTrayIcon() allows you to add a Hollywood brush as an icon to the Windows system tray; you can
      listen to mouse clicks on it using the "TrayIcon" event handler (requested by Paul Bloedel and Niels Schapke)
    - New: SetDisplayAttributes() also supports all of the backfilling attributes now like "Color", "FillStyle",
      "TextureBrush", "GradientStartColor", etc. (requested by Fabio Falcucci)
    - Fix [Doc]: Images referenced by the AmigaGuide documentation were not included in the archive
    - Fix: Rnd() no longer throws a division-by-zero error when used with 0 (reported by Fabio Falcucci)
    - Fix: SetVideoSize() didn't work correctly with #KEEPASPRAT (reported by Paul Bloedel)
    - Fix: OpenResourceMonitor() didn't work correctly if SetFontStyle(#ANTIALIAS) had been called previously
      (reported by Nick Sommer)
    - Fix [Win32]: Memory access fault when trying to load an unsupported sound file
    - New: GetVersion()'s return table contains a new field named "CPU" now which contains information about
      the CPU architecture Hollywood is currently running on (requested by Fabio Falcucci)
    - New: HaveObject() allows you to check whether a certain object is available
    - New [SDK]: GfxBase exposes hw_GetARGBBrush() and hw_FreeARGBBrush() now; useful if you do not want to deal
      with all the different pixel formats supported by Hollywood and separate transparency channels in 1-bit
      monochrome or 8-bit masks
    - Fix [Amiga]: Crash when trying to play a sound after a video has been played (reported by Thomas Blatt)
    - Change: WaitEvent() also works now if current display is closed
    - New [SDK]: hw_MasterControl() recognizes the following new tags: HWMCP_GETAPPTITLE, HWMCP_GETAPPAUTHOR,
      HWMCP_GETAPPCOPYRIGHT, HWMCP_GETAPPVERSION, HWMCP_GETAPPDESCRIPTION
    - New [SDK]: SysBase exposes the following new vectors: hw_RegisterCallback(), hw_RegisterPluginEventHandler(),
      hw_PostEvent(), hw_PostSatelliteEvent()
    - New [SDK]: Introducing support for display satellites using the vectors hw_AttachDisplaySatellite(),
      hw_DetachDisplaySatellite(), hw_RefreshDisplaySatellite(), and hw_ChangeRootDisplaySize(); can be used
      for quite some interesting purposes
    - Fix: Bug in the event handler which could cause a crash (in theory at least; multiple drag'n'drop
      events would have to occur in a very short time... highly unlikely that this ever happens)
    - Fix: Refresh error when displaying a BGPic that has layers attached using DisplayTransitionFX()
      (reported by Paul Bloedel)
    - New: RaiseOnError() can be used to install a user function that will be called whenever a Hollywood
      function throws an error; the function will receive four arguments: the error code, a string
      describing the error, the name of the last command, and the current line number (requested by Fabio
      Falcucci)
    - New [SDK]: LuaBase exposes lua_checkstack() now; required by the sqlite3.hwp plugin
    - New [Amiga]: Added ShowScreen() command which allows you to switch to the specified public screen
    - New [Amiga]: Added support for opening displays on individual public screens; you can define the public
      screen on which a display should open by using the "PubScreen" tag in @DISPLAY/CreateDisplay() or
      SetDisplayAttributes(); please note that the screens must use a compatible pixel format, i.e. it is
      not possible to have one display on a 16-bit screen and another display on a 32-bit screen; all screens
      that your script uses must use the same pixel format (to circumvent this limitation you can use the
      slower wpa mode by specifying USEWPA); the resolution of the screens can be different though; you
      can use the new #ATTRPUBSCREEN attribute to query the name of the public screen the specified display
      is currently on (requested by Niels Schapke)
    - New [Amiga]: GetPubScreens() returns a table containing the names of all available public screens
    - Fix [Amiga]: When closing the public screen Hollywood is currently running on while all Hollywood
      displays are hidden, Hollywood crashed when you tried to reopen hidden displays
    - Change [Amiga]: SetWBIcon() accepts the special constant #AMIGAICON_NONE now which forces Hollywood
      to skip adding an app icon to your Workbench when it is hidden
    - New [Amiga]: Added CXKEY argument/tooltype which allows you to define a hotkey for your commodity; when
      that hotkey is pressed, you will get "Hotkey" event (requested by Niels Schapke)
    - New: BreakEventHandler() allows you to break out of the current event handler cycle; this is a lowlevel
      function and only here for certain rare situations; you normally do not need this function (requested
      by Lazar Zoltan)
    - New: Collision() now supports hardware brushes but the collision detection will never be pixel exact
      because that would involve reading from video memory which is very slow and locks the mouse pointer;
      use software copies of your hardware brushes for pixel exact collision detection (reported by Simone
      Monsignori)
    - Change: When making a copy of a hardware brush using CopyBrush(), it is no longer mandatory to set
      the optional table argument "Hardware" to TRUE; CopyBrush() will do this automatically now for you
      (requested by Lazar Zoltan)

    Version 5.1     (12-Jul-12)

    - ***NB***: V5.1 was only released for Android on Google Play; there was no desktop release of version 5.1!
    - New [Android]: Android 2.x's menu button is now mapped to the HELP key; that is probably of not too much
      use because the menu button is gone starting with Android 3.0
    - Fix [Win32/Linux/MacOS]: OpenCatalog() didn't look in the script's directory if that was different from
      the directory of Hollywood
    - New [Android]: GetSystemInfo() returns three table elements for getting information about system paths:
      "ExternalStorage" contains the absolute path to the device's external storage directory, "InternalStorage"
      contains the absolute path to the device's internal storage directory, and "SDCard" contains the path
      to the SDCard
    - New [Android]: Added KEEPSCREENON argument and respective @DISPLAY option; if set to TRUE, Hollywood will
      tell Android to never turn off the screen to save battery
    - Fix: Very slow drawing when showing a transition effect behind a sprite with autoscaling enabled
    - New [Android]: "HideWindow" and "ShowWindow" events are now triggered when the user moves Hollywood into
      the background
    - New [Android]: Added user interface for the Hollywood Player which allows you to browse through your
      applets, configure some common settings and run your applets; you must copy your applets to a directory
      named "Hollywood" on your SD card; plugins go to "Hollywood/_Plugins" on the SD card; the Hollywood
      Player will create these directories automatically upon startup if they are not there already; the work
      directory for applets will be "Hollywood/<applet name>", e.g. if your applet is named "Cool Game", then
      the local directory for this applet will be "Hollywood/Cool Game" on the SD card
    - Fix [Win32]: Line() didn't respect videos attached to the current display
    - Fix: Potential memory leaks when using SetObjectData() with types #INTERVAL and #FUNCTION
    - Fix: IsPicture(), IsSample(), IsMusic(), IsAnim(), IsVideo(), and Exists() didn't work with files linked
      to the applet/executable using the LINKFILES argument (reported by Janne Peräaho)
    - Fix [Linux/MacOS]: Run() didn't work with the redirection operator '>' (reported by Fabio Falcucci)
    - Change: Run() and Execute() accept an optional argument now which allows you to disable the automatic
      key state reset that Hollywood does after Run() and Execute(); useful if you run programs without a
      GUI (requested by Fabio Falcucci)
    - Fix [Linux/MacOS]: Run() crashed when used with non-existent files and it also didn't search in the
      PATH environment for the specified executable (reported by Fabio Falcucci)
    - Change: RotateBrush(), RotateLayer(), RotateTextObject() and the "Rotate" tag of the standard draw tags
      and of SetLayerStyle() now use a floating point value instead of an integer value; this allows a greater
      precision for rotation values (requested by Lazar Zoltan)
    - Fix: "ScaleWidth" and "ScaleHeight" in CreateDisplay() and SetDisplayAttributes() did not accept percent
      values (reported by Davide Palombo)
    - New: GetObjects() allows you to query Hollywood's object manager for all objects of the type specified
      in argument 1 (e.g. #BRUSH); it will then return a table containing the identifiers of all loaded objects
      of that type and the object count in the second return value (requested by Fabio Falcucci)
    - New: GetVersion() returns a "Plugins" table now as well that contains information about all plugins that
      are currently available
    - Fix [Amiga]: ListRequest() always appeared on Workbench and didn't respect either PUBSCREEN argument or
      any screen mode changes (reported by Michael Jurisch)
    - Fix: DownloadFile() didn't work with servers that used some padding space in transfer mode replies (reported
      by Richard Lake)
    - Fix: Several fixes and improvements in Hollywood's platform independent video player
    - Fix: Crash when calling SeekVideo() on a video that had finished playing (reported by Simone Monsignori)
    - New: ForceVideoDriver() can be used to force the video library to use a certain video driver; currently defined
      are #VIDDRV_OS and #VIDDRV_HOLLYWOOD; you can query the driver used by a certain video object using the new
      #ATTRDRIVER attribute with GetAttribute()
    - New: Implemented platform independent video renderer on Win32, Mac OS, Linux, iOS, and Android; this makes it
      possible to play videos loaded by video plugins on these platforms, too; native video renderers (DirectShow on
      Windows and QuickTime on Mac OS X) are still supported but by default Hollywood will try to use the platform
      independent renderer first
    - New: SetVideoSize() accepts a new optional argument now that allows you to enable antialiased interpolation
      for scaling; this argument is only used when Hollywood's software renderer is used with no overlay
    - Change [OS3/OS4/WarpOS]: Internal IFF ANIM reader is now given priority over the anim datatype reader;
      this way OS3 executables will no longer fail on MorphOS which has no anim datatype
    - New: SaveAnim() and BeginAnimStream() can create animations with alpha channel now if you have a plugin
      that supports them; to enable alpha channel output, set the new "UseAlpha" tag to TRUE; note that the
      "UseAlpha" and "Transparency" tags are mutually exclusive
    - Fix: Crash when preloading an entire animation using an animation plugin with @ANIM and "FromDisk"
      set to FALSE
    - Change: LoadAnimFrame() accepts an optional table in the fourth argument now which can contain either
      the "Transparency" or "LoadAlpha" tags to specify whether the anim frame should use simple transparency
      or alpha channel; the old syntax that takes a transparent color in argument #4 is still supported for
      compatibility reasons
    - Fix: Hollywood didn't respect the alpha channel in animations loaded by plugins of type HWPLUG_CAPS_ANIM
      which made it impossible for the APNG.hwp plugin to feed anims with alpha channel to Hollywood
    - Fix: Memory leak and potential crash when setting "FromDisk" to TRUE when LoadAnim() or @ANIM were
      used with a single image as the source file
    - New: Added SKIPPLUGINS argument which can be used to specify plugins that shouldn't be loaded
      automatically on startup; you can specify multiple plugins by separating them using the '|'
      character; if no plugins should be loaded automatically upon startup, specify the '*' wildcard in
      this argument; you can load plugins manually then using the @REQUIRE preprocessor command (requested
      by Davide Palombo)
    - Fix: DownloadFile() works correctly now with servers that don't set the Content-length tag (reported
      by Niels Schapke)
    - Fix: DownloadFile() didn't work with Aminet (reported by Richard Lake)
    - Fix: Lockup when using a wave length smaller than 1 with WaterRippleBrush() (reported by Simone Monsignori)
    - Fix: When using CreateSprite() with source type #SPRITE and source sprites that use auto ID selection
      in arguments 4 or higher, the function failed with an error (reported by Simone Monsignori)
    - Fix: Memory access fault inside RemoveLayerFX() (reported by Tom C. and Lazar Zoltan)
    - Fix: Crash when trying to crop a brush at load time with LoadBrush() (reported by Brian Slominski)
    - Fix [Win32]: Crash when loading music or sample files linked to an applet or executable (reported by
      Brian Slominski and Ehrenfried Waidner)
    - New: #ATTRZPOS can now be queried for type #LAYER with GetAttribute() (requested by Fabio Falcucci)
    - Fix: GetLayerStyle() didn't set the "Z" tag (reported by Fabio Falcucci)
    - Fix: WhileMouseOn(), a Hollywood 1.x compatibility function, blocked the event handler which led
      to some problems with scripts that still use the V1 API and Malibu
    - Fix: Copy protection didn't recognize 4.5, 4.6 and 4.7 CD-ROMS correctly (reported by Richard Lake)

    Version 5.0     (19-Feb-12)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer files for doing
      new translations
    - Change: Updated the Hollywood GUI (Amiga) and IDE (Windows)
    - Change [IDE]: IDE supports the new platform targets that have been introduced with Hollywood 5.0
      now (Linux PPC, OS3 FPU, and Win32 Console)
    - New: Added several new examples: BeastScroll (demonstrates hardware double buffering), 3DCube, FilterFX,
      VideoPlayer, VectorTest, VectorTest2, Synthesizer, Infinity, Animation Techniques (Hardware double buffer)
      as well as four new cracktros contributed by Mr. X of Barracuda: Cannon Fodder, Creatures, Pinball Dreams,
      Superfrog
    - New: Updated ImageLab example to show the new image effects added in Hollywood 5.0 (and there are many!)
    - New: Updated Gradients example to include support for radial and conical gradients that were introduced
      in Hollywood 5.0
    - Fix [MacOS]: Fixed memory leak in image loader 
    - New [OS4]: ScaleBrush(), RotateBrush(), and TransformBrush() as well as the Width/Height/Rotate/
      Transform/ScaleX/ScaleY use hardware acceleration now for hardware brushes; this is extremely faster
      than software scaling, especially when using antialiased interpolation; this is currently only supported
      on OS4 because MorphOS lacks the required APIs
    - Fix: AVI stream writer uses WORD chunk alignment now instead of DWORD alignment; I mistakenly thought
      that AVI chunks had to be DWORD aligned (like IFF)
    - New: Hollywood can now load AVI streams that are uncompressed or use MJPEG compression as anims; this is
      useful if you need to use true colour animations which aren't supported by the IFF ANIM and GIF ANIM
      formats; you can use AVI streams for that instead (requested by Christoph Poelzl)
    - Fix: Scale routines could malfunction with very small images (reported by Lazar Zoltan)
    - New: IsOnline() can be used to check if an Internet connection is available (requested by Fabio Falcucci) 
    - New: Added list of all error codes that Hollywood defines to the documentation and made their constants
      available to scripts, too; useful for specific error handling with GetLastError() and GetErrorName()
      (requested by Fabio Falcucci)
    - New: Documentation is now maintained using a proprietary meta format which allows me to export it into
      all kinds of end formats using my tool MetaDoc; thus, the Hollywood documentation is now available
      in the formats AmigaGuide, PDF, HTML, and CHM (compiled HTML)
    - New: A blast from the past: ClearScreen() is back! ClearScreen() is a function that was introduced
      with the very first Hollywood release in November 2002; it was then removed in version 1.5 but now
      it is finally back at your service!
    - Fix: Another wordwrapping bug in the text renderer that even trashed memory (reported by Paul Bloedel)
    - Change: Layer attributes can now also be queried when SelectXXX() is active using GetAttribute() and
      GetLayerStyle() (requested by Fabio Falcucci)
    - Fix: Wordwrapping bug in the text renderer that occurred only under rare circumstances (reported by
      Paul Bloedel)
    - New [OS4]: Added support for loading 16-bit samples through OS4's sound.datatype; this was not possible
      earlier because OS4's sound.datatype didn't have supported for 16-bit samples before OS4.1.2
      (reported by Gianluca Girelli)
    - New [OS4/MorphOS]: Added support for hardware accelerated brushes; to create a hardware brush, use
      the new "Hardware" tag in the optional table argument of LoadBrush() or @BRUSH; alternatively, you can
      also create a hardware brush from a normal brush by using the CopyBrush() command with the "Hardware"
      tag; you can use #ATTRHARDWARE to query if a brush is using hardware acceleration; currently, you cannot
      do anything else with hardware brushes than draw them in a hardware accelerated double buffer setup
      (see below); it's not possible to manipulate hardware accelerated brushes in any way; they can really
      just be used for hardware accelerated double buffer drawing; in the future there might be more support
      for hardware brushes, e.g. hardware accelerated scaling and transformation
    - New [OS4/MorphOS]: Added support for hardware accelerated double buffering; this finally allows you to
      do really fast 2D drawing with Hollywood; to enable hardware accelerated double buffering, pass TRUE
      in the new optional argument of BeginDoubleBuffer(); after that, draw to the double buffer using hardware
      accelerated brushes ONLY (other drawing functions can be a lot slower on a hardware accelerated double
      buffer, especially alpha channel drawing because this needs to read from video memory which is very
      slow); see above for information on hardware brushes
    - Change: Long strings [[...]] will now ignore any carriage return characters ('\r') inside the long string;
      only linefeed characters ('\n') will be included in the string; this change has been made to prevent that
      scripts behave differently when saved on Windows and on AmigaOS/Unix/Mac
    - New: Added GetObjectType() function which allows you to retrieve the type of an object that has been
      created using the auto id selector
    - New: Added functions for associating private data with Hollywood objects: You can use the SetObjectData(),
      GetObjectData(), ClearObjectData(), and CopyObjectData() functions for this; every Hollywood object
      can be associated with an infinite amount of private data that is stored inside the object using a
      special access key; read the documentation for more information
    - New: Added FileLines() command which returns a Generic For iterator function that allows you to easily
      iterate over all lines of a file
    - New: Added some more functions for dealing with tables: ForEach(), ForEachI(), and Concat()
    - New: Added @REQUIRE preprocessor command; this allows the script to check whether or not a certain
      plugin is available and abort if it is not; there are two optional arguments that can be used to
      specify a minimum version that is required; if the optional arguments are left out, any version is
      accepted
    - New: Added Assert() command which will fail when the specified condition is FALSE
    - New: Added ReadBrushPixel() and WriteBrushPixel() functions for fast brush pixel access; previously,
      you had to call SelectBrush() / SelectMask() / SelectAlphaChannel() before you were able to access
      the pixels of a brush; this often resulted in much overhead, especially when dealing with multiple
      brushes; using these two new functions you can read and write color and transparency channels in just
      a single call; this gives a good speed increase
    - New: The WaitEvent()/CheckEvent() return table now also contains the fields "Action" and "ID" so
      that you get a little more information about the callback just executed
    - New: Added EXPORTCOMMANDS, EXPORTCONSTANTS, and EXPORTPLUGINS console arguments; these can be used
      to export lists of available commands, constants, and plugins to files; this is not very useful
      for the end-user but it can be quite helpful for authors of IDEs that would like to add syntax
      highlighting for Hollywood commands etc.; prior to v5.0, the EXPORTCOMMANDS and EXPORTCONSTANTS
      arguments were available as PRIVATE1 and PRIVATE2; these are still supported for compatibility
      reasons
    - Fix [Amiga]: Hollywood compiled executables didn't work correctly when put into a directory that
      is part of the PATH environment and then started from there using no path specification at all
    - Change [Win32]: Changed the implementation of the timer/interval system because the old one could
      cause a deadlock under rare circumstances
    - Change [Win32]: Added new workaround for the buggy DirectSound notification system which could cause
      some audio glitches under certain circumstances and certain audio drivers
    - Fix [Linux]: Hollywood didn't detect optional components like GTK or ALSA on every system, e.g.
      on Linux Mint it didn't work which made Hollywood fall back to console mode for functions like
      SystemRequest() and FileRequest() (reported by Paul Bloedel)
    - New: Added GetSystemCountry() function which retrieves the current user's country setting
      (e.g. #COUNTRY_GERMANY)
    - Change [OS3]: The version string specified in @APPVERSION is now linked into the player code
      directly when compiling your script; this is required because OS3's C:Version command doesn't
      search debug hunks for versioning information (reported by Guido Mersmann)
    - Change [Amiga]: GUI supports the new platform targets that have been introduced with Hollywood 5.0
      now (Linux PPC, OS3 FPU, and Win32 Console)
    - Change [Amiga]: The GUI now allows you to compile for multiple platforms in a single run
    - Fix [OS4/OS3]: CreatePointer() memory access fault when used with images that use a width that is
      not a multiple of 16 (reported by Lazar Zoltan)
    - Fix: Documentation didn't mention that TextWidth() and TextExtent() support an optional parameter to
      specify the string's character encoding (reported by Paul Bloedel)
    - Fix: Union initialization bug that only showed up when compiling using the latest version of vbcc (which
      is only used for the WarpOS and 68881 builds of Hollywood)
    - New: Hypot() can be used to calculate the length of the hypotenuse of a right triangle
    - Change: New optional argument for Flip(); if you specify TRUE in the first argument, Flip() will not
      call VWait(); otherwise Flip() will automatically VWait() after each buffer flip; overriding this behaviour
      is useful if you need to update your double buffer more often than the vertical refresh rate (reported
      by Simone Monsignori)
    - New: #ATTRCANSEEK can be used for objects of type #MUSIC and #VIDEO to find out if seeking is supported
      by the file format that the object is in
    - New: GetVideoFrame() supports an optional argument now that can be used to change the base from
      absolute frame indices to a timestamp in milliseconds; retrieving frames from a timestamp source
      is much faster but there might be some gfx fragments if there's no key frame at the specified
      timestamp position
    - Fix [MorphOS]: Potential memory trash in CopyFile() caused by a wrong buffer size passed to function
      of MorphOS dos.library NameFromLock() which always clears the last byte even if the returned path
      fits perfectly in the passed buffer
    - New: The CopyFile() and DeleteFile() functions now accept an additional optional argument that specifies
      whether or not subdirectories should only be handled when they match the specified filter pattern;
      by default this is set to TRUE; if you set it to FALSE then subdirectories will always be scanned
      even if their name does not match the filter pattern; note that this argument is obviously only handled
      when you specify a filter pattern in CopyFile() or DeleteFile()
    - New: Introducing platform independent pattern matching; pattern support in MatchPattern(), CopyFile(),
      and DeleteFile() is no longer limited to the Amiga versions; it's also supported on all other platforms
      now; the downside is that this is an API break because Hollywood now uses a platform independent pattern
      matching system and no longer the one of AmigaDOS; the new pattern system supports the following wildcards:
      * (matches all characters), ? (matches just a single character), # (matches all numbers), [] (matches
      one or several characters or a range of characters if you use the hyphen, i.e. [a] matches only a,
      whereas [af] matches a and f and [a-f] matches a to f; you can also use the prefix '!' inside the
      brackets to negate the result, i.e. [!a] means every character except a); you can also combine multiple
      patterns by separating them using the ';' character
    - Change: If you want to copy/delete files selectively using a filter pattern, you now have to pass this
      pattern into an additional optional argument; it must no longer be passed in the source file/dir name
      directly! This solves the problem with errors when trying to copy/delete files that used characters
      that were also used in wildcards (like '?' or '[') (reported by Simone Monsignori)
    - Fix: FileSize() no longer exits with an error when passed an empty string
    - Fix: When moving a layer of type #LINE to a new position using ShowLayer() and then using SetLayerStyle()
      on it to change its color or thickness, the layer would be moved back to its original position
    - Fix: Moving a layer of type #LINE using SetLayerStyle() and the X,Y fields and changing its color or
      thickness at the same time didn't work (reported by Paul Bloedel)
    - Fix: GetLayerStyle() didn't set X1,Y1,X2,Y2 fields for layers of type #LINE (reported by Paul Bloedel)
    - Fix: Changing the "Z" position of a layer and modifying its contents by using SetLayerStyle() at the
      same time did not work under certain circumstances (reported by Paul Bloedel)
    - Fix: Changing the font size of a layer that used a font that was linked into the applet/executable
      using SetLayerStyle() didn't work (reported by Paul Bloedel)
    - Fix: Under certain circumstances the "Z" tag of SetLayerStyle() didn't work correctly (reported by
      Paul Bloedel)
    - Change: ContrastBrush() and the "Contrast" layer filter accept an additional argument now that specifies
      the repeat count for the contrast effect
    - Fix: GetIconProperties() could crash when used on an icon that had no tooltypes set (reported by Fingus)
    - New: SetLayerData() can be used to associate private user data with a layer; you can use an unlimited
      number of keys to store additional data in a layer; you can retrieve the data later by using the new
      GetLayerData() function [void; merged with GetObjectData() and SetObjectData()]
    - New: Added CreateMusic() command; this is a very powerful command that allows you to play audio data
      that is generated on-the-fly by a callback function that you have to install using the new
      "FillMusicBuffer" event handler with InstallEventHandler(); when WaitEvent() runs your callback you
      must feed new audio data by calling the FillMusicBuffer() function; this function must only be called
      from callbacks of type "FillMusicBuffer"; you can pass the PCM data directly to this function or you
      can simply specify a sample that should be used
    - New: Added functions for editing samples: MixSample() can be used to mix the audio data of multiple
      samples into a new sample; this command is powerful and offers fine-tuned control of the sample ranges
      that shall be mixed and does also automatically adapt differing frequencies, sample formats and channel
      layouts; InsertSample() can be used to insert, prepend, and append a sample into an existing sample;
      CopySample() can be used to make a copy of a sample; CreateSample() has been extended to support new
      sources ("File" and "Memory") now and it also accepts an additional parameter that can be used to
      specify the length of the sample in PCM frames; additionally, CreateSample() can create empty samples now
    - New: #ATTRNUMFRAMES can also be queried now for type #SAMPLE; it returns the number of PCM frames in the
      sample
    - New: Added backend for PPC-based Linux; useful for all people who run Linux besides MorphOS or OS4 on their
      AmigaNG platform; specify LINUXPPC in the EXETYPE argument to compile for PPC-based Linuxes
    - Fix: Arguments to COMPILE and the ICONXXX were not expanded to fully qualified paths which could lead to
      problems when compiling a script that resides in a different directory to which Hollywood changes while
      compiling
    - New [iOS/Android]: Added ShowKeyboard() and HideKeyboard() functions; these can be used to show/hide iOS/
      Android's inbuilt software keyboard; also added the #ATTRKEYBOARD attribute for querying whether the keyboard
      is currently visible; finally, you can listen to the new "ShowKeyboard" and "HideKeyboard" events to get
      notified when the keyboard is shown/hidden
    - Change [Amiga]: codesets.library (charsets.library on MorphOS) is no longer required for UTF-8 conversion
    - New: Added #ATTRORIENTATION for GetAttribute(); this allows you to query to current orientation of the
      handheld device; this is only supported for mobile systems like iOS and Android; on desktop systems you
      will always get #ORIENTATION_NONE
    - New: Added "OrientationChange" event handler that is triggered when the orientation of the handheld device
      changes; this event will only be triggered on mobile systems like iOS and Android
    - Fix: KEEPPROPORTIONS was broken since Hollywood 4.8
    - Fix: SMOOTHSCALE argument was not respected when the autoscale engine was used in double buffering mode
    - New: Added backend for Android by Google; this backend is not integrated into the cross-compiler yet
      because this is quite difficult because Android apps need to be code signed; also, sound is currently not
      supported on Android; for commercial customers I can now offer solutions to get your Hollywood project
      onto Android
    - New: Added backend for Apple's iOS (used on iPhone and iPad); due to restrictive policies, it's currently
      not possible for everybody to just compile their Hollywood scripts into iOS apps but for commercial
      customers I'm now able to offer solutions to get their Hollywood projects onto iOS devices; please contact
      me for more details
    - New: Added CreatePort() and SendMessage() functions; Hollywood scripts can communicate with each other
      using these functions; when a message is sent to a Hollywood script using SendMessage(), the script will
      get an "OnUserMessage" event which has the same format as the "OnARexx" message in the Amiga versions
    - Fix: Video recorder/BeginAnimStream() is now also able to handle unusual FPS settings like 13 or 47 etc.
      (reported by Xabier Payet and Torgeir Vee)
    - Fix: Bug in the platform independent font engine's metrics cache could cause TextExtent() and
      TextWidth() to return values that were slightly off (reported by Christoph Poelzl)
    - Fix: SetLayerStyle() could run out of stack space when called with more than 250 arguments; the
      stack limit for Hollywood functions has been doubled now to fix this (reported by Torgeir Vee)
      [VOID; increasing stack limit of the vm has lots of implications and instruction size limits
      maximum number of function arguments to 255; Designer should be adapted to split really large
      calls to SetLayerStyle() instead]
    - New: Finally added documentation of the IDE's functionality to the Hollywood manual
    - New [IDE]: Reworked online help engine; every Hollywood function appears in the table of
      contents now so that when you press F1, the table of contents will be unfolded to
      the appropriate location (requested by Michael Jurisch)
    - New [IDE]: "Create executable" dialog now allows you to specify a name for the executable(s)
      to be compiled (requested by Michael Jurisch)
    - New [IDE]: Added tooltips to the tab control; they will display the location of the
      script opened in the specific tab control (requested by Michael Jurisch)
    - New [IDE]: Double-clicking on a tab will close it now (requested by Michael Jurisch)
    - New [IDE]: Available plugins are now also shown in the "System information" dialog
    - New [IDE]: Plugins can now be viewed in the new plugins dialog in the "?" menu
    - New: GetKerningPair() can be used to retrieve the kerning value for two characters when drawn
      using the currently selected font
    - New: GetFileArgument() allows you to retrieve the file argument passed to a compiled Hollywood
      script; useful if you want to develop an application that should be used as a default tool
      for a certain file type etc.; this function will only work correctly with compiled scripts;
      for normal scripts, it will always return "" (empty string) (requested by Alfkil Wennermark)
    - Fix [Win32/MacOS/Linux]: Interlaced PNG images didn't work correctly (reported by Murmel)
    - Fix: SetLayerStyle() and RemoveLayer() didn't fail when used on layers that didn't exist
    - New: Added optional mode argument for #SELMODE_COMBO; if you set this to 1, alpha pixels and
      the corresponding color pixels of the source image will only be copied to the destination image
      if the pixel alpha value is not 0 (i.e. invisible!); by default (i.e. mode 0) all pixels are copied
      even if they're invisible; the mode argument is accepted by SelectBrush(), SelectBGPic(),
      SelectAnim(), and SelectLayer() but is only handled when you use #SELMODE_COMBO
    - New: #ATTRLAYERSON can be used to query if layers are enabled in the current display (requested
      by Fabio Falcucci)
    - New: The return table of IsPicture() contains a new element named "Vector" now; this will
      be set to TRUE if the picture is in a vector graphics format like SVG
    - New [Amiga]: The GUI is now separated into two sections: Example projects and user projects;
      in the user projects section, you can add your own projects and launch them easily from
      there (requested by Achim Kern)
    - Change [WarpOS]: PNG alpha channel loader, PNG saver, video recorder and dithering code
      run now on the PPC context; gives great speedup!
    - Fix: When using the inbuilt fonts like #SANS, #SERIF etc. in the @FONT preprocessor command
      the linker tried to search these fonts on hard-disk which of course doesn't work; now
      they are ignored (reported by pecaN)
    - Fix: LdExp() and FrExp() weren't documented although they have been present since
      Hollywood 2.0
    - New: Added Eval() function which evaluates a string that contains an expression, e.g.
      "1+5*7"; all numerical operators that Hollywood recognizes are supported including
      operator priorities and parentheses; additionally, there's an optional table argument
      which allows you to define variables that should be taken into account when evaluating
      the expression
    - New: AddFontPath() can be used to add alternative search paths for bitmap fonts and true
      type fonts (when using #FONTENGINE_INBUILT); this is primarily useful on non-Amiga
      platforms because on Amiga, you could simply extend the FONTS: assign to various other
      paths to achieve the same effect
    - New: Added DebugPrompt() function which allows you to read a string from the console; you
      have to pass a string that shall be displayed as the prompt
    - New [Win32]: Added a console version of Hollywood; Windows distinguishes between console
      and Windows programs; now Hollywood can also compile console based applications and you
      can use Hollywood from the console directly (for advanced users); pass WIN32CONSOLE in
      the EXETYPE argument to compile a console based Windows program
    - New: Added string functions FormatStr(), PatternFindStr(), and PatternReplaceStr()
    - New: Added documentation for the Generic For statement and the IPairs() and Pairs() function;
      all of this has been in Hollywood since version 2.0 but it wasn't documented
    - New: Finally froze Hollywood's plugin API; it is now fully cross platform and can be used to
      extend several parts of Hollywood (currently available are: system library, automatic
      script conversion, vector graphics engine, video loader, anim loader, image loader, sound
      loader, image saver, anim saver, sound saver); a public SDK is coming soon!; NB: Hollywood
      5.0 is no longer compatible with old plugins; that is why the old plugin location Hollywood:Plugins
      is no longer scanned; new plugins must be put into LIBS:Hollywood now!
    - Change [OS4]: Turned off shine-through transparency for windows opened by Hollywood because
      this clashed with the concept of 'shielding windows' that are used in fake fullscreen mode,
      etc.
    - New [Amiga]: ActivateDisplay() accepts an optional argument now which allows you to activate
      a display without moving it to the front automatically; this is only possible on AmigaOS
      because on all other systems the active window is always moved to the front (requested by
      Fabio Falcucci)
    - Change [MorphOS]: MorphOS versions no longer use codesets.library for Unicode conversions
      but charsets.library which is part of the operating system
    - New [MorphOS]: Added hardware accelerated video playback supported through cgxvideo.library;
      this is much faster than the software renderer
    - New: Added OnVideoEnd event that is triggered when PlayVideo() has finished playing
    - New: Added GetVideoFrame() command which allows you to convert the specified video frame into
      a brush; note that this command can get very very slow if you use it in a random order;
      the only recommended way to use this command is to extract frames sequentially out of a
      video, i.e. frame 1, then 2, then 3, then 4, etc.; if you do it backwards, i.e. frame 4,
      3, 2, 1, etc. it will get very very slow because Hollywood has to search through the
      whole video for every new frame; so remember to use GetVideoFrame() only for frame extraction
      in forward direction
    - New: Added support for type #VIDEO in GetAttribute(); the following attributes are
      currently recognized: #ATTRCOUNT, #ATTRWIDTH, #ATTRHEIGHT, #ATTRDURATION, #ATTRPOSITION,
      #ATTRFORMAT, #ATTRNUMFRAMES; note that #ATTRNUMFRAMES is often only an approximation because
      the real number of frames can only be determined by searching through the whole video clip which
      would take way too long; #ATTRNUMFRAMES can also return 0 if the codec doesn't support an
      approximation
    - New: Added support for video seeking; you can use the SeekVideo() command to seek the video
      to a specific time position
    - New: Finally added support for playing videos in your Hollywood scripts; many people requested
      this so here it is; on Windows playback is done through DirectShow so that you can play all
      videos that you have the appropriate codecs for; the same applies to Mac OS X except that on
      Mac OS the QuickTime framework is used; on Amiga systems only CDXL playback is implemented
      because most other popular video formats would require payment of licensing fees; however,
      the video interface on Amiga is publicly documented so you could create plugins which can play
      other formats, too; note that due to performance issues, videos are currently not integrated into
      the layers system; instead, they will always appear on top of everything else; it's also
      currently not possible to play videos on top of a transparent background picture; the new video
      library consists of the following commands: OpenVideo(), CloseVideo(), PlayVideo(), StopVideo(),
      PauseVideo(), ResumeVideo(), IsVideo(), SetVideoPosition(), SetVideoSize(), SetVideoVolume(),
      IsVideoPlaying(), and the @VIDEO preprocessor command
    - Fix [MacOS]: Colorspace issues with PNG images; Mac OS X automatically applied gamma correction
      to PNGs which could lead to color discrepancies when displaying PNGs together with other graphics/
      images that didn't receive any gamma correction
    - Change [MacOS]: libz.dylib is no longer required as we're linking statically against libz now
    - New: Added functions for advanced brush transformation: PerspectiveDistortBrush(),
      ArcDistortBrush(), PolarDistortBrush(), and BarrelDistortBrush(); these functions can be
      used to achieve stunning new brush effects; the perspective distortion is especially useful
      for texture mapping
    - New: Added CreateGradientBrush() and CreateTexturedBrush(); they do basically the same as
      CreateGradientBGPic() and CreateTexturedBGPic() except that the width/height argument is
      mandatory
    - Change: Double buffer mode uses optimized refresh now; when you call Flip(), only the
      areas actually modified will be refreshed; only scripts which do not refresh the whole
      screen with every double buffer flip will profit from this; so if you do a Cls() for
      each frame, then there won't be any gain
    - Fix: DebugPrint() did not escape printf() specification fields correctly which could lead
      to a crash when using certain fields
    - New: Added alternative catalog format; when the catalog specified in the call to OpenCatalog()
      is not in IFF CTLG format, Hollywood will open it as a simple text file with one catalog
      string per line; if you want to include newline characters inside a catalog string, you
      have to write them as \n; backslashes must be written as \\
    - New: OpenCatalog(), GetCatalogString(), and CloseCatalog() also work under Windows, Mac OS X,
      and Linux now; note that on non-Amiga systems, Hollywood searches for catalogs only in the
      current directory, namely in "Catalogs/<system-language>/*.catalog"
    - New: Added GetSystemLanguage() function which retrieves the current system language 
    - New: Added ColorRequest() function which allows you to choose a color; NB: on AmigaOS this
      requires reqtools.library to be installed
    - New: Added ListRequest() function that can be used to pop up a requester that allows the
      user to select an entry from a list view gadget; this is very useful when there are lots of
      different entries to choose from
    - New: FontRequest() pops up a requester that allows you to choose a font from all available
      system fonts; additionally, you can select the font style, size, and foreground color
      (depending on the functionality of the host OS's font dialog)
    - New: GetSampleData() can be used to access the raw data of a sample; you can modify this and
      then convert it back into a sample using CreateSample()
    - New: Added function SaveSample() which allows you to export samples from Hollywood to your
      hard-drive in the RIFF WAVE file format
    - New: BrushToRGBArray() and RGBArrayToBrush() functions can be used to convert a brush into
      a table containing <width>*<height> (A)RGB values and vice versa; NB: if you work with large
      tables don't forget to set them to Nil when you no longer need them so the garbage collector
      can free the memory occupied by them
    - New: MD5Str() and CRC32Str() can be used to compute the MD5/CRC32 checksum from a string
      source; note that Hollywood strings can contain binary data so you can also pass strings
      containing a null character to these functions
    - New: MD5() can be used to compute the MD5 checksum of a file; the 128bit checksum is returned
      as a string containing 16 hex digits
    - New: CreateSample() also accepts sample data of type #STEREO8, #MONO16, and #STEREO16
      now; all samples must be signed values (-128/127 for 8bit and -32768/32767 for 16bit);
      if you use stereo samples, the data must be passed as interleaved samples (i.e. left,
      right, left, right, ...)
    - New: When drawing rectangles with round corners using Box() or AddBoxToPath(), you can now
      fine-tune the rounding factor of each individual corner by using one of the new CornerA/
      CornerB/CornerC/CornerD tags; if you use these tags instead of "RoundLevel", you can create
      rectangles that have only one or two round corners; these new tags are also accepted by
      SetLayerStyle() now
    - New: SetDrawTagsDefault() allows you to change the default values of the standard
      drawing tags; this is useful, for example, if you always want to use an anchor of
      0.5/0.5 instead of 0/0 or if you want new layers to be always inserted at backmost
      position instead of frontmost etc.
    - Change: When drawing text or vector graphics using an ARGB front color with layers on, the
      alpha component is automatically translated to the layer's transparency setting (if it
      is different than 0); i.e. drawing a rectangle using $80FF0000 as the color is equal to
      drawing with $FF0000 and setting the layer's transparency to $80 (128)
    - New: The standard draw tags "Transparency", "Tint", and "Filters" are now also supported
      when layers are off
    - New: The optional table argument of TextOut() & CreateTextObject() now accepts a "Color"
      tag which can be used to specify the drawing color; this is a convenience shortcut to
      avoid having to call SetFontColor() all the time
    - Change: Adapted CreateTextObject() syntax to accept an optional table argument now (just
      as TextOut()); the old calling convention is still supported
    - New: Added two convenience functions for swapping layer z positions: LayerToFront() and
      LayerToBack()
    - New: SetLineWidth() can be used to change the stroke thickness when fill style is #FILLNONE;
      this function is just a shortcut for SetFillStyle(#FILLNONE, <stroke-thickness>)
    - New: The transition effects library accepts a new tag called "NoBorderFade" now; when this
      is set to TRUE, the border is no longer gradually faded in/out when showing/hiding a layer
      with an effect
    - New: CreateBorderBrush() can be used to create a border for a specified brush
    - Change: Conceptual cleanup in the layer system, this was a pile of work: prior to v5 the
      shadow and border (edge) were always hard-rendered parts of the layer; with the introduction
      of the SetLayerShadow() and SetLayerBorder() commands, however, this concept is now obsolete;
      border and shadow are now dynamically attached to/removed from a layer without the need to remake
      the whole layer; this is a much better concept than the previous one; consequently, using
      the style #SHADOW in SetFormStyle()/SetFontStyle() has now the same effect as using
      SetLayerShadow() and using style #EDGE has the same effect as using SetLayerBorder(); of
      course, this only applies when layers are on; in case the layers system is off, the old
      behaviour is still supported; with this new border/shadow concept, Hollywood will behave
      slightly different in some cases; most prominently is a different behaviour in the transition
      effect library: displaying layers with shadow will be much slower now because the shadow
      is updated with each frame but this makes the effect look much better! Secondly, the border
      is faded in or out gradually when a bordered layer is displayed/hidden using a transition
      effect
    - New: SetLayerBorder() can be used to add a border of the specified size and color to the
      specified layer; you can also do this via SetLayerStyle() using the new "Border", "BorderSize",
      and "BorderColor" tags; these tags are also recognized now by the standard drawing tags;
    - Fix: Crash when transforming a layer while it is displayed asynchronously using a transition
      effect _AND_ the following condition is true: the transformation doesn't change the layer
      size (i.e. rotation by 180 degree) _AND_ the layer doesn't have a mask or an alpha channel
      (e.g. an opaque layer displayed asynchronously using #REVEALLEFT and is rotated by 180
      degrees during the effect display)
    - New: ForcePathUse() command can be used to redirect all calls to the old graphics
      library to the new vector graphics library; the following calls are redirected:
      Box(), Ellipse(), Circle(), Polygon(), Arc(); note that the new vector graphics library
      requires a vectorgraphics plugin and it is also slower than the old library but the
      advantage is that curves look perfect with the new library because it is not polyline based
      as is the old library
    - New: SetLayerStyle() accepts a "ClearFilters" tag now which can be used to clear all layer
      filters at once; this is a shortcut for setting all filters manually to disabled; alternatively,
      you can also call SetLayerFilter() with 0 as the argument to clear all layer filters
    - New: SetLayerStyle(), GetLayerStyle() and the standard draw tags also support the new
      "Filters" table argument now; refer to SetLayerFilter() for a full description
    - New: SetLayerFilter() allows you to install one or more filters for each layer; this is
      a powerful feature which can be used for great effects; if you are using multiple filters
      on a single layer, you can specify a priority between 0 and 255 for each filter; Hollywood
      will then apply the filters in the specified order; the following filters are currently
      recognized: "tint", "xflip", "yflip", "grayscale", "invert", "blur", "emboss", "edge",
      "sharpen", "solarize", "gamma", "contrast", "modulate", "sepiatone", "charcoal", "swirl",
      "pixelate", "monochrome", "waterripple", "oilpaint"; NB: the SetLayerTint() command simply
      calls SetLayerFilter() now and initializes the tint filter
    - Fix: When removing/hiding a layer using HideLayerFX() or RemoveLayerFX() in asynchronous
      mode and changing the size of the display, redraw problems occurred
    - New: The standard draw tags as well as the SetLayerStyle() command now also support the
      tags Shadow, ShadowColor, ShadowRadius, ShadowDir, ShadowSize for the ultimate shadow
      control; Set/GetLayerStyle() note: For text and primitive graphics layers, the ShadowColor,
      ShadowDir, and ShadowSize tags overlap with old tags; this is ok because these two types
      of shadows are mutually exclusive; either use the old-style shadows or the new ones but
      not both!
    - New: Added SetLayerShadow() command which can be used to add a nice drop shadow to your
      layer; you can configure the color, opacity, direction, blur radius, and size of the
      shadow; please note that drop shadows are quite CPU intensive-- especially displaying
      transition effects on layers that use a shadow can get quite slow because in most cases
      the shadow has to be recalculated for every frame
    - New: CreateShadowBrush() can be used to make a nice alphachannel drop shadow from a
      brush source
    - New: ChangeBrushTransparency() can be used to convert a brush with monochrome transparency
      (= mask) to alpha transparency and vice versa; useful when using the "Transparency" tag
      on LoadBrush() because that will always create a masked brush
    - Fix: Crash when resizing the display to a larger size while a transition effect in synchronous
      real-layer mode was running
    - Fix: The #STAR, #WATERX, and #STRUDEL transition effects left last frame on the screen when
      using real time layers and reverse mode
    - New: Added separate version of Hollywood for 68k systems with an FPU; if you are using a
      68020 or 68030, you need a 68881/68882 coprocessor; if you are on 68040 or 060, then
      the FPU is already inbuilt in your CPU; this version gives a great speedup because doing
      floating point operations in pure 68k code is slow as hell (even on emulators like WinUAE or
      MorphOS Trance); using the FPU is really lightyears faster; to compile executables with FPU
      code pass the new CLASSIC881 option in the EXETYPE argument
    - New: Added lots of new image processing commands: EmbossBrush(), EdgeBrush(), SharpenBrush(),
      SolarizeBrush(), GammaBrush(), ContrastBrush(), ModulateBrush(), SepiaToneBrush(),
      CharcoalBrush(), SwirlBrush(), PixelateBrush(), BrushToMonochrome(), WaterRippleBrush(),
      OilPaintBrush()
    - New: BlurBrush() function can be used to apply a Gaussian blur filter to the specified
      brush; you can optionally specify a blur radius (floating point) that shall be used
      (the larger the radius you pass, the longer the computation will take)
    - Change [WarpOS]: The 68k parts of the WarpOS hybrid binary now have inlined code for the
      68881/2 FPU which is supported by every 68040/68060 CPU; makes floating point operations
      much faster
    - Change [OS3]: pngalpha.library is no longer required by the 68k version of Hollywood;
      this also makes loading alpha channel PNG images faster because this is directly done
      by Hollywood now
    - New: Added support for poly colored gradients; previously, Hollywood could only create
      gradients between two colors; now you can specify a whole array of colors including color
      stops (between 0 and 1); this allows the creation of impressing custom gradients!
    - New: Added support for #RADIAL and #CONICAL gradients; optional table arguments "CenterX/Y",
      "Border" (radial only) and "Balance" (conical only) can be used to control the appearance;
      the gradients are supported by SetFillStyle(), CreateGradientBGPic(), LoadBGPic()/@BGPIC,
      CreateDisplay()/@DISPLAY, SetLayerStyle(); note that a gradient angle is only supported
      for types #LINEAR and #CONICAL; radial gradients will ignore the specified angle
    - New: RepeatStr() repeats a string the specified number of times and returns the resulting
      string
    - New: GetDisplayModes() returns a table containing all modes supported by the current
      monitor; depth is not returned because this is clearly a thing of the past... every
      system should run true colour nowadays
    - New: When starting Hollywood from a console, a list with all supported arguments including
      a brief description is now presented to the user
    - New: Added functions for dealing with environment variables: GetEnv(), SetEnv(), and
      UnsetEnv()
    - Change [MacOS]: Backslashes in path specifications are now automatically converted to
      slashes; makes it easier when porting scripts from Windows to Mac OS X
    - New: FileToString() and StringToFile() can be used to read a whole file into a string
      and write a string to a new file; these are just some useful shortcuts for the
      OpenFile()/ReadString()/WriteString()/CloseFile() commands
    - New: DefineVirtualFileFromString() allows you to create a virtual file from a string source;
      this is very useful in connection with the network functions; for instance, you could
      directly load a brush from an Internet source without having to save it to a temporary
      location first; be warned though that you should always set strings that you no longer
      need to NIL to make sure the garbage collector can kill them; otherwise you can run into
      serious memory problems especially with larger strings; with strings used as virtual files,
      you also need to call the UndefineVirtualStringFile() function when you're done with the
      virtual string file
    - New: Added new event handlers for dealing with the new network functionality: OnConnect,
      OnDisconnect, OnReceiveData, OnReceiveUDPData
    - New: Added support for the UDP network protocol; UDP is a connectionless network protocol
      that is especially useful for exchanging data very quickly; the downside is that it
      doesn't guarantee that packets arrive error free so you should only use it when
      transferring non-critical information; new commands are CreateUDPObject(), CloseUDPObject(),
      SendUDPData(), ReceiveUDPData()
    - New: Added highlevel functions for easily downloading and uploading files using the
      HTTP or FTP protocols; DownloadFile() can be used to download a file from a HTTP or
      FTP server very easily and UploadFile() can be used to upload a file to a FTP server
      very easily; download can be either directly to a file or to a Hollywood string; upload
      source can also be either a file or a Hollywood string; both functions support user
      callbacks so you can display some status information while downloading/uploading data
    - New: Added TCP connection and server functions; using these functions you can finally
      connect to the Internet (or local networks) and easily exchange data with other computers;
      Hollywood supports two types of TCP objects: TCP clients and TCP servers; using the
      server API you could even create a small webserver with Hollywood :) It's a very powerful
      API, use it wisely! The following commands have been added: OpenConnection(), CloseConnection(),
      CreateServer(), CloseServer(), SendData(), ReceiveData(), GetConnectionIP(), GetConnectionPort(),
      GetHostName(), GetLocalIP(), GetLocalPort(), ToIP(), ToHostName(), SetNetworkTimeout()
    - New: CreateGradientBGPic() and CreateTexturedBGPic() now create vector BGPics; when
      resized, the gradient/texture image won't be scaled but generated anew; creates much
      better looking BGPics!
    - New: CreateDisplay() and @DISPLAY also accept the new background setting tags now;
      this allows you to create a display with gradient or texture background without having
      to create a BGPic first
    - New: Added optional arguments for LoadBGPic() and @BGPIC which can be used to control
      the background of transparent images; this is needed because some images always have alpha
      channel transparency but in most cases you don't want the alpha channel to be used
      by the Hollywood display; by using the new optional argument you can define a background
      on which the image shall be rendered; possible tags are: "FillStyle", "FillColor",
      "GradientStartColor", "GradientEndColor", "GradientAngle", "TextureBrush", "TextureX",
      "TextureY"; usage is very similar to SetFillStyle()
    - New: LoadBGPic() and @BGPIC also support vector images now; very useful for scripts that
      can run in different resolutions; by using a vector image as a BGPic you can be sure that
      the BGPic looks crisp in every resolution
    - New: RasterizeBrush() can be used to convert a vector brush into a rasterized brush
      (which is the standard brush type in Hollywood)
    - New: #ATTRTYPE can now be queried for #BRUSH and #BGPIC; returns either #IMAGETYPE_RASTER
      or #IMAGETYPE_VECTOR
    - New: Introducing support for vector images! Yes, you got that right! Hollywood is now able
      to load these cool vector images and you can transform them in true vector graphics
      fashion without any quality losses; this is especially useful in connection with the
      new layer scaling engine because if you use vector graphics now, your project will
      always look perfectly crisp no matter in what resolution it is currently running; to
      load a vector image into Hollywood, just use LoadBrush() or @BRUSH; you will get a special
      brush then: a vector brush! Vector brushes can be transformed without quality loss
      using ScaleBrush(), RotateBrush(), TransformBrush() etc.; note though that many of the
      image manipulating functions are not available for vector brushes; if you want to use
      these functions, you need to convert the vector brush to a raster brush first; you need
      an appropriate plugin for loading vector images
    - New: SetLayerStyle() can modify layers of type #VECTORPATH now; the following tags
      are currently supported: ID, Color, LineJoin, LineCap, FillRule, DashOffset, Dashes,
      as well as the standard form and fill style settings
    - New: #ATTRCOUNT can be queried for #VECTORPATH; returns the number of vector paths
      currently present
    - New: Introducing support for vector graphics: Hollywood finally has a fully featured
      vector drawing library including support for curves, different stroking and line join
      styles, different line cap styles and much more; the library uses a path-based drawing
      model which means that in order to draw a vector shape, you first have to create a path
      and then add vertices to it; a path can also have an infinite number of sub-paths; this
      is a very powerful library and allows you to do very cool things; the drawing style of
      the vector graphics library can be configured with SetFillStyle() and SetFormStyle() in
      just the same way than the old graphics library; please note that the vector graphics
      library requires a vectorgraphics plugin to be present; the following commands have
      been added: MoveTo(), LineTo(), CurveTo(), RelMoveTo(), RelLineTo(), RelCurveTo(),
      DrawPath(), StartPath(), StartSubPath(), ClosePath(), AddArcToPath(), AddCircleToPath(),
      AddEllipseToPath(), AddBoxToPath(), SetLineJoin(), SetLineCap(), SetDash(), SetFillRule(),
      FreePath(), ClearPath(), IsPathEmpty(), GetCurrentPoint(), GetPathExtents(), CopyPath(),
      AppendPath(), AddTextToPath(), TranslatePath(), NormalizePath()

    Version 4.8     (21-Apr-11)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI
    - Fix [MorphOS]: Alpha transparent displays were broken since v4.7
    - Fix [Win32]: ALT-GR+C caused Hollywood to behave as if CTRL-C was pressed (reported by Lazar
      Zoltan)
    - Fix: Box() didn't work correctly when #SELMODE_COMBO was used together with a color that
      contained an alpha transparency value (reported by Fabio Falcucci)
    - Fix: Removing the transformation from a text layer using the Rotate/ScaleX/Y/Width/Height tags
      in SetLayerStyle() didn't work when you changed one of the layer attributes (e.g. color) at
      the same time (reported by Paul Bloedel)
    - Fix [Amiga]: HideDisplay() didn't close the backfill and resource monitor windows when called
      in full screen mode (reported by Lazar Zoltan)
    - Fix: RotateTextObject() crashed because of a memory access fault (reported by Nick Sommer)
    - Fix: HIDEPOINTER argument didn't work in fake full screen mode (reported by Gero Birkenfeld)
    - Fix: Using CopyBGPic() on a textured BGPic generated a memory fault on program exit
      (reported by Paul Bloedel)
    - Fix: #ATTRMODE always returned 0 for type #DISPLAY (reported by Lazar Zoltan)
    - Fix: Exists() no longer exits with an error when passed an empty string (reported by
      Lazar Zoltan)
    - Fix [MacOS]: Potential stack trashing in the DOS handler due to weird behaviour of the
      realpath() POSIX function on Mac OS X (reported by Lazar Zoltan)
    - Fix [Amiga]: Some joystick issues on WinUAE; lowlevel.library on WinUAE mostly returns
      JP_TYPE_UNKNOWN which Hollywood wasn't prepared to handle (reported by Marko Seppänen)
    - Fix: Memory access fault in DisplayBGPic() when the previous BGPic was a special marked-
      for-deletion BGPic (rare case)
    - Fix [Amiga]: IsPicture() didn't return the correct dimensions for some JPEG pictures
      (reported by Fabio Falcucci and Simone Monsignori)
    - Fix: ReadLine() does no longer append a null character for empty lines
    - Fix [OS4]: Some problems with OS4's SystemTags() command (reported by Nick Clover)
    - Fix [Win32]: Some fixes in the string library when using strings with ASCII characters that
      have the highest bit set (signed/unsigned error)
    - Fix: User-defined constants were not exported correctly to Hollywood applets which had the
      effect that they weren't accessible when including a Hollywood applet using @INCLUDE or when
      using them inside a text formatting string like [color=#MYCOLOR]Hello[/color] (reported by
      Fabio Falcucci and nexus)
    - Fix: Log() didn't work correctly (reported by Paal Nygaard)
    - Fix: SelectLayer() didn't work correctly on layers with an anchor point different from 0/0
      (reported by Jali Heinonen)
    - Fix [AROS]: IFF 16SV samples didn't work correctly
    - Fix [MacOS]: Grayscale and CMYK images did not work correctly on Mac OS (reported by Paul Bloedel)
    - Fix: Upper/lower case converting did not always work correctly with the non-English characters
      in the ISO-8859-1 charset; this affected commands like LowerStr(), UpperStr(), but also
      FindStr() and ReplaceStr() when using case insensitive search mode (reported by Janne Peräaho)
    - Fix [MacOS]: Lines drawn by Line() were usually off by one on the y-axis when USEQUARTZ was
      active
    - Fix: Out of memory error when transforming a brush/bitmap layer using very small values for
      the scalex and scaley parts of the transformation matrix
    - Fix: Crash when using FITSCALE with a transparent display
    - Fix [Amiga]: GetClipboard() returns #CLIPBOARD_UNKNOWN now when encountering unknown
      data on the clipboard (previously it would raise an error) (reported by Paul Bloedel)
    - Fix: SetDisplayAttributes() was not able to change the window style to borderless and
      the dimensions to the desktop dimensions at the same time (reported by Simone Monsignori)
    - Fix: ReplaceStr() could crash when more than ~20 strings needed to be replaced
      (reported by Paul Bloedel)
    - Fix: Modifying the font size of a layer that uses a font loaded using the inbuilt font
      engine that was specified by using an absolute path to a *.ttf/*.otf file resulted
      in an error code (reported by Tom C.)
    - Fix: PlayMusic() times tag did not default to 1 but to 0 (i.e. infinite looping)
    - Fix: Under very special circumstances, SetLayerStyle() failed when modifying the font size
      of a text layer without specifying the font name (reported by Paul Bloedel)
    - Fix: Setting the "Link" tag to False in the preprocessor commands did not work correctly
      because Hollywood always used absolute paths since v4.5; the result was that the applet
      worked just fine on the system it was compiled on but not on any other system
    - New [Linux]: Added AUDIODEV argument which can be used to specify which ALSA audio device
      Hollywood should try to open for sound output
    - New [Linux]: Added XSERVER argument that allows you to specify the X server that Hollywood
      should try to connect to
    - New: Hollywood can now compile for i386 Linux systems, too! That was a pile of work!
      The Linux version of Hollywood has the same features as on all other platforms except
      that there is no MP3 support; great care has been undertaken to ensure that programs
      compiled by Hollywood work out of the box on all common Linux distributions; obligatory
      dependencies have been reduced to a minimum, the result being that the only mandatory
      dependency is libX11 and the standard glibc; both should really be present on every
      Linux system; of course, Hollywood supports additional components like several X11
      extensions, ALSA and GTK but this is all optional, it will only be used if it is there

    Version 4.71    (10-Jun-10)

    - Change: Added public demo version for Windows systems; no other changes

    Version 4.7     (21-Apr-10)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI
    - Change: Text example uses #SANS and platform independent font renderer now
    - New: SetLayerStyle() also accepts the "Encoding" tag for text layers now; allows you to
      switch text encodings on the fly
    - New: Added support for UTF-8 character encoding in the text output functions (TextOut(),
      Print(), CreateTextObject()); you can either use the new "Encoding" argument/table tag
      or change Hollywood's default encoding using SetDefaultEncoding(); by default, Hollywood
      uses ISO 8859-1 (= #ENCODING_ISO8859_1); there is a slight API break here because under
      OS4 Hollywood always used the system's current codeset instead of ISO 8859-1; this, however,
      affected portability because on all other systems Hollywood would use ISO 8859-1 so if your
      OS4 system was using a different charset, you would run into problems; but now that we
      have UTF-8 support these problems should be gone; just use UTF-8 if you need to use non
      ASCII characters and your script will be fully portable; NB: under AmigaOS, codesets.library
      is required for UTF-8 support
    - Fix: DeleteButton() could cause a crash in very rare circumstances when it was called by
      an event callback with the internal wait event loop currently iterating the button list
    - Change: DisableButton() and EnableButton() will reset button states
    - Change: ResetKeyStates() will now also reset all button states
    - Fix: Several fixes with buttons that listened to "OnMidMouseDown" and "OnMidMouseUp"
    - New: GetCommandLine() returns a third value now that specifies whether or not Hollywood
      was started from a console (requested by Simone Monsignori)
    - Fix [Amiga]: Hollywood refused to open displays partly outside the screen bounds (reported
      by Jesper Schultz-Pedersen and Paul Bloedel)
    - Fix: Events did not time out correctly under certain circumstances
    - Change [Win32/Mac]: Multiple joysticks are now also supported on Windows and Mac OS X
    - Fix [Amiga]: Possible memory trash when writing very long strings to the debug device
    - Change: The last argument of WriteString() can now also be omitted or set to 0 which means
      write the entire string to the file
    - New: Added GetLayerAtPos() command which returns the front-most layer at the specified
      position
    - Fix [AROS]: Alpha channel detection didn't work correctly
    - New: Added ModifyLayerFrames() command; this does exactly the same as ModifyAnimFrames()
      except that it works with anim layers instead of anims
    - Fix: ConvertToBrush() always returned the first frame of anim layer instead of the specified
      frame
    - New: GetRandomColor() returns a random color
    - New: Added CreateLayer() command which can be used to create an empty new layer for subsequent
      modification using SelectLayer(); CreateLayer() will either create a brush or an anim layer,
      depending on the number of frames you specify; you should always use CreateLayer() when you
      plan to modify the layer using SelectLayer() because using CreateLayer() instead of the
      standard layer creation commands will instantly prepare the layer for modification which the
      other commands don't do and thus SelectLayer() often needs to do some extra work before the
      layer is ready for modification (especially in case of anim layers, CreateLayer() is really
      to be preferred)
    - New: SelectMask() and SelectAlphaChannel() also support type #LAYER now
    - New: Added SelectLayer() command which allows you to draw directly to layers; if the layer
      is an anim layer, you need to specify the frame to draw to; please note that this command
      will convert all vector layers to raster layers of type #BRUSH; this will result in poor
      quality when transforming these layers because they are now pixel-based; thus, for the best
      effects SelectLayer() should only be used with pixel-based layers (requested by Lazar
      Zoltan)
    - Fix [Win32]: Several requesters did not appear correctly after opening an initially hidden
      display under Win32 (reported by Paul Bloedel)
    - Fix [MacOS]: IsPicture() alpha channel detection didn't work correctly with Snow Leopard
      (reported by Paul Bloedel)
    - Fix: VIDEOPOINTER argument didn't work at all (reported by Tom C.)
    - New: SetLayerStyle() can now also change the z-position of a layer; use the new "Z" tag
      for this
    - Fix: DisplayTextObject() didn't handle negative text underhangs correctly (reported by
      Robin Hueskes)
    - New: Added TranslateLayer() command; this allows you to move a layer around very easily
      using delta coordinates instead of absolute coordinates; very useful!; also supported by
      SetLayerStyle() using the "TranslateX/Y" tags
    - Fix: The "RightMargin" tag was not handled correctly for layers of type #TEXTOUT by
      SetLayerStyle() (reported by Tom C.)
    - Fix: IsMusicPlaying() didn't work correctly (reported by Fabio Falcucci)
    - Change [Amiga]: Executable protection flag is now set explicitly by the compiler because
      some file systems (e.g. JXFS) don't set it by default (reported by Jesper Schultz-Pedersen)
    - Fix [Amiga]: Graphical glitches when removing multiple layers at once using asynchronous
      crossfade effects (reported by Torgeir Vee)
    - Fix: TextOut() and Print() didn't respect sprite priorities correctly (reported by Lazar
      Zoltan)
    - New: Added three inbuilt TrueType fonts: #SANS, #SERIF, and #MONOSPACE; these are available
      on every system and will look exactly the same on every system thanks to the new freetype2
      backend
    - New [Win32]: Some new functionality for GetSystemInfo() (private; requested by Torgeir Vee)
    - New [Win32]: Added CreateShortcut() function which allows you to easily create these *.lnk
      files (requested by Torgeir Vee)
    - Fix: TextOut()/Print() in fast-draw mode did not substitute layers correctly (reported by
      Lazar Zoltan)
    - New: Added FITSCALE console argument that can be used to tell Hollywood to fit its window
      perfectly to the screen; only effective if AUTOSCALE or LAYERSCALE is used; if used together
      with KEEPPROPORTIONS, Hollywood will keep the proportions; it is also accessible using @DISPLAY
      or CreateDisplay() (requested by Torgeir Vee)
    - New: Added KEEPPROPORTIONS console argument that can be used to tell Hollywood to keep the
      proportions when the user is resizing the window; it is only effective when used together
      with AUTOSCALE or LAYERSCALE; it is also accessible via the @DISPLAY or CreateDisplay()
      commands (requested by Torgeir Vee)
    - Change [Amiga]: Backslashes are now converted into slashes and also special shortcuts like
      ".." and "." are handled correctly now; makes cross-platform script development much easier
    - Change [MacOS]: Backslashes in filenames are now automatically converted into slashes so that
      Windows scripts work hassle-free under Mac OS, too
    - Fix [Amiga]: Bug in display size verification could result in Hollywood refusing to open
      a display although it would fit perfectly on the screen (only in rare cases)
    - New: Added @APPICON preprocessor command which can be used to link icons into executables
      without having to use the console parameters
    - New: Added support for linking icons into executables generated by Hollywood; this is only
      possible for executables compiled for Windows and Mac OS X because AmigaOS keeps icons
      externally; use the new ICON16x16, ICON24x24, ICON32x32, ICON48x48, ICON128x128, ICON256x256,
      ICON512x512 arguments for it (requested by Torgeir Vee)
    - Fix [MacOS]: Execute() and Run() didn't handle parameters correctly (reported by Paul Bloedel)
    - New: When using #FONTENGINE_INBUILT, you may also specify a .TTF/.OTF file directly
      in SetFont(), OpenFont(), or @FONT
    - New: FreeGlyphCache() can be used to free the glyph cache of all fonts or a specific
      font; note that currently only the freetype2 backend supports glyph caching
    - New: Added support for glyph caching; this drastically improves text rendering performance
      and it is especially useful on AmigaOS3 because TrueType text is really slow on this
      platform; glyph caching is currently only supported by the freetype2 backend (use
      #FONTENGINE_INBUILT) and it is enabled by default; to disable it, specify FALSE in the
      "Cache" table argument
    - New: Introducing support for platform independent font rendering; this is done via
      a new font backend that is based on the freetype2 library; you can enable the platform
      independent font renderer by setting the "Engine" field of the optional table argument
      in SetFont(), OpenFont(), or @FONT to #FONTENGINE_INBUILT; if you use this engine, TrueType
      fonts will look exactly the same on every system (requested by Torgeir Vee and many
      others)
    - New: GetAvailableFonts() returns a table that contains information about all fonts
      available to Hollywood; it also contains information about the font type (bitmap or
      vector) and the available font sizes (only for bitmap fonts)
    - New: #ATTRRAWXPOS, #ATTRRAWYPOS, #ATTRRAWWIDTH, #ATTRRAWHEIGHT can be used to query the
      real position and dimension of a layer; note that these functions operate on a pretty
      lowlevel inside the layers system and should only be used if you know what you are doing
     (requested by Tom C.)
    - Change: TrimBrush() returns the number of columns/rows trimmed from the left/top of the
      brush; you can calculate the right/bottom area by comparing the brush dimensions before and
      after the trimming (requested by Alfkil Wennermark)

    Version 4.6    (08-Feb-10)

    - ***NB***: V4.6 was only released on Windows as a special introductory release to
      introduce the new Windows IDE of Hollywood; no Amiga version was released of version 4.6
    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI
    - New [Win32]: Added a fully featured IDE for the Windows version of Hollywood; Hollywood
      is now available separately for this platform!
    - Change: Several cosmetic changes to the Hollywood examples
    - New: Added TextureScroll example
    - Fix: InvertBrush() did not work for all pixel formats
    - Fix: IsAnim() returned TRUE also for GIF images (reported by Simone Monsignori)
    - New: SetLayerZPos() allows you to change the z position of a layer (requested by Tom
      C.)
    - Fix [Win32]: "SizeWindow" event was always sent twice
    - Fix [OS4]: Added another workaround for OS4 bug that reported "Out of memory!" when
      running the Snowflakes example
    - New: LayerExists() can be used to check if a specified layer exists
    - Fix: Table element functions and methods without arguments could not be called without
      specifying parentheses
    - Fix: Memory was freed twice in case of an error in TextOut() which led to a system
      crash on OS3 (reported by Tom C.)
    - New: CreateTexturedBGPic() also supports texture offsets now
    - New: #FILLTEXTURE supports two additional arguments now that allow you to specify the
      offset inside the brush where texturing should start; SetLayerStyle() and GetLayerStyle()
      also support this now through the "TextureX" and "TextureY" tags; can be used for nice
      scrolling effects on a textured layer
    - Fix: Some transition effects confused #SLOWSPEED with #FASTSPEED leading to #SLOWSPEED
      appear very fast and #FASTSPEED appear very slow
    - New: Font embedding also works with TTC (True Type collections) and DFONT (Mac data
      fork) flavored fonts now
    - Fix: When compiling an applet into an executable, embedded fonts in the applet weren't
      handled correctly
    - New: Added CountJoysticks() function; returns the number of joysticks currently
      available or 0 for no joysticks
    - New: Joystick support is back! Now supported on all platforms; Windows & Mac, however,
      currently only support a single joystick (requested by Lazar Zoltan)
    - Fix [Win32]: DDE applications (e.g. Microsoft Word) didn't work very well with Run()
      and Execute() (reported by Torgeir Vee)
    - New: CopyTable() can be used to make an independent copy of a table; metatables are
      not copied by this function (requested by Alfkil Wennermark)
    - Fix: Fixed illegal memory access when writing IFF ILBM pictures; could lead to crashes
      when saving a brush to clipboard (reported by Helmut Haake)
    - Fix [OS4]: Added workaround for a severe bug in OS4's BltMaskBitMapRastPort() which
      causes a complete system crash (reported by Simone Monsignori)
    - Fix [Amiga]: Fixed a bug in the clipboard handler (reported by Helmut Haake, Michael
      Jurisch)
    - Fix: Preloading color fonts did not work when Hollywood was in WPA mode
    - Fix: "Vertices" table in SetLayerStyle() did not work correctly when using a polygon
      that was not normalized together with the "X/Y" positioning tags
    - New: SetLayerStyle() accepts the new tags "X1,Y1,X2,Y2" now for use with layers of
      type #LINE only (requested by Carsten Siegner)
    - Fix: SetLayerAnchor() and "AnchorX/Y" in SetLayerStyle() didn't work correctly
     (reported by Carsten Siegner)
    - New: ResetKeyStates() allows you to manually clear the key & mouse button states;
      this is just here for emergency cases :-)
    - Fix: SystemRequest(), FileRequest() and PathRequest() did not reset the key states
      which could lead to stuck keys and mouse buttons (reported by Alfkil Wennermark)
    - New: TrimBrush() can be used to crop all transparent areas of a brush (requested by
      Alfkil Wennermark)
    - Change: SetWBIcon() falls back to default icon now if the specified icon does not
      exist (suggested by Simone Monsignori)
    - New: Added SCRIPTALIAS argument (currently private)
    - Fix: IsPicture() slowdown with certain JPEGs (reported by Simone Monsignori)
    - Fix: Some transition effects did not work when layers were used together with auto
      scaling
    - Fix [Win32]: Potential deadlock when using many different timers due to a bug in
      Windows XP and below
    - Fix: Crash when a window refresh occurred during SelectMask() or SelectAlphaChannel() was
      active, and a mask/alpha channel did not exist yet

    Version 4.5    (02-Jan-10)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI
    - Fix [OS3]: Embedded alpha channel images did not work in compiled applets/executables
    - Fix: When using in StringRequest() in #NUMERICAL mode, the maxchars parameter wasn't
      respected (reported by Simone Monsignori)
    - Fix [MacOS]: MovePointer() doesn't reset button down flags any more
    - Fix [MacOS]: QuickDraw bitmaps are no longer limited to 4093 pixels
    - Fix [Amiga]: Custom shaped clip regions didn't work when USEWPA was used
    - Fix [AROS]: "Cannot lock bitmap!" problem fixed (reported by Fabio Falcucci)
    - Fix: Finally fixed the long standing write protected problem that happened on
      WinUAE during the installation; all files are unprotected now during installation
    - New: Added several new examples: ClipboardDemo, DisplayStyle, DragNDrop, FXTool,
      MultiDisplays, MultiDragNSize, Snowflakes, WBApple
    - Change [Amiga]: "ActiveWindow" event is now sent when a display is opened with
      activation; "ShowWindow"/"HideWindow" are also sent when calling HideDisplay()/
      ShowDisplay() (requested by Fabio Falcucci)
    - New: Finally added documentation about metamethods, metatables, RawGet(), RawSet(),
      RawEqual(), and some object-oriented programming techniques to the manual
    - Fix [MacOS]: Loading 24-bit JPEGs didn't work under Snow Leopard (reported by Torgeir
      Vee)
    - Change [MacOS]: Hollywood is now always using ISO-8859-1 instead of MacRoman; this
      is required for cross-platform compatibility because executables compiled under
      AmigaOS will always use ISO-8859-1 encoding which would then look wrong under
      Mac OS because MacRoman was used there (reported by Torgeir Vee)
    - Fix: OpenCatalog()'s second argument was mandatory although the documentation said
      it would be optional (reported by Kai Stegemann)
    - Fix [AROS]: Saving PNGs is working now
    - Fix: CopyBGPic() will now copy scaled and unscaled versions of the specified
      BGPic (reported by Paul Bloedel)
    - New: ReadDirectory() accepts an optional argument now which allows you to turn off
      automated sorting; useful if you don't need the data sorted
    - Change: ReadDirectory() now uses the optimized sort algorithm; much faster now!
    - Change [OS4]: libpng is used directly now for saving PNGs; increases executable
      size by 80kb but makes saving much faster than using the 68k pngalpha.library
    - New: Extended CreateSprite(); when used with source type #SPRITE, you can specify
      as many sprites as you want; the graphics of the specified sprites will never be
      copied but only referenced; thus, you can easily create different animation sequences
      with very low memory footprint and very fast execution; a small API change: linked
      sprites can no longer be used as a source sprite because that would lead to possible
      endless loops (requested by Alfkil Wennermark)
    - Fix: CopySprite() was broken when used on linked sprites
    - Fix: FlipSprite() and ScaleSprite() can no longer be used on sprites that are
      referenced by other sprites (sprite links)
    - New: Collision() can also check collisions between boxes and sprites/layers/brushes
      (requested by Lazar Zoltan and Alfkil Wennermark)
    - New: SelectMask() and SelectAlphaChannel() also support #BGPIC now; exception: not
      possible for BGPics currently associated with a display
    - New: SelectBGPic() accepts an optional mode argument now which can be used to change
      the graphics of the BGPic directly (without adding layers); the new combo mode is
      also supported; both new modes are available also when layers are off; restrictions:
      you cannot use SelectBGPic() on a BGPic that is currently associated with a display
      if mode <> #SELMODE_LAYERS
    - Fix: FreeBGPic() and ScaleBGPic() did not check if the specified BGPic was currently
      the selected output device which could lead to crashes
    - New: Added support for querying the state of the middle mouse button; you can install
      an event handler on it ("OnMidMouseDown"/"OnMidMouseUp") or use the new IsMidMouse()/
      WaitMidMouse() functions; also, MakeButton() supports OnMidMouseDown/OnMidMouseUp now
      (requested by Lazar Zoltan)
    - Fix [OS4]: Opaque mouse pointers did not work correctly (reported by Eric Luczyszyn)
    - Fix: CMYK JPEG images are working now under Win32 (reported by Brian Hargrove)
    - New [Amiga]: Added SetWBIcon() function; you can use this function to change the icon
      that will be displayed when Hollywood is iconified on Workbench (requested by Paul Bloedel)
    - New [Amiga]: Added GetIconProperties() and SetIconProperties() functions; these two allow
      you to get and set various icon attributes including tooltypes; these two functions are
      only available in the Amiga version of Hollywood
    - Fix [MacOS]: PNGs using 16-bit per component didn't work under Mac OS; Hollywood now
      supports 48bit and 64bit PNGs under Mac OS X too (reported by Alfkil Wennermark)
    - Fix [MacOS]: RIFF WAVE samples in 16-bit format didn't work under Mac OS PPC, and 8-bit WAVE
      samples didn't work under Mac OS Intel (reported by Alfkil Wennermark)
    - Fix: #ROLLXXX and #WALLPAPERXXX didn't work in undo mode when used on a layer that had
      no transparency
    - Fix: #DISSOLVE didn't work in undo mode when real layers were off
    - Fix: #HFLOWXXX, #VFLOWXXX, #DISSOLVE, #PIXELZOOM1, #ROLLXXX, #WALLPAPERXXX forgot to draw
      the last frame when in undo mode (last frame = remove layer completely)
    - New: Guess who's back? CheckEvent() is back after an absense of over 15 revisions (it got
      removed in v2.5); it's back now because I need it in Designer... normal users should always
      use WaitEvent() though
    - New: SelectBrush() and SelectAnim() accept a new optional mode argument now that can be
      used to put Hollywood into a special combo select mode; combo select means that color and
      transparency channels are affected by any draw operations; previously, you had to choose
      between the two (color=SelectBrush(), transparency=SelectMask()/SelectAlphaChannel()); now you can
      do it all in one go; note that Hollywood will always draw in vanilla copy mode to the
      mask/alpha channel if the combo select mode is active; the settings of SetMaskMode() and
      SetAlphaIntensity() are ignored
    - New: #ATTRALPHAINTENSITY and #ATTRMASKMODE can be queried in GetAttribute() for #DISPLAY;
      note that both are global settings so you can pass 0 for display id
    - Change: When using #VANILLACOPY as alpha intensity, Hollywood didn't do anything at all
      when the source image didn't have an alpha channel; this is changed now; if the source
      image doesn't have an alpha channel, opaque intensity (= 255) is used now; this is an
      API break but I hope it doesn't cause any major problems
    - Fix: Alpha value was not respected in Plot() when SelectBrush() was active
    - New: CreateBrush() accepts an optional table argument now which allows you to specify
      whether or not the new brush shall have an alpha channel or mask; you can also specify
      if the transparency channel shall be cleared or opaque
    - Fix [Amiga]: Mono streams didn't work and crashed the system
    - New: #ATTRHASMASK and #ATTRHASALPHA also supported for anims now
    - New: PlayMusic()'s second argument can be a table now which supports the fields "Times"
      and "Volume"
    - New: IsMusicPlaying() checks whether a given music is currently playing; note that
      currently only one music may play at a time
    - New: PlaySample()'s argument table accepts "Times" and "Panning" fields now
    - New [Win32]: Added ReadRegistryKey() and WriteRegistryKey() functions; these functions
      allow you to work with the registry under Windows; naturally, both functions are not available
      in the Amiga and Mac OS versions of Hollywood
    - Fix [Win32/Mac OS]: Drawing images with alpha channel didn't work when a custom shaped
      clip region was active
    - New: Layer clip regions are now also respected by Collision() and for #LAYERBUTTON type;
      supporting clipped collisions was quite complex
    - New: Added "NoClipTransform" style tag to SetLayerStyle(); set this if you do not want
      the clip region to be transformed with the layer
    - Change: Fixed Welcome.hws and FormsDemo.hws to work with the new anchor point feature
    - Change: Adapted LayerStyle example to make use of the new features
    - New: SetLayerStyle() supports "AnchorX" & "AnchorY" now; useful if you want to change
      the anchor point and the layer's position in a single call; anchor points can be
      queried using GetLayerStyle()
    - New: Added SetLayerAnchor() function; allows you to change the anchor point of a
      layer
    - Fix: ScaleLayer() & RotateLayer() behaviour was inconsistent under Hollywood 4.0
      because ScaleLayer() applied the transformation using an anchor of 0/0 and RotateLayer()
      used an anchor of 0.5/0.5; note that this fix will break scripts that use RotateLayer();
      you need to move the anchor point of those layers to 0.5/0.5 to get the old behaviour
    - New: Added support for anchor points for all objects; this is very useful especially
      when transforming/scaling/rotating objects because all transform operations are
      relative to the anchor point; also, the position of an object is relative to the
      anchor point; you can define an object's anchor point by specifying the "AnchorX"
      and "AnchorY" tags in the table argument of an object display call; if not specified,
      the anchor point defaults to 0.0/0.0 which means the top left corner of the object
    - New: Added GetSystemInfo() - this call is currently private
    - Fix: Optional interpolate argument didn't work in ScaleLayer() and RotateLayer()
    - New: TransformLayer() can be used to apply any arbitrary 2D transformation to your
      layer; you can also access this feature using the new "Transform" table entry in
      SetLayerStyle() and in all functions that add layers (e.g. DisplayBrush() etc.);
      GetLayerStyle() will also return the layer's transformation matrix if present
    - Change: Width/Height no longer supported for TextOut() even when layers are on;
      use ScaleX/ScaleY instead
    - Fix: TextOut()'s transform table wasn't handled correctly when layers are turned off;
      it's working now but Width/Height are not supported; use ScaleX/ScaleY instead
    - New: ScaleX/ScaleY also supported by SetLayerStyle() & GetLayerStyle()
    - New: Transform table supports "ScaleX","ScaleY" fields now; very useful to work
      with relative scaling numbers
    - Fix: Layer scale engine didn't work correctly with rotated layers
    - Fix: Line() didn't work correctly with the layer scale engine
    - New: TransformBrush() allows you to apply affine transformation to a brush from a 2x2
      transformation matrix source
    - New: IsPicture() returns a second value now which is a table that contains information about
      the image size and whether or not there's an alpha channel; useful for quickly obtaining
      image info without loading the whole image
    - New: #ATTRMODE can be queried now for type #FILE
    - Fix [MacOS Intel]: Endian fixes in the IFF24 and color font loader
    - Change [MacOS]: When USEQUARTZ is active, composited windows are used now; Quartz is still
      slower than QuickDraw here but who knows what the future will bring
    - Fix [MacOS]: Several fixes in the Core Audio driver (reported by Janne Peräaho)
    - Fix [MacOS]: Intel version didn't work on Tiger (reported by Janne Peräaho)
    - New: Added "NoClose" tag to @DISPLAY, CreateDisplay(), and SetDisplayAttributes(); allows
      you to create windows with a border but without a close widget; you can query a display's
      close setting using #ATTRNOCLOSE
    - New: Added RESOURCEMONITOR argument that can be used to put up the resource monitor add
      start time
    - New: OpenResourceMonitor() and CloseResourceMonitor() functions can be used to open a
      debug window that shows constantly updated information about Hollywood's object cache;
      very useful to see if your script manages its objects efficiently (i.e. doesn't constantly
      add more objects such as layers)
    - New: The following object types support #ATTRCOUNT now which returns the number of objects
      currently in memory (including gone objects): #ANIM, #BRUSH, #SPRITE, #BGPIC, #TEXTOBJECT,
      #DISPLAY, #LAYER, #SAMPLE, #MUSIC, #CLIPREGION, #POINTER, #ASYNCDRAW, #MEMORY, #FONT, #FILE,
      #DIRECTORY
    - New: OpenURL() allows you to open web sites from your script (requested by Torgeir Vee)
    - New: All functions that add layers accept several new attributes in the optional table
      argument now: Hidden, Transparency, Tint, TintColor, and InsertPos; this allows you to
      add and configure a layer with a single call; this is mostly useful for creating hidden
      layers directly or for inserting layers at a position different from the last
    - Change: Graphics primitives like Box(), Ellipse(), etc. use a different syntax now:
      an optional table follows after the color argument; the table can be used to transform
      the image on the fly and some further options can be specified ("RoundLevel" for Box(),
      "Clockwise" for Arc(), and "Thickness" for Line()); the old syntax is still supported
      for compatibility
    - Fix: DisplayBGPicPartFX() caused an illegal memory access when used with layers turned off;
      this bug was quite serious and could lead to an immediate system crash
    - Change [MacOS]: OS X application bundles will no longer look for data files outside the
      application bundle but only inside the "Resources" directory because this is how it should
      be done according to OS X guidelines
    - Fix [MacOS]: Mouse move event handler wasn't triggered during mouse moves with button down
    - Change [MacOS]: JPEGs are saved using Core Image now; reduces executable size by 80 kb
    - Change [Win32/MacOS]: When using "Ask" as "Mode" in @DISPLAY, Hollywood will no longer allow
      manual mode selection under Win32 and Mac OS X
    - Fix: NextItem() didn't check for valid table argument (reported by nexus)
    - New: Added #FONT type for GetAttribute(); you can query all the six #ATTRFONTXXX properties
    - Fix: Potential error when refreshing a double buffered display
    - New: GetAttribute() can query #EVENTHANDLER now; simply pass the name of the handler as
      id (see InstallEventHandler() for a list of supported handlers); possible attributes are:
      #ATTRFUNCTION and #ATTRUSERDATA (requested by nexus)
    - New: GetAttribute() can query #INTERVAL and #TIMEOUT now; supported attributes are
      #ATTRDURATION, #ATTRFUNCTION, #ATTRUSERDATA
    - New: You can now query the size of memory blocks using #ATTRSIZE with type #MEMORY
      (requested by Lazar Zoltan)
    - New [MacOS]: "UseQuartz" can now be specified in @DISPLAY and CreateDisplay(); this allows
      you to mix Quartz and QuickDraw displays; if you use USEQUARTZ on the command line, it will
      be applied to all displays (except the ones that specify "UseQuartz" explicitly)
    - New: [MacOS]: Full screen switching via hotkey is now supported
    - Fix [MacOS]: Opaque pointer images didn't work correctly
    - Change [Win32]: Added workaround for floating point inaccuracies when rendering TrueType
      text with scaling and antialiasing; Windows' font API isn't very precise here but with
      the new workaround it should always look right
    - New: "Layers" tag can be used with @DISPLAY or CreateDisplay() to enable layers for a
      display at creation time
    - Fix: ChangeDisplaySize() did not substitute layers of type #BGPICPART which could lead
      to gfx errors
    - Change [Win32]: DebugPrint() opens a console now so you can catch debug output
    - New [Win32]: Full screen switching via hotkey is now supported; use LEFT ALT + RETURN
      and Hollywood will automatically switch between windowed & full screen mode
    - Change [Win32]: When hovering over drag and size regions in borderless mode, Hollywood
      will display corresponding mouse cursors
    - Fix [Win32]: Resizing transparent windows didn't work correctly
    - Change: StringRequest() returns a second value now indicating whether the requester
      was cancelled or not (requested by Paul Bloedel)
    - New: Added #TRUETYPE_DEFAULT and #BITMAP_DEFAULT special constants; you can use them
      with SetFont() to get an appropriate font on each different system; Hollywood examples
      were also adapted to make use of this feature
    - Change: Layer garbage collector is much more intelligent now
    - Change: "OnMouseOut" button events are now guaranteed to be sent before any new
      "OnMouseOver" events... makes things easier for GUI programmers!
    - New: Some improvements to the string library: FindStr() and ReplaceStr() accept a
      starting search position now as an optional argument; UnmidStr() removes characters
      from the middle of a string, CountStr() counts the number of occurrences of a
      substring, and InsertStr() inserts a string into another string with optional overwriting
    - New: The optional X,Y table arguments in DisplayBGPic(), DisplayTransitionFX(), and
      ChangeDisplaySize() support the special constant #KEEPPOSITION now; if it is specified,
      the display will keep its current position
    - Fix [Amiga]: MorphOS sound.datatype is now supported correctly (Hollywood now switches
      the datatype into extended mode)
    - New: Added @OPTIONS preprocessor command; the only tag currently available here is
      "LockSettings" which has the same function as the command line version except that
      if used as a preprocessor command, "LockSettings" will also work in non compiled
      mode, i.e. Hollywood will never run your script in a different mode than the one you
      defined in your script
    - Change: Fixed FormsDemo.hws to work with the new SelectBGPic() behaviour
    - Fix: Writing functions with byte code > 64kb in text mode caused a crash due to
      illegal memory access
    - Fix [Amiga]: Added workaround for SAS/C double to ULONG conversion trouble; the bug
      only affected huge numbers used with bit operators in the preprocessor commands so
      probably no one ever noticed the misbehaviour :)
    - Fix [Amiga]: Fixed several bugs with transparent windows on AmigaOS3; the fake handler
      didn't work with autoscaled displays and it didn't handle the transparent clip region
      correctly
    - New [Win32/Mac]: You can now use an *.ini file as an alternative to specifying arguments
      on the command line; this is not supported on Amiga because we've tooltypes on the
      Amiga so an additional ini file would be somewhat redundant; but under Win32 & Mac
      this is quite useful; note that for compiled Mac OS X app bundles, the ini file has
      to be in the Resources directory of the app bundle
    - New: CompareDates() compares two date specifications in the Hollywood time format
      and returns the one that is newer (1 or 2) or 0 if both have the same time
    - Change: GetDate() accepts an optional argument now which allows you to get the
      current date & time in Hollywood's standard format dd-mmm-yyyy hh:mm:ss instead of
      the current locale's format
    - New: Added lightning speed sorting algorithm; the old one was really a pain and slow
      as hell; now you can sort arrays incredibly faster and you can even specify a custom
      sort function which allows you to customize the sort and/or sort custom structures
      (requested by Lazar Zoltan)
    - New: GrabDesktop() can be used to grab the desktop (or a portion of it) directly into
      a brush (requested by Fabio Falcucci, Paul Bloedel)
    - Fix: @INCLUDE didn't change the current directory to the location of the included
      file which could lead to errors when the included file needed to load further resources
      (e.g. another include file or graphics etc.) (reported by Michael Jurisch)
    - New: GetCurrentDirectory() returns the full path to the current directory
    - New: Added "ClipboardChange" event handler which you can use to get notified whenever
      the clipboard contents change; very useful to enable/disable "Paste" buttons etc.
    - New: Added support for reading, writing, and peeking the clipboard; you can now easily
      import text & graphics from the clipboard into Hollywood or export to the clipboard;
      use the functions PeekClipboard(), GetClipboard(), SetClipboard(), and ClearClipboard()
      (requested by Dominic Widmer)
    - New: Added support for writing IFF ILBM images; use the new #IMGFMT_ILBM constant for
      that; pictures are written out in planar IFF24 format :-)
    - New: Added support for drag'n'drop; you can now install the "OnDropFile" event handler
      and then you will be notified whenever the user drops an item (or multiple items) onto
      your display
    - Fix [Win32]: IFF24 loader was broken under Windows (reported by Lazar Zoltan)
    - New [Amiga]: Hardware acceleration for #CROSSFADE is now also supported on AmigaOS 4.1;
      unfortunately, the Sam440ep has only 64MB of chip memory so you can't really blend
      huge screens but smaller areas are possible now and the speed up is incredible :)
    - Change [Amiga]: MorphOS versions use jfif.library and z.library now; reduces Hollywood's
      size by about 120kb; furthermore, MorphOS versions use png.library instead of
      pngalpha.library; gives a speed up because pngalpha is only available for 68k
    - Change [Amiga]: MODEID argument removed; display mode ids are not very useful because
      they change from gfx board to gfx board; use SCRWIDTH, SCRHEIGHT, SCRDEPTH instead
      or the @SCREEN preprocessor command
    - Change: Removed BESTFIT argument because it's gotten pretty useless; bye bye...
    - Change: Cleaned up the @DISPLAY preprocessor command: the tags "ScrWidth", "ScrHeight",
      "ScrDepth", "HideTitleBar", "Desktop", and "Mode" are now considered obsolete in
      @DISPLAY; instead, you should use them in the newly implemented @SCREEN preprocessor
      command! Note that the tags don't use the "Scr" prefix when specified in the @SCREEN
      preprocessor command
    - Change: Added @BACKFILL preprocessor command; please use this command now to specify
      backfill settings; specifying backfill settings in @DISPLAY is still supported for
      compatibility but you shouldn't use it any more
    - Change: When including applets, Hollywood will no longer show the data it loads from
      this applet
    - Change: MorphOS versions also use stream based datatype access now; speeds up applet
      loading (MorphOS 2 only)
    - New: Added new event handler "ModeSwitch"; will be triggered when the user switches
      display modes using CMD+RETURN
    - Fix: When calling ChangeDisplaySize() in autoscale mode but with no scalewidth/height
      set, an internal scaling factor was messed up which could cause wrong behaviour
    - Change: InstallEventHandler()'s user data item is no longer a global setting for all
      event handlers but can also be applied locally; simply call InstallEventHandler() with
      just one event type
    - New: Added ChangeDisplayMode() command which can be used to switch to full screen
      or windowed mode from the script; very useful for games!
    - Change: HollyAmp example uses a custom drag region now; this allows us to include a
      close button in the title bar that would've normally been fully occupied by Hollywood's
      default drag region
    - New: Added support for user defined drag and size regions; very useful for advanced
      users; use the "DragRegion" and "SizeRegion" tags in @DISPLAY or CreateDisplay() for
      that; note that custom drag & size regions will only be used for borderless displays
    - New: Added new attributes for GetAttribute()'s type #DISPLAY: #ATTRPOINTER, #ATTRSTATE,
      #ATTRACTIVE, #ATTRMODE, #ATTRSCALEMODE, #ATTRSCALEWIDTH, #ATTRSCALEHEIGHT, #ATTRBORDERLESS,
      #ATTRSIZEABLE, #ATTRFIXED, #ATTRNOHIDE, #ATTRNOMODESWITCH, #ATTRTITLE, #ATTRMARGINLEFT,
      #ATTRMARGINRIGHT, #ATTRDOUBLEBUFFER, #ATTROUTPUTDEVICE
    - New: Added SetDisplayAttributes() command; this is a very powerful command which
      allows you to change a display's style with just a single function call; nearly all
      display attributes can be easily changed with this call! SetDisplayAttributes() also
      gives you direct access to the scaling engine; you can modify the scaling engine and
      dimension settings with it!
    - New: Added "Active" tag to @DISPLAY; allows you to create initially inactive displays;
      you can use the new ActivateDisplay() command to activate your display
    - New: Displays can now also be initially hidden by using the "Hidden" tag in @DISPLAY;
      very useful if you want to modify the position or look of your display dynamically
      before opening it; note that some functions such as WaitLeftMouse() need an open
      display to work
    - New: Introducing support for multiple displays in a single script; many people have
      been asking for this one so here it is! You can create new displays using the new
      CreateDisplay() function; alternatively, you can create the displays using the
      @DISPLAY preprocessor command which has now been extended to accept an id; further
      new functions that you need for working with multiple displays: OpenDisplay(),
      CloseDisplay(), SelectDisplay(), FreeDisplay()
    - New: #ATTRCLIPREGION can be queried now for #BGPIC
    - New: #ATTRHASMASK and #ATTRHASALPHA also supported for #BGPIC now
    - New: Added support for BGPics with alpha transparency; yes, that's correct: You can
      now create these cool ultramodern 32-bit windows with Hollywood! Simply set LoadAlpha
      to TRUE just as you do with brushes
    - New [Amiga]: MorphOS and OS4 versions now have an iconify gadget in the title bar
      (except when NOHIDE is used)
    - New: Window manager completely rewritten; this was a lot of work but it was really
      necessary because cool new things are possible now, stay tuned! The display handler
      is now fully abstracted from the script; this means that your script can continue
      running when the display is hidden; even size changes are possible when the display
      is hidden!
    - Fix: Window resizing didn't work for transparent BGPics without layerscale/autoscale
      (reported by Paul Bloedel)
    - Fix: Potential crash when cloning bgpics that have a palette attached (internal; only
      used by Malibu)
    - New: SaveAnim()/BeginAnimStream() also supports the creation of AVI streams using Motion
      JPEG compression; just specify #ANMFMT_MJPEG; create your own videos with Hollywood now!
    - New: SetAnimFrameDelay() allows you to set the delay (in milliseconds) for each
      frame of an animation
    - Fix: ConvertToBrush() and GetBrushLink() crashed when trying to obtain frames of disk
      animations
    - New: SaveBrush() and SaveSnapshot() can write GIF images now, too; use #IMGFMT_GIF;
      a new optional table allows you to configure the desired color resolution and whether
      or not dithering shall be used
    - New: Added API for sequential anim creation: BeginAnimStream(), WriteAnimFrame(),
      FinishAnimStream() can be used to write frames to an anim continously; using these APIs
      you can create very large animations with a low memory footprint; note that you shouldn't
      mix transparent and non-transparent frames within an anim
    - New: Added SaveAnim() command; currently, only #ANMFMT_GIF is supported; transparency
      is supported; some straight-forward optimizations are also included but don't expect
      miracles; note that GIF is a CLUT based format and graphics have to be quantized;
      you can specify the number of colors as well as whether or not dithering shall be used
    - New: Frame delay is now supported for IFF ANIMs too
    - New: Added #DEFAULTSPEED constant which can be specified with PlayAnim() or MoveAnim()
      to tell Hollywood to play the anims at the speed defined in the anim (i.e. to use a
      variable speed because frame display time can vary from frame to frame)
    - New: #ATTRFRAMEDELAY can be used to query the delay time for every frame of an anim;
      note that not all anim formats carry such a delay information and that this information
      might only be available for loaded frames (when using "FromDisk"); also available for
      type #LAYER; in that case, it returns the delay for the frame currently displayed by
      the layer
    - New: Introducing support for GIF anims; you can easily load them via LoadAnim() or
      LoadSprite() now! Now you can use all those cool little anims right in Hollywood!
    - New: SelectMask() and SelectAlphaChannel() can also draw to animation frames now;
      use the second & third optional arguments to select the mask/alpha channel of a
      anim as the output device
    - New: SelectAnim() allows you to draw directly to single frames of an animation; this
      works only with anims that are loaded into memory of course
    - New: ModifyAnimFrames() can be used to add or remove one or multiple anim frames
    - New: LoadSprite()/@SPRITE can also load animation files now
    - New: Extended the LoadAnim() command; it can now also create animations dynamically
      from image files (just as the LoadSprite() command); the new functionality is also
      supported by the @ANIM preprocessor command; because IFF ANIM doesn't support alpha
      channels, you could create an alpha channel anim now by generating the anim from an
      image source
    - Fix: Serious bug when using a transparent disk anim with PlayAnim() (wrong memory
      block was freed)
    - New: SetLayerStyle() can be used to change the clip region of a layer (use the
      "ClipRegion" field); GetLayerStyle() can be used to get the current clip region
      of a layer
    - New: Clip regions can now be also used when layers are enabled; this is a very
      powerful feature because every layer can have its own clipping region, i.e. you can
      have several clip regions on the display at the same time; clip regions will
      automatically be transformed when the layer gets transformed
    - Fix: Long standing bug when freeing a clip region, Hollywood would automatically
      kill the clip regions of all sprites instead of only the affected sprites
    - Fix: Bug in SetLayerStyle() when modifying attributes of multiple text layers &
      memory leak
    - New: SetLayerStyle() can now be used to change the type of the layer; this really
      gives you the utmost flexibility; e.g. you can transform a brush into an anim layer
      now and vice versa; much more comfortable than removing & inserting; note that
      you must provide some compulsory information when doing a layer type change; see
      doc for more details
    - New: SetLayerStyle() can now also be used to change the cursor position and
      tabulator settings for #PRINT layers; use the new "CursorX", "CursorY", and "Tabs"
      table fields for that; note that "CursorX/Y" and "X/Y" are mutually exclusive
    - Change: Layers of type #TEXTOBJECT were accidentally treated in the same way as
      #TEXTOUT and #PRINT although the latter two are fundamentally different; this has
      been changed now; the consequence is that the only attribute of a #TEXTOBJECT
      layer you can change with SetLayerStyle() is the "ID" element to assign a new
      text object to the layer; modifying the text or font is no longer possible; use
      a #TEXTOUT layer for that!
    - Fix: SetLayerStyle() didn't refresh all necessary areas when just moving a layer
      without modification of any other styles (i.e. when only x & y styles are used)
    - Change: Removed all layer locking mechanisms of async draw objects; layers are
      no longer locked while assigned to an async draw object; i.e. you can change
      color, orientation etc. while an async draw is in progress
    - New: Implemented capability to change the contents and size of an async draw layer
      on the fly; this is a very cool feature which can be used to create cool effects;
      you can also use this to display an anim with transition effects
    - New: Implemented seamless frame seeking for asynchronous drawing objects; you can
      pass the frame to draw to AsyncDrawFrame() in the optional argument; please note
      that this currently requires layers to be enabled; not possible for PlayAnim()
      and MoveXXX()
    - New: GetConstant() can be used to retrieve a constant's value from its name passed
      as a string
    - Change: Passing 0 to SetLayerName() assigns a name to the last layer added
    - New: #ASYNCDRAW type can now be queried by GetAttribute(); supported attributes:
      #ATTRTYPE, #ATTRNUMFRAMES, and #ATTRCURFRAME; note that #ATTRNUMFRAMES returns the
      number of frames but you need to make one additional call to AsyncDrawFrame() to
      finish the effect; the last call to AsyncDrawFrame() doesn't draw anything, it will
      just finish the effect (that's why it's not counted as a frame); so, if you're
      looping over the number of frames, you need to add 1 or alternatively, you could
      also call FinishAsyncDraw() instead of calling AsyncDrawFrame() numframes+1 times
    - New: #POINTER type is now recognized by GetAttribute(); you can query #ATTRWIDTH,
      #ATTRHEIGHT and #ATTRTYPE
    - Change: #PUZZLE uses different algorithm now
    - Change: File requesters in the GUI remember their paths now (requested by Philippe
      Ferrucci, Brian Carpignano)
    - Change: When compiling executables for Windows, the file name automatically gets
      a ".exe" appended in case it is not already there (suggested by Brian Carpignano)
    - New: Alpha channel is now also supported for animations; IFF ANIM doesn't support
      alpha channels but you can use CreateAnim() to convert an alpha channel brush to
      an animation
    - Fix: Drawing error in #QUARTERS
    - New: #CROSSFADE is using hardware acceleration now if possible (depends on some
      factors); currently only supported under MorphOS 2.0; hardware alpha blending
      is about twice as fast; on the Pegasos 2, smooth blending of a 1280x1024 pixel
      screen is possible! (requested by Torgeir Vee)
    - New: Major speed up for all transition effects displayed in the new real layers
      mode that was introduced in Hollywood 4.0; should be almost as fast as without
      layers now!
    - Fix: As documented, #PIXELZOOM2 is now a BGPIC-only transition effect
    - Fix: #WALLPAPERTOP and #WALLPAPERLEFT didn't work correctly in reverse mode when
      layers were opaque
    - Fix: #HOPENGATE left a line on the display if height was uneven; #VOPENGATE left
      a row on the display if width was uneven
    - Fix: Fixed another major bug in the generic for statement: using Continue inside
      a generic for did not work; all generic for issues should be solved now because
      I've removed the OP_TFORPREP opcode which used less bits for the dest pc than the
      OP_JMP opcode; OP_JMP is now always used
    - Fix: Fixed severe bug in the byte code compiler: the byte code generated for the
      generic for statement was always broken, i.e. scripts containing a generic for
      statement could not be properly used in compiled form; seems like nobody is using
      the generic for statement because nobody noticed it and this bug has been in Hollywood
      since version 2.0 :)
    - New: Added workaround for a bug in the OS4 diskfont.library that prevents some fonts
      from being opened (reported by Chris Handley, Fabio Falcucci)
    - Fix: Graphics primitives that used #FILLTEXTURE as fill style did not get their patterns
      scaled correctly when in layer scale mode (reported by Torgeir Vee)
    - New: Added @FONT preprocessor command; this is especially useful for easily linking
      fonts into the final executable/applet; all fonts specified in @FONT will be linked to
      the executable except when the optional table argument "Link" is set to FALSE
    - New: Added functions to load several fonts at the same time: OpenFont() and CloseFont()
      allow you to keep several fonts open which you can then easily select for text output
      by calling UseFont() which has been added for that purpose
    - New: Added fast text renderer that will be used when possible; certain conditions need
      to be given: no wordwrapping, no soft styles (except anti alias), no style tags
      inside the string, no irregular clipping region, no tabs, no right or center alignment
      and some more...
    - Fix: TextWidth() and TextExtent() failed under Mac OS when used with an empty string
      (reported by Dominic Widmer)
    - Fix: GetVolumeInfo() did not work correctly with volumes > 4 GB (reported by Fabio
      Falcucci)
    - New: Execute() and Run() also support the chunk loader now which allows you to run
      executables that have been linked into your applet/executable (requested by Torgeir
      Vee); this won't work under Mac, however, because Mac OS executables are not single
      files but whole directory bundles
    - Fix [Mac]: File extensions were not added correctly for sound files that were saved
      in a temporary place for the chunk loader (used only in the rare case that OS X can't
      recognize a sound file from memory block)
    - Change: Active mouse pointer can be freed now; Hollywood will mark it then as gone and
      free it as soon as it is no longer on the screen
    - Fix: Potential crash in the wordwrapping code that occurred only in very special
      circumstances
    - New: Added "Clockwise" tag for #ARC layers in SetLayerStyle() and GetLayerStyle()
    - New: Implemented font caching mechanism which should speed up font loading especially
      for fonts that are linked into the executable/applet
    - Fix: Text commands did always reload the font which caused significant performance
      loss (reported by Fabio Falcucci)
    - Fix: Several gone marked objects (brushes, anims, text objects) were not freed before
      Hollywood terminates (reported by Torgeir Vee)
    - Fix: Documentation of DisplayBGPicPart() was wrong
    - New: Specifying 0 as insert position in InsertLayer() will insert the layer as the
      last one
    - Change: WaitEvent() will now always immediately return to the user once it has called
      a function; additionally, it will return a table that contains information about the
      event that has just happened and it also contains the return values of the function
      that was just called
    - New: ShowLayer() can emulate BGPIC-only transition effects now by setting "BGPicEmu" to
      TRUE; this function is currently undocumented because it is considered private for
      Hollywood Designer only
    - New: EXETYPE argument accepts multiple platforms now; allows you to create executables
      for all platforms with just a single run; simply combine platforms via a '+' character;
      if more than one platform is specified, the file specified in COMPILE is regarded as a
      template
    - Fix [Amiga]: Potentially fatal memory access when drawing graphics in hidden mode caused
      HideDisplay() to crash
    - Change [MorphOS]: Added work-around for wrong behaviour of screen mode requester which
      caused Hollywood to display a "Can't run on palette screens" error
    - New: NOHIDE can also be used via @DISPLAY preprocessor command now
    - New: Finalized the SelectBGPic() API at last; after searching for the best implementation
      since version 1.5 of Hollywood, I finally found the best behaviour for SelectBGPic()
      in case it is called on the current BGPic: when SelectBGPic() is called on the
      current BGPic, all layer operations are cached and won't be drawn until EndSelect();
      this allows you to draw very efficiently! If you have lots of things to draw, it
      could be cheaper to do it in a SelectBGPic()-EndSelect() block; this is an API break
      because formerly, a SelectBGPic() on the current BGPic would insert special hidden
      layers that would automatically become visible on the next DisplayBGPic() call; this
      is now longer the case; the layers will become visible when you call EndSelect(); if
      you don't want that, use HideLayer() in the SelectBGPic()-EndSelect() block
    - Fix: Removed an optimization of the For loop and Switch selector statements; both
      didn't work in Hollywood 1.x compatibility mode (using Gosub() didn't work from these
      statements)
    - Fix: When drawing to a brush with objects enabled, DisplayBGPicPart() could crash the
      program
    - New: ResetTimer() can be used to reset a timer to 0 or to a specific milliseconds state
    - New: Added LINKFONTS arguments which allows you to link fonts into the executable/applet;
      usage is the same as with the LINKFILES argument; this is a very cool feature which
      should solve all your font worries (and there have been many as I was told :))
    - Fix: Cursor and margin positions were not updated on SizeWindow
    - Change: Hollywood searches in the current directory now first for fonts under Windows
      and Mac OS before resorting to the system fonts; fixes some problems with bitmap fonts
      and system fonts that share their names (reported by Michael Jurisch)
    - New: LOCKSETTINGS argument allows you to create executables/applets that do not allow
      the user to change display settings via the command line or tooltypes; if you use
      LOCKSETTINGS the script will always use the look you specified; can only be used in
      connection with the COMPILE argument
    - New: Added "ScaleMode", "ScaleWidth, "ScaleHeight", and "SmoothScale" tags to the
      @DISPLAY preprocessor command; allows you to specify a scaling engine from within the
      script
    - Fix [Amiga]: MODEID argument didn't work
    - New: FinishAsyncDraw() is an extended version of CancelAsyncDraw(); FinishAsyncDraw()
      skips to the last frame of an async draw object and executes the finishing code (e.g.
      hiding or removing a layer using HideLayerFX() and RemoveLayerFX())
    - Fix: #SCROLLXXX fx and MoveXXX() did not work correctly with rotated layers
    - Fix: It's no longer possible to show a locked layer with fx
    - Fix: Crash when a Hollywood function that is passed as an argument to a user function
      and called from that user function returned an error :)
    - Fix: When showing hidden layers using asynchronous fx the layer is not made visible before
      the first call to AsyncDrawFrame()

    Version 4.0    (28-Feb-09)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI; it now supports video export!
    - New: Added PointerDemo, MouseWheelDemo, AsyncFX, and LayerStyle examples
    - New: Added a nice little color matching game named Katica by Lazar Zoltan
    - New: Added SCUI Lib demos done by Fabio Falcucci
    - New: Added three new cracktros supplied by Mr. X of Barracuda; I find them really
      impressive and they surely show what you can do with Hollywood. Mr. X has ported
      the cracktros of PP Hammer, Moonstone, and Super Stardust. Big thanks mate!
    - Change: Added workaround for some strange behaviour in Windows Vista which could lead
      to Execute() failing on an existing program (reported by Torgeir Vee)
    - Fix: Pointer settings were lost after full screen switch via CMD+RETURN (reported by
      Lazar Zoltan)
    - New: Added VIDEOFPS argument for controlling the frames per second when in video recording
      mode
    - New: Added support for different video strategies using the VIDEOSTRATEGY argument
    - Fix: Ror() and Rol() were broken for #BYTE and #SHORT operand sizes
    - New: SetMaskMode() supports several new modes now: #MASKVANILLACOPY, #MASKOR, #MASKAND,
      #MASKXOR; can be used to achieve certain effects
    - Fix: Printing a string with newline characters only resulted in wrong cursor y position
    - Change: TextOut() uses a table as optional argument 4 now; old syntax still supported
      for compatibility
    - New: RotateTextObject() can be used to rotate text objects; currently, lossless vector
      transformation for true type fonts is not supported so rotating true type fonts doesn't
      deliver the best quality yet
    - New: DisplayBrush(), DisplayBrushPart(), DisplayAnimFrame(), TextOut() and PlayAnim()
      support a new optional filter argument now; if layers are enabled, the specified filters
      will automatically be applied to the layer
    - New: DisplayAnimFrame() allows you to display a single frame of an animation; if layers
      are enabled you will get layer of type #ANIM
    - Fix: GetAnimFrame() did not create independent graphics for non-disk anims
    - Fix [Amiga]: DEPTH argument was not always handled correctly (reported by Lazar Zoltan)
    - New: Attributes #ATTRFONTSCALABLE and #ATTRFONTAA can be used to query capabilities of
      the current font (requested by Lazar Zoltan)
    - New: AddMove() for type #LAYER now accepts a visibility flag (requested by Paul E. Bloedel)
    - Fix: ReplaceStr() could trash memory under certain circumstances (reported by Paul E.
      Bloedel)
    - Change: If Hollywood detects WinUAE USEWPA will be automatically enabled because it is
      faster under WinUAE
    - Change: ScaleLayer(), RotateLayer(), SetLayerTransparency(), SetLayerTint() simply call
      SetLayerStyle() now internally
    - New: Added RotateLayer() which allows you to rotate a layer
    - New: Added SetLayerStyle(); this is a very powerful function which allows you to change
      nearly all attributes of an existing layer on-the-fly; it can also scale and move layers;
      furthermore, you can change the style of multiple layers with only a single call; the
      attributes that can be specified depend on the type of the layer; see the documentation;
      you can use the new function GetLayerStyle() to query the current style flags of a layer
    - Fix: #ATTRWIDTH and #ATTRHEIGHT returned wrong values for #DISPLAY when SelectBrush(),
      SelectAlphaChannel() or SelectMask() were in use
    - New [Amiga]: DEBUGDEVICE argument can redirect output now to stdout or an ARexx Port (use
      @stdout or @rexx:PORTNAME)
    - Fix: ReadMem() and WriteMem() didn't advance file cursor correctly
    - New [Amiga]: StringRequest() uses requester.class now instead of reqtools.library (under OS4)
    - New: SystemRequest() accepts an optional argument now which allows you to specify
      an icon for the requester (not on all systems!)
    - New: [Amiga]: Added USEWPA and WPAMODE arguments; these arguments can be used to force
      Hollywood to work with pixel arrays instead of bitmaps; these are included mainly for
      overriding default settings that Hollywood chooses; you shouldn't use them unless you
      experience problems with the standard mode
    - Change [Amiga]: Datatype objects (pictures, samples, anims) are now loaded directly from
      memory using DTST_MEMORY if datatypes.library >= 44; speeds up things especially in compiled
      programs
    - Change [Amiga]: Hollywood's screen is now opened in the new OS4 style (reported by Paul E.
      Bloedel)
    - Change: F11, F12, Page Up, Page Down, Insert, Pause, Home, End keys are now also supported
      under OS4
    - New: ChangeDisplaySize(), DisplayBGPic(), and DisplayTransitionFX() accept new optional
      arguments now that allow you to specify a new x & y position for the display (requested by
      Fabio Falcucci and Paul E. Bloedel)
    - New: IsKeyDown() also supports modifier keys like alt, control, shift etc. now
    - New: Added "OnWheelUp" and "OnWheelDown" event handlers for InstallEventHandler() (requested
      by Paul E. Bloedel)
    - New: Added WriteTable() and ReadTable() functions which allow for easily saving a whole
      table (including subtables and even user functions) to a file; ReadTable() can be used
      to load the table from disk (NB: if there are entries of type #USERDATA and #LIGHTUSERDATA
      they're written as #NUMBER with value 0)
    - New: GetRandomFX() returns a random effect from Hollywood's palette; this is useful if
      you cannot use #RANDOMEFFECT because you want to apply a filter
    - Change: Layer substitution mechanism is more sophisticated now & anim layers still work
      now even if their source anim is freed or scaled etc.
    - Change: CopyAnim() can also clone disk anims now
    - New: Added CopyTextObject() command
    - New: Added CopyBGPic() command; NB: this will only copy the graphics of the specified
      bgpic; layers, buttons, sprites etc. will not be copied
    - Fix: Layer substitution did not account for ScaleBGPic()
    - New: DefineVirtualFile() allows you to define virtual files that actually occupy a
      certain area in a real file; this is useful for reading from huge resource files;
      DefineVirtualFile() can be used with all Hollywood functions that take a filename
    - Change: All DOS functions work with files > 4 gigabyte now (except on AmigaOS Classic)
    - Fix [Amiga]: Harmless enforcer hit in the GUI (reported by Christian Kummerow)
    - Fix [Amiga]: Dead pointer access on music stream finish (reported by Janne Peräaho)
    - New: Added WriteFunction() and ReadFunction() commands which can be used to save and
      load Hollywood functions to/from files; this is a very cool feature and opens up a wide
      variety of possible uses; it is especially interesting for larger game projects which
      need a scripting engine; code from this engine could now be loaded from external files;
      functions can be saved to files using standard binary data or base64 encoding for
      embedding them in a text files
    - New: Added support for alpha blended 32-bit pointers; you can make these new pointers by
      converting brushes or sprites; simply use the function CreatePointer() to make a pointer
      from a brush/sprite source; FreePointer() frees pointers; NB: an API break was necessary:
      SetPointer() no longer accepts a file name but only a pointer id and you have to use
      CreatePointer() also for system & busy pointers (requested by Fabio Falcucci)
    - New: All commands that create new Hollywood objects (brushes, samples, files, text objects
      and many other types) accept NIL now in the object id parameter; if you pass NIL to
      an object creation function, it will automatically choose a vacant id for you and return
      it to you; this is very useful when working with larger scripts that use lots of different
      objects and ids
    - New: GetType() supports lua types #USERDATA, #LIGHTUSERDATA, and #THREAD now (#THREAD
      currently not available in Hollywood)
    - New: Added video recording mode! This is a very cool feature which allows you to record
      your Hollywood scripts as an AVI video; you can use the VIDEOOUT argument to activate
      the video recorder; you will get a fully featured AVI video file complete with video
      and audio stream; you can use one of the scaling engines to define the dimensions of
      your video (e.g. 720*576 for DVD)
    - New: The MoveXXX() functions and PlayAnim() also use a different syntax now and accept
      a table which allows you to use these functions asynchronously
    - New: Added support for asynchronous transition effects; all the commands that deal with
      transition effects use a different syntax now; a table is used to configure the effect
      and you can specify a table element "Async" which - if set to TRUE - returns a handle
      to a async draw object which you can then draw using AsyncDrawFrame(); this is useful
      if you want to do other things while displaying a transition effect; in particular, this
      opens many new possibilities for Hollywood Designer; to stop an async draw object you
      call CancelAsyncDraw()
    - New: Major rework of the transition fx library; transparency and tint settings are fully
      supported now; additionally, effects are displayed correctly now even if the layers are
      in background; layerscale and autoscale are fully supported
    - New: Added layerscale engine; this is powerful and required major rewritings of several
      essential parts of Hollywood but the layerscale engine paves the way for many cool
      features; in contrast to the autoscale engine, the layerscale engine will scale the
      individual layers on the display; this is much faster than the autoscale engine which
      always has to scale the whole screen even if only a few pixels have been modified; but the
      greatest advantage of the layerscale engine is that vector layers (vector text, gfx
      primitives) can be scaled infinitely without loss of quality; this is very useful e.g.
      to promote your presentation to large screenmodes etc.; you can activate the engine by
      using the LAYERSCALE argument; note that it's not possible to disable layers when the
      layerscale engine is active
    - New: Added autoscale engine; this engine allows you to promote your scripts to any
      dimensions you want without changing a single line of your code; Hollywood will mock your
      script into thinking that it is running in the usual dimensions but in reality, the
      script will be promoted to a new dimension; use the AUTOSCALE argument to activate
      this new mode; the SCALEWIDTH and SCALEHEIGHT arguments can be used to specify the
      desired dimensions (notation in percent also allowed); if you don't specify SCALEWIDTH
      and SCALEHEIGHT, autoscale will stay inactive until the user sizes the window; use the
      SMOOTHSCALE argument to toggle smooth scaling on and off
    - Fix: Special speed constants were not handled correctly when passed to PlayAnim(),
      PlayAnimDisk() and the "animspeed" parameter in MoveAnim()
    - Change: If the Hollywood window gets resized while a transition effect is in progress,
      the effect will be restarted (in case it's an object effect) or aborted (in case it's a
      BGPic transition); in previous versions, garbage was left on the screen if a window
      resize occurred during transition fx
    - Change [Amiga]: Alpha byte is always cleared out now; this is necessary because OS 4.1 seems
      to set it even if the image doesn't have an alpha channel (reported by Paul E. Bloedel)
    - Fix: RIFF WAVE streams were not closed correctly (reported by Lazar Zoltan)
    - Fix: Several fixes in connection with layers of type #BRUSHPART and #BGPICPART: Collision()
      did not work correctly with them; layer buttons that used pixel-exact collision detection
      did not work; ConvertToBrush() and GetBrushLink() did not work with layers of these types
      either
    - Change: Faster, non-copying SwapLayers() mechanism
    - New: Added OpenDirectory(), CloseDirectory() and NextDirectoryEntry() functions; you
      can use these for a more sophisticated control over directories (the old ReadDirectory()
      function can get quite slow with vast directories because it sorts all entries
      alphabetically); with NextDirectoryEntry() you'll receive files and directories in the
      order as returned by the file system
    - Fix: When used with a global iterator variable, the FOR statement did not work correctly
      in recursive functions (reported by Fabio Falcucci)
    - Fix [Win32]: HidePointer() and ShowPointer() did not work (reported by Lazar Zoltan)
    - Fix [Win32]: Mode setting specified in @DISPLAY was not handled correctly in applets/
      executables (reported by Lazar Zoltan)
    - Fix [Win32]: #ATTRPOSITION did not return the correct time for musics after their
      first loop
    - Fix [MacOS]: CreateSample() did not work correctly
    - New: SaveBrush() and SaveSnapshot() can save JPEG images now; simply pass #IMGFMT_JPEG
      in the format parameter; there's an optional parameter which specifies the quality
      (ranging from 1 to 100)
    - Fix: #RANDOMEFFECT could accidentally choose the obsolete #TYPEWRITER effect which
      caused an error
    - Fix: #BLEND/#FADE reverse fx modes did not work correctly with HideLayerFX() and
      RemoveLayerFX()
    - New: Added funky reverse fx mode for #HSTRANGEPUSH and #VSTRANGEPUSH (finally...)
    - Fix: #STRETCHRIGHT and #STRETCHBOTTOM were broken since Hollywood 2.5
    - Change: #HSTRANGEPUSH and #VSTRANGEPUSH look now much better when used with transparent
      objects (mask or alpha)
    - Change: When using DisplayTransitionFX() to switch to a BGPic that has a different size
      than the current BGPic, the current BGPic got automatically scaled to the dimensions of
      the new BGPic; this is no longer done in this way; of course, the current BGPic is still
      scaled to match the dimensions of the new one but this scaling is only temporary and
      doesn't change the BGPic
    - Change: Removed auto-scaling for double buffers; brand-new scaling engine is coming up!
    - Fix: Moving a layer using ShowLayer() or NextFrame() did not work while SelectBGPic()
      was active
    - New: FreeLayers() accepts an optional argument now which specifies whether to "keep"
      layers or not; defaults to TRUE for compatibility
    - Fix: FreeLayers() trashed Hollywood's internal refresh bitmap when used while SelectBGPic()
      was active
    - New: ScaleTextObject() allows you to scale text objects; text objects that use vector
      fonts can be scaled freely to any size including x/y distortion; note however that
      the desired pixel dimension you pass to ScaleTextObject() denotes only an approximation
      in case of vector fonts; the real resulting dimension might be a little bit bigger
      or smaller
    - New: A happy welcome to the 400th function of Hollywood: ScaleLayer()!
    - Fix: When using #NEXTFRAME with DoMove() on a non-existing anim layer the current frame
      argument was not handled correctly
    - Fix: DisplayTextObject() aligns the text now correctly taking any underhangs of characters
      into account
    - New: #ATTRTEXT returns the text of text objects or text layers
    - New: #ATTRFONTNAME, #ATTRFONTSIZE, #ATTRFONTASCENDER, #ATTRFONTDESCENDER can now be used
      with text objects as well as with text layers (layer types PRINT, TEXTOUT, TEXTOBJECT)
    - Change: SetLayerTint() does not cache the tinted graphics any longer but tints on the
      fly when needed; this is slower than the previous implementation but makes the source
      code much clearer :)
    - New: CompressFile() and DecompressFile() functions can be used to handle packed files
      easily; each function accepts two arguments which specify source and destination file;
      the return value is the size of the destination file
    - Fix [Win32]: Body text dimensions were not calculated correctly in the SystemRequest()
      and StringRequest() functions
    - Fix [MacOS]: Alpha channel was not always loaded correctly under Mac OS (reported by Janne
      Peräaho)
    - New: Added support for the Intel version of Mac OS X; You can compile executables for
      this platform by using "-exetype macos86"
    - Fix [Win32]: Sound buffer for playing Protracker was probably too small for some
      sound cards because there were glitches under Windows Vista; I've now doubled its
      size to 19200 bytes which is enough to carry 100 milliseconds of 48000hz, stereo,
      16bit sampled Protracker sound; still very strange that the 50 milliseconds buffer
      was sufficient on my old PC but on my brand-new iMac using Vista it's too small
    - New: DisplayBGPicPart() can now also be used to copy the current display graphics to
      a brush; useful for saving certain areas in order to restore them later; just pass
      TRUE in the last parameter and make sure layers are off (requested by Fabio Falcucci)
    - New: Added OVERWRITE argument which forces Hollywood to always overwrite old files and
      directories when in compile mode
    - Change: When in compile mode, Hollywood will ask now before overwriting existing files;
      when creating Mac OS programs and the program already exists, Hollywood will delete the
      whole application bundle, so be careful!
    - Fix: ".app" is not appended twice to Mac OS programs any more; if it was already specified
      with -compile, it is no longer appended again
    - Fix [Amiga]: Switching between full screen and windowed modes using the hot key resulted
      in a crash inside a call to VWait(); this could happen quite often because Hollywood calls
      VWait() also internally
    - New: Added "Transparency", "ScalePicture", and "BrushFile" tags for the "Backfill"
      setting in @DISPLAY; the file specified in "BrushFile" will be linked to the applet/
      executable unless "LinkBrushFile" is set to FALSE
    - Fix: "Mode" setting in @DISPLAY could be overridden by using tooltypes/command line
      (reported by Paul E. Bloedel)
    - Change [Win32]: Temporary files are now stored in the current user's temporary folder
      instead of in the root directory of the current drive
    - New: Added support for compressed applets; specify the COMPRESS argument to make Hollywood
      compress your applet
    - New: @INCLUDE can also import whole Hollywood applets into your script; applet objects
      like brushes, samples, etc. are imported too
    - Fix [Amiga]: Hollywood no longer tries to open keymap.library v39; it should work
      again now with Kickstart 3.0 which still contains a v37 keymap.library (reported
      by Lazar Zoltan)
    - Fix [Amiga]: Loading sounds through sound.datatype from applet or executable did not
      work (reported by Lazar Zoltan)
    - Fix [Win32]: Saving PNGs did not work
    - New: Added truetype font support for Win32 and Mac OS

    Version 3.1    (22-Mar-08)

    - Change: Updated Hollywood documentation
    - Change: Updated the Hollywood GUI
    - Fix [Win32/Mac]: Relative path names using "." and ".." are now resolved correctly when
      retrieving the "path" field of GetFileAttributes(); in v3.0 "path" still contained "." and
      ".."; now they are resolved correctly
    - New: Implemented userdata functionality; all functions that work with callback functions
      will now accept an additional parameter called "userdata" which will then be passed to the
      callback function as table field "userdata"; this parameter can be of any type; userdata
      is useful if you want to avoid to work with global variables; the following functions
      accept the userdata parameter: MakeButton(), InstallEventHandler(), SetTimeout(), SetInterval(),
      CopyFile(), DeleteFile()
    - New: Implemented a convenient way to use methods: When you define and call functions using
      a colon (:) instead of a dot (.) the function will receive an invisible parameter called
      "self" which refers to the object that the function belongs to; this is very useful for
      object oriented programming with Hollywood; unfortunately, this change conflicts with the
      Hollywood 1.x emulator which uses the colon to separate multiple commands on the same line
      so you will need to adapt your 1.x scripts if you are still using the colon in that way
      (requested by Dwayne L. Jarvis)
    - Fix: Severe bug in the virtual machine caused an endless loop when a generic for that ended
      with a conditional statement was used (reported by Dwayne L. Jarvis)
    - Fix: OP_NOT and OP_TEST did not accept tables and functions as arguments which could lead to
      problems when trying to use stuff like "o = o OR {}" with "o" being a table
    - New: #ATTRFONTNAME and #ATTRFONTSIZE can be queried by passing them to GetAttribute() together
      with #DISPLAY (requested by Jesper Schultz-Pedersen)
    - Change: MakeButton() now chains new buttons to the top of the button list; this means that in
      case of overlapping buttons the last created button will be triggered first (requested by
      Fabio Falcucci)
    - New: Added "OnMouseDown", "OnMouseUp", "OnRightMouseDown", "OnRightMouseUp" event handler for
      InstallEventHandler() (requested by Lazar Zoltan)
    - Fix: Some font bug fixes and tweaks for floating point inaccuracies
    - Fix: TextExtent() did not return the correct metrics
    - Fix [Amiga]: Crash when starting a Hollywood script/executable that contained no tooltypes from
      Workbench (reported by Lazar Zoltan)
    - Fix: When trying to save an executable to a non-existent place, the temporary input applet file
      was closed twice which led to a program crash
    - Fix [Win32/Mac]: Amiga bitmap fonts of type TFCH_ID (using a TFontContents instead of
      FontContents) could not be loaded (reported by Dirk Riegler)
    - Fix: ReplaceStr() did not work in all cases (reported by Paul E. Bloedel)
    - Fix: Crash when specifying huge coordinates for PICXPOS/PICYPOS
    - Fix: Execute() crashed when used to start a program without any arguments
    - Fix: Second return value for Val() was wrong in some cases
    - Fix: Hollywood generated executables with a space in their file name could not be started from
      Workbench
    - Fix: Global table _G is now accessible from the script language as it should be (reported by
      Dwayne L. Jarvis)
    - Change [Mac]: Mac OS executables created by Hollywood will now use the location of the
      application bundle as the active directory on startup; previously, the program directory inside
      the application bundle (i.e. xxx.app/Contents/MacOS) was used as the active directory on startup
      which caused some confusion
    - Fix: Exists() works with directories again now (reported by Paul E. Bloedel)
    - New: LINKFILES argument allows you to link all files specified in a separate file to
      your applet or executable; all Hollywood commands that load files (e.g. LoadBrush(), OpenFile(),
      OpenMusic() etc) will load these files directly from your applet or executable then; this is an
      alternative to using the preprocessor commands; you now no longer have to use the preprocessor
      commands to link your files with your applet/executable
    - New: #ATTRFONTASCENDER and #ATTRFONTDESCENDER can be used with #DISPLAY to query the current
      font's ascender and descender information
    - Change: Removed #TYPEWRITER transition effect; use a sequence of Print() calls if you really
      need to emulate it :)
    - Fix [Mac]: Non-ASCII characters in Amiga bitmap fonts work correctly now (MacRoman is mapped to
      ISO-8859-1)
    - Change: ".font" suffix is now optional; you can specify it or leave it out
    - Fix [Mac]: Changed all text routines to use "Mac Roman" text encoding instead of UTF8; non-ASCII
      characters are now handled correctly and files/directories with non-ASCII characters work too
    - Fix: ReadLine() also stored carriage return characters ($0d) in the string; this is no longer
      done; carriage return is ignored by ReadLine()

    Version 3.0    (26-Jan-08)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI and added an interface for the Hollywood command
      line demonstration
    - New: CommandLine example demonstrates how to pass arguments to Hollywood (very cool:
      tooltypes are supported!)
    - New: AnimPlayer example demonstrates how to use the new animation API of Hollywood3
    - New: Added a Hollywood 3 Intro example which was inspired by the Lotus 3 intro
    - New: Added four new cracktros supplied by Mr. X of Barracuda; I find them really
      impressive and they surely show what you can do with Hollywood. Mr. X has ported
      the cracktros of Steel Empire, Dynablaster, Turrican 2, Turrican 3. Big thanks mate!
    - Fix: Conversion from C double to C ULONG was not handled correctly for negative
      doubles under AmigaOS3 because of weird casting behaviour of SAS/C; a work-around
      is now used (this fix affects the bit-wise operators and some math commands)
    - Fix: The automatic full screen mode selector should no longer select modes that are
      not available
    - Fix: HAM6 and HAM8 animations are now handled correctly
    - New: GetAnimFrame() command allows you to copy an anim frame from an opened anim
      into a brush; scaling and disk anims supported
    - Change: The third argument of OpenFile() defaults to #MODE_READ now; this is a
      vanity API break; I think that it makes the most sense to have this function
      default to read-only
    - New: FileLength() returns the current length of an open file; this length is dynamic
      because the file is open and write operations could follow
    - Fix: Internal cursor was not adapted correctly on write operations in the dos
      library; could lead to pseudo errors in Seek()
    - New: BinStr() accepts an optional argument now which specifies how many bits it
      shall take into account (can be #BYTE, #SHORT, or #INTEGER)
    - New: Cast() function allows you to cast a value to specific type; this is very
      useful for signing and unsigning values
    - New: Rol() and Ror() can be used to perform a bit rotation; operator length can be
      specified (#BYTE, #SHORT, or #INTEGER)
    - New: Sar() performs an arithmetic right shift (the most significant bit is used for
      padding)
    - New: GetProgramInfo() returns information about the program currently running in
      Hollywood; you can obtain information about the program type (script, applet,
      program) and the file name of the program
    - New: GetCommandLine() allows you to retrieve all arguments from the command line
      which have not been eaten by Hollywood; this is a very flexible function as it
      also parses tooltypes when a script/applet/program is launched via Workbench; on
      Mac OS it parses "CFBundleExecutableArgs" entry if Hollywood is started via Finder
    - New: Pressing the command key and return will switch between full screen and window
      mode; this is currently only supported by the AmigaOS version; to disable this
      feature set the NOMODESWITCH argument or the "NoModeSwitch" in the @DISPLAY
      preprocessor command
    - New: HIDEPOINTER argument can be used to have the mouse pointer automatically
      hidden when Hollywood goes into full screen or fake full screen mode; you can
      also specify HidePointer in the @DISPLAY preprocessor command
    - New: RemoveLayerFX() command added; why didn't I implement this earlier? Previously,
      one had to use HideLayerFX() and then RemoveLayer()
    - New: FileRequest() and PathRequest() accept additional arguments now that allow
      you to specify the initial path and file state of the requesters (requested by
      Lazar Zoltan)
    - Fix: Last path and file were not remembered correctly in FileRequest() function
      (Hollywood 2.5 only; prior versions remembered it correctly)
    - Change: PlayAnim() speed is now relative to the time it takes to load and display
      a frame; if you specify 10 ticks as the speed and it takes 7 ticks to load and
      display the frame, Hollywood will only delay execution for 3 ticks
    - New: MorphOS and AROS versions now use Hollywood's stdlib anim driver because
      they don't have an animation.datatype yet (and probably never will because
      the animation.datatype's design is quite awkward)
    - New: IFF 8SVX, IFF 16SV and RIFF WAVE is now supported by LoadSample() on Amiga
      builds independent of the datatypes system; this is because sound.datatype is
      a real pain; sound.datatype in MorphOS 1.4 seems to be broken, in OS4 it doesn't
      work with 16 bit sounds and OS3 often uses experimental replacements; thus, these
      popular sound formats can now be loaded independent of the sound.datatype
    - New: Sound part on the Amiga side is now adapted to Hollywood's stdlib and uses
      the same design as the Win32 and Mac OS builds
    - New: The OS4, MorphOS, and AROS builds use a different Protracker replayer now
      which does not rely on AHI's PlayerFunc interrupt any more; this code is a little
      bit slower (that's why it is not used on OS3), but much cleaner and reliable;
      thus all the trouble with lowlevel.library under OS4 is a thing of the past now
    - New: The MorphOS build now supports the non-Amiga keys on the PC-style keyboards
      now (e.g. F11, F12, Page down, Page up...); currently not possible under OS4 and
      AROS because we currently don't get IDCMP_RAWKEY for these keys
    - Fix: Some animations were accidentally loaded without the last two frames (reported
      by Lazar Zoltan)
    - New: "FromDisk" argument is now also supported for @ANIM preprocessor command
    - New: Because the AmigaOS API does not allow for a minimize/collapse gadget in the
      window's border (like on Mac OS X or Windows), Hollywood installs a hotkey which
      allows you to do that; just press left command (or right) and 'h' and the Hollywood
      window will be minimized; this behaviour can be suppressed by using the NOHIDE
      argument
    - New: Hollywood opens as a commodity now; this means you can show and hide it from
      Exchange (this will post the HideWindow & ShowWindow events) and you can also kill
      it using Exchange; the name displayed in Exchange's list is taken from @APPTITLE;
      if this is not specified, the initial display title will be used; the title text
      displayed in Exchange is taken from @APPVERSION; the description displayed in
      Exchange is taken from @APPDESCRIPTION; the Exchange Show/Hide feature can be
      suppressed by using the NOHIDE argument
    - Fix: StringRequest() with type #NUMERICAL was horribly broken (thanks to Juan Carlos
      Herran Martin for the bug report)
    - Change: SetPanning() accepts the special coordinate constants #LEFT, #CENTER, and
      #RIGHT now; the old (& undocumented) constants #PANLEFT, #PANRIGHT and #PANCENTER
      were removed
    - Change: FileRequest() uses a new format for the filter pattern now; just pass a
      string with all acceptable extensions separated by | to the function, e.g.
      "wav|8svx|16sv|iff|aiff" etc.; the old Amiga style pattern is still supported
      on Amiga compatibles, but the pattern must start with a "#" character; to display
      all files, specify either an empty string, an "*" or "#?"
    - New: GetTempFileName() returns a file name that can be used as a temporary file;
      this is important for multi-platform scripts because each platform stores its temp
      files in different locations (e.g. "T:" on Amiga compatibles)
    - Fix: ReplaceStr() did only replace the first occurrence of the search string
    - New: GetAttribute() supports type #CLIPREGION now; you can query the attributes
      #ATTRXPOS, #ATTRYPOS, #ATTRWIDTH, #ATTRHEIGHT using this type (requested by Kai
      Stegemann)
    - New: SetFPSLimit() and GetFPSLimit() are back but you normally should not find any
      reason to use them; they do not globally restrict the drawing fps but they only affect
      certain commands which call VWait() to restrict drawing speed; these commands are:
      PlayAnim(), MoveBrush() etc, DisplayTransitionFX() etc, Flip() and of course VWait()
      itself; by default, the FPS will be set to the monitor's refresh rate; thus, the
      commands listed before will run at different speeds with different refresh rates; if
      you want a constant speed, you can use SetFPSLimit(), but normally it is not necessary
    - Fix: Using PlayMusic() on a paused Protracker module did not play the Protracker module
      right from the start but resumed playback from the paused position
    - Fix: "Time" field of the PlaySample() argument table was handled incorrectly if used
      together with a custom pitch
    - Fix: #ATTRDURATION for #SAMPLE returned wrong time if used after a call to SetPitch()
    - New: The Mac OS X version of the HollywoodPlayer will look for command line
      arguments in the CFBundleExecutableArgs key of the Info.plist property list inside
      the generated application bundle if started from Finder; it you launch Hollywood
      applications from the Terminal, arguments will be taken from the command line
      instead
    - New: Mode argument of @DISPLAY preprocessor command accepts "FakeFullScreen" and
      "OwnScreen" types now, too; additionally, the @DISPLAY preprocessor command also
      recognizes the "ScrWidth," "ScrHeight," and "ScrDepth" tags (they are only used
      when display mode is set to "OwnScreen")
    - New: FAKEFULLSCREEN argument added; this is a convenience argument which configures
      Hollywood to open on the desktop, but make it look like it was a full screen mode
      by setting backfill to black and using a fixed borderless window
    - New: OWNSCREEN, SCRWIDTH and SCRHEIGHT arguments can be specified to make Hollywood
      open on its own screen; the advantage of the OWNSCREEN argument over the FULLSCREEN
      argument is that OWNSCREEN does not set any further flags; you still have full control
      over all the additional window settings like BORDERLESS, FIXED, BACKFILL etc.;
      SCRWIDTH and SCRHEIGHT can be used to specify the dimensions of the screen; if not
      specified, Hollywood will try to use the best fitting mode; if you specify 0 for
      SCRWIDTH or SCRHEIGHT, the dimensions of the desktop are used for the new screen;
      finally, you can use the DEPTH argument to specify the desired depth for the new
      screen; if DEPTH is not specified, the desktop's depth is used
    - Change: If Hollywood is started without arguments, it will automatically open in
      windowed mode now; previously it opened in full screen mode if started without arguments
    - Change: Data is now streamed directly from the applet/executable instead of written to
      a temporary file; only in the Amiga built it is sometimes still necessary to write
      the data to a temporary file because some functions of the AmigaOS API don't allow
      custom file functions (e.g. datatypes.library)
    - New: Added NOHIDE argument; if you pass this argument to Hollywood, the user won't
      be able to minimize the display (Hollywood will disable the minimize button, but
      you can still minimize the display by calling HideWindow())
    - New: Added event handlers "HideWindow" and "ShowWindow"; they will be sent to your
      script when the user minimizes the window (or expands it again); in order to have
      those events sent to your script, you need to install a listener via the command
      InstallEventHandler()
    - New: Added commands HideDisplay() and ShowDisplay() which allow you to show and hide
      the Hollywood display; the script execution will continue in hidden mode, but there
      will be no more gfx output
    - New: USEQUARTZ console argument allows you to force gfx output using Quartz 2D; by
      default, QuickDraw is used because it is much faster on my system than Quartz; this
      argument only effects the Mac OS version of Hollywood
    - New: GetVersion() allows you to retrieve information about the Hollywood version in
      use; this is especially useful to determine on which platform your script is running
    - New: GetFileAttributes() and SetFileAttributes() can be used to get/set several file
      attributes including file dates, comments, and flags (e.g. permissions etc.); some
      differences between the supported platforms apply; please see the documentation for
      information on what is supported on which platform; can also be used with directories
    - New: #ATTRHOSTWIDTH and #ATTRHOSTHEIGHT return the dimensions of the host desktop screen
      on which the Hollywood display is opened (use it with #DISPLAY as the super class)
    - New: #ATTRBORDERLEFT, #ATTRBORDERTOP, #ATTRBORDERRIGHT, #ATTRBORDERBOTTOM can be queried
      for #DISPLAY; they will return the left, top, right, or bottom sizes of the display
      border (if there is any); this is useful for advanced users who need to obtain that info
      for example to position the cursor using MovePointer() or for moving the display using
      MoveDisplay()
    - New: #ATTRXPOS and #ATTRYPOS can also be used with #DISPLAY now; queries the position of
      the display on the desktop
    - Fix: Memory leak in ARexx event handler (reported by Richard de Rivaz)
    - Fix: Under very rare circumstances, a wrong button event could be triggered (reported
      by Lazar Zoltan)
    - Fix: #STRUDEL effect could cause a complete system crash under certain circumstances
      (reported by Rafal Chyla)
    - New: Hollywood has landed on two new platforms: Win32 and Mac OS X are now supported!
      This is made possible by the new OS abstracted design of Hollywood. The kernel of
      Hollywood has been fully OS abstracted since version 2.5. Supporting new platforms
      is now only a matter of writing a driver for it. No changes to the Hollywood kernel
      are necessary!

    Version 2.5 R1 (19-Mar-07)

    - Change: Hollywood uses the charset of the system now under AmigaOS4; so you can also
      create text objects with Polish characters etc. (reported by Rafal Chyla)
    - Fix: CTRL-C in the CLI window spawning the Hollywood task is now handled correctly
      (reported by Lazar Zoltan)
    - Fix: Increased alpha map allocation for thick anti-aliased lines by 1 so that OpenCV
      has enough space to draw (memo: it subtracts 5 from the alpha map dimensions so we need
      to allocate at least 6 pixels)
    - Fix: Position of #DISPLAY and #ANIMDISK constants was in the wrong order which led
      to compatibility problems with applets that have been compiled with Hollywood 2.0
    - Fix: The Hollywood Player did not respect the tooltype settings in the icon
      (reported by Marco Fogli)
    - Fix: MoveDisplay() did not work correctly after ChangeDisplaySize() (reported by
      Paul Bloedel); +further fixes, Hollywood does no longer access the window structure
      directly to avoid these problems
    - Fix: If SetTimeout() and SetInterval() needed to free an old timer before starting
      the new one a wrong pointer was used which led to a system crash (reported by Paul
      Bloedel)
    - Change: Added some more true type fonts to the distribution (AmigaOS3 and WarpOS only)

    Version 2.5    (08-Mar-07)

    - Change: Updated Hollywood documentation
    - Change: Updated catalog descriptions and German translation; added new developer
      files for doing new translations
    - Change: Updated the Hollywood GUI and added a remote control for the Hollywood ARexx
      demonstration
    - New: Added Text example script which demonstrates the features of the new text engine
      in a resizable window
    - New: Added FormsDemo example script which demonstrates the completely new drawing
      library of Hollywood 2.5
    - Change: FontsDemo uses a system true type font now instead of a custom true type
      font loaded via ttengine.library (ttengine is no longer supported as of Hollywood 2.5!)
    - Change: PolygonTest example now also demonstrates the new Hollywood 2.5 form styles
      (#ANTIALIAS, #SHADOW, #EDGE); SizeWindow capability removed; would be too complicated
      because the border can get quite huge with odd window sizes
    - Change: The Zool and Pang cracktros will stream the sound now; this is possible now
      because OpenMusic() can stream sample formats
    - Change: The HollyAmp example script supports the new music streaming formats of
      Hollywood 2.5 now (IFF 8SVX, IFF 16SV, RIFF WAVE); also fixed a bug in HollyAmp
    - Fix: Lens.iff from the Lens example was a GIF file in reality; I have now converted it
      to IFF
    - Fix: BallsDemo example used a corrupt Protracker module; the replayer did not have
      any problem with it but it was still corrupt
    - Change: Adapted ImageLab for Hollywood 2.5
    - New: Added a groovy new example that communicates with the Hollywood GUI to
      demonstrate the ARexx library of Hollywood 2.5!
    - Fix: Not all libraries were shown in the "system information" dialog in the GUI
    - New: Attributes #ATTRXPOS, #ATTRYPOS and #ATTRONSCREEN can now be queried for type
      #SPRITE (requested by Kai Stegemann)
    - Fix: Wrong error message if sprite could not be found by GetAttribute()
    - Fix: Functions which also accepted percent values as arguments did not handle numbers
      specified as strings correctly
    - New: FlushFile() can be used to flush all pending buffers; this is needed if you
      switch between buffered/unbuffered IO on the same file; for advanced users
    - New: SetIOMode() allows you to switch between buffered and unbuffered IO; by default
      all functions of the DOS library will use buffered IO and that's okay for most uses;
      some advanced users, however, might prefer to use unbuffered IO which can be used to
      send data directly to DOS filehandles; for example if you open a console window with
      OpenFile() or you access the parallel port through the file system, unbuffered IO is
      clearly a better choice because it passes all data directly to the file system; all
      DOS functions will respect the setting made with SetIOMode()
    - New: ConvertToBrush() supports type #LAYER now
    - Fix: If there were overlapping buttons on the BGPic, hover was not handled correctly
      (reported by Simon Neumann)
    - Fix: Several fixes so that Hollywood works with the final version of OS4
    - New: Polygon() now uses double precision for the vertices; they're rounded to integer
      right before rendering the pixel data
    - Change: Hollywood.sys uses a new modular format now; the old format was still a relic
      from Hollywood 1.0 and not really suitable for all the different changes that have
      been made in the meantime
    - Fix: FreeSprite(0) freed all sprites on the display (reported by Nathan Hesterman);
      please note that you should not use IDs < 1 for your objects; the ID system needs to
      be reworked in order to allow that
    - Fix: Hollywood 1.x style ONKEYDOWN events were not emulated correctly in Hollywod 2.0
    - Change: Removed the second compatibility hack for Hollywood Designer 1.01; this hack
      is not required by Designer 2.0 either
    - New: Implemented a brand-new gfx driver for the AROS version; the Hollywood OS abstraction
      layer makes it possible; the standard gfx driver relied heavily on locking bitmaps
      which is not possible under every hosted AROS version and thus caused a HUGE slowdown;
      the new gfx driver for AROS does not need to lock bitmaps any more and hence is so
      much faster than the old one. This is as fast as it gets. Run Hollywood on AROS on
      a modern PC and enjoy the lightning speed!
    - Change: Usage of a table as the sixth argument to Polygon() is now deprecated; the
      6th argument is now reserved as a rotation argument; the table synopsis from Hollywood
      2.0 is still supported for compatibility's sake
    - New: Unified object types #ANIM and #ANIMDISK; to play an animation from disk just use
      LoadAnim() now with the new table argument "FromDisk" set to TRUE; you can use all
      the functions from the anim library with "FromDisk" anims then; the functions for
      anim layers with also work; the command PlayAnimDisk() still works but does nothing
      else than calling LoadAnim(), PlayAnim() and FreeAnim()
    - Fix: Round() did not work correctly on negative numbers
    - Fix: Wrong error message when changing the display size to a size larger than the host
      screen
    - New: RotateBrush() can also do anti-aliased rotations now; use the fifth optional
      argument to enable anti-aliased rotation mode
    - New: RotateBrush() can also zoom brushes; you can do a rotzoom by using the new two
      optional arguments factorx & factory; these are scaling factors which specify to much
      extent the brush shall be scaled
    - New: ScaleBrush(), ScaleAnim(), ScaleBGPic(), ScaleSprite() and ChangeDisplaySize()
      all accept an optional argument now which specifies whether or not the scaled gfx
      data shall be anti-aliased; alpha channel anti-aliasing supported for brushes and
      sprites
    - Fix: Improved scaling algorithm (old one had some issues; reported by Lazar Zoltan)
    - Fix: ExitOnError(FALSE) did not work correctly in user callback functions; Hollywood
      did not throw any errors but left the callback function
    - New: Added type #LAYERBUTTON to the MakeButton() function; this new type allows you
      to define layers as buttons; the fourth argument specifies whether or not the collision
      detection for the button shall be pixel-exact; this is useful for creating irregular
      shaped buttons now); the fifth argument specifies whether the button shall be hidden
      if the layer is hidden; the sixth argument is a function table with the same entries
      as in #SIMPLEBUTTON; if you free a layer, its button will also be killed
    - Fix: Freeing buttons or the current bgpic in OnMouseOver and OnMouseOut user functions
      could lead to a crash
    - New: All gfx primitives can now also be drawn using rotation; the following commands
      accept an optional argument now which specifies the rotation angle in degrees: Arc(),
      Box(), Ellipse(), Polygon(); the Circle() command does not support rotation because
      circles look the same with every rotation angle; this argument defaults to 0 which
      means no rotation
    - New: Arc() accepts a new parameter now which allows you to specify whether the arc
      shall be drawn in clockwise or anti-clockwise direction (defaults to TRUE which
      means clockwise drawing)
    - Change: HUNK_DEBUG information is no longer included the in the hunk header for
      68k/WarpOS executables; this saves memory because the OS loader won't load the data
      attached to the executable into memory now (thanks to Gunter Nikl for the hint!)
    - Fix: Using the THEN identifier after ELSEIF resulted in a crash of Hollywood; now
      the parser reports the error to the user instead of freezing the system (reported
      by Christoph Gutjahr)
    - Fix: Registering constants during parsing could invoke the garbage collector which
      could lead to random crashes at exit (reported by Lazar Zoltan)
    - Change: Polygon() also accepts negative coordinates in the vertices array now; also
      slightly changed the alignment of rotated polygons
    - Fix: Polygon was not closed correctly if the start coordinates were not explicitly
      specified as the end coordinates
    - Fix: RemoveItem() did not work correctly when trying to remove the last remaining
      element of a table (reported by Nathan Hesterman)
    - New: SetFormStyle() allows you to configure the style for the drawing primitives: The
      command accepts the styles #SHADOW, #EDGE, and #ANTIALIAS; the following commands support
      all three styles: Arc(), Box(), Circle(), Ellipse(), Polygon(); the Line() command
      only supports #ANTIALIAS style. #EDGE and #SHADOW are not supported for lines; usage
      of this command is similar to SetFontStyle(); the edge and shadow colors can also contain
      an inverted alpha value; anti-aliasing is fully implemented here including support for
      all fill styles (#FILLNONE, #FILLCOLOR, #FILLGRADIENT, #FILLTEXTURE); the implementation
      of SetFormStyle() required an almost complete rewrite of the drawing library; the new
      version is not nearly as fast as the old version of 2.0 was, but it is much more flexible
      now and the anti-aliased routines look great for line based polygons; the round forms
      are not perfect yet but still good
    - Fix: Line() function did not accept special coordinate constants as start/end points
    - New: The Line() function accepts a new argument now which specifies the line thickness
    - New: Alpha drawing now also supported for #FILLGRADIENT and #FILLTEXTURE; just pass the
      alpha value in the color argument of the functions of the drawing library (the rest of
      the color argument is ignored on #FILLGRADIENT or #FILLTEXTURE)
    - Change: When you draw gfx primitives with alpha blending and layers are enabled, the
      specified alpha value will no longer be used as the new layer's transparency; you will
      get a new layer that has no transparency setting
    - Change: Plot() can no longer be used with layers enabled; plot layers just don't make
      sense; if you really need a pixel layer, use Box() with width/height = 1
    - Fix: Plot() did not respect sprites at all
    - Fix: Plot() and ReadPixel() did not work correctly if a custom shaped clip region on a
      position different than 0:0 was active
    - New: TextOut() accepts a new optional argument which you can use to output word-wrapped
      text: just pass a width parameter in argument 5 and the text printed by TextOut() will
      not exceed this width; defaults to 0 which means no width restriction
    - New: TextOut() accepts a new optional argument now which specifies the text alignment;
      this change breaks with the old API; in previous versions the alignment was automatically
      set to #CENTER if x was #CENTER and to #RIGHT if x was #RIGHT; this is no longer supported
      now; you have to use the new optional argument now; this argument defaults to #LEFT
    - Fix: Evaluation of constant expressions in table arguments of preprocessor commands was
      horribly broken (reported by Nathan Hesterman)
    - Change: Removed a compatibility hack for Hollywood Designer in PlayAnim() and PlayAnimDisk().
      With the latest version of Designer, this hack is no longer necessary.
    - New: NextFrame() and InsertLayer() can now also be used with layers of type #ANIMDISK.
      This allows you to use huge animations that are played from this as anim layers, too.
      Quite useful. For AddMove() there is a new type called #NEXTFRAME2 which takes a layer
      id as source, thus allowing you to address both #ANIM and #ANIMDISK layers (whereas
      #NEXTFRAME only allows you to address #ANIM layers). #ATTRCURFRAME and #ATTRNUMFRAMES
      can also be used on layers of type #ANIMDISK now. [addendum Feb-07: #ANIMDISK now completely
      removed; to play anims from disk just use LoadAnim() with the new "FromDisk" tag]
    - New: Animations that use multiple palettes are now handled correctly
    - Change: The IFF ANIM loader now checks the DPAN chunk first to find out the number
      of frames in the animation
    - Fix: If OnSampleLoop or OnSampleEnd was set up before Hollywood opened ahi.device,
      then those event handlers were not installed at all
    - Fix: Freeing a sprite during preprocessor loading resulted in a crash
    - Fix: The "Time" argument of the PlaySample() command did not work correctly if the
      following two conditions were present: 1) time shorter than the sample duration &
      2) single sample frame size greater than 1 byte (e.g. stereo or 16-bit samples)
    - New: Peek() accepts an optional argument now, which can be used to peek a string with
      of a fixed length instead of auto-termination
    - Fix: When peeking a string using Peek(), the string returned had one character too many
    - Fix: UnrightStr() and Poke() did not handle strings with null character correctly
    - Fix: #BLEND, #FADE, #VFLOWLEFT, #VFLOWRIGHT, #HFLOWTOP, #HFLOWBOTTOM, #WALLPAPERLEFT,
      #WALLPAPERTOP, #ROLLLEFT, #ROLLTOP, #PIXELZOOM1, #PIXELZOOM2 did not work correctly
      on objects with alpha channel
    - Fix: Wrong behaviour of SetMusicVolume() when a stream was playing and SetMusicVolume()
      was used to modify the volume of a Protracker module
    - Fix: When SetMusicVolume() was used on a playing music, the new volume was applied but not
      memorized; thus, after ResumeMusic() the music would play in the old volume
    - Fix: MakeButton() did not accept special coordinate constants (reported by Kai Stegemann)
    - Fix: OpenMusic() could fail to open files if the path specification was relative and the
      current directory was changed
    - New: All music files declared using the @MUSIC preprocessor command will now be linked to
      the applet; even audio streams can be included in your executables this way; if you do not
      want to have them linked, use the Link=False option
    - New: OpenMusic() can stream IFF 8SVX, IFF 16SV, and RIFF WAVE sound files now. Sample data
      can be in 8 or 16 bit, mono or stereo; compression is not supported yet. Because there is
      no datatype API for streaming yet, Hollywood employs custom code to do it
    - New: PlayMusic() can loop the music now automatically; you can tell the function how many
      times the music shall be played through the second argument; use 0 for infinite looping;
      does currently not work with Protracker modules
    - New: ConvertToBrush() allows you to convert various objects to brushes. Sprites are
      supported here too. The Hollywood 1.x function GetBrushLink() simply calls ConvertToBrush()
      now, too. Brush link support was already removed in version 2.0.
    - New: SaveBrush() and SaveSnapshot() can save PNG files now, too. This is especially
      useful for SaveBrush() because, if the brush has an alpha channel, a PNG with alpha
      transparency will be written. The PNG datatypes of the various Amiga systems do not
      support file writing yet, so you will need pngalpha.library for this feature.
    - New: ARexx interface. Many people have asked me to add ARexx support to Hollywood
      so here it is. You can now address ARexx by using the commands SendRexxCommand() and
      RunRexxScript() - remember that the first line of an ARexx script must always be a
      comment! Furthermore, you can also receive messages from other applications by
      installing your own ARexx port. You can do this with CreateRexxPort(). After you have
      created a rexx port, you have to install the new "OnARexx" event handler using the
      InstallEventHandler() function. Every time an ARexx command is received, this handler
      will be called then with "action" initialized to "OnARexx". You will also receive the
      command in the "command" field and the fields "args" and "argc". "args" is a string
      containing "argc" arguments pre-parsed by Hollywood and delimited by null characters;
      use SplitStr() to convert them to single strings; you may also access the unparsed
      arguments; they will be stored in the "rawargs" field
    - Fix: When many timeouts returned at the same time, some were usually lost because
      Hollywood was limited to 16 timeouts per vm cycle; this limit has been removed now
      so there's virtually no limit of timeouts and every timeout function should be
      executed (reported by Alexander Weber)
    - Change: Hollywood scheduler does no longer run as its own task; gives about 10% more
      performance on expensive scripts
    - Change: CheckEvent() removed. Please use WaitEvent() instead.
    - New: You can also copy raw alpha channel data with Hollywood now. To achieve this
      special mode, set SetAlphaIntensity() to the special mode #VANILLACOPY; this mode
      will do a vanilla copy of the alpha channel data; if you call a drawing command
      which does not contain any alpha data, nothing will be written to the brush's alpha
      channel
    - Fix: Possible memory access fault in CopyFile()
    - Fix: When SelectXXX() was active, and a window resize occurred, and a double buffer was
      set up, Hollywood forgot to scale the double buffer
    - Change: #TYPEWRITER effect looks much better now due to the new text engine. Expect
      some cool new text effects soon.
    - New: Text engine completely rewritten. Now much better than the old one! You can now
      change font styles on-the-fly using format tags. The following format tags are
      currently implemented: [b], [u], [i], [color], [edge], [shadow]. Edge and shadow support
      for anti-aliased fonts is now fully implemented and looks great. Edge and shadow
      transparency on anti-alias fonts also supported. This is powerful. Use it wisely.
    - New: CreateTextObject() accepts an additional argument now that allows you to give
      the object a specified width; the text will be wordwrapped then
    - New: #ATTRCURSORX and #ATTRCURSORY can be used to find out the current cursor
      position (#DISPLAY is the super class of these attributes)
    - New: TextExtent() allows you to retrieve detailed information about the boundaries
      of a string; remember that TextWidth() only returns the cursor advancement of a string
    - New: Italic soft style for anti-aliased fonts now supported!
    - New: Just like the functions of the draw library, the text library supports
      transparent text now, too. Just specify an inverted alpha value before the color!
      (0 = solid, 128 = 50% transparency, 255 = 100% transparency). You could also use
      this feature to create an outline text font style: To do this set the transparency
      of the font color to full ($ff) and use the new edge style. Hollywood will only
      draw the text edges then, resulting in nice outlined text.
    - New: Introducing new soft styles for text: #SHADOW and #EDGE. You can configure
      the shadow color, size and direction as well as the edge color and size. Use
      SetFontStyle() to install them.
    - Change: ttengine.library no longer supported. The text engine is about to undergo
      a major change and I'm concentrating now on the bullet interface (ft2.library on
      OS4, freetype2.library on MOS/AROS). For AmigaOS 3.x there's a back-port of
      freetype2.library available, or you can use ttf.library but the latter does not
      support anti-aliased glyph output.
    - Fix: Plot() did not handle alpha value correctly
    - Fix: When drawing an alpha-blended rectangle with #FILLNONE, the four edges
      were alpha-blended twice
    - Fix: Cursor position will be reset to 0:0 on a display size change and to the
      top-left of a clip region on SetClipRegion()
    - Fix: When SelectXXX() was active and a display size occurred, the margin and
      cursor settings were not adapted correctly
    - Fix: luaV_tostring() always returned a random value instead of 1
    - Fix: Hollywood could crash the system on window refresh when SelectMask()
      or SelectAlphaChannel() were active
    - Fix: WriteString() was broken
    - New: Hollywood is completely OS abstracted now; all OS dependent functions have
      been abstracted from the main source code so that it is possible to write
      Hollywood backends for other platforms now

    Version 2.0 R1 (10-Jun-06)
    - Fix: On some OS4 systems Protracker modules that tried to change the tempo could
      crash (reported by Rev. Bloedel)
    - Fix: Hollywood tried to write to const* memory several times; this causes a crash
      with the latest beta OS4 kernel which protects those areas (reported by Tony Wyatt)
    - only the AmigaOS4 interpreter and player binaries got an update; the rest are kept
      at revision 0 from 30-Dec-05

    Version 2.0:   (30-Dec-05)
    - Change: Updated Hollywood documentation; now twice as big!
    - Change: Updated catalog descriptions and German translation
    - Change: Removed Settings tool; no longer supported; you can use @DISPLAY
      with Mode="Ask" instead
    - Change: OnSampleEnd event is only sent when the sample has finished playing;
      it is not sent when StopSample() was called
    - New: Added a funky new Welcome 2.0 script!
    - New: Added many new examples: AlphaChannel, HollyPac, ClipRegions, FloodFill,
      Bouncing ball, Melt, HollyAmp, Collision, Aladdin cracktro (original by Prodigy),
      Zool ECS cracktro (original by Melon), Pang! cracktro (original by Horizon),
      Lemmings cracktro (original by Skid Row), Badger Badger Badger; the cracktros
      and the Badger dance were contributed by Mr.X of Barracuda; thanks mate!
    - Change: Vectorballs example now bears the name "AnimationTechniques"; I also
      removed the BGPic Vectorballs script and added a version that uses sprites
    - Change: Renamed RainbowCreator example to Gradients
    - Change: removed MoveAnim, WinFileCopy, Scroller and WBFadeOut examples
    - Change: APPTITLE, APPVERSION, APPCOPYRIGHT, APPAUTHOR, APPDESCRIPTION arguments
      (only present in internal 2.0 betas) are now implemented as preprocessor commands,
      i.e. @APPTITLE, @APPVERSION and son. These preprocessor commands allow you to
      store some information about your program in your applet/executable
    - Change: Removed STAYACTIVE argument/tooltype; no longer required; the background
      window will take care of the matter automatically
    - New: Optimized loading for graphics specified in @SPRITE and @BRUSH. Hollywood
      will cache the image now if it is to be loaded multiple times so that loading
      goes much faster now
    - Change: LoadSprite() uses a table for the optional arguments now (just like
      LoadBrush() does)
    - New: TrimStr() can be used to strip leading or trailing characters from a string
    - Change: All functions of the string library work correctly now with strings that
      have embedded zeros ("\0"); for instance, StrLen("\0\0\0\0") returns 4 now and
      you can also do wild stuff like SplitStr("Hello\0World\0Hello\0Hollywood", "\0")
    - New: #ATTRTYPE and #ATTRPITCH can be used with audio streams now, too
    - New: #ATTRBITRATE can be used to find out the bitrate of a compressed audio file; note
      that if the file is encoded using a VBR, you will get the bitrate of the current
      frame
    - New: OnMusicEnd event handler is triggered when a music has reached the end or
      is stopped! Doesn't work with Protracker modules because they'll loop infinitely
    - New: Completely rewrote the Hollywood GUI! Now has a showcase for all examples
      and some other cool features!
    - New: Pairs() and IPairs() return common iterators for the generic for loop
    - New: NextItem() allows you to traverse a table; be careful with the return
      value which is Nil when the traversal is done! You cannot use "While r <> Nil"
      because that would also terminate the loop on r:=0. Use "While GetType(r) <> #NIL"
      instead which is the only reliable way to check a variable against Nil in
      Hollywood because in expressions, Hollywood regards Nil as 0! Don't expect
      that NextItem() returns the items in the order you initialized them!
    - Change: Different Protracker timer is now used on OS4. This had to be changed
      because Davy Wentzler's sound drivers are buggy and he refuses to fix it.
    - New: If double buffering is active and the size of the display is changed, the
      double buffer will automatically draw its graphics scaled so that it fits the
      display
    - New: The commands of the drawing library (graphics primitives) can draw alpha
      blended graphics now, too. Simply specify an alpha value in the highest 8 bits
      of the RGB color, e.g. $80ffff00 will draw yellow with 50% alpha transparency
      (50% = 128 = $80). Note that the alpha value is inverted as in SetLayerTransparency():
      0 means no transparency, 255 means full transparency. Normally it is just the other
      way round (cf. SelectAlphaChannel). Alpha drawing is highly optimized and supported
      by Polygon(), Arc(), Ellipse(), Circle(), Box(), Line() and Plot(). Use ARGB() to
      easily combine a RGB color with alpha, e.g. ARGB(128, #AQUA).
    - New: ARGB() combines a RGB color with an alpha value
    - New: Every preprocessor command which preloads files accepts an optional argument
      "Link" now which specifies if the corresponding file shall be linked into an
      applet/executable when a script is compiled; NODATALINK is obsolete now (was only
      present in internal 2.0 betas); link defaults to TRUE, so you only have to set
      it when you do not want a certain file to be linked into the applet/executable
    - New: Many of the command line options can also be specified in your script now.
      For instance, you can now specify in your script whether it shall run in full screen
      or windowed mode. The disadvantage here is, that if you hard-code the settings in
      your script, it is not possible to change those settings from the command line.
      All arguments have to be specified in the @DISPLAY preprocessor command. Currently
      supported are: Mode (can be "Windowed", "FullScreen" or "Ask"), Borderless, Sizeable,
      Fixed, HideTitleBar, Backfill. Backfill expects an other table which can contain the
      following arguments: Type ("Color", "Gradient", "Texture" or "Picture"), X, Y, Color,
      StartColor, EndColor, Brush. FIXSETTINGS is now obsolete (was only present in internal
      2.0 betas)
    - Change: Backfill mode RAINBOW is now called GRADIENT; RAINBOW is still accepted, though
    - New: @FILE preprocessor command allows you to preload files for read-only access.
      The cool feature here is that files specified in @FILE will also be linked to your
      applets/executables and you can work with them as if they were normal files
    - New: Polygon(), Circle(), Ellipse() and Arc() are much faster now in many cases
    - New: WaitTimer() call waits until a timer has reached the specified time, then
      resets it and continues with the script; useful in loops that must not run faster
      than a specified limit!
    - New: RemoveSprites() removes all sprites that are on the display; if the optional
      argument "keep" is set to true, the sprites will be removed internally but not
      from the display. In case keep=True, they will remain on the display but as normal
      gfx, not as sprites.
    - New: ToNumber(). Basically does the same as Val() but takes an additional base
      argument which can be used to convert strings to numbers with bases 2-36
    - Change: LoadBrush() accepts a table as argument 3 now which can be used to specify
      the transparent color, whether an alpha channel shall be loaded, global alpha
      setting and brush cropping; everything can also be specified in the new @BRUSH
      preprocessor command
    - Change: Compiler recognizes identical files and links them in the applet/executable
      only once
    - Change: FramesPerRow arguments in CreateSprite(), @SPRITE and CreateAnim() are
      optional now; number of frames used as default
    - Change: Transparent windows on OS3 do not get a clip region installed any longer
      because that would prevent them from using layers
    - New: Polygon() accepts an optional table argument now which can be used to scale
      or rotate the polygon before it is drawn
    - New: ChangeInterval() can be used to change the frequency of a running interval!
    - New: Error() allows you to make Hollywood quit with a custom error message
    - New: GCInfo() and CollectGarbage() allow control over Hollywood's garbage collector;
      not necessary normally
    - New: Print(), NPrint() and DebugPrint() use ToString() now, too
    - New: ToString() function in Hollywood's system library; if a table is passed to
      this function, ToString() will look for a __tostring metamethod and call it if
      present
    - New: RawEqual(), RawGet() and RawSet() can be used to query a table without
      invoking a metamethod
    - New: Metatable support added! Use the functions SetMetaTable() and GetMetaTable()
      to deal with them. The following metamethods are supported: __index, __newindex,
      __add (+), __sub (-), __mul (*), __div (/), __divint (\), __mod (%), __lsh (<<),
      __rsh (>>), __or (|), __and (&),  __xor (~), __pow (^), __unm (-), __not (~),
      __eq (=), __lt (<), __le (<=), __concat (..), __call ()
    - Change: When creating an applet/executable, Hollywood checks if the files are
      in a supported format before linking them
    - New: @MUSIC preprocessor command. @MODULE command removed because Protracker
      modules are only a sub-class of the music class now. Please note that @MUSIC
      currently does not link audio streams into applets/executables; those files will
      always be kept external. Protracker modules, however, are linked to the applet/
      executable if specified in @MUSIC (unless NODATALINK is active)
    - New: #ATTRFORMAT can be used to find out the type of an open music; returns a
      string
    - Change: Merged Protracker module playback with the new music commands: OpenMusic(),
      PlayMusic() and so on should now also be used when playing Protracker modules.
      The old LoadModule(), PlayModule()... functions are still supported for compatibility
      but are likely to be removed in one of the next versions!
    - Change: GetSamplePosition() removed (command was only available in internal
      beta versions); please use #ATTRPOSITION together with #SAMPLE instead
    - New: #ATTRDURATION and #ATTRPOSITION can be used to find out the duration and
      position (in milliseconds) of a music
    - New: Introducing audio stream support! Many people have asked me to implement support
      for stream playback, so here it is. The following functions are implemented: OpenMusic(),
      CloseMusic(), PlayMusic(), StopMusic(), PauseMusic(), ResumeMusic(), SeekMusic(),
      SetMusicVolume(), IsMusic(). Currently, you can only open audio files with
      OpenMusic(). In the future, I might add support for other formats like ogg vorbis
      etc. Limitations: Only one music can play at a time & music and Protracker modules
      cannot be played at the same time
    - New: Introducing special functions for double buffered graphics! It is no secret
      that double buffering with Hollywood could already be achieved by using two brushes
      and drawing to them using SelectBrush() but the new functions can do this faster
      and easier! There are just three functions: BeginDoubleBuffer(), EndDoubleBuffer()
      and Flip(). See the examples and documentation to learn more; restrictions: Double
      buffering does not work with transparent displays, layers and sprites! Clip regions
      supported!
    - New: Box() and Line() can draw their graphics very fast now in most cases; I've
      added special code for straight-forward drawing that can be used if the following
      conditions are met: 1) layers are off, 2) there's no custom shaped clipping rectangle,
      3) the gfx object does not collide with a sprite, 4) output device is either the main
      display or a brush or double buffer
    - Change: CreditsRoll example displays Hollywood Designer credits now
    - New: Added a small gfx toolbox for the sprite library: CopySprite(), ScaleSprite()
      and FlipSprite() should be enough to get you started with sprites; if you need
      more advanced functions, use the brush functions to manipulate the gfx and then
      use CreateSprite() to convert the brush to a sprite
    - Change: 3DText uses a sprite now instead of an IFF ANIM; good for systems without
      a correct datatype, i.e. MorphOS and AROS
    - New: Attributes #ATTRHASMASK and #ATTRHASALPHA allows you to query sprites and
      brushes to check if they have a mask or an alpha channel
    - New: GetAttribute() supports #SPRITE now (attributes: #ATTRWIDTH, #ATTRHEIGHT,
      #ATTRTRANSPARENTCOLOR, #ATTRNUMFRAMES, #ATTRCURFRAME)
    - Change: Clip regions don't work together with layers any longer! Layers should only
      be used for presentations... most applications do better without layers now
    - Change: Sprites don't work together with layers any longer!
    - Change: MixBrush() takes alpha channel of the source brush into account now
    - Change: Mask and alpha channel in a brush are now mutually exclusive, i.e. you cannot
      have a mask that carries both a mask and an alpha channel; SelectAlphaChannel()
      will delete a possible mask and SelectMask() a possible alpha channel
    - New: Introducing a replacement for the so called "keywords": Preprocessor commands!
      Preprocessor commands are basically the same as the keywords, but they have a
      different, more flexible syntax. Each command has to be prefixed by an at character (@)
      and accepts a number of arguments that must be separated by commas (keyword arguments
      were separated by slashes). The new syntax allows the usage of (constant!) expressions
      in arguments and also tables can be specified, which is useful for more complex symbols
      like @SPRITE. The following preprocessor commands are implemented: @BGPIC, @BRUSH, @ANIM,
      @SAMPLE, @MODULE, @SPRITE, @VERSION (replaces %HOLLYWOOD), @DISPLAY (combines the
      keywords %TITLE, %DISPLAYPOSITION, %DISPLAYDESKTOP, %DISPLAYCOLOR and %DISPLAYSIZE),
      @INCLUDE. Preprocessor commands can be placed anywhere in the script but for readability
      reasons they should be at the beginning of the script. Also, it is strongly advised to
      use the @VERSION symbol in the first line of your code, so Hollywood can check if the
      installed Hollywood interpreter can handle this script. All 1.9 keywords are still
      supported for compatibility reasons of course. Please read the documentation.
    - Change: %DISPLAYPOSITION, %INCLUDE, %SPRITE keywords removed. Preprocessor commands
      are coming up!
    - Fix: Small memory leak in FreeAnim()
    - New: Collision() can detect collision between sprites (use type #SPRITE)
    - New: Introducing sprites! Hollywood now has functions for you to work with sprites.
      Sprites are graphic objects that are always on the front of the display and can easily
      be moved around. A sprite can only be on the display once. E.g. if you display sprite 1
      at 100:100 and then display it again at 200:200, the sprite will be moved from 100:100
      to 200:200. Hollywood sprites are implemented completely in software; hence, there
      are no limits in size, number, whatsoever. Sprites can also have a mask or alpha channel. A
      sprite can also have multiple frames of animation. This is all perfect for games. Be
      sure to check out the documentation and examples to see what can be done. Hollywood's
      sprite library currently offers the following functions: CreateSprite(), DisplaySprite(),
      FreeSprite(), RemoveSprite(), MoveSprite(), LoadSprite(), %SPRITE keyword
    - New: Hollywood's window is now of simple refresh type
    - New: Collision() now also detects collisions between objects that have an alpha channel
    - Change: Added emulation for GetBrushLink(); the new version will not obtain a link
      to the brush but copy it; type #LAYER not supported; this is mainly because Designer
      uses GetBrushLink()
    - Change: Senso uses Arc() now instead of prepared brushes
    - Change: SelectMask() and SelectAlphaChannel() create the mask/alpha channel not
      before the first drawing operation to the brush; e.g. SelectMask(1) EndSelect
      does not create a mask for brush 1 any longer
    - New: Function DeleteMask() kills the mask of a brush; this command does basically
      the same SetBrushTransparency(brush, #NOTRANSPARENCY)
    - New: DumpLayers() prints info of all layers in the system (private)
    - Change: Because of the removal of the "quiet" argument, the optional x&y arguments
      (new in Hollywood 2.0) for ShowLayer() are now on position 2 and 3 for ShowLayer()
    - Change: Removed optional "quiet" argument in: SetLayerTransparency(), SetLayerTint(),
      SwapLayers(), RemoveLayer(), ShowLayer(), HideLayer()  ---> Designer 1.01 uses
      HideLayer() with the "quiet" argument --> adaption necessary! e.g. you could use
      SelectBGPic() with the current bgpic as a workaround. In this way the layer will be
      hidden but not redrawn...
    - New: Introducing substitute layers! If you free/modify a brush/anim/etc that is
      on the display, the gfx data will be saved so that refresh is still possible!
    - Change: If SelectBGPic() is used on the current background picture, all layers
      will be inserted in hidden mode; you can bring them to the front with ShowLayer()
    - Change: SelectBGPic() can only be used with layers on; in internal beta versions
      of Hollywood 2.0 it was possible to use it with layers off (direct render mode);
      not possible anymore
    - Change: Removed BeginRefresh(), EndRefresh() and SetRefreshMode(); these commands
      were only available in internal beta versions; Sprites are coming up!
    - Change: Removed GetBrushLink(); this command just made things too complicated!
    - Change: SetClipRegion() splitted in CreateClipRegion(), SetClipRegion() and
      FreeClipRegion()
    - Change: FloodFill() can only be used on a brush now; alpha channel and mask flooding
      no longer supported; it does not make much sense IMHO; memo: sources for alpha & mask
      flooding are still available in ppc_support.c in the last smart refresh back-up
    - Change: Implementation of Cls(): If output mode is BRUSH/ALPHACHANNEL/MASK, the
      Cls() command will clear the area with the specified color (BRUSH) or alpha intensity
      or mask mode; if output type is BGPIC or MAINWINDOW, Cls() will remove all layers
      and refresh objects and will leave an empty bgpic on the display
    - New: APPTITLE, APPVERSION, APPCOPYRIGHT, APPAUTHOR, APPDESCRIPTION arguments
      allow you to place some information about your program in your applet/executable.
      Especially the APPVERSION argument is useful to put version strings in your
      program, e.g. APPVERSION "$VER: MyProgram 1.0 (12-06-05)". These arguments make
      only sense when used with COMPILE! [VOID; use @APPTITLE, @APPVERSION... instead]
    - New: FIXSETTINGS argument allows you to fix the display settings in your
      applet/executable. For example, if you execute "Hollywood myscript.hws COMPILE
      ram:myprg.exe FULLSCREEN FIXSETTINGS", then myprg.exe will _always_ be started
      in fullscreen mode. Even if the user executes "myprg.exe WINDOW", your program
      will be started in fullscreen mode because you fixed that setting in the executable!
      Useful. This argument makes only sense when used with COMPILE! [VOID; specify
      settings in @DISPLAY instead]
    - New: NODATALINK argument will prevent the compiler from linking all data files
      specified in the keywords into the applet/executable. This argument is useful
      if you have different executables for let's say AmigaOS3, AmigaOS4, MorphOS and
      WarpOS. In this case it would not make much sense to have all data linked into
      each of the executables. It's much better to keep the data extern in this case!
      This argument makes only sense when used with COMPILE! [VOID; use the Link
      argument which all preprocessor commands support now]
    - New: Introducing Hollywood applets! You can compile your scripts into applets
      now by using EXETYPE=APPLET. Hollywood applets can be started by Hollywood
      or the freely available HollywoodPlayer which is a special version of Hollywood
      that can run applets only! Applets are platform independent, all versions of
      Hollywood/HollywoodPlayer can run your applets no matter on which platform
      they were compiled!
    - New: Keywords can now be anywhere in the script! The %CODE keyword is no
      longer necessary! However, it is advised that you use the keywords at the
      beginning of the script (for readability reasons)
    - New: Hollywood is now also available in a i386 native version for AROS (the
      Amiga Research Operating System); this closes the circle: Hollywood is now
      available for all major Amiga compatible operating systems
    - Change: Using keymap.library instead of console.device now
    - Fix: FULLSCREEN/BESTFIT did not always choose the best screenmode available
    - New: StrToArray() converts a string to an array of characters (0 - 255)
    - Change: Migrated the 68k assembler Protracker replayer in ptahiplay.library to
      clean, portable C in a 12+ hours coding shift on Christi Himmelfahrt 2005; this
      means that ptahiplay.library is no longer required by Hollywood! (whoa, finally...)
    - Change: Senso example plays cool sounds now (made by CreateSample)
    - New: CreateSample() allows you to create your own samples from raw wavedata
    - New: Added event handlers OnSampleLoop and OnSampleEnd; these allow you to
      create scripts that are exactly timed with samples; you can install the handlers
      by using InstallEventHandler(); be careful with OnSampleLoop in connection with
      very short, looped samples; they can easily block your program
    - Change: PlaySample() implementation changed; playback is now started immediately
      without the 50-100 milliseconds delay; additionally, you can start up to 4 samples
      at the same time by adding them as optional arguments; playback will be exactly
      synchronized then; read the doc
    - Change: Puzzle example shows a clock now; no problem with SetInterval()
    - New: PadNum() converts a number to string and pads it with leading zeros
    - Change: Default mode of GetTimer() is always milliseconds now; optional
      argument is ignored; this is an API break but noone used #SECONDS for GetTimer()
      anyway so this is harmless
    - Change: Adapted all examples to the new Hollywood 2.0 design; they would have
      worked without the rewrite too but the examples shall be role models for good
      Hollywood programming and therefore I decided to rewrite them completely to
      show you how to program Hollywood correctly
    - Change: Welcome example shows a spinning Commodore logo now
    - Change: WavyLogo example has now additional buttons for selecting a FPS rate;
      this demonstrates SetInterval() with different rates; additionally, the
      actual FPS are shown in the upper right corner of the display
    - Change: Removed CrossfadeTest example; cannot work any longer because
      transparent windows have clip regions which prevent blitting to transparent
      areas
    - Fix: Some Protracker issues when using more than one module and/or PauseModule()/
      ResumeModule()
    - New: ClearTimeout() can be used to stop a timeout function previously installed
      via SetTimeout()
    - New: SetTimeout() can be used to tell Hollywood that it shall call the
      specified function after the specified time has passed; this is very useful if
      your scripts needs specific timing (e.g. timing to music); you can use as
      many timeouts as you like; Hollywood's internal timer scheduler will manage
      all that for you
    - New: ClearInterval() deinstalls an interval that was installed using SetInterval()
    - New: SetInterval() allows you to install a function that is called in regular
      intervals (e.g. 40 milliseconds for 25fps [40 = 1000/25]); please use this
      function instead of polling loops! Using SetInterval() guarantees that your
      scripts run everywhere at the same speed! This is important because the new
      computers like AmigaOne, Pegasos have much more power than 68k systems; you
      can use as many intervals as you like; Hollywood's internal timer scheduler will
      manage all that for you
    - New: InstallEventHandler() allows you to specify functions that should be called
      when a specific event occurs, e.g. CloseWindow, OnMouseMove, OnKeyDown etc.
    - New: Added DeleteButton(), DisableButton(), EnableButton() which allow you to
      manage the new buttons
    - New: MakeButton() is the new, universal function to create v2.0-style buttons;
      they can monitor different events and call a function with a message instead
      of skipping to a label; this command supersedes CreateButton() and the %BUTTON
      keyword; buttons created with MakeButton() are attached to the current bgpic!
    - Change: Removed support for ONJOYXXX events; noone used them so I do not want
      to support them any longer because they do not fit in the new concept
    - New: The table passed to PlaySample() as argument 2 can also contain the fields
      "volume" and "pitch"; this is easier than to call SetVolume() or SetPitch() for
      the sample
    - New: PlaySample() can play a sample now for an exactly specified duration;
      just pass a table as the second argument with the field "time" initialized to
      the number of milliseconds the sample shall be played
    - Change: Removed the internal fps limiter; SetFPSLimit() and GetFPSLimit() as
      well as the FPSLIMIT argument/tooltype do not have a function any longer;
      timing should be done by the scripts
    - Change: Terminator -1/$FFFFFFFF in ReplaceColors() is optional now
    - Change: AddTab() can be called with any number of arguments now; this allows
      you to add multiple tabs with just one call
    - New: CopyFile() lets you use a callback function now which can be used to
      display a progress bar, confirm the overwriting of existing files and confirm
      the unprotection of write/delete protected files
    - New: GetAttribute() can also retrieve information about samples now. Attributes
      supported for samples are currently #ATTRTYPE, #ATTRDURATION and #ATTRPITCH
    - New: Unpack() unpacks a table
    - New: MatchPattern() returns TRUE if a string matches the specified pattern
    - Change: Val() can convert binary values now; simply prefix them with a '%'
    - New: As it does not make much sense to make InvertBrush() invert the mask and alpha
      channel information also, I have added two new commands which will do that:
      InvertMask() and InvertAlphaChannel()
    - New: FloodFill() command allows you to flood a bordered area in the current output
      device with a fill color; alpha channel and mask flooding are fully supported
    - Change: ReadDirectory() returns two values now: The first specifies the number of files
      in the directory, the second specifies the number of dirs in the directory
    - New: Support for percentage arguments; you can specify percent values instead
      of absolute values with the following functions: SetLayerTint(), SetLayerTransparency(),
      ScaleBrush(), ScaleAnim(), ScaleBGPic(), ChangeDisplaySize(), TintBrush(), MixBrush(),
      SetAlphaIntensity(), SetVolume(), SetMasterVolume(), MixRGB() simply pass the percent
      value as a string, e.g. "50%"
    - Change: Better error messages are displayed now if Hollywood cannot find
      a specified object; it will tell you the exact type and the id of the object it
      could not find
    - New: StringRequest() allows you to ask the user for a string or number in an
      easy way; requires reqtools.library
    - New: Hollywood's coordinate constants can be fine-tuned now, i.e. you can add
      or subtract values from them; e.g. DisplayBrush(1, #CENTER, #CENTER - 20) will
      display brush 1 slightly above the vertical center
    - New: GetRealColor() returns the real representation color of a given color on
      the current screen; e.g. $FFFFFF becomes $F8FCF8 on a 16-bit screen as we have
      only 5 bits for red and blue and 6 bits for green; this command is useful in
      connection with ReadPixel(); read the doc; GetRealColor() was already added in
      version 1.5 as a private command, now it's public and documented
    - Change: Rnd() generates 'better' random numbers now
    - New: SplitStr() parts a string into pieces; you need to specify a separator
      token (e.g. "|"); SplitStr() returns a table with the pieces as well as the
      number of created pieces
    - New: GetSamplePosition() allows you to determine the position (in milliseconds)
      of a currently playing sample; good for sync'ing gfx with sound; the second
      value returned specifies the loop counter of the sample
    - Change: When calling one of the SelectXXX() functions, Hollywood will preserve
      the following settings now: cursor position, margins and clip region; they
      will be restored when you call EndSelect()
    - Change: When displaying a transparent bgpic on AmigaOS3, Hollywood will
      install a clip region that matches the shape of the bgpic; so you can't
      display gfx on the transparent part of the window any longer => AmigaOS3
      pseudo-transparent windows behave the same way as the real transparent
      windows under MorphOS now [VOID]
    - Fix: Optional argument of StrStr() was never documented; it specifies how
      many decimal places a float shall have and defaults to 2
    - New: SetClipRegion() allows you to define a clip region for all graphics
      functions of Hollywood; you can use a rectangle clip region or even a custom
      shaped clip region by using the #SHAPE argument together with a brush whose
      mask will be used for the clip region then; if you use custom shaped clip
      regions, the drawing routines will be slower but the speed is still good
      (PPC supported clip routines)
    - New: Arc() allows you to draw partial ellipses/circles; if layers are
      enabled, the command will add an #ARC layer; this command is useful if you
      want to draw pie charts etc.
    - Change: DisplayTransitionFX() can no longer be used to display transparent
      bgpics and you can also not display a non-transparent bgpic if the current
      picture is transparent
    - Change: Hollywood uses real transparent windows now on MorphOS; looks much
      better but is kind of slow
    - New: ALPHACHANNEL prefix for the %BRUSH keyword can be used to import the
      alpha channel from a png image; with LoadBrush() you will have to use
      the optional argument number 4 to specify if you want to import alpha
      channel information; loading alpha channel from png pictures does currently
      only work with MorphOS because the OS3.9 picture.datatype does not support
      alpha channel; I still need to find a solution for that [ALPHACHANNEL prefix
      is VOID:use @BRUSH 1, "test.iff", {LoadAlpha = True} instead]
    - New: Effects are now negated when using UndoFX() or HideLayerFX(); e.g.
      #REVEALLEFT becomes #REVEALRIGHT. Certain special effects like the
      zoom/stretch, roll & wallpaper effects use new custom reverse effects
      which look much better than the ones that were used before
    - Change: #WALLPAPERx, #ROLLx & #PIXELZOOMx effects work with transparent
      objects now correctly too; looks great!
    - New: CropBrush() allows you to crop a brush with ease; mask and alpha
      channel cropping fully supported
    - Change: ShowLayerFX() can show all layers now (was restricted to brush
      and text object layers in v1.9)
    - Fix: Effects from the #FLOW group did not work correctly with text objects
      (was only broken in 1.9; it worked in 1.5)
    - New: MixRGB() can be used to mix two RGB colors together at a specified
      ratio
    - Change: Multiple font styles can be set with a single call to SetFontStyle()
      by OR'ing them into the bitmask, e.g. SetFontStyle(#ITALIC|#BOLD)
    - New: Anti-aliasing is back! Now fully implemented and compatible with all
      Hollywood functions (layers, effects etc.); Use the new #ANTIALIAS font
      style to activate it. Bitmap fonts can also be pseudo anti-aliased now
      but it is advised to use true type fonts for the real eye candy
    - New: DeleteAlphaChannel() removes the alpha channel from a brush
    - New: SetAlphaIntensity() allows you to set the intensity for rendering
      into a brush's alpha channel (0=100% transparency - 255=0% transparency)
    - New: Introducing support for alpha channels! Use SelectAlphaChannel()
      to render into a brush's alpha channel! Hollywood uses highly optimized
      routines for drawing alpha channel images which should give you
      satisfactory results even on 68k
    - New: SetRefreshMode() can be used to define the refresh mode during
      BeginRefresh()/EndRefresh(). Please read the documentation about it. [VOID]
    - New: Introducing a new animation technique: BeginRefresh()/EndRefresh().
      All graphics calls that are executed after BeginRefresh() will not be
      drawn until EndRefresh() is called. The graphics will be cached and will
      be drawn by EndRefresh() without flickering. This technique can only be
      used with layers switched off! [VOID:use sprites]
    - New: Added some functions to use arrays as lists: InsertItem(),
      RemoveItem() and ListItems()
    - New: FilePos() returns a file's current cursor position
    - New: ReadShort(), ReadInt(), ReadFloat(), WriteShort(), WriteInt(),
      WriteFloat() can be used to write numbers to a file
    - Change: Break() and Continue() accept an optional argument now which
      you can use to break/continue loops in higher levels than the current
      one; optional argument must be specified in brackets (like Return()...)
    - Change: While(), For() and the If() statement now have short forms:
      While <expr> Do <stat>, For <...> Do <stat> and If <expr> Then <stat>
      ElseIf <stat> ... Else <stat>; saves some typing :-) - Important note for
      the short if statement: All branches must be on a single line so that
      the compiler does not confuse them with a previous if statement!
    - Change: If a function returns one or more values, they must be enclosed
      in brackets so that the compiler does not confuse them with following
      statements
    - Change: SelectBGPic() can now be used to render into a background picture
      directly (just like SelectBrush() does); this only works when layers
      are switched off; with layers enabled SelectBGPic() just adds layers as
      you know it [VOID:removed]
    - New: Added Cls() command which can be used to clear the screen very fast;
      some restrictions apply (no layer support etc.); optional argument can
      be used to specify a color
    - New: Collision() command accepts the types #BRUSH and #LAYER now. So you
      can easily detect collisions between brushes and layers now. The
      collision detection is implemented pixel-exact with full respect to
      transparent areas!
    - New: Added %INCLUDE keyword which allows you to include code from other
      script files in your main project [VOID:use @INCLUDE]
    - New: #ATTRLAYERID allows you to find out the id of a named layer using
      GetAttribute()
    - New: You can assign names to layers now using the command SetLayerName();
      this is more convenient than using layer numbers which are not constant;
      every command that works with layers will also accept strings now besides
      layer numbers
    - New: Added Dim() and DimStr() for easy array creation & initialization;
      if used in a function, they create local arrays
    - New: Added With ... EndWith statement for easy access to data members
      [VOID; not going to be supported; you can use metatables for that purpose
      (__index metamethod; also takes a table as argument)]
    - New: SaveSnapshot() allows you to create snapshots of your scripts
      easily; you can make snapshots of your display, the host window and
      even of the whole desktop screen with this function
    - New: SaveBrush() can save brushes to a file
    - New: Added a function for easy detection of collisions: Collision();
      it currently supports only the type #BOX but there is more to come
    - New: Added the popular "immediate if" statement IIf(). This is a very
      compact version of the if-statement. Please keep in mind that both true
      and false values are evaluated in every case - no matter if the condition
      is true or false: IIf(a <> 0, 5 / a, 0) --> this won't work for a:=0
      (division by zero error)
    - Change: ShowLayer() accepts two optional arguments which can be used to
      re-position the layer
    - New: Added %DISPLAYPOSITION keyword which can be used to set the position
      where the Hollywood display shall be opened on the screen (defaults to
      #CENTER/#CENTER) [VOID:use @DISPLAY {X=<pos>, Y=<pos>}]
    - New: CopyAnim() can be used to copy a whole animation to a new anim
      object; useful e.g. in connection with ScaleAnim()
    - New: CreateAnim() allows you to create animations from brush sources;
      very useful if you do not want to use IFF ANIMs because they only work with
      a correct animation.datatype (which MorphOS does not have currently)
    - New: #NEXTFRAME type is now supported by AddMove(). This makes animation
      via DoMove() much easier because you do not have to do all the #BRUSH/#HIDEBRUSH
      stuff with many different brushes any more. Just use one anim layer and
      change its frames!
    - Change: InsertLayer() can insert #ANIM layer types now too
    - New: #ATTRNUMFRAMES allows you to find out how many frames the specified
      anim object has; #ATTRCURFRAME can be used to find out the frame which
      is currently displayed in the specified anim layer
    - New: NextFrame() displays the next frame of the specified anim layer or
      jumps to a specific frame (if the optional argument is specified)
    - New: Real anim layers are supported now! This means that you can display
      all frames of an animation in one single layer. Very useful!
    - Change: Brush links are now fully dynamic; if the source object of a brush
      link changes, the linked brush will be updated also [VOID:brush link support
      was completely removed; emulation provided]
    - Fix: Several fixes in connection with brush links
    - Change: Extended the PolygonTest example script with some fill style
      buttons to demonstrate this new feature
    - Fix: #USELAYERPOSITION was added but not documented in Hollywood 1.9
    - New: Added two new fill styles for the graphics primitives draw functions:
      #FILLGRADIENT and #FILLTEXTURE allow you to draw gfx primitives filled with
      a gradient or textured
    - New: Rewrote the whole image processing kernel of Hollywood. Expect DRAMATIC
      speed increases on classic Amigas (like 10 times faster...); modifying images
      is now done without any overhead; on WarpOS the PPC is used to compute the
      new images. Try the ImageLab example with Hollywood 2.0 and you'll see what
      I mean! Also, many of the transition fx which include zooming run more than
      twice as fast now...enjoy! It doesn't get any faster.
    - Change: guigfx.library and render.library are not required by Hollywood any
      longer (because palette support is gone now)
    - Change: Hollywood does not run on palette screenmodes any longer. This step
      was long overdue; palette screens are a thing of the past. Get over it :)
    - Change: #BLEND fx can be used with BGPics now again (was already possible in
      v1.0 but not in v1.5 - v1.9)
    - New: CreateGradientBGPic() accepts an optional argument now which specifies
      the rotation in degrees for the gradient; argument #2 specifies the gradient
      type now (currently defined is #LINEAR only); compatible with Hollywood 1.x
    - Change: Data files declared in the keywords section will be loaded now
      after the script was compiled successfully; so if you want to check for
      syntax errors, you do not have to wait the whole time until the data is loaded
    - Change: ReadPixel() returns only 0 or 1 if SelectMask() is in use (0 means
      pixel is transparent, 1 = non transparent)
    - Change: Color parameter of Box(), Plot(), Circle(), Ellipse() and Polygon()
      is optional now because if SelectMask() is active, we do not need it
    - New: SetMaskMode() can be used to choose the render mode for SelectMask();
      two arguments are possible: #MASKVISIBLE and #MASKINVISIBLE
    - New: SelectMask() allows you to render into the mask of a brush; this makes
      nice custom transparency effects possible
    - Change: RotateBrush() creates a mask automatically now for every brush you
      rotate; if the brush already has a mask, RotateBrush() will rotate it too;
      no need to call SetBrushTransparency() any longer after calling RotateBrush()
    - Change: MixBrush() respects transparent area in the second brush now
    - New: MoveDisplay() allows you to change the position of the display window
    - Fix: Cursor position will be reset to 0:0 now when you display a new BGPIC
    - New: Added some functions to manipulate memory directly (only for advanced
      users): AllocMem(), FreeMem(), Peek(), Poke(), FillMem(), CopyMem(), ReadMem(),
      WriteMem() and DumpMem(); but there are no pointers! These functions are
      designed to work with memory handles so they are safe in every case
    - New: CRC32() calculates the CRC-32 checksum of a given file
    - New: IsDirectory() checks if the given argument is a file or a directory
    - New: Rename() command added to change the name of files or directories
    - New: CopyFile() command allows you to copy single files or even whole
      directories (full recursion!); Comments, attributes and date stamps are
      copied also; patterns can also be specified
    - New: DeleteFile() can also delete whole directories now; patterns can be
      specified and callback functions are supported also; read the documentation
    - New: OpenFile() can now open a file also in read- or write-exclusive mode
    - Fix: The #SCROLLxxx effects will add now a #BGPICPART layer instead
      of #BRUSH layer when using DisplayBGPicPartFX()
    - Change: FreeBrush(), FreeAnim(), FreeTextObject() and FreeBGPic()
      will free all layers that refer to the object now also [VOID:layers will
      be substituted instead; reason:compatibility]
    - Change: DisplayBGPicPartFX() accepts now destination x,y and layers
      arguments just like DisplayBGPicPart() does
    - Fix: Layers that are not visible because their coordinates were out of
      the display could cause an error with some commands
    - New: GetType() returns the type of the variable passed in
    - Change: Hollywood's window is no longer a GZZ (gimme zero zero) window
    - Change: InKeyStr() leaves only one #PRINT layer on the display instead
      of separate layers for all chars
    - Change: WaitKeyDown() waits now until the key is up again
    - Change: Print() and NPrint() accept any number of arguments now
    - Change: SetLayerLight() is now called SetLayerTint() because light is
      a bit confusing; the old command still works for compatibility
    - Change: FileRequest() accepts an optional mode argument now which allows
      you to open the requester in save or multiselect mode
    - New: PathRequest() pops a requester which allows the user to select a
      path
    - New: FullPath() combines filename and directory to a fully qualified path
    - New: BinStr() converts a value to a string with 32 bits
    - Change: CreateRainbowBGPic() is now called CreateGradientBGPic() because
      a gradient is not always a rainbow ;-) The old name can still be used
      but is considered obsolete now
    - New: ScaleBGPic(), ScaleBrush(), ScaleAnim() and ChangeDisplaySize() accept
      the new constant #KEEPASPRAT now which calculates the missing size automatically
      according to the aspect ratio of the bgpic/brush/anim/display
    - Fix: DisplayBrushPart() did not accept special coordinate constants
    - Change: DebugPrint() superseded DebugVal() and DebugStr(); supports
      any number of arguments now
    - New: CtrlCQuit() allows you to turn the control-c quit option on and
      off
    - New: #HOLLYWOOD constant holds the Hollywood version string now
    - Change: String and float values for constants are now possible too
    - Change: Val() returns another argument now which tells you how
      many characters it converted
    - New: Min() and Max() accept any number of arguments now
    - New: Constant #PI
    - New: Added math functions ASin(), ACos(), ATan(), ATan2(), Ceil(),
      Floor(), Exp(), Deg(), Rad(), BitTest(), BitSet(), BitClear(), BitXor(),
      BitComplement(), Sgn(), Limit(), LdExp(), FrExp()
    - Change: SetVarType() is obsolete now; there are easier ways to work
      with arrays now
    - New: Rewrote several integral parts of Hollywood for better performance
      and less memory consumption
    - New: Colon between commands on one line is no longer necessary
    - New: Constants can be defined after the %CODE keyword now using the
      identifier Const
    - New: Local variables. Do not use them together with GOTO/GOSUB!
    - New: Support for character constants using 'x' (up to 4 bytes)
    - New: Hex numbers can be prefixed with 0x also now
    - New: Support for long strings (strings split over multiple lines)
    - New: Functions, multi-dimensional arrays & structures are possible now
    - New: Continue() can be used to jump to the end of a loop
    - New: Break() can be used to break loops and the Switch-Case statement
    - New: Added new statements for controlling the program flow: Switch-Case-
      EndSwitch, Repeat-Until, Repeat-Forever, Block-EndBlock, For-In-Next
      (Generic For using iterator functions)
    - New: Expression support. Operators: + (plus), - (minus), * (multiply),
      / (divide), \ (integer divide), % (integer modulo), << (left shift), >> (right shift),
      & (bit and), ~ (bit xor), | (bit or), AND (logical and), OR (logical or),
      NOT (logical not), ^ (power), .. (concatenate), - (negation), ~ (bit negation)
    - New: Hollywood uses 64-bit variables now. This allows you to store really
      big numbers and floats!
    - New: Added a fully-featured, state of the art programming language for
      Hollywood. The new language is based on the kernel of the light-weight
      application extension language Lua. The syntax and functionality however
      is in many ways different from Lua but the most powerful features like
      dynamically-typed scripts are kept of course. You will soon notice
      the power of this new language which allows you to create full-blown
      applications now with Hollywood. Please read the Hollywood documentation
      for an introduction to the new language. Compatibility with the Hollywood 1.x
      is almost fully guaranteed. Please read API-Changes.txt for more information.
      This is what you have been waiting for. Hollywood finally has a modern
      scripting language suitable for all purposes.
    - Started work on Hollywood 2.0 (April 2004).

    Version 1.93  (18-Mar-05)
    - Change: Updated GUI
    - Change: Updated Settings tool and documentation
    - New: Added PPC-native AmigaOS4 version and cross-compiler so that you can
      create AmigaOS4 executables on each Hollywood platform
    - Change: Slightly changed the Protracker implementation because of problems
      with AHI on OS4 (now using ptahiplay.library v2.0)
    - Fix: Illegal memory access which caused a crash on OS4
    - Fix: Redraw problems with transparent windows on OS4/MorphOS when moving
      them out of the screen
    - Fix: Several AHI fixes/improvements
    - Fix: #CLOSEWINDOW event was not activated upon startup (only in 1.9)
    - Fix: When using a borderless window together with the SIZEABLE argument,
      the size gadget got lost after the first manual resize operation
    - Fix: Chr() did not always work as expected
    - Fix: #DIAGONAL did not always work because a variable initialization
      had been forgotten
    - Fix: Width calculation was not correct for all font types
    - Fix: TextOut() and CreateTextObject() sometimes created a broken
      text object when alignment was #RIGHT
    - Fix: Sort() was broken

    Version 1.92  (20-Aug-04)
    - Change: Updated Hollywood documentation
    - Change: Updated GUI
    - Change: Updated Settings tool and documentation
    - Fix: StrLen() was not documented in the German guide file
    - Fix: #STAR wipe caused a crash on some Amithlon systems; uses a work-around
      now because I do not really know what caused the crash (reported by Don Cox)
    - New: Added STAYACTIVE argument/tooltype which forces the window to stay
      always active. This is useful with a borderless window on an own screen.
      The user could accidentally deactivate the window without noticing it
      and then the window would not receive any more messages which could confuse
      the user
    - New: Added FULLSCREEN argument/tooltype which turns on all the options you
      need for a nice, professional full screen display
    - Fix: Loading an IFF picture (or something else) as a sample crashed Hollywood
      after displaying the error message (reported by Don Cox)
    - New: In the Settings tool, you can specify the optional tooltype AMIGAOS3,
      MORPHOS and WARPOS. This allows you to include only ONE Settings tool which can
      be used to configure ALL of your executables for different platforms
    - Change: GUI displays Scala scripts now too in the file requester (requested
      by Don Cox)
    - Fix: Wait() does no longer eat up all your CPU power (reported by Anarka)
    - Fix: Another SetBrushTransparency() bug when the screen is using BGRA32 pixels
      (reported by hooligan/dcs)
    - Fix: CreateTextObject() leaked a few bytes per call (reported by Robin)
    - Fix: When Hollywood cannot obtain its exclusive pen on RTG screens it
      will use a shared pen now (reported by Don Cox)
    - New: Hollywood can be interrupted now by pressing CTRL-C
    - Fix: Some error messages were too long to be displayed correctly
      (reported by Costel Mincea)
    - Fix: Window contents of the GUI and the Settings tool were not always
      refreshed (reported by Jacek Piszczek)
    - Fix: SetBrushTransparency() did not work correctly on graphics boards
      using BGRA32 pixel format (reported by Mahendra Tallur, Costel Mincea)
    - Fix: Some commands did not wait for the blitter to be finished which
      could cause a broken display on native graphics.library systems and also
      on Picasso96 which still seems to use the blitter (!)

    Version 1.9   (08-Apr-04)
    - New: Added GetSongPosition() and GetPatternPosition()
    - New: Added four new examples: BallsDemo (high-end), Circle Text,
      Polygon Test and Wavy Logo
    - Change: Updated CreditsRoll, Da Cool Quiz, Object Transition FX,
      WinFileCopy, Fireworks, Puzzle, Rainbow Creator, Welcome, Transition FX
      examples for Hollywood 1.9
    - New: Added catalog descriptions for developing your own catalogs.
      Hollywood.cd, Settings.cd and GUI.cd can be used to translate
      Hollywood into your language
    - Change: Updated the Settings tool
    - Change: Reworked the GUI a bit and added support for WarpOS in
      the GUI too (when compiling a script)
    - Change: PlayAnimDisk() supports an additional argument now which
      specifies how many times the animation shall be played
    - New: Italic, bold and underline styles are supported now also for
      color, truetype and intelli fonts
    - New: A lot of new transition effects have made their way into
      Hollywood 1.9. Here's a list: #CLOCKWIPE, #STAR, #HSTRANGEPUSH,
      #VSTRANGEPUSH, #SLIDELEFT, #SLIDERIGHT, #SLIDETOP, #SLIDEBOTTOM,
      #SPIRAL, #SWISS, #QUADRECT, #HSPLIT, #VSPLIT, #UPNDOWN, #CARDTOP,
      #CARDBOTTOM, #SUN, #WATER1, #WATER2, #WATER3, #WATER4, #STRUDEL,
      #DISSOLVE, #PIXELZOOM1, #PIXELZOOM2, #ZOOMIN, #ZOOMOUT, #CRUSHLEFT,
      #CRUSHRIGHT, #CRUSHTOP, #CRUSHBOTTOM, #VFLIPCOIN, #VLOWFLIPCOIN,
      #HFLIPCOIN, #HLOWFLIPCOIN, #TURNDOWNTOP, #TURNDOWNBOTTOM, #TURNDOWNLEFT,
      #TURNDOWNRIGHT, #WALLPAPERLEFT, #ROLLLEFT, #TYPEWRITER (this is a text
      object only effect!); please note that the following effects are
      considered "high-end" and are therefore very slow on 68k: #WATER 1-4,
      #STRUDEL, #WALLPAPERLEFT; if you use #RANDOMEFFECT with the 68k version
      of Hollywood, the program will not choose any high-end effects
    - New: Hollywood is now available in a separate version for WarpOS
      and it can also create executables for WarpOS now!
    - New: Box() accepts an additional argument now that allows you to
      create a rectangle with rounded corners
    - New: Polygon() allows you to draw polygons
    - Change: Precalculation is no longer supported. Get a faster Amiga.
    - Fix: Generated executables did not work from Workbench when they had
      a space in the filename
    - Change: When using the screenmode requester, Hollywood will suggest
      a screenmode now that would fit
    - New: If STARTCOLOR and ENDCOLOR are specified together with BACKFILL=PICTURE,
      you will get a gradient as the background with the picture on top
    - New: PICTRANS argument allows you to give your picture a transparency
      setting (only applicable if BACKFILL=PICTURE)
    - Fix: STARTCOLOR and ENDCOLOR were in the wrong order when using
      BACKFILL=RAINBOW
    - Fix: MoveXXX() and the #SCROLLXXX effects were not always exact
    - New: PICXPOS & PICYPOS arguments/tooltypes allow you to position the
      picture in the backfill window (only applicable if BACKFILL=PICTURE);
      special constants like #LEFT, #RIGHT... may be specified
    - New: SCALEPICTURE argument/tooltype scales the picture to the dimensions
      of the backfill window (only applicable if BACKFILL=PICTURE)
    - New: BESTFIT argument/tooltype will select the screenmode automatically
      for you (DEPTH may be specified too)
    - New: HideLayerFX() allows you to hide layers with a transition
      effect
    - New: Added BreakWhileMouseOn() which is useful in some cases
      (see documentation)
    - Change: WhileMouseOn() did not really work as it was meant to
      be. This change could lead to an incompatibility with old
      scripts! Please read APIChanges.txt for more information
    - Fix: Moving a box that was created with #FILLNONE and has a
      transparency assigned did not work correctly
    - New: You can use Hollywood with FBlit now! If you have lots of
      fast memory but no graphics board, install FBlit with the
      AllocBitMap() patch activated and Hollywood will use your fast
      memory for all graphics data. Very useful. But never ever use FBlit
      if you have a graphics board!
    - Fix: Hollywood could crash totally when running out of memory
      during the display setup. Sorry for that.
    - Change: Improved the way of color handling on RTG systems
    - New: Added commands Red(), Green(), Blue() and RGB() for easy
      access to RGB values
    - Change: You can free the BGPIC that is currently displayed now
      with FreeBGPic(); Hollywood will install a temporary picture then
      which will only be visible if areas need to be redrawn
    - Change: Optimized the DoMove() command for more speed. It requires
      more memory now but is possibly a lot faster by using a new technique
    - Change: Box() command improved + speed-up
    - Change: Wait() accepts an optional argument now which specifies
      the wait precision; so you can have real precise waits now (by
      using #MILLISECONDS as the optional argument)
    - New: SetPanning() allows you to define where samples are played
      (ranges from 0 to 255; left speaker only = 0, both speakers = 128,
      right speaker only = 255)
    - New: ShowLayerFX() can show layers with a transition effect
      (currently only works with BRUSH and TEXTOBJECT layer types)
    - New: InsertLayer() supports type #TEXTOBJECT now and can insert
      hidden layers
    - Fix: InsertLayer() was totally broken in v1.5
    - Fix: Enforcer hit when calling WhileMouseOn() with no active
      button
    - Change: Roll transition effects work now with objects also
    - Fix: StopTimer() works now (reported by Telemar Rosenberger)
    - New: Added CheckEvent() as a much more flexible replacement for
      the removed EventHandler() functions
    - Change: As announced in previous versions: EnableEventHandler() and
      DisableEventHandler() are gone now
    - Change: Rewrote the whole event handler part; most events are now
      cached for a specified time. Use SetEventTimeOut() to define it.
    - Change: New technique for redrawing portions of the old background
      picture when using DisplayTransitionFX(); avoids some problems
    - Change: #HOPENGATE, #HCLOSEGATE, #VOPENGATE & #VCLOSEGATE effects
      do not work with objects any longer; they did not really fit to
      objects
    - New: German catalog for Hollywood
    - New: Added German guide! Big thanks to Alexander Pfau for doing this
      really huge work!
    - New: Finally added locale.library support! Experience Hollywood in
      your language now!
    - Fix: Program crash when trying to display a transparent picture with
      a transition effect (when switching from a non-transparent picture)
    - Fix: Running multiple versions of Hollywood did not work in full
      screen mode
    - Fix: When compiling a script in the GUI, the GUI did always say "success"
      even if an error occurred (reported by Jean-Yves Auger)
    - Change: GUI can be controlled now by keyboard
    - Fix: GUI works now also on 640x480 screens
    - New: MoveLayer() allows you to smoothly scroll layers across the
      display; the function works exactly like the other MoveXXX() functions
    - New: The MoveXXX() function group accepts a new optional argument for
      some special effect like bouncing, damped, sine, curve, smooth out etc.
    - New: Added #SCROLLNORTHEAST, #SCROLLSOUTHEAST, #SCROLLSOUTHWEST and
      #SCROLLNORTHWEST transition effects
    - Change: Reimplemented the #SCROLLXXX transition effects group; it allows
      now the scrolling of brushes and other objects too and it can also be
      undone properly (runs the effect in reverse mode!)
    - Change: Rewrote some transition effects for more speed on 68k
    - Fix: Margin settings were not adapted after a display resize (reported
      by Jörg Renkert)
    - Fix: Dragbar and size gadget could disappear after a display resize
      (reported by Jörg Renkert)
    - Fix: Hollywood works on DraCo now (thanks to Michael Burkhardt)
    - Change: lowlevel.library is no longer opened at the start; it will only
      be loaded when joystick input is required
    - Change: Rewrote some input handling code to decrease CPU usage in idle
      mode
    - Fix: GUI no longer eats up all your chip memory
    - Fix: ptahiplay.library could not be flushed from memory in version 1.5
    - Fix: Most of the sample control functions were broken under certain
      conditions (reported by Telemar Rosenberger)
    - Change: MakeDirectory() will scan the whole path now and create all
      directories that do not exist
    - Fix: Confusing transition effect names in the #RECTBACKXXX group
    - Fix: Removed useless code which was only required in Hollywood 1.0 but
      I forgot to remove it in 1.5 and it slowed down color font loading
    - Fix: Special event labels like ACTIVEWINDOW, INACTIVEWINDOW,
      ONBUTTONCLICKALL, ... did not work in compiled scripts (reported
      by Robin Hueskes and Telemar Rosenberger)

    Version 1.5   (19-Jun-03)
    - New: Added free settings tool and the GUI uses MUI now and has some
      extended features
    - New: Added new examples: Fireworks, WBFadeOut, WobbleText, TextZoom,
      Vectorballs, SinusScroller, Blanker, Lens, ImageLab, Amiquarium; updated
      all the old ones to work with Hollywood 1.5
    - Change: Hollywood will switch now automatically to BORDERLESS mode if
      the script cannot be displayed just because of the window borders size
    - Change: identify.library is no longer required
    - Change: Removed GetSystemInfo() as it did no longer fit in the concept
    - Change: MorphOS compiled scripts use now a PPC-native startup code
      instead of 68k code
    - New: EXETYPE argument/tooltype lets you specify which executable type the
      compiler shall output; currently supported: CLASSIC and MORPHOS
    - New: %DISPLAYDESKTOP keyword starts with the desktop (Workbench) as the
      initial BGPic
    - New: GetAttribute() recognizes type #LAYER now with attributes #ATTRTYPE,
      #ATTRWIDTH, #ATTRHEIGHT, #ATTRVISIBLE, #ATTRXPOS & #ATTRYPOS
    - Fix: Some arrays were not imported correctly when using a compiled
      script (reported by Wil Haslup, Jörg Renkert)
    - Change: MoveXXX() rewritten; about 50% faster now
    - New: Added some additional arguments/tooltypes: NOSOUND globally disables
      all sound routines, PRECALCULATION turns on precalculation for cpu intensive
      effects and FIXED opens Hollywood's window as not movable
    - New: Introducing support for Intellifonts!
    - New: 16-bit samples are supported now through sound.datatype v41 by Stephan
      Rupprecht (optional; if you only use 8-bit samples you can keep the old one!)
    - New: RndF() returns a random float between 0 and 1 just like in many other
      languages
    - New: MakeDirectory() creates new directories
    - New: EscapeQuit() works the same way like LeftMouseQuit() but Hollywood will
      quit when the user presses ESCape at any time
    - New: ScaleBGPic() can scale your background pictures
    - New: Added various operations for brushes: ReplaceColors(), InvertBrush(),
      RotateBrush(), BrushToGray(), FlipBrush(), MixBrush(), TintBrush()
    - New: SetPointer() can replace the default mouse pointer with your own
      one (requested by Telemar Rosenberger)
    - New: SetLayerTransparency() and SetLayerLight() allow you to change the
      way a layer is displayed (this is very slow because heavy calculations
      are necessary)
    - Change: Removed #CROSSFADEPRECALC, #BLENDPRECALC & #FADEPRECALC. Precalculation
      should be specified by using EnablePrecalculation()
    - Change: SetPitch() and SetVolume() work also now when the sample is not
      playing
    - Change: Documentation was updated
    - New: GetBrushLink() supports #BGPIC and #TEXTOBJECT now
    - Change: GetTimer() supports now an additional argument which specifies if
      you want the time in seconds or milli-seconds
    - New: AddMove() supports now #UNDO and #REMOVELAYER
    - New: Master volume control implemented through the commands GetMasterVolume()
      and SetMasterVolume() and the argument MASTERVOLUME
    - New: InKeyStr() allows you to read full strings, numbers etc. from the
      keyboard (requested by Christoph Gutjahr)
    - New: Improved keyboard support: WhileKeyDown(), WaitKeyDown(), IsKeyDown()
    - New: AddMove() supports now new types: #LAYER, #HIDELAYER, #HIDEBRUSH
      and #INSERTBRUSH
    - New: RemoveLayer(), SwapLayers(), ShowLayer(), HideLayer(), FreeLayers()
      and InsertLayer() implemented for the ultimate layer control
    - New: Attribute #ATTRLAYERS returns number of layers for a specified BGPic
      or for the display
    - New: Undo() accepts an additional boolean for silent undo
    - New: You can declare your own constants now by using the keyword %CONSTANT
    - New: Constants for 16 basic colors: #BLACK, #MAROON, #GREEN, #OLIVE, #NAVY,
      #PURPLE, #TEAL, #GRAY, #SILVER, #RED, #LIME, #YELLOW, #BLUE, #FUCHSIA,
      #AQUA, #WHITE
    - New: GetBrushLink() can get links to other brushes also
    - New: Keyword %DISPLAYCOLOR allows you to specify a background color when
      using a blank display
    - New: HexStr() converts a value to a hex string
    - New: Even more new math functions: Abs(), Min(), Max(), Mod(), Shl(), Shr(),
      Pow(), Sqrt(), Round(), Int(), Frac(), Log(), Ld(), Ln(), Rt()...enjoy!
    - Change: Undo system is now fully integrated with layers; you can enable
      and disable the whole system by just calling EnableLayers() / DisableLayers()
    - Change: Constants must be accessed now by using the '#' prefix; I'm sorry
      but this change was absolutely necessary. I wish I would have implemented
      it this way right from the start but I didn't. Therefore you will have
      to adapt your scripts now.
    - New: Hollywood will load now MS-DOS formatted scripts also (with carriage
      return + linefeed)
    - New: ClearEvents() kills all defined events
    - New: Correct support of loop frames for Anim5 animations and Deluxe Paint
      anim brushes
    - New: TextHeight() returns height of a string rendered with the currently
      selected font
    - Fix: Big String array bug fixes which caused a lot of trouble (reported
      by Christoph Gutjahr, Andreas Laaser, Marco Reuters)
    - New: GetAttribute() can return the transparent color of objects now
      by using #ATTRTRANSPARENTCOLOR. And it can also return the currently
      displayed BGPic by using GetAttribute(#DISPLAY, 0, #ATTRBGPIC)
    - New: You can use the events ONBUTTONCLICKALL, ONBUTTONRIGHTCLICKALL,
      ONBUTTONOVERALL and ONKEYDOWNALL to query global input through these
      few labels; the id of the event can be retrieved by calling GetEventCode()
    - Change: Reprogrammed event handler; more flexible now and it can also disable
      events like SIZEWINDOW, CLOSEWINDOW...
    - New: You can also query the Joystick state by using JoyDir() and JoyFire()
    - New: Introducing Joystick support: Use labels ONJOYUP[x], ONJOYUPRIGHT[x],
      ONJOYRIGHT[x], ONJOYDOWNRIGHT[x], ONJOYDOWN[x], ONJOYDOWNLEFT[x], ONJOYLEFT[x],
      ONJOYUPLEFT[x], ONJOYFIRE[x] to catch Joystick input. [x] is the port
      number (normally you will want to use 1 which is the game port)
    - New: You can specify one of the following constants for transition effect
      speed: #SLOWSPEED, #NORMALSPEED, #FASTSPEED. Hollywood will choose the
      correct speed setting then by itself
    - New: A lot of cool new transition effects: #RECTCENTER, #RECTNORTH, #RECTNORTHEAST,
      #RECTEAST, #RECTSOUTHEAST, #RECTSOUTH, #RECTSOUTHWEST, #RECTWEST, #RECTNORTHWEST,
      #SCROLLLEFT, #SCROLLRIGHT, #SCROLLTOP, #SCROLLBOTTOM, #STRETCHLEFT, #STRETCHRIGHT,
      #STRETCHTOP, #STRETCHBOTTOM, #HSTRETCHCENTER, #VSTRETCHCENTER, #ZOOMCENTER, #ZOOMNORTH,
      #ZOOMNORTHEAST, #ZOOMEAST, #ZOOMSOUTHEAST, #ZOOMSOUTH, #ZOOMSOUTHWEST, #ZOOMWEST,
      #ZOOMNORTHWEST, #HFLOWTOP, #HFLOWBOTTOM, #VFLOWLEFT, #VFLOWRIGHT, #HOPENGATE, #HCLOSEGATE,
      #VOPENGATE, #VCLOSEGATE, #PUSHLEFT, #PUSHRIGHT, #PUSHTOP, #PUSHBOTTOM, #PUZZLE,
      #DIAGONAL, #ROLLTOP, #WALLPAPERTOP, #RECTBACKCENTER, #RECTBACKNORTH, #RECTBACKNORTHEAST,
      #RECTBACKEAST, #RECTBACKSOUTHEAST, #RECTBACKSOUTH, #RECTBACKSOUTHWEST, #RECTBACKWEST,
      #RECTBACKNORTHWEST
    - New: Introducing Hollywood moves: Use AddMove(), DoMove(), ClearMove()
      to move as many objects as you want in one drawing operation (requires
      layers)
    - New: ReadPixel() reads a single pixel from the current render device
    - Change: Backfill code is more flexible now
    - New: STARTCOLOR can also be used now together with BACKFILL=PICTURE
    - New: BRUSHFILE can be specified instead of BRUSH in argument list
    - New: BACKFILL can now be used also on Workbench
    - Change: Better algorithm for CreateRainbowBGPic()
    - Fix: Box() drawed the box too large (+1 width, +1 height)
    - New: EnablePrecalculation() + DisablePrecalculation() - global control
      over precalculation
    - Fix: Crash with variables that used long names
    - New: LoadAnimFrame() and PlayAnimDisk() for the ultimate anim control
      PlayAnimDisk() graphics can be undone by using #ANIMDISK object
    - New: SetBrushTransparency() and CopyBrush()
    - Change: DisplayBGPicPart() has more functions now
    - Fix: WriteLine(), WriteChr() and WriteString() could cause problems
    - New: SetFillStyle() allows you to specify a filling style for the
      drawing functions (Ellipse(), Circle(), Box())
    - New: Protracker modules are also played now using AHI; this allows you
      to play samples and modules at the same time using full channel mixing!
      Support for P61, THX & MED modules has been dropped; might be re-implemented
      later using a plugin
    - New: AHI is now used for playing samples; syntax of PlaySample()
      has changed, check the documentation
    - New: Frames per second are limited now to 30 to keep the timing
      upright on PPC machines; you can modify this limit by using the
      SetFPSLimit() command. I never thought that such a limit would be
      needed but Hollywood on the Pegasos is really too fast :-)
    - Change: Removed Rainboot emulation; will be re-implemented later using
      a plugin
    - Change: Removed IsAnimPlaying() and WaitAnimEnd(); they are no longer
      necessary because PlayAnim() runs synchronously now
    - Change: PlayAnim() runs synchronously now; this had to be changed because
      the old PlayAnim() from Hollywood 1.0 did not really fit into the concept
    - New: Introducing off-screen rendering with SelectBGPic() and SelectBrush();
      some restrictions apply; read the documentation
    - New: GetBrushLink() command allows easy access to single anim frames
      by linking them to a brush id; please read the documentation about
      brush links
    - New: #PRINT, #BGPICPART, #BRUSHPART, #BOX, #CIRCLE, #ELLIPSE, #PLOT, #ANIM
      support for Undo() and UndoFX()
    - Change: Reworked Print(), TextOut() and CreateTextObject(). They are slower
      now but fully compatible with layers and undo and just everything!!
    - Fix: Shift key no longer raises false events (reported by Andreas Laaser)
    - New: Create blank gfx objects of any size with CreateBrush() and CreateBGPic()
    - New: Right mouse support - IsRightMouse(), WaitRightMouse(), WhileRightMouseDown()
      and ONBUTTONRIGHTCLICK (requested by Christoph Gutjahr)
    - Change: Improved float support
    - New: MouseX() and MouseY() return the current mouse position (requested
      by several users)
    - New: More math functions - Sin(), Cos(), Tan() and Wrap()
    - New: PUBSCREEN argument which allows Hollywood to appear on any public
      screen (requested by Andreas Laaser)
    - New: Layers support! Call EnableLayers() to install it (recommended)
    - Change: Improved the handling of transparent windows
    - Change: Removed ClearScreen() command; did no longer fit in the concept
    - Fix: MidStr() started at character 1 and not at 0
    - Change: Faster memory allocation for large scripts
    - New: Undo() & UndoFX() allow user to specify an undo-level
    - New: CreateTextObject() accepts now an optional argument which specifies
      the text alignment for new lines
    - Fix: "Line 1004" bug which caused a guru at Hollywood's termination
    - Fix: Bug in ResetTabs()

    Version 1.0   (04-Nov-02)
    - First Release


Show TOC