Guile-SDL NEWS
See the end for copying conditions.


- 0.6.0 | 2022-02-05

  - bugfix: avoid range error in image filter procedures

    Procedures ‘imfi-add-c’ and ‘imfi-sub-c’ used to convert 3rd arg
    ‘c’ (constant) from Scheme to C using a signed integer function
    that would signal range error for large values.  This is now
    fixed to use an unsigned integer function to do the job.

  - intermittent crash fix reverted

    The fix in Guile-SDL 0.5.3 (2021-12-11) was not The Right Thing.
    It has been reverted and a better solution put in place.  We now
    initialize the ‘event-thread’ subsystem in test/cursor.scm.  AHA
    moment: <https://www.gnuvola.org/u/2022/01/08h13.html>.

  - embedded SDL_gfx upgraded to version 2.0.26

    This brings bugfixes and MMX support for x86_64 (amd64),
    primarily.  Now, "cd test && make check TESTS=gfx.scm" really
    flies!

    NB: The license for SDL_gfx is now the zlib license.  See
    src/SDL_gfx/LICENSE in the distribution for the new text.

  - ‘(sdl gfx) fps-manager-delay!’ can have meaningful rv

    The embedded SDL_gfx is currently at version 2.0.26, but the
    previous version was 2.0.22, and its function that underlies
    ‘fps-manager-delay!’ did not have a meaningful return value.
    Previously, if you configured w/ ‘--disable-embedded-gfx’ and
    built w/ SDL_gfx 2.0.24 or later (that DOES have a meaningful
    rv), such ignorance was foisted upon you.  Now, you are free to
    fully enjoy that sweet rv.  :-D

  - changes to to ‘(sdl gfx) blit-rgba’

    - accepts ‘#f’ for 2nd, 4th arg

      The 2nd and 4th args to ‘blit-rgba’ indicate the source and
      destination rectangles, respectively.  Previously, they were
      required to be fully specified.  Now, you can use ‘#f’ there to
      indicate the entire (source/destination) surface.

    - return value more informative

      Previously, ‘blit-rgba’ returned ‘#f’ if there were problems and
      ‘#t’ if not.  However, "no problem" was narrowly interpreted and
      missed a certain common case -- upshot is that it incorrectly
      returned ‘#f’ even in that case.

      Now, if there were no problems, it returns an integer: 1 if a
      blit was performed, 0 otherwise.  (If there were problems, it
      returns ‘#f’ as before -- use ‘get-error’ to get more info.)

  - new proc: ‘(sdl misc-utils) exact-floor’

    Actually, this is an old proc that was misguidedly deleted in
    2011 to make room for ‘exact-truncate’.  Both are useful in
    their own right, it is now evident.  Live and learn.

  - new proc: ‘(sdl sdl) must-lock?’

    This wraps the convenience C macro ‘SDL_MUSTLOCK’.  Useful (in
    conjunction w/ ‘lock-surface’ and ‘unlock-surface’) for avoiding
    segfaults when examining pixel data from RLE-enabled surfaces.

  - new proc: ‘(sdl gfx) multiply-pixel-alpha!’

    This multiples the alpha channel in a 32-bit surface by FACTOR
    (actually, FACTOR/256).  The underlying function has been
    available in SDL_gfx since version 2.0.21, so this is a bit of
    a late bloomer.  Still, more alpha blending for everyone!

  - new proc: ‘(sdl gfx) fps-manager-count’

    This returns the frame count (i.e., how many times
    ‘fps-manager-delay!’ was called) for an FPS manager.
    Another late bloomer (again, since SDL_gfx 2.0.21).

  - documentation improvements

    - external representations described

      The manual now includes a description of the external
      representation of these object types:

       Pixel Format
       Rectangle
       Color
       Surface
       Joystick
       CDROM Drive
       FPS Manager

      Types with a standard (non-custom, Guile-generated) external
      representation are not documented.

      By the way, the Surface external representation now also
      includes "L" to indicate that the surface is locked.

    - image filtering procedures general behavior documented

      The manual now sports three paragraphs describing commonalities
      of the ‘imfi-*’ procedures, as well as the special processing
      done by ‘imfi-add-c’, ‘imfi-sub-c’, ‘imfi-lshr’, ‘imfi-lshl’.

    - say "byte", not "nybble"

      The documentation for ‘surface-pixels’ was simply wrong (but it
      sounded groovy for a while to Some Fool, probably).

  - bootstrap/maintenance tools

    upgraded:

     Guile-BAUX 20211208.0839.a5245e7
     GNU gnulib 2022-01-27 07:00:41

    as before:

     GNU Libtool 2.4.6
     GNU Autoconf 2.71
     GNU Automake 1.16.5
     GNU Texinfo 6.8


- 0.5.3 | 2021-12-11

  - distribution now .tar.lz only

    If you have GNU tar, you can use "tar xf" and it will DTRT.
    If not, you can use "lzip -dc TARBALL | tar xf -" to unpack it.

  - configuration changes

    - Guile "auto-compilation" suppressed

      During configure script execution, ‘GUILE_AUTO_COMPILE=0’ is in
      the environment.  This disables the on-the-fly compilation of
      .scm code to .go files.  During "make", it's up to you to do the
      same, should you desire.

    - new option: ‘--enable-sed-scripts-installation’

      The distribution includes sed scripts to help transition client
      code from pre-0.5.0 interfaces to 0.5.0 (2013-07-19) and later.
      Since it's been several years since the previous release, it's
      unlikely that these will still be useful.  For new Guile-SDL
      installations, you don't need, and can safely ignore, them.

    - new option: ‘--disable-embedded-gfx’

      This causes module ‘(sdl gfx)’ to be built to load the installed
      (system) SDL_gfx dynamically (if possible) instead of embedding
      it statically, the default.  See README.

  - intermittent crash fixed (but maybe not so smoothly)

    In recent systems, XCB (an underlying technology of the X Window
    System) has become particular about threads and their sequence
    numbers.  This was evidenced by a crash in test/cursor.scm, on
    occasion.

    Guile-SDL now does a preventative call to ‘XInitThreads’ on load
    of module ‘(sdl sdl)’, at the earliest possible moment.  This
    solves the crash issue, but at the cost of violating abstraction
    (not all SDL installations run over X).

    If you encounter problems building or running Guile-SDL as a
    result of this, please report it and we'll find Another Way.

  - Guile "auto-compilation" suppressed for "make check"

    This works like for the configure script, by setting env var
    ‘GUILE_AUTO_COMPILE’ to "0".

  - test/mixer.scm more graceful

    During "make check", test/mixer.scm tries to output sound
    (assuming ‘INTERACTIVE=1’ in the environment).  If your sound
    device is busy, it used to fail.  Now it simply skips the test
    (exit 77).

  - bootstrap/maintenance tools

    upgraded:

     Guile-BAUX 20211106.0154.1368008
     GNU gnulib 2021-12-06 00:16:10
     GNU Autoconf 2.71
     GNU Automake 1.16.5
     GNU Texinfo 6.8

    as before:

     GNU Libtool 2.4.6


- 0.5.2 | 2015-03-08

  - bugfixes

    Doc bugs, spelling bugs.

  - dropped procs

    As pre-announced in Guile-SDL 0.5.0 (2013-07-19) NEWS, the
    following procs have been removed:

     (sdl mixer) query-spec
     (sdl ttf) font:glyph-metrics
     (sdl ttf) font:size-text
     (sdl ttf) font:size-utf8
     (sdl sdl) cd-get-nth-track
     (sdl sdl) cd-frames->msf
     (sdl sdl) joystick-get-ball
     (sdl sdl) get-video-info
     (sdl sdl) get-rgb
     (sdl sdl) get-rgba
     (sdl sdl) get-caption
     (sdl sdl) get-mouse-state
     (sdl sdl) get-mouse-relative-state
     (sdl sdl) event-state
     (sdl sdl) joystick-event-state
     (sdl sdl) set-alpha!
     (sdl sdl) set-color-key!
     (sdl sdl) peep-events

  - configuration enables automagic rebuild rules by default

    Previously, modification to a Makefile.am file (for instance)
    would not trigger rebuild of its associated Makefile.in.  Now,
    it will.  You can revert to the previous, somewhat unsafe,
    practice with option ‘configure --disable-maintainer-mode’.

  - sed scripts installed

    Guile-SDL 0.5 introduced many changes that require client code
    modification, most of which are relatively simple and can be
    done mechnically.  Towards that end, "make install" also copies
    to $(pkgdatadir)/0.5 a bunch of sed(1) scripts that you can use
    on older code.  See ugh/README.

    (Actually, these scripts were installed as of Guile-SDL 0.5.1,
    but we forgot to write the NEWS entry.)

  - bootstrap tools

    upgraded:

     Guile-BAUX 20150308.1113.0e5bee4
     GNU Texinfo 5.2
     GNU Automake 1.15
     GNU gnulib 2015-03-03 15:48:40
     GNU Libtool 2.4.6

    as before:

     GNU Autoconf 2.69


- 0.5.1 | 2013-09-04

  - bugfixes

    - build honors ‘./configure --with-sdl-prefix=DIR’

      Previously, this option did nothing.  Now, it arranges to
      consult DIR/include for headers and DIR/lib for shared object
      libraries.  This is useful for custom SDL installations.

      You can also use ‘--with-sdl-exec-prefix=DIR’ similarly.

    - ‘(sdl simple)’ usable even with ‘--disable-ttf’

      Proc ‘(sdl simple) simple-stylus’ uses procs from ‘(sdl ttf)’,
      an optionally-built module.  Previously, ‘(sdl simple)’ would
      load ‘(sdl ttf)’ unconditionally.  Now, it is autoloaded.

      This is to support Guile-SDL configured with ‘--disable-ttf’.
      In that case ‘(sdl simple)’ can still be loaded for the other
      procs it provides.  Of course, trying to use ‘simple-stylus’
      will cause Guile to attempt to load ‘(sdl ttf)’ and fail,
      perhaps w/ a segfault.  Don't do that!

    - ‘(sdl mixer) open-audio’ respects specified params

      Previously, the parameters ‘format’ and ‘chunksize’, if
      specified, were ignored in favor of the defaults.  Drat.

  - mixer test bails unless ‘INTERACTIVE=1’, later

    This gives the test a chance to exercise some procs.  The check
    and exit unless ‘INTERACTIVE=1’ now happen immediately prior to
    the noise-making section.  Of course, the entire test is still
    skipped if Guile-SDL is configured w/ ‘--disable-mixer’.

  - C99 compiler required

    The configure script now checks for a C99 compiler and exits
    errorfully if one is not found.  Actually, the code has for a
    long time required a C99 compiler; this change just makes its
    lack obvious more quickly (fail fast).

  - more testing

    The count of slighted procs is now 54 (see test/t99-cov).

  - bootstrap tools upgraded
    - Guile-BAUX 20130831.1504.5dc1ee3


- 0.5.0 | 2013-07-19

  WARNING: There are several entries marked "[BI]",
  which stands for "backward incompatible".

  - planned retirement

    - 2013-12-31 -- procs that return an alist

      These procs return an alist, which burdens the caller w/ the
      destructuring / decode dance:

       (sdl sdl) cd-get-nth-track
       (sdl sdl) cd-frames->msf
       (sdl sdl) joystick-get-ball
       (sdl mixer) query-spec
       (sdl ttf) font:glyph-metrics
       (sdl ttf) font:size-text
       (sdl ttf) font:size-utf8
       (sdl sdl) get-video-info
       (sdl sdl) get-rgb
       (sdl sdl) get-rgba
       (sdl sdl) get-caption
       (sdl sdl) get-mouse-state
       (sdl sdl) get-mouse-relative-state

      See "new procs returning values" below for their replacements.

    - 2013-12-31 -- procs that query/set event processing model

      These procs query or set the processing model of the specified
      type or joystick, respectively:

       (sdl sdl) event-state
       (sdl sdl) joystick-event-state

      For uniformity, they have undergone interface changes in this
      release (see below) but even so, their interface suffers from
      under-understanding and over-engineering that is difficult to
      back out of.  So it goes; we (will) bail.

      See "new event model procs" below for their replacements.

    - 2013-12-31 -- ‘(sdl sdl) set-alpha!’

      The calling convention for this proc is fugly beyond belief.
      Its replacement is ‘surface-alpha!’ (see below).

    - 2013-12-31 -- ‘(sdl sdl) set-color-key!’

      Like ‘set-alpha!’, this proc exists and persists w/o beauty.
      Its replacement is ‘surface-color-key!’ (see below).

    - 2013-12-31 -- ‘(sdl sdl) peep-events’

      Yet another unshapen mess, grody to the max.  Die, die, die!
      See "new event queue procs" below for its replacement.

  - bugfixes

    - ‘non-member-symbol’ detected and error thrown

      All procs that take SYMBOL (enums or flags), or a list of SYMBOL
      (flags) now throw ‘non-member-symbol’ if SYMBOL is not a member
      of the respective enumstash or flagstash.  Previously, such
      symbols were silently ignored.  E.g., given:

       (define (ugh)
         (flags->number
          (flagstash:event-mask)
          '(SDL_MOUSEMOTIONMASK
            x
            SDL_KEYDOWNMASK)))

      Behavior was:

       (event:type (make-event 'foo))
       => #f

       (ugh)
       => 20

      Behavior now:

       (event:type (make-event 'foo))
       error-> ERROR: In procedure make-event:
       error-> ERROR: invalid event-type: foo

       (ugh)
       error-> ERROR: In procedure flags->number:
       error-> ERROR: invalid event-mask: x

      This change is marked not "[BI]" because although ‘enum->number’
      and ‘flags->number’ can no longer be used as-is for probing,
      that is an unlikely (bordering on nonsensical) usage.

    - ‘(sdl sdl) push-event’ returns boolean

      Previously this proc returned an integer, incorrectly documented
      as "1 for success, 0 for queue full, -1 for other errors" (the
      underlying SDL func returns 0 on success, -1 on error).  Now, it
      returns ‘#t’ on success, and ‘#f’ otherwise.

    - ‘(sdl sdl) set-mod-state’ does not insist on integer arg

      Regression introduced 2003-11-08 (Guile-SDL 0.2.0) during
      foof-to-ttn transition.  Briefly: 0/ arg type initially exact
      with type check; 1/ foof changed type to flags and commented
      out now-obsolete type check; 2/ ttn commented in the check;
      3/ test coverage lacking until this release.  Ugh, so it goes.

    - [BI] flags dropped: ‘KMOD_NONE’, ‘KMOD_RESERVED’

      These were part of ‘flagstash:event-mod’, though they should
      never have been.  Since ‘KMOD_RESERVED’ is never generated by
      SDL, its removal has little import.  OTOH, code that currently
      checks for "no key modifiers pressed" against ‘(KMOD_NONE)’ (a
      list of one symbol) needs to now check against the empty list.

    - ‘number->flags’ et al always return a list, never ‘#f’

      Previously, if the given integer was not covered by the flags,
      ‘number->flags’ would return ‘#f’, losing information.  Now,
      that non-zero "remainder" is consed onto the returned list, at
      the head.  For example, given the hypothetical flagstash ‘foo’:

       1 -- a
       2 -- b
       4 -- c

      then:
                                was        now
       (number->flags  0 foo)   => #f      => ()
       (number->flags  5 foo)   => (a c)   => (a c)
       (number->flags 13 foo)   => #f      => (8 a c)

      The underlying mechanism of ‘number->flags’ is shared w/ these
      procs:

       (sdl sdl) was-init
       (sdl sdl) get-mod-state
       (sdl sdl) get-mouse-state               ; see below
       (sdl sdl) get-mouse-relative-state      ; see below
       (sdl ttf) font:style

      They, too, now always return a list, never ‘#f’.

    - negative integers for some event field-setter procs

      These event field-setter procs now accept negative integers:

       event:motion:set-xrel!
       event:motion:set-yrel!
       event:jaxis:set-value!
       event:jball:set-xrel!
       event:jball:set-yrel!
       event:resize:set-w!
       event:resize:set-h!

      Previously, they would signal error for integers less than zero.
      Note that the latter two are for excruciating fidelity w/ the
      SDL C struct; synthesizing a resize event w/ negative width or
      height is probably Not Universally Appreciated.  YMMV.  YHBW.

    - ‘cd-name’ and ‘joystick-name’ can return ‘#f’

      Previously, these (sdl sdl) procs would segfault if SDL returned
      a null cdrom or joystick name, respectively.  Now, they return
      ‘#f’ in that case.

    - fixes to ‘(sdl sdl) button?’

      - all buttons documented

        This was a long-standing documentation omission.

      - works as documented

        Since the beginning, this proc failed to actually consult the
        mouse button state, returning a non-sensical result.  Now it
        calls (the C equivalent of) ‘get-mouse-state’ internally.

    - ‘cd-null?’ and ‘joystick-null?’ dropped

      These procs serve no purpose.  The cdrom object and the joystick
      object are never "null"; if errors occur in their construction,
      the respective procs ‘cd-open’ and ‘joystick-open’ return ‘#f’.

      See also "procs signal error if cdrom/joystick not open" below.

    - ‘string->image’ dropped

      This was an experiment.  The bug fixed in its removal is the
      ignorance of just how unsuitable Scheme strings are for binary
      data.  Something like it might well return in the future.

    - ‘(sdl sdl) gl-enums’ dropped

      This was unused, and inappropriately named.  Something like it
      will return along w/ other features to support OpenGL, someday.

    - ‘(sdl sdl) make-keysym’ dropped

      This was useless, buggy (suffering from the same mishandling as
      ‘set-mod-state’, above), and gratuitous (no underlying SDL func).
      It was a bug to maintain it for this long.

  - procs require uvec arg(s), no longer accept normal vectors

    As pre-announced in Guile-SDL 0.4.0 (2011-12-15) NEWS, the
    following procs now require their arg(s) to be uniform vectors:

     (sdl gfx) draw-polygon             s16
     (sdl gfx) draw-aa-polygon          s16
     (sdl gfx) draw-textured-polygon    s16
     (sdl gfx) draw-bezier              s16
     (sdl sdl) create-cursor            u8
     (sdl sdl) set-gamma-ramp           u16

    A normal vector now results in a wrong-type-arg error.

  - horizontal / vertical flipping preserves surface depth

    Previously, ‘horizontal-flip-surface’, ‘vertical-flip-surface’
    and ‘vh-flip-surface’ always returned a new surface w/ depth 16.
    Now, the depth is the same as that of the source surface.

  - ‘(sdl sdl) event-state’ returns new state

    Previously, the return value was specified only on query.
    Now, it is specified for all cases.

  - ‘(sdl mixer) set-music-command’ now takes ‘#f’ also

    Normally, the string arg ‘command’ to ‘set-music-command’
    specifies the external command to use for subsequent music load
    and playback.  As a special case, you can now specify ‘#f’ as
    the command to revert (or ensure) internal playback routines
    use.

  - symbolic "mouse button"

    The mouse buttons are symbols in the set:

     left middle right
     wheel-up wheel-down
     x1 x2

    The latter two are "extended buttons" probably, for the fully
    fondle-able fist friend (groan).

    - new proc: ‘(sdl sdl) mouse-bxy’

      This obsoletes both ‘get-mouse-state’ and
      ‘get-mouse-relative-state’.

    - mouse state procs can return symbolic state

      Normally, the ‘state’ value in the alist returned by
      ‘get-mouse-state’ and ‘get-mouse-relative-state’ is an integer.
      These procs now take an optional arg which, if non-‘#f’, means
      to return instead a (possibly empty) list of mouse buttons.

    - [BI] motion state get/set

      Previously, ‘event:motion:state’ and ‘event:motion:set-state!’
      returned and accepted an integer value, respectively.  Now the
      value is symbolic (list for getter, single symbol or list for
      setter), from the set of mouse buttons.

    - [BI] button button get/set

      Previously, ‘event:button:button’ and ‘event:button:set-button!’
      returned and accepted an integer value, respectively.  Now the
      value is a symbol, from the set of mouse buttons.

  - [BI] ‘(sdl sdl) get-app-state’ rv symbolic

    This proc now returns a possibly empty list of symbols from the
    set: ‘mousefocus’, ‘inputfocus’, ‘active’.

  - [BI] active event gain/state fully symbolic

    The procs ‘event:active:gain’ and ‘event:active:set-gain!’ now
    return and accept, respectively, a symbol, one of: ‘gained’ or
    ‘lost’.

    The procs ‘event:active:gain’ and ‘event:active:set-gain!’ now
    return and accept, respectively, a list of symbols from the same
    set as ‘get-app-state’ (above).

  - [BI] key/mbutton/jbutton state fully symbolic

    These getter and setter procs:

     event:key:state      event:key:set-state!
     event:button:state   event:button:set-state!
     event:jbutton:state  event:jbutton:set-state!

    now return and accept, respectively, a symbolic state, one of:
    ‘released’ or ‘pressed’.  Likewise for ‘joystick-get-button’.

  - [BI] ‘(sdl sdl) joystick-event-state’ fully symbolic

    This proc now takes and returns a single symbol of the set:
    ‘SDL_QUERY’, ‘SDL_IGNORE’, ‘SDL_ENABLE’.

  - [BI] joystick hat position fully symbolic

    The procs ‘event:jhat:value’ and ‘event:jhat:set-value!’ now
    return and accept, respectively, a list of one or two symbols
    from the set: ‘centered’, ‘up’, ‘right’, ‘down’, ‘left’.  The
    four two-symbol cases are permutations of the vertical and
    horizontal symbols.

  - [BI] procs signal error if cdrom/joystick not open

    These ‘(sdl sdl)’ procs used to return -1 or ‘#f’ (i.e., a
    nonsense value) if given a cdrom or joystick object that has
    been ‘cd-close’d or ‘joystick-close’d, respectively:

     cd-status             joystick-index
     cd-in-drive?          joystick-num-axes
     cd-get-num-tracks     joystick-num-balls
     cd-get-cur-track      joystick-num-hats
     cd-get-cur-frame      joystick-num-buttons
     cd-get-nth-track      joystick-get-axis
     cd-play-tracks        joystick-get-ball
     cd-play               joystick-get-hat
     cd-pause              joystick-get-button
     cd-resume             joystick-close
     cd-stop
     cd-eject
     cd-close

    Now they signal "cdrom not open" or "joystick not open"
    error, respectively.

  - [BI] fading-status symbols for ‘(sdl mixer)’ procs changed

    Here is a table showing the previous and current set of possible
    return values (symbols) for ‘fading-music’ and ‘fading-channel’:

     was: MIX_NO_FADING         now: no
          MIX_FADING_OUT             out
          MIX_FADING_IN              in

  - ‘(sdl mixer) fading-status’ dropped

    This enumstash is no longer useful due to the previous change.
    (The one that holds the new set of symbols is internal.)

  - ‘(sdl gfx) font-rotation!’ accepts also integer

    You can specify an integer as well as symbolic ROTATION:

     0  means  none
     1         clockwise
     2         upside-down
     3         counter-clockwise

    The behavior w/ other integers is undefined.

  - colormap procs accept ‘start’ index

    Previously, ‘set-colors!’ and ‘set-palette’ always modified the
    colormap starting from index 0.  Now, you can completely specify
    the portion to modify with additional optional arg ‘start’.

  - new procs returning values

    Here are the multiple-values-returning replacement procs for
    those that return an alist (see "planned retirement" above):

     (sdl sdl) cd-nth-track-itlo
     (sdl sdl) frames-msf
     (sdl sdl) joystick-ball-xy
     (sdl mixer) device-ffc
     (sdl ttf) font:glyph-xXyYa
     (sdl ttf) text-wh
     (sdl ttf) utf8-wh
     (sdl sdl) video-cmf
     (sdl sdl) pixel-rgb
     (sdl sdl) pixel-rgba
     (sdl sdl) caption-ti
     (sdl sdl) mouse-bxy (for both get-mouse-state
                              and get-mouse-relative-state)

    The names depart from the scheme used by their peers (which is
    less than beautiful, but so it goes...); the last component is a
    mnemonic for both the number of values and the values' names.
    For example: "-wh" implies two values: width and height.

    For the most part, when the alist returned by the old proc has N
    entries, the new proc returns N values.  The unique exception is
    ‘video-cmf’, which compresses the nine separate boolean-value
    entries into a single list of symbols.  See manual.

    Some old procs return ‘#f’ if there are problems, rather than an
    alist.  The new ones signal error, instead.

    Lastly, ‘mouse-bxy’ cosolidates two procs.  When all is done
    (after 2013-12-31), the net change is API shrinkage, yeah!

  - new event model procs

    The new ‘(sdl sdl)’ procs ‘event-type-handling’ and
    ‘joystick-polling’ query only, by default.  If optional arg
    SETTING is specified, its truth value is used to enable or
    disable event TYPE processing and joystick polling,
    respectively.

    These procs obsolete ‘event-state’ and ‘joystick-event-state’,
    respectively.

  - new proc: ‘(sdl sdl) surface-alpha!’

    This obsoletes ‘(sdl sdl) set-alpha!’.

  - new proc: ‘(sdl sdl) surface-color-key!’

    This obsoletes ‘(sdl sdl) set-color-key!’.

  - new keysyms

    The count of keysyms grew by 98 (was 133 now 231).  New:

     SDLK_WORLD_0 through SDLK_WORLD_95 (total 96)
     SDLK_COMPOSE
     SDLK_UNDO

  - new event queue procs

    The new ‘(sdl sdl)’ procs ‘evqueue-add’, ‘evqueue-peek’ and
    ‘evqueue-get’ provide rationalized interfaces to the underlying
    ‘SDL_PeepEvents’ (i.e., ‘peep-events’, thus obsoleted).  New
    feature: ‘evqueue-peek’ can return either a list of matching
    events or a count of them.

  - new proc: ‘(sdl sdl) kotk’

    This is the "keeper of the konstants", which provides a
    simplified (yet more complete) reflection, obsoleting
    ‘enumstash-enums’ and ‘flagstash-flags’.

  - [BI] conversion procs take stash name

    These procs now accept a stash name (symbol) as their first arg:

     enum->number
     number->enum
     flags->number
     number->flags

    You can use ‘(sdl sdl) kotr’ to get a list of stash names.

  - [BI] stash objects dropped

    These elements are now recognized as better maintained internal
    (as an implementation detail) than exposed to Scheme:

     enumstash: (sdl sdl) event-types
     enumstash: (sdl sdl) event-keys
     enumstash: (sdl sdl) event-states
     enumstash: (sdl sdl) alpha-enums
     enumstash: (sdl gfx) font-rotations

     proc: (sdl sdl) flagstash:init
     proc: (sdl sdl) flagstash:event-mod
     proc: (sdl sdl) flagstash:event-mask
     proc: (sdl sdl) flagstash:video
     proc: (sdl sdl) flagstash:palette
     proc: (sdl sdl) flagstash:overlay
     proc: (sdl ttf) flagstash:ttf

    Luckily, there is no loss of introspection; see "conversion
    procs take stash name" above.  Where you previously used a
    stash object, you can use its name, instead.  Be aware, though,
    that these (old) names and the (new) symbolic names have only a
    passing resemblance.  See "all stashes documented" below.

  - ‘#t’ means "full set" for flags

    Previously, to get the aggregate (logior) value a flagstash,
    you had to do something like:

     (define FS (flagstash:event-mask))
     (flags->number FS (flagstash-flags FS))
     => 212990 (#x33ffe)

    Now, you can use use ‘#t’ wherever you would have previously
    used ‘(flagstash-flags FLAGSTASH)’, to simplify things a bit:

     (flags->number 'event-mask #t)
     => 212990 (#x33ffe)

    Note that this example uses the symbol ‘event-mask’ instead of
    ‘flagstash:event-mask’, which is no longer available (see
    "conversion procs take stash name" and "stash objects dropped"
    above).  This "‘#t’ means full set" feature is also available
    for any proc that takes flags, not just ‘flags->number’.  E.g.:

     (evqueue-peek 99 #t)

    returns the count (<= 99) of events in the queue, matching
    against all of them.

  - [BI] ‘(sdl sdl) enumstash-enums’ dropped
  - [BI] ‘(sdl sdl) flagstash-flags’ dropped

    These are underpowered and obsoleted by ‘kotk’ (see above).

  - [BI] enums / flags names decluttered

    Several enumstashes / flagstashes have undergone name
    decluttering, basically removal of common prefix/suffix,
    conversion of ‘_’ (underscore) to ‘-’ (hyphen), and other simple
    transforms to make the symbols blend better with ambiant Scheme.
    Here is an approximate summary:

     overlay            s/^SDL_//; s/_OVERLAY$//
     font-style         s/^TTF_STYLE_//; downcase
     palette            s/^SDL_//; s/PAL$/ical/; downcase
     keyboard-modifier  s/^KMOD_//; s/^[LR]/\1-/; downcase rest
     init               s/^SDL_INIT_//; downcase; add hyphens
     event-mask         s/^SDL_//; s/MASK$//; downcase; add hyphens
     event-type         s/^SDL_//; downcase; add hyphens
     cdrom-state        downcase; add hyphens
     video              s/^SDL_//; downcase; add hyphens
     keysym             s/^SDLK_//; downcase; add hyphens; etc
                        (former name: ‘(sdl sdl) event-keys’)

    To ameliorate the pain (somewhat) of tracking these changes in
    existing code, "make install" also copies to $(pkgdatadir)/0.5 a
    set of corresponding sed scripts.  See ugh/README.

    See also "all stashes documented" below.

  - new proc: ‘(sdl sdl) surface-pixels’

    This returns a uniform vector (type u8, u16, u32) of the pixel
    data for SURFACE, or u8 unconditionally if optional arg SQUASH
    is non-‘#f’.

  - changes to "make check"

    - leak test run unconditionally

      It's not very accurate and adds a few seconds to "make check",
      but OTOH it's better to notice any weirdness earlier than later.
      Note that for Guile 2.x, this test is still skipped anyway.

    - ‘DEBUG=1’ less influential

      Previously, that option enabled certain informative output as
      well as arranging for "guile --debug" and so forth.  Now, output
      gating is affected solely by ‘VERBOSE=1’.

    - new option ‘OGGPLAYER=COMMAND’

      The mixer test (which also requires ‘INTERACTIVE=1’, btw) now
      consults env var ‘OGGPLAYER’ as well for testing external player
      support.  See README.

    - improved coverage and performance

      The count of slighted procs is now 60 (see test/t99-cov).

      Additionally, to appease the impatient, the tests run quicker
      now, in some cases due to reduced iteration counts or pause
      times, in some cases due to better-matched screen and (working)
      surface bit depths.  If your system supports MMX, this speed-up
      is most dramatic for test/gfx.scm (see also var ‘DEPTH’).

  - all stashes documented

    Appendix A documents all the stashes, describing their name, the
    count of symbols they hold, their disposition (either ‘enums’ or
    ‘flags’), and the symbols themselves.

  - bootstrap tools upgraded
    - GNU Automake 1.13.4
    - Guile-BAUX 20130705.0751.4969fb4


- 0.4.3 | 2013-04-13
  - bug-report address updated


- 0.4.2 | 2013-03-18

  - distribution now also .tar.lz

    If you have GNU tar, you can use "tar xf" and it will DTRT.
    If not, you can use "lzip -dc TARBALL | tar xf -" to unpack.

  - new support for configure var ‘IMFI_CFLAGS’

    If your cpu supports MMX extensions but your compiler mishandles
    the assembly in the imagefilter functions (causing a segfault),
    you can use configure command-line var ‘IMFI_CFLAGS’ to try to
    work around the problem.  For example, invoking like so:

    $ ./configure         \
        CFLAGS='-g -O3'   \
        IMFI_CFLAGS='-O1'

    arranges to pass ‘-g -O3 -O1’ to the compiler, which should set
    the optimization level to one (later option overrides).  Like
    ‘CFLAGS’, this var is marked "special" and remembered for
    subsequent config.status invocations.

    FWIW, this works for GCC 4.4 on a 32-bit x86 Debian system; no
    more need for "make check NOMMX=1" here!

  - tested w/ Unofficial Guile 1.4.1.127, Guile 1.8.7, Guile 2.0.7

    Under Guile 2, "make check DEBUG=1" skips the leak test because
    Guile 2 does not track deallocations.

  - bootstrap tools upgraded
    - GNU Automake 1.13.1
    - Guile-BAUX 20121120.1242.e233fad
    - SNUGGLE 0.2
    - makeinfo (GNU Texinfo) 5.1


- 0.4.1 | 2012-11-15

  - distribution now .tar.xz

    If you have GNU tar, you can use "tar xf" and it will DTRT.
    If not, you can use "xz -dc TARBALL | tar xf -" to unpack.

  - integer arg no longer accepted for ‘grab-input’

    This was pre-announced in Guile-SDL 0.4.0 (2011-12-15) NEWS.

  - bugfix: ‘font:glyph-metrics’ Scheme char to C char conversion

    The bug, introduced 2003-11-09, manifested as a mysterious
    (expecting integer) wrong-type-arg error.  Now fixed, with test.
    (The test is pretty lame, admittedly.)

  - improved portability

    Tested w/ Guile 2.0.6, 1.8.7, 1.4.1.127.  Apparently 2.0.6
    sneers at ‘apply-to-args’; wave goodbye to another old friend.

  - bootstrap tools upgrade
    - GNU Autoconf 2.69
    - GNU Automake 1.12.4
    - Guile-BAUX 20121026.1208.c21074a
    - SNUGGLE 0.1


- 0.4.0 | 2011-12-15

  - improved portability

    Guile-SDL is now also tested with Guile-1.8.7 on a 64-bit host.
    It should build and run without any deprecation warnings; if use
    under ‘GUILE_WARN_DEPRECATED=detailed’ reveals something, please
    report that as a bug.

    Notably, for Guile versions that do not support "direct shared-
    object loading" (i.e., Guile 1.8+), configuration arranges for a
    module's sofile to be installed in $(libdir)/guile-sdl -- aka
    $(pkglibdir) -- and its Scheme wrapper (that dynamically loads
    the sofile and handles ‘define-module’ duties) to be installed in
    the "normal" site directory.

    See new file HACKING for details.

  - validation

    - use Free{SansBold,SerifBoldItalic}.ttf for testing

      The testing (distributed but not installed) font files are now
      FreeSansBold.ttf and FreeSerifBoldItalic.ttf (see AUTHORS).  The
      file crystal.ttf is no longer included due to doubts about its
      lineage and licensing.

    - support for ‘VERBOSE=1’

      By default, "make check" is relatively silent.  You can use
      "make check VERBOSE=1" to see more information.

    - support for ‘NOMMX=1’

      You can disable MMX usage dynamically with "make check NOMMX=1".
      This might be necessary if test/gfx.scm segfaults.  :-/

    - infrastructure upgrade

      Doing "make check" now prepares a "simulated installation"
      (under test/.simu) for better approximation to a real-world,
      post-install environment.  It is an approximation only because
      documentation is not included.

      Tests are now run by a driver program which DTRT, we hope.
      Also, they have full access to Guile-BAUX modules.

    - support for "make installcheck"

      (You need to "make install" first!)  Since ‘installcheck’
      piggybacks on ‘check’, it honors ‘INTERACTIVE=1’, etc.

    - tests delay less

      This makes running "make check" less weary for the impatient.

    - tests explicitly ‘exit’

      Moreover, the exit value is taken from the ‘(sdl sdl) quit’
      return value.  This helps detect problems earlier.

    - different ‘#:prefix’ for each module

      Previously, some tests would use the same import-prefix for
      different modules.  Now they are distinct, for clarity.

    - cursor test ignores ‘INTERACTIVE=1’

      There was really no good reason for it to honor ‘INTERACTIVE=1’
      in the first place.

    - better coverage, though still incomplete

      The test suite now includes ‘t99-cov’, marked as ‘xfail’.
      There are still 189 "slighted" procedures.

  - planned retirement: integer arg for ‘grab-input’

    Support for integer ‘mode’ to proc ‘(sdl sdl) grab-input’ WILL BE
    REMOVED after 2012-05-31, such that an integer ‘mode’ will result
    in a ‘wrong-type-arg’ error.

    Migration is straightforward; use a symbol instead of an integer.
    was: -1     now: query
          0          off
          1          on

  - planned retirement: ordinary vector argument(s)

    Some procedures now take uniform vector arguments (see below).
    For backward compatibility with Guile-SDL 0.3.10 and earlier,
    you can also use an ordinary vector.  This is expensive and less
    safe, however, so this support WILL BE REMOVED after 2012-12-31.

    Luckily, migration is simple: Import module ‘(srfi srfi-4)’ and
    replace ‘list->vector’ with ‘list->u16vector’, and so on.

  - bugfixes

    Backward-incompatible changes are marked with "[I]".

    - distribute ‘SDL_gfx’ LICENSE

      I.e., the GNU LGPL 2.1.

    - no MMX support if not in "32-bit mode"

      The MMX support (in SDL_gfx) was previously enabled for any
      processor that reported support for it.  However, the code
      itself makes use of instructions (e.g., PUSHA, POPA) that are
      not available in 64-bit mode, so we now don't even bother
      checking for MMX support for 64-bit processors.

    - [I] flags are symbols

      Previously the following procs returned a (possibly empty) list
      of strings.  Now, they return a (possibly empty) list of symbols.

      - (sdl sdl) flagstash-flags
      - (sdl sdl) number->flags
      - (sdl sdl) was-init
      - (sdl sdl) get-mod-state
      - (sdl sdl) event:key:keysym:mod
      - (sdl ttf) font:style

    - exact bitwise match required in ‘ulong2flags’

      This func, a subroutine of the procs listed above in entry
      "flags are symbols" (except for ‘flagstash-flags’), used to
      include a flag in the returned list if any of its constituent
      bits were set in the original number.  Now, it requires all set
      bits to match as a condition for inclusion.

    - correct proc name for wrong-type-arg error message

      The following procs used to mis-identify themselves (as another)
      in the ‘wrong-type-arg’ error message:

      - (sdl mixer) paused?
      - (sdl sdl) load-image
      - (sdl sdl) set-gamma-ramp

    - allocate enough memory for temp ‘SDL_Color’ array

      Procs ‘set-colors!’ and ‘set-palette’ used to corrupt memory by
      underallocating a temporary ‘SDL_Color’ array, then overfilling
      it.  Now, they allocate the right amount.

    - avoid ‘SDL_Surface’ double-free

      Previously, both ‘get-video-surface’ and ‘set-video-mode’ would
      return a smob whose free func would call ‘SDL_FreeSurface’ on
      the unpacked ‘SDL_Surface’ object.  This is incorrect because
      those objects are internal (and moreover currently in use),
      rather than freshly constructed for hand-off to the user; the
      smob free func should not call ‘SDL_FreeSurface’ on them.  That
      is the job for the internal cleanup invoked by ‘(sdl sdl) quit’.

      Now, the ‘SDL-Surface’ smob distinguishes between user and
      internal, and its free func calls ‘SDL_FreeSurface’ only for
      user objects.

    - ‘(sdl sdl) get-caption’ handles ‘NULL’ title, icon

      This used to segfault on ‘NULL’ title or icon.

  - other changes

    Backward-incompatible changes are marked with "[I]".  For procs
    that now take uniform vectors, see also the "planned retirement"
    NEWS entry above.

    - [I] arg type-check tightened from ‘exact?’ to ‘integer?’

      Procs that used to accept exact numbers now accept integers
      only.  This basically means rational numbers are now invalid.
      Observant tarball-perusers will note that the modules and tests
      no longer use ‘quotient’.

    - ‘(sdl gfx) imfi-mmx?’ now able to set MMX usage

      This now takes an optional arg ‘setting’ for en-/dis-abling MMX
      usage at runtime.

    - embedded ‘SDL_gfx’ upgraded to 2.0.22

      Unfortunately, some MMX-backed procs now routinely segfault.
      (More unfortunately, the segfault has not been investigated, and
      was in fact the motivation for extending ‘imfi-mmx?’, as a "make
      check" workaround.  Masking bugs via feature creep: suboptimal.)

    - new proc: ‘(sdl gfx) draw-rounded-rectangle’

      This draws a rectangle with rounded corners of specified radius.

    - new proc: ‘(sdl gfx) draw-thick-line’

      This draws a line of specified thickness (in pixels).

    - new proc: ‘(sdl gfx) font-rotation!’

      This causes subsequent ‘draw-character’ and ‘draw-string’ calls
      to render rotated images.  The symbolic specified rotation is
      one of ‘none’, ‘clockwise’, ‘counter-clockwise’, ‘upside-down’.

    - new enumstash: ‘(sdl gfx) font-rotations’

      This is for ‘font-rotation!’ support.

    - new proc: ‘(sdl misc-utils) exact-truncate’

      This is nothing but ‘(inexact->exact (truncate n))’ plus
      documentation, support and the special glow from association
      with other Guile-SDL procs. :-D

    - ‘#:prefix’ used for import renaming

      All ‘#:renamer’ uses were coincident with ‘symbol-prefix-proc’,
      so these have been replaced with ‘#:prefix’.  [Insert blurb
      about ‘symbol-prefix-proc’ regret, here.]

    - some ‘(sdl gfx)’ procs take s16 uniform vectors

      Coordinate arguments for these procs can now be s16 uniform
      vectors.  You can even mix normal w/ s16 (but that's crazy).
      - draw-polygon
      - draw-aa-polygon
      - draw-textured-polygon
      - draw-bezier

    - ‘(sdl sdl) create-cursor’ takes u8 uniform vectors

      The ‘data’ and ‘mask’ arguments can now be u8 uniform vectors.

    - ‘(sdl sdl) set-gamma-ramp’ takes u16 uniform vectors

      The red, green and blue table arguments can now be u16 uniform
      vectors.

    - [I] ‘(sdl sdl) get-gamma-ramp’ now returns list of uvec

      Previously, this proc returned an alist.  Now, it returns a list
      of three elements, each of which is a u16 uniform vector.

    - [I] ‘(sdl sdl) show-cursor’ redesigned

      The optional arg is no longer a "toggle enabler" (which didn't
      seem to be implemented correctly, anyway) but instead a direct
      "setting".  In other words:

      was: show: (or  (show-cursor) (show-cursor #t)) ; buggy?
           hide: (and (show-cursor) (show-cursor #t)) ; buggy?
           flip: (show-cursor #t)                     ; buggy?

      now: show: (show-cursor #t)
           hide: (show-cursor #f)
           flip: (show-cursor (not (show-cursor)))

  - documentation improvements
    - manual license now GNU FDL 1.3
    - table of contents now after title page
    - getter/setter procs documented
    - SDL type no longer mentioned in access procs
    - todo list dropped

  - tools for bootstrap upgraded
    - no longer need gperf(1) to bootstrap
    - GNU Automake 1.11.1
    - GNU Autoconf 2.68
    - GNU Libtool 2.4.2
    - GNU texinfo 4.13
    - Guile-BAUX 20111207.1126.1d610b3
    - snuggle.m4 serial 5


- 0.3.10 | 2009-04-24

  - bugfix: set-position now usable

    This (sdl mixer) proc, introduced in Guile-SDL 0.3.9, now
    correctly accepts three args, as documented.

  - MMX detection

    The configure script now detects whether or not the CPU supports
    MMX instructions and automatically builds with USE_MMX=1 if so.

  - (sdl sdl) procs implemented: set-event-filter, get-event-filter

    Previously, these would throw an error saying "not yet
    implemented (sorry)".  Note that the interface for
    ‘set-event-filter’ is different from before.  This is not a
    problem since the proc was not useful before, anyway.

  - new (sdl gfx) proc: draw-arc

    This is because the embedded libSDL_gfx is now at version 2.0.18.

  - maintenance uses autoconf 2.63 and libtool 2.2.6


- 0.3.9 | 2008-04-02

  - bugfix for "make uninstall"

    Previously, this left some files in $(GUILE_LIBSITE)/sdl.
    Now, those files (and that directory) are properly deleted.

  - new (sdl gfx) procs

    These 26 are the image-filter functions that have a C
    implementation: imfi-mmx?, imfi-add, imfi-mean, imfi-sub,
    imfi-abs-diff, imfi-mult, imfi-mulnor, imfi-muldiv2,
    imfi-muldiv4, imfi-logand, imfi-logior, imfi-div, imfi-not,
    imfi-add-c, imfi-add-c-to-half, imfi-sub-c, imfi-ashr,
    imfi-lshr, imfi-mul-c, imfi-ashr-mul-c, imfi-bshl, imfi-lshl,
    imfi-ashl, imfi-binarize, imfi-clip, imfi-normalize-linear.

    On ttn's computer, (imfi-mmx?) => #f, so the MMX side of things
    has not been tested.

  - new (sdl mixer) procs: set-panning, set-distance, set-position

    Move the sound 'round and 'round;
    all that's missing is up and down.

  - public repo: http://www.gnuvola.org/wip/  (guile-sdl)

  - maintenance now uses libtool 1.5.24 and automake 1.10.1


- 0.3.8 | 2007-10-11

  - new (sdl misc-utils) proc: fader/3p
  - new (sdl misc-utils) proc: toroidal-panner/3p

    These are three-phase exposing variants of ‘fade-loop!’ and
    ‘toroidal-panner’, respectively.  (In fact, the old procs have
    been rewritten to use the new.)  Three-phase procs return three
    values, one for each phase of "init", "next" and "done".  This
    lets caller maintain control for fine(r)-grained scheduling.
    See manual for an example of the stylized call sequence.

    NOTE: Both ‘fade-loop!’ and ‘toroidal-panner’ are scheduled for
    removal by 2008-01-01.  DO NOT RELY ON THEM.

  - new (sdl gfx) proc: blit-rgba
  - new (sdl gfx) proc: set-pixel-alpha!

    The latter wraps ‘SDL_gfxSetAlpha’ in the underlying (SDL_gfx)
    library, but the natural schemified name would clash w/ SDL's,
    so this was chosen for uniqueness as well as to emphasize its
    per-pixel nature.

  - docs have more info

    The manual now lists valid values for flagstash:* and *-enums,
    mined using ‘flagstash-flags’ and ‘enumstash-enums’, respectively.


- 0.3.7 | 2007-09-16

  - license now GPLv3+ (see COPYING)

  - installation changes
    - no longer created: libFOO.so symlink to FOO.so
    - deleted: .la file, libFOO.so and other symlinks

  - embedded library upgraded: libSDL_gfx 2.0.16
    - new proc: draw-textured-polygon
    - new proc: roto-zoom-surface-xy
    - new proc: shrink-surface

  - changes to (sdl simple) procs
    - new simple-canvas command: #:resize! NEW-WIDTH NEW-HEIGHT
    - simple-stylus #:render can take optional args: COLOR, BG
    - simple-stylus #:write! has new INCOMPATIBLE interface; see manual

  - maintenance now uses libtool 1.5.24 and autoconf 2.61


- 0.3.6 | 2007-02-06

  - bugfixes
    - load-image now returns #f (instead of crashing) if there are problems
    - get-video-info rv now has "wm-available" and bool "blit-fill"
    - map-rgb and map-rgba now return unsigned integer
    - make-surface now
      - uses pixel format from current video surface, if available
      - handles case: no current video surface and no flags specified

  - return value specified: both quit and quit-subsystem now return #t
  - more slackful: update-rects now accepts an empty list for second arg
  - more slackful: set-clip-rect! now accepts #f for second arg
  - more slackful: cd-get-{num-tracks,cur-track,cur-frame} call cd-status

  - changes with compatibility note (see each proc's documentation)
    - grab-input now takes and returns symbols, one of: query, off, on

  - new (sdl sdl) proc: rect?
  - new (sdl sdl) proc: color?
  - new (sdl misc-utils) proc: rectangle-closure
  - new (sdl misc-utils) proc: rectangle<-geometry-string
  - new (sdl misc-utils) proc: rect<-surface
  - new (sdl misc-utils) proc: copy-rectangle
  - new (sdl misc-utils) proc: toroidal-panner


- 0.3.5 | 2006-01-29

  - change to (sdl misc-utils) proc: copy-surface

    This now takes an optional second arg CLIP, a rectangle which
    specifies the portion of the surface to copy.  By default (if
    unspecified or #f), the entire surface is copied.

  - implementation for (sdl sdl) proc: get-key-state

  - new (sdl misc-utils) proc: fade-loop!

  - maintenance uses GNU Automake 1.9.6


- 0.3.4 | 2005-05-17

  - bugfix: smob memory accounting

    The rectangle, event, color, and cursor smobs used to either
    fail to free their internal resources, or report an incorrect
    number as the return value of their "free" function.  This would
    cause Guile to become confused and, in the worst case, also leak
    memory (and eventually segfault).

    These errors have now been fixed.  The test for them is in file
    test/leak.scm, which enabled only for "make check DEBUG=1".

  - new (sdl sdl) proc: get-wm-info

  - FSF street address updated in copyright notices


- 0.3.3 | 2005-04-03

  - bugfix: get-clip-rect no longer causes error

    The implementation no longer tries arrange for SDL to write
    through a NULL pointer; this used to result in the SDL parachute
    being deployed if present, or a segfault otherwise.

  - bug exposure change: procs more strict on unsigned types

    The following procs now take care to do unsigned integer
    conversion directly, instead of signed conversion followed by
    cast to unsigned.

    create-rgb-surface
    map-rgba
    map-rgb
    get-rgb
    warp-mouse

    This is part of an ongoing effort to remove/reduce "manual"
    casting (which may mask bugs) in the codebase.

  - new (sdl sdl) proc: get-app-state

  - change to (sdl misc-utils) proc: copy-surface

    This now uses ‘convert-surface’ to do one-step copy/conversion,
    instead of the two-step process used previously.  The SRCALPHA
    (per-surface flag) handling added in Guile-SDL 0.3.2 has been
    removed.

  - procs which take lists of symbols now handle #f and empty list

    Using these args is now equivalent to specifying 0 (zero) to the
    underlying SDL function.

  - ‘set-alpha!’ third arg now optional

    If omitted it is taken as #f.

  - new chapter in manual: "Excuses (Undone Wrapping)"


- 0.3.2 | 2005-01-23

  - bugfix: (sdl sdl) proc ‘fill-rect’ handles alpha/red values > 127

    The color used to be extracted as signed instead of unsigned.
    This caused incorrect out-of-range errors for color values whose
    high bit (alpha for ABGR, red for RGBA) was set.

  - bugfix: (sdl misc-utils) proc ‘copy-surface’ handles SDL_SRCALPHA

    The proc now takes care to clear this flag (and restore it
    afterwards) in the source surface around the blit, so that RGB
    values are copied correctly.  Unfortunately, the actual alpha
    value is lost due to being unconditionally restored as 255.

  - procs moved to (sdl gfx): zoom-surface and roto-zoom-surface

    Side effect of the upgrade described in the next entry.

  - embedded library upgraded: libSDL_gfx 2.0.13

    This library (by Andreas Schiffler) is the successor to
    libSDL_gfxPrimitives and libSDL_rotozoom, incorporating their
    functionality and interfaces, and providing other goodies as
    well.  The result for Guile-SDL users is that module (sdl gfx)
    has been augmented w/ the following new procs:

    zoom-surface        ;; moved from (sdl sdl)
    roto-zoom-surface   ;; likewise
    draw-hline          ;; rest are completely new
    draw-vline
    draw-aa-circle
    draw-aa-ellipse
    draw-pie-slice
    draw-trigon
    draw-aa-trigon
    draw-aa-polygon
    draw-bezier
    make-fps-manager
    fps-manager-set!
    fps-manager-get
    fps-manager-delay!

    For more info, see new chapter "libSDL_gfx" sections: Graphics
    Primitives, Rotation / Zooming, and Managing Frame Rate.


- 0.3.1 | 2005-01-08

  - bugfix: ‘make-surface’ and ‘create-rgb-surface’ no longer ignore ‘flags’

    These procs used to internally hardcode SDL_HWSURFACE instead of
    using the ‘flags’ argument.

  - dropped (sdl sdl) proc: scale-surface

    This was never implemented.  Its advertized functionality was
    also redundant w/ ‘zoom-surface’, which furthermore has the
    benefit of a more flexible interface.

  - print representation for flagstash objects now begins with "#"

    This is to follow the Scheme convention for printing objects
    that cannot be ‘read’ back in.

  - implementation for (sdl sdl) proc: event-state
  - implementation for (sdl sdl) proc: peep-events

    Previously the interface was available but calling these procs
    resulted in a "not yet implemented" error.

  - new (sdl misc-utils) proc: copy-surface
  - new (sdl misc-utils) proc: ignore-all-event-types-except

  - new module: (sdl simple)


- 0.3.0 | 2004-11-25

  - "guile-tools make-module-catalog" no longer invoked unconditionally

    If your Guile installation does not provide this program, that's
    ok; Guile-SDL will still build.  However, in that case the
    wrapper script ‘wily-guile’ may have difficulty finding the
    pre-installed compiled modules, which will affect "make check",
    primarily.

    For more info, see file GUILE-FIXES in the distribution directory.

  - "make install" more graceful for !HAVE_MIXER and !HAVE_TTF

    The "make install" for these subsystems, when disabled (either
    due to lack of underyling support, or through command-line
    options to ./configure), used to try to symlink files that were
    not present (see NEWS for Guile-SDL 0.2.5).


- 0.2.6 | 2004-09-01

  - docs cleanup

    The documentation methodology extracts signatures from functions
    in C source code and thus the variable name of the arguments are
    the ones displayed (unless overridden).  Previously, the vars
    were named w/ an "s_" prefix to indicate "scheme value", a mild
    form of Hungarian notation.  A particularly striking example:

     - Scheme Procedure: create-rgb-surface s_flags s_width s_height
        s_depth s_rmask s_gmask s_bmask s_amask

    This has now been changed to read:

     - Scheme Procedure: create-rgb-surface flags width height depth
        rmask gmask bmask amask

    The signature still occupies two lines -- unavoidable w/ so many
    arguments -- but the whole is less jarring to read (we hope).

  - info entry now under category "Guile modules"

    It used to be under "Guile".

  - "basics" series finished

    This release concludes the "basics" series which prioritized
    general methodology refinement over features.  Next series, to
    be numbered 0.3.x, is for "coverage" (see TODO).


- 0.2.5 | 2004-07-23

  - backward-compatibility installation bugfix: libFOO.la symlinks

    To support the venerable "scm_init_FOO_BAR_module" method for
    loading binary modules in versions of Guile that look for a
    FOO/libBAR.la, and not simply FOO/BAR.la, appropriately named
    symlinks are now created for each installed .la file.

  - bugfix: symbolic return value for ‘fading-music’ and ‘fading-channel’

    These procs used to return an integer.  Now they return a
    symbol, one of: MIX_NO_FADING, MIX_FADING_OUT, MIX_FADING_IN.

  - new (sdl misc-utils) proc: poll-with-push-on-timeout-proc

  - new (sdl sdl) proc: enumstash-enums


- 0.2.4 | 2004-06-28

  - installation change: scheme wrappers eliminated

    The module (sdl sdl) used to be a scheme wrapper for binary
    module (sdl sdl-sup).  Now it is the binary module itself.
    See README.  Also, (sdl sdl) no longer provides the procs
    ‘call-with-clip-rect’ and ‘rotate-square’.

    On "make install" if file $(GUILE_SITE)/sdl/sdl.scm exists,
    it is deleted.  If the dir $(GUILE_SITE)/sdl is empty as a
    result, it is also deleted.

  - new module: (sdl misc-utils)

    Currently this contains the procs ‘call-with-clip-rect’ and
    ‘rotate-square’, both of which used to be available in module
    (sdl sdl).  The procs are documented in the info pages in a new
    chapter: "Miscellaneous Utilities".


- 0.2.3 | 2004-03-06

  - return value changes
    - cd-status: symbolic (was integer)
    - cd-get-nth-track: #f on error (was empty list)
    - joystick-get-ball: #f on error (was empty list)

  - new (sdl sdl) proc: string->image


- 0.2.2 | 2004-02-08

  - bug fix: module (sdl sdl) no longer loads (ice-9 syncase)

  - bug fix: roto-zoom-surface arg zoom no longer ignored

  - bug fix: all-but-last optional args now handle #f as "unspecified"

    If a procedure takes optional only one optional arg, that
    procedure has not changed.

    If a procedure takes more than one optional arg, all but the
    last of such args now handle #f the same as being "unspecified".
    To have the last optional arg be interpreted as "unspecified",
    simply omit it!

    This change was motivated to allow specification of the last
    optional arg while "not really specifying" the others.  Here is
    a list of procedures (and the optional args involved) that were
    changed, grouped by module:

    - (sdl mixer)

      open-audio -- freq format chunksize
      play-channel -- channel loops ticks
      play-music -- loops
      volume -- volume
      expire-channel -- channel
      fade-out-channel -- which
      fade-out-group -- tag

    - (sdl sdl)

      cd-play-tracks -- start-track start-frame n-tracks n-frames
      cd-msf->frames -- s f
      make-keysym -- sym
      roto-zoom-surface -- zoom
      zoom-surface -- zoomy
      blit-surface -- srcrect dst dstrect
      list-modes -- pixel-format flags

  - arity relaxation

    The last arg for some procedures has been made optional.  Code
    specifying these args still works (backwards-compatible change).
    Here is a list of procs -- all in module (sdl sdl) -- and their
    affected args:

    set-clip-rect -- rect
    set-caption -- icon
    video-mode-ok -- flags


- 0.2.1 | 2004-01-19

  This is a maintenance release (no user-visible changes).
  Basically, some sub-optimal C macrology was reworked.


- 0.2.0 | 2003-11-21

  - installation change: scheme wrappers for most modules eliminated

    Previously, the modules (sdl mixer), (sdl ttf) and (sdl gfx)
    were implemented as a combination of a small piece of Scheme
    code that dlopened a libtool-created shared object library in
    ${libdir}.  Since Guile can recognize certain shared object
    libraries as modules and load them directly, these Scheme code
    wrappers are not required and thus are now no longer distributed.
    Instead, "make install" places the shared object libraries for
    these modules and their support files in directory:

      ${GUILE_LIBSITE}/sdl/

    The value of ${GUILE_LIBSITE} is determined by the ‘configure’
    script.  Also installed in this directory is the compiled module
    (sdl sdl-sup), an internal module used by all the user-facing
    modules.  Related to these changes, if the program "guile-tools
    make-module-catalog" is available, installation invokes it for
    the ${GUILE_LIBSITE} directory for the compiled modules, and
    ${GUILE_SITE} for module (sdl sdl).  See README for more info.

  - upgrade facility: make {check,clean}-000-libdir

    See README section "Upgrading Tips" for info on how to handle
    old ${libdir}/libguileSDL* files (from Guile-SDL 0.1.x).

  - "sdl-" prefix dropped

    Procedure names no longer begin with "sdl-".  You can use the
    #:renamer clause (in ‘use-modules’ and ‘define-module’ forms)
    to add this back, or possibly choose another prefix.  In this
    distribution, the tests, examples and documentation use "SDL:".

  - "make check" now respects INTERACTIVE env var

    Normally "make check" skips tests that require human
    interaction.  You can do "make check INTERACTIVE=1" to
    enable running those tests as well.


- maintainership transfer: ttn

  A big thanks goes to Alex Shinn, Vikram Subramanian, and Joel
  Smith, the original authors of the disparate packages that all
  came together as Guile-SDL in mid-to-late 2001, for (1) writing
  the code; (2) pooling their efforts; and (3) passing it on.


- 0.1.7

  Most of the merge complete.  Looking to make some minor clean-up
  and bugfixes before a 0.2.0 release.


- 0.1.0

  This is the very first version of Guile-SDL.


Copyright information:

Copyright (C) 2003-2009, 2011-2013, 2015, 2021, 2022 Thien-Thi Nguyen

   Permission is granted to anyone to make or distribute verbatim copies
   of this document as received, in any medium, provided that the
   copyright notice and this permission notice are preserved,
   thus giving the recipient permission to redistribute in turn.

   Permission is granted to distribute modified versions
   of this document, or of portions of it,
   under the above conditions, provided also that they
   carry prominent notices stating who last changed them.

______________________________________________
	Local Variables:
	mode: outline
	outline-regexp: "\\([ ][ ]\\)*- "
	End:
