7 years agoliblbx: Correct EOF handling in lbx_file_read. master
Nick Bowler [Fri, 31 Jan 2014 05:21:04 +0000 (00:21 -0500)]
liblbx: Correct EOF handling in lbx_file_read.

We should never see an EOF from the underlying I/O when reading archive
members, because we setup the read request to only return bytes that are
supposed to be there.

So if EOF happens, flag this as an error and do *not* set the eof flag
in the state structure.  Also fixup lbxtool to properly handle this.

7 years agotests: Add test for truncated archives.
Nick Bowler [Fri, 31 Jan 2014 05:01:40 +0000 (00:01 -0500)]
tests: Add test for truncated archives.

If a real EOF is encountered while reading an archive member this
will not be properly reported as a read error.  So we'll never notice
if extracted files are missing a chunk because the archive is truncated.

Add a test which exposes this behaviour.

7 years agoliblbx: Remove use of SEEK_CUR in the image reader.
Nick Bowler [Fri, 31 Jan 2014 03:32:28 +0000 (22:32 -0500)]
liblbx: Remove use of SEEK_CUR in the image reader.

Other than this one seek, all other seeks used by the library are of the
SEEK_SET type.  Only requiring SEEK_SET will simplify implementations of
lbx_file_ops quite a lot, so let's get rid of this one.

The whole point of this seek is to skip just one byte — a normal read
works just as well.

7 years agoliblbx: Remove tell function from lbx_file_ops.
Nick Bowler [Fri, 31 Jan 2014 03:22:53 +0000 (22:22 -0500)]
liblbx: Remove tell function from lbx_file_ops.

There is no longer any user of this function, so we don't really need
it in the lbx_file_ops structure.

7 years agoliblbx: Remove declaration of lbx_mopen.
Nick Bowler [Fri, 31 Jan 2014 03:21:21 +0000 (22:21 -0500)]
liblbx: Remove declaration of lbx_mopen.

This function was removed a long time ago, but its declaration was
never deleted from the header file.  Better late than never.

7 years agoliblbx: Add a hard check for image leadin versus frame count.
Nick Bowler [Fri, 31 Jan 2014 03:17:43 +0000 (22:17 -0500)]
liblbx: Add a hard check for image leadin versus frame count.

Our "official" image spec says that the leadin is a frame number, so
it does not make sense for the leadin to be greater than or equal to
the frame count.

Convert the existing "soft" check into a hard failure.

7 years agoliblbx: Kill lbx_img_getinfo
Nick Bowler [Fri, 31 Jan 2014 03:12:11 +0000 (22:12 -0500)]
liblbx: Kill lbx_img_getinfo

There is no longer any reason to use this function.  Its removal has
been a long time coming; it is time for it to go.

7 years agoliblbx: Clean up embedded palette handling
Nick Bowler [Fri, 31 Jan 2014 03:00:27 +0000 (22:00 -0500)]
liblbx: Clean up embedded palette handling

We don't need to read the embedded palette information with the rest of
the header, we can defer that to much later when the palette is actually
needed.  This makes more sense conceptually, simplifies the code a bit,
and saves some bytes in the image state structure.

Since we're basically rewriting lbx_img_getpalette anyway, take this
opportunity to give it a better interface.  It now returns the number
of embedded palette entries, allowing us to eliminate the palette size
feature in lbx_img_getinfo.

7 years agoliblbx: Kill the old LBX image API.
Nick Bowler [Wed, 29 Jan 2014 05:54:53 +0000 (00:54 -0500)]
liblbx: Kill the old LBX image API.

Now that both users have been ported we can get rid of this cruft.

7 years agolbxgui: Render LBX directly to Cairo surfaces.
Nick Bowler [Wed, 29 Jan 2014 05:30:13 +0000 (00:30 -0500)]
lbxgui: Render LBX directly to Cairo surfaces.

This replaces the GDK pixbuf with a Cairo image surface, and updates
the render path to the new liblbx API.

7 years agolbxgui: Use Cairo for drawing.
Nick Bowler [Wed, 29 Jan 2014 00:34:17 +0000 (19:34 -0500)]
lbxgui: Use Cairo for drawing.

The GDK stuff is deprecated so let's convert all the GDK drawing bits to
Cairo.  Unlike GDK, Cairo does not include an XBM loader so we have to
implement that from scratch.

Keep the GDK pixbuf bits around for now.

7 years agoliblbx: Fix uninitialized value warning in pipe_seek.
Nick Bowler [Tue, 28 Jan 2014 02:43:42 +0000 (21:43 -0500)]
liblbx: Fix uninitialized value warning in pipe_seek.

If whence is invalid then we will proceed with an uninitialized value.
However, unlike the similar problem in lbx_file_seek, pipe_seek is an
internal function so this scenario can Never Happen™.

Add an assertion to silence the warning.

7 years agoliblbx: Always return a value in file_seek.
Nick Bowler [Tue, 28 Jan 2014 02:41:55 +0000 (21:41 -0500)]
liblbx: Always return a value in file_seek.

This function did not return any value on success so it was only by
chance that it seemed to work.

7 years agoliblbx: Improve error handling in lbx_file_seek.
Nick Bowler [Tue, 28 Jan 2014 01:28:09 +0000 (20:28 -0500)]
liblbx: Improve error handling in lbx_file_seek.

  - Return an error code for an invaled whence value instead of
    proceeding with uninitialized values.

  - Set an error code on one of the error paths that did not set one.

7 years agotests: Enable shell traces early in all scripts.
Nick Bowler [Tue, 28 Jan 2014 01:10:30 +0000 (20:10 -0500)]
tests: Enable shell traces early in all scripts.

The result_ function we snarfed from Automake turns on set -x in our
test suite, but since we do not enable it from the beginning the test
logs have traces starting from the first test result and not before.

The result is very strange; enable traces early so we see everything.

7 years agolbximg: Fix management of external palette file handles.
Nick Bowler [Tue, 28 Jan 2014 01:03:34 +0000 (20:03 -0500)]
lbximg: Fix management of external palette file handles.

We leak file handles for the external and override palettes because the
file is opened every time the --palette or --override options are set.
Fix that up, and also close the handles when finished.

7 years agotests: Allow custom test command wrappers
Nick Bowler [Sat, 25 Jan 2014 19:10:33 +0000 (14:10 -0500)]
tests: Allow custom test command wrappers

Add a new environment variable, TESTWRAPPER, which allows the tests
to be run easily in tools like valgrind or qemu.

7 years agodocs: Add palette information for the tanm_xxx animations.
Nick Bowler [Fri, 24 Jan 2014 00:06:08 +0000 (19:06 -0500)]
docs: Add palette information for the tanm_xxx animations.

I thought these all had embedded palettes but at least tanm_001
has some unspecified palette entries.  The only palette for this
image that does not look horrible is fonts.lbx.002, so let's go
with that one.

7 years agobuild: Remove call to AC_CONFIG_MACRO_DIR.
Nick Bowler [Thu, 23 Jan 2014 03:04:38 +0000 (22:04 -0500)]
build: Remove call to AC_CONFIG_MACRO_DIR.

This macro never did anything useful and should not be used.  The new-
fangled way is AC_CONFIG_MACRO_DIRS which might even work, but stick
with the tried-and-true method for now.

7 years agolbximg: Convert to new decoding API.
Nick Bowler [Thu, 23 Jan 2014 02:30:01 +0000 (21:30 -0500)]
lbximg: Convert to new decoding API.

Convert lbximg to the new API.  The implementation looks a lot
like getframe, but we can make the memory usage much more compact.
Not really a coincidence because getframe was originally designed
to support this application.

7 years agoliblbx: Implement new image reading API.
Nick Bowler [Thu, 23 Jan 2014 02:13:45 +0000 (21:13 -0500)]
liblbx: Implement new image reading API.

Add a new API which allows the application to essentially loop over
the drawing commands in an LBX frame.  This requires no runtime memory
allocations in the library, pushing all that out to the caller.

Conceptually this simplifies many applications because they can use
this to handle image data row-at-a-time.

For now, keep the old getframe function but change it to use the new
API under the hood.

7 years agoliblbx: Rename LBX_ENOENT to LBX_EINVAL.
Nick Bowler [Thu, 23 Jan 2014 01:54:33 +0000 (20:54 -0500)]
liblbx: Rename LBX_ENOENT to LBX_EINVAL.

General invalid argument makes more sense to have.

7 years agotests: Source image header in a subshell.
Nick Bowler [Thu, 23 Jan 2014 01:50:33 +0000 (20:50 -0500)]
tests: Source image header in a subshell.

Use a subshell when sourcing the image header in pam-formats so that
the shell variables do not persist past the end of the test.  While
unlikely, a value left over from an earlier test might result in
false positives in later tests.

7 years agotests: Add info on what each MOO2 image is actually testing.
Nick Bowler [Thu, 23 Jan 2014 01:14:16 +0000 (20:14 -0500)]
tests: Add info on what each MOO2 image is actually testing.

Each MOO2 test image was selected to test a particular feature of the
image decoder.  That information was in the old regress.zsh script but
for some reason got dropped in the conversion.  Add that information
back as a TAP diagnostic line for each image.

7 years agotests: Zero out transparent pixels before calculating digest.
Nick Bowler [Thu, 23 Jan 2014 01:12:02 +0000 (20:12 -0500)]
tests: Zero out transparent pixels before calculating digest.

The colour value of transparent pixels is irrelevant from a correctness
perspective, but we are nevertheless including that information in the
tests.  While we could zero out the values in the PAM output code it's
better to make the tests more robust.

This adds an external dependency on netpbm's pamarith and pamchannel
tools for the test suite.  Restructure the tests so that these tools
are optional.  If the tools are not available (or not working) then we
must accept the fact that images with an alpha channel may have false
negatives (but not false positives) -- record a SKIP result for an MD5
mismatch in that case.

7 years agotests: Remove toplevel set -e usage.
Nick Bowler [Thu, 23 Jan 2014 01:06:27 +0000 (20:06 -0500)]
tests: Remove toplevel set -e usage.

Using set -e at the top level affects the entire script and makes it
difficult to work with commands that may legitimately return an error.
Regardless, set -e is still not so great for error checks because it
has some incredibly non-obvious semantics.

Better to just have correct error checks everywhere.  Fortunately, this
is the case for almost all the existing test code -- only the testdir
creation needs fixing.

7 years agoliblbx: Expose image lead-in in public struct.
Nick Bowler [Thu, 2 Jan 2014 01:33:18 +0000 (20:33 -0500)]
liblbx: Expose image lead-in in public struct.

Since we've finally defined the meaning of this value it makes sense to
expose it to the user.  This eliminates another need for lbx_img_getinfo,
but maintain the old functionality there for now.

7 years agolbximg: Fix wart in frame scanline header format
Nick Bowler [Tue, 17 Dec 2013 04:49:30 +0000 (23:49 -0500)]
lbximg: Fix wart in frame scanline header format

The format of frame scanlines has been a little weird since day 1: We
had 2 "types" of scanline headers disambiguated by some non-trivial
logic, including whether or not it was the first decoded scanline in
the frame.

Here's a new, simpler approach, which has only one type of scanline
header, consistent meanings to the header fields, and by interpreting
the first 4 bytes as a "frame header" we get rid of the special case
for the first scanline, too.

Add a document in English which describes the LBX image file format, to
be used as the baseline format specification going forward.

Finally, update the contrived test cases for the new format.  All the
test cases using actual MOO2 data still pass.

7 years agolbximg: Return failure if there was a decoding error.
Nick Bowler [Tue, 17 Dec 2013 01:01:57 +0000 (20:01 -0500)]
lbximg: Return failure if there was a decoding error.

If any frame was not decoded because liblbx returned an error, we should
return a non-zero exit status from the tool.  Previously this would only
happen if *all* frames failed.

7 years agotests: Migrate remaining regress.zsh tests to TAP.
Nick Bowler [Sun, 23 Jun 2013 19:11:14 +0000 (15:11 -0400)]
tests: Migrate remaining regress.zsh tests to TAP.

7 years agotests: Migrate the mainmenu.lbx tests to the TAP system.
Nick Bowler [Sat, 22 Jun 2013 14:01:39 +0000 (10:01 -0400)]
tests: Migrate the mainmenu.lbx tests to the TAP system.

This moves the first set of regress.zsh tests to the new framework.

7 years agobuild: Bump dxcommon for relevant fix-gnulib updates.
Nick Bowler [Fri, 21 Jun 2013 20:01:01 +0000 (16:01 -0400)]
build: Bump dxcommon for relevant fix-gnulib updates.

7 years agoliblbx: Fix framebuffer allocation for 0x0 images.
Nick Bowler [Fri, 21 Jun 2013 14:22:48 +0000 (10:22 -0400)]
liblbx: Fix framebuffer allocation for 0x0 images.

The allocation strategy for the framebuffer is the "array2" method from
c-faq: an array of row pointers into a single large array containing all
rows.  This was not being freed correctly in the case with 0 rows, since
there would be no pointer to the row data at all in order to free it.

Fix that up by simply allocating a 1x1 framebuffer when it would
otherwise be empty.  While we're at it, also add an overflow check
on the multiplication.

7 years agotests: Add a simple test to validate PAM output formats.
Nick Bowler [Fri, 21 Jun 2013 14:18:39 +0000 (10:18 -0400)]
tests: Add a simple test to validate PAM output formats.

This tests that the PAM output produces the correct image type for
all four of the lbximg modes.

7 years agolbximg: Add an option to control the output filenames.
Nick Bowler [Wed, 19 Jun 2013 01:07:51 +0000 (21:07 -0400)]
lbximg: Add an option to control the output filenames.

This will be needed for postmortem analysis of test cases that extract
multiple images, since otherwise there is no easy way to prevent the
tool from overwriting the earlier outputs.

This was clearly intended to be a user setting from the start but for
some reason it was never wired up to a command-line option.

7 years agolbximg: Allow --identify as a long option.
Nick Bowler [Wed, 19 Jun 2013 00:45:04 +0000 (20:45 -0400)]
lbximg: Allow --identify as a long option.

There is no reason to not have a full word here.  The getopt_long
function allows abbreviations anyway, so --ident remains perfectly
fine as an option.

7 years agolbximg: Fix exit status in identify mode.
Nick Bowler [Wed, 19 Jun 2013 00:43:36 +0000 (20:43 -0400)]
lbximg: Fix exit status in identify mode.

The tool was always returning an exit status of failure, because in
identify mode there was no case to set the exit status to success.

7 years agolbximg: Fix --override long option.
Nick Bowler [Wed, 19 Jun 2013 00:40:42 +0000 (20:40 -0400)]
lbximg: Fix --override long option.

The long option for this feature was clearly never tested, as only the
short option spec was actually correct.

7 years agotests: First stab at a proper test suite.
Nick Bowler [Wed, 19 Jun 2013 00:30:08 +0000 (20:30 -0400)]
tests: First stab at a proper test suite.

Not much of a suite at the moment since it consists of a single test,
which exposes a corner-case in the memory allocation spotted by clang.

Eventually we will move the regress.zsh tests into this framework.

7 years agolbximg: Make libpng a soft dependency.
Nick Bowler [Fri, 14 Jun 2013 22:15:25 +0000 (18:15 -0400)]
lbximg: Make libpng a soft dependency.

Now that we have Netpbm output formats which do not depend on
any external libraries, we can make it possible to build lbximg
without libpng.  Adjust the build system so that lbximg is built
unconditionally and PNG output can be selectively disabled.

7 years agolbximg: Add support for Netpbm output.
Nick Bowler [Fri, 14 Jun 2013 22:11:46 +0000 (18:11 -0400)]
lbximg: Add support for Netpbm output.

These netpbm formats are extremely simple image formats which can
be written with a very small amount of code.  Implement the ASCII
PBM and PPM formats for eventual use in test scripts, and PAM as a
fully-featured format so that we can make libpng optional.

7 years agoliblbx: Don't scale palette values internally.
Nick Bowler [Fri, 14 Jun 2013 01:57:11 +0000 (21:57 -0400)]
liblbx: Don't scale palette values internally.

Output the 18-bit palette values unadulterated, leaving it up to the
users to do conversion if necessary.  Push the conversion down into the
consumers (currently PNG output and the GTK GUI) where a 24-bit palette
is required.

While we're at it, adjust the conversion to scale to the full output
range of [0, 255].  This is a slight change to the output, so all the
image hashes need to be adjusted in the regression test.

7 years agolbximg: Fix printf format string in identify mode.
Nick Bowler [Fri, 14 Jun 2013 01:23:52 +0000 (21:23 -0400)]
lbximg: Fix printf format string in identify mode.

One of the flag strings would never be printed because there was
simply not enough conversion specifiers in this format string.  Fix
that up, and also adjust the length modifiers to match the actual
passed integer types.

7 years agolbximg: Push no-palette mode down into the PNG writer.
Nick Bowler [Fri, 14 Jun 2013 01:16:36 +0000 (21:16 -0400)]
lbximg: Push no-palette mode down into the PNG writer.

This allows the writer to select the most appropriate output format to
support this mode.  Switch the PNG writer to emit true grayscale images
in this case.

7 years agoliblbx: Properly report errors in lbx_(img_)fopen.
Nick Bowler [Wed, 12 Jun 2013 01:07:30 +0000 (21:07 -0400)]
liblbx: Properly report errors in lbx_(img_)fopen.

The lbx_fopen and lbx_img_fopen functions were not properly pushing an
error code when they failed, leading to extremely helpful messages of
the form:

  lbximg: failed to open image: Success.

It further turns out that pushing negative errors (i.e., -errno) was
documented but never actually tested or used, so fix that up, too.
It is likely that many other sites are lacking appropriate calls to
lbx_error_raise, which can be added later.

7 years agolbximg: Add a new PNG writing routine.
Nick Bowler [Tue, 11 Jun 2013 22:29:07 +0000 (18:29 -0400)]
lbximg: Add a new PNG writing routine.

This splits out the PNG output from the rest of the lbximg processing,
so that it will be easier to add additional output formats (in par-
ticular, it would be nice to have some sort of text-based format to
facilitate automated testing).

Take this opportunity to vastly improve the error handling.

7 years agotools: Add some smarter error printing routines.
Nick Bowler [Wed, 5 Jun 2013 03:34:06 +0000 (23:34 -0400)]
tools: Add some smarter error printing routines.

These ones can fill in strerror(errno) automatically.

7 years agotools: Move progname handling into a common source file.
Nick Bowler [Wed, 5 Jun 2013 03:26:04 +0000 (23:26 -0400)]
tools: Move progname handling into a common source file.

Less code duplication is nice.

8 years agobuild: Remove use of per-target CFLAGS.
Nick Bowler [Sat, 23 Mar 2013 17:12:30 +0000 (13:12 -0400)]
build: Remove use of per-target CFLAGS.

These are not necessary, and result in ugly object file names for no

8 years agobuild: clean up XML -> C conversion.
Nick Bowler [Sat, 23 Mar 2013 16:28:55 +0000 (12:28 -0400)]
build: clean up XML -> C conversion.

Use a suffix rule so the rule avoids hardcoding names and other details.

8 years agobuild: Flatten the build system.
Nick Bowler [Sat, 23 Mar 2013 15:47:35 +0000 (11:47 -0400)]
build: Flatten the build system.

Move everything into a single so that it's all in one place.

8 years agodocs: Add a more realistic statement about development pace.
Nick Bowler [Thu, 14 Mar 2013 00:14:24 +0000 (20:14 -0400)]
docs: Add a more realistic statement about development pace.

I don't think "under heavy development" even begins to resemble reality.

8 years agobuild: Integrate Gnulib non-recursively using fix-gnulib.
Nick Bowler [Thu, 14 Mar 2013 00:10:47 +0000 (20:10 -0400)]
build: Integrate Gnulib non-recursively using fix-gnulib.

8 years agognulib: Update to latest version.
Nick Bowler [Tue, 12 Mar 2013 22:38:40 +0000 (18:38 -0400)]
gnulib: Update to latest version.

8 years agobuild: Fixes for newer tools.
Nick Bowler [Tue, 12 Mar 2013 22:22:56 +0000 (18:22 -0400)]
build: Fixes for newer tools.

Some trivial updates to fix the build with latest Automake.  Drop
support for Automake versions < 1.11.

9 years agodoc: Update moo2-data.
Nick Bowler [Tue, 6 Dec 2011 23:33:02 +0000 (18:33 -0500)]
doc: Update moo2-data.

9 years agoliblbx: Remove now-redundant fields from lbx_imginfo.
Nick Bowler [Mon, 5 Dec 2011 04:28:37 +0000 (23:28 -0500)]
liblbx: Remove now-redundant fields from lbx_imginfo.

Ideally I'd like to kill this structure completely, but there's still
some non-trivial logic in it.  So leave those fields for now.

9 years agoliblbx: Kill the LBXimg typedef.
Nick Bowler [Mon, 5 Dec 2011 04:22:18 +0000 (23:22 -0500)]
liblbx: Kill the LBXimg typedef.

9 years agoliblbx: Start conversion of LBXimg to public/private structs.
Nick Bowler [Mon, 5 Dec 2011 04:12:40 +0000 (23:12 -0500)]
liblbx: Start conversion of LBXimg to public/private structs.

9 years agoliblbx: Kill the LBX typedef.
Nick Bowler [Sat, 14 May 2011 01:12:13 +0000 (21:12 -0400)]
liblbx: Kill the LBX typedef.

More stuff rendered redundant.

9 years agoliblbx: Kill lbx_numfiles.
Nick Bowler [Sat, 14 May 2011 01:08:37 +0000 (21:08 -0400)]
liblbx: Kill lbx_numfiles.

This function is now redundant.

9 years agoliblbx: Start conversion to public/private structure bits.
Nick Bowler [Sat, 14 May 2011 01:03:17 +0000 (21:03 -0400)]
liblbx: Start conversion to public/private structure bits.

This sort of interface is really a lot nicer, and avoids stupid
accessor functions.

11 years agobuild: Reset pkg_failed before checking pkg-config.
Nick Bowler [Thu, 11 Mar 2010 01:04:16 +0000 (20:04 -0500)]
build: Reset pkg_failed before checking pkg-config.

If this is not done, the first pkg-config check to fail will cause all
subsequent pkg-config checks to "fail".

11 years agoliblbx: Namespace cleanup.
Nick Bowler [Thu, 11 Feb 2010 14:06:00 +0000 (09:06 -0500)]
liblbx: Namespace cleanup.

11 years agolbxgui: Fix an error handling regression.
Nick Bowler [Thu, 11 Feb 2010 13:53:56 +0000 (08:53 -0500)]
lbxgui: Fix an error handling regression.

If the framebuffer allocation fails, it still gets passed to
render_to_pixbuf.  This causes an assertion failure.

11 years agolbxgui: Implement frame dropping for animation.
Nick Bowler [Thu, 11 Feb 2010 05:06:54 +0000 (00:06 -0500)]
lbxgui: Implement frame dropping for animation.

Currently, if it takes longer than 1/15th of a second to draw a frame,
the next frame will be queued before it has a chance to finish, which
then takes longer than 1/15th of a second to draw, so the next one gets
queued, ad infinitum.

We do two things to solve this problem.  First, the timer runs at a
low priority so that a redraw doesn't get queued while a redraw is in
progress.  Second, the timer skips queueing any frames that have missed
their time.

11 years agoliblbx: Use unconditional includes of <config.h>.
Nick Bowler [Thu, 11 Feb 2010 03:14:13 +0000 (22:14 -0500)]
liblbx: Use unconditional includes of <config.h>.

11 years agoliblbx: Implement improved error reporting mechanism.
Nick Bowler [Thu, 11 Feb 2010 03:08:04 +0000 (22:08 -0500)]
liblbx: Implement improved error reporting mechanism.

We now use a FIFO-of-errors approach (similar to libltdl) as opposed to
an errno-esque approach.

11 years agoliblbx: Replace feof call with lbx_file_ops.
Nick Bowler [Thu, 11 Feb 2010 02:57:21 +0000 (21:57 -0500)]
liblbx: Replace feof call with lbx_file_ops.

This feof call was missed when converting this function.

11 years agoliblbx: Reset EOF flag after a successful seek on a pipe.
Nick Bowler [Thu, 11 Feb 2010 02:48:51 +0000 (21:48 -0500)]
liblbx: Reset EOF flag after a successful seek on a pipe.

This will probably never happen in practice.

11 years agoliblbx: Rename lbx_stat to lbx_file_stat.
Nick Bowler [Thu, 11 Feb 2010 00:42:12 +0000 (19:42 -0500)]
liblbx: Rename lbx_stat to lbx_file_stat.

11 years agoliblbx: Rename LBX_IMG to LBXimg.
Nick Bowler [Thu, 11 Feb 2010 00:36:49 +0000 (19:36 -0500)]
liblbx: Rename LBX_IMG to LBXimg.

This makes it consistent with LBXfile.

11 years agobuild: Implement a better GTK+ detection macro.
Nick Bowler [Thu, 11 Feb 2010 00:08:25 +0000 (19:08 -0500)]
build: Implement a better GTK+ detection macro.

This macro uses the same ideas behind the libpng detection, does not
suffer from the POSIXLY_CORRECT nonsense, doesn't duplicate checks
for pkg-config, supports caching, and properly fails when it should.

11 years agobuild: Split out core logic from libpng detection.
Nick Bowler [Thu, 11 Feb 2010 00:06:52 +0000 (19:06 -0500)]
build: Split out core logic from libpng detection.

This allows it to be used for other libraries.  This new method also
better handles the various mechanisms for setting cflags/libs.

11 years agolbxgui: Fix pointer type error.
Nick Bowler [Wed, 10 Feb 2010 06:24:37 +0000 (01:24 -0500)]
lbxgui: Fix pointer type error.

The XBM format is an array of unsigned char, yet for some reason
unknown to me, the gdk_bitmap_create_from_data function wants a
char pointer.  Add the appropriate cast.

11 years agolbxgui: Compile in the glade UI description.
Nick Bowler [Wed, 10 Feb 2010 05:40:17 +0000 (00:40 -0500)]
lbxgui: Compile in the glade UI description.

I don't think it makes any sense to try and jump through hoops to find
this data at runtime, given that the data and the code are so intimately

11 years agolicense: Fix copyright years in source files.
Nick Bowler [Wed, 10 Feb 2010 04:54:52 +0000 (23:54 -0500)]
license: Fix copyright years in source files.

11 years agolbxgui: Add copyright notices.
Nick Bowler [Wed, 10 Feb 2010 04:51:11 +0000 (23:51 -0500)]
lbxgui: Add copyright notices.

11 years agodoc: Update man pages to reflect reality.
Nick Bowler [Wed, 10 Feb 2010 04:48:33 +0000 (23:48 -0500)]
doc: Update man pages to reflect reality.

11 years agolbximg: Clean up option list.
Nick Bowler [Wed, 10 Feb 2010 04:42:38 +0000 (23:42 -0500)]
lbximg: Clean up option list.

Despite it being very useful, --nopalette did not have a single
character option.  While we're at it, use --no-palette for consistency
with GNU tools.

11 years agolbximg: Use the new lbximg_fopen interface.
Nick Bowler [Wed, 10 Feb 2010 04:29:40 +0000 (23:29 -0500)]
lbximg: Use the new lbximg_fopen interface.

11 years agoliblbx: Update lbximg_fopen to work like lbx_fopen.
Nick Bowler [Wed, 10 Feb 2010 04:24:56 +0000 (23:24 -0500)]
liblbx: Update lbximg_fopen to work like lbx_fopen.

11 years agolbximg: Fix improper free.
Nick Bowler [Wed, 10 Feb 2010 04:14:27 +0000 (23:14 -0500)]
lbximg: Fix improper free.

We were freeing the row buffer twice on the error path, and not at all
on the success path.

11 years agolbximg: Zero frame bitmap before use.
Nick Bowler [Wed, 10 Feb 2010 04:11:05 +0000 (23:11 -0500)]
lbximg: Zero frame bitmap before use.

11 years agolbxgui: Add a toggle between patterned and solid background.
Nick Bowler [Wed, 10 Feb 2010 04:03:32 +0000 (23:03 -0500)]
lbxgui: Add a toggle between patterned and solid background.

The patterned background makes it hard to see images that consist mostly
of transparent pixels.

11 years agolbxgui: Add a scrolled window around the image viewport.
Nick Bowler [Wed, 10 Feb 2010 03:21:12 +0000 (22:21 -0500)]
lbxgui: Add a scrolled window around the image viewport.

This solves a weird problem with the canvas resizing when one clears the
image selection.

11 years agolbxgui: Simplify image loading.
Nick Bowler [Wed, 10 Feb 2010 03:01:08 +0000 (22:01 -0500)]
lbxgui: Simplify image loading.

This also fixes an oversight whereby the framebuffer was re-allocated
every time the image is re-rendered.

11 years agolbxgui: Split frame rendering into a separate source file.
Nick Bowler [Wed, 10 Feb 2010 01:38:32 +0000 (20:38 -0500)]
lbxgui: Split frame rendering into a separate source file.

11 years agolbxgui: Clean up function names and linkage.
Nick Bowler [Wed, 10 Feb 2010 00:04:02 +0000 (19:04 -0500)]
lbxgui: Clean up function names and linkage.

11 years agolbxgui: Add interface to clear a combo box.
Nick Bowler [Tue, 9 Feb 2010 23:38:22 +0000 (18:38 -0500)]
lbxgui: Add interface to clear a combo box.

11 years agodoc: Update moo2-data.
Nick Bowler [Tue, 9 Feb 2010 06:06:56 +0000 (01:06 -0500)]
doc: Update moo2-data.

11 years agoliblbx: Add support for "chunked" images.
Nick Bowler [Tue, 9 Feb 2010 05:27:30 +0000 (00:27 -0500)]
liblbx: Add support for "chunked" images.

It appears that the frame count fields aren't actually two 16-bit
fields, but rather four 8-bit fields.  The images in monster.lbx
appear to have "chunks" of animation and what was previously thought to
be the most significant byte of the lead-in now seems to be the length
of a "chunk".

These images are much like any other, except that the first frame of
every chunk is drawn on a clean slate.  Examples are found in

11 years agoliblbx: Add support for "raw" LBX images.
Nick Bowler [Tue, 9 Feb 2010 04:14:16 +0000 (23:14 -0500)]
liblbx: Add support for "raw" LBX images.

There is a new image format in town.  If a particular flag bit is set,
then there are no row headers and data for every pixel of a frame is
simply stored in row-major order.  An example of such an image is
starbg.lbx.009, as well as several others in the same archive.

Don't you just *love* the designers of this format?

11 years agolbxgui: Make an effort to not leak resources.
Nick Bowler [Tue, 9 Feb 2010 04:13:50 +0000 (23:13 -0500)]
lbxgui: Make an effort to not leak resources.

11 years agolbxgui: Make transparent pixels more obvious.
Nick Bowler [Tue, 9 Feb 2010 02:19:36 +0000 (21:19 -0500)]
lbxgui: Make transparent pixels more obvious.

11 years agolbxgui: Don't use as much horizontal space in GUI.
Nick Bowler [Mon, 8 Feb 2010 23:20:43 +0000 (18:20 -0500)]
lbxgui: Don't use as much horizontal space in GUI.

11 years agobuild: Update project dependencies.
Nick Bowler [Mon, 8 Feb 2010 16:32:30 +0000 (11:32 -0500)]
build: Update project dependencies.

11 years agodoc: Update moo2-data.
Nick Bowler [Mon, 8 Feb 2010 05:13:30 +0000 (00:13 -0500)]
doc: Update moo2-data.

11 years agoliblbx: Clear the image mask when backtracking frames.
Nick Bowler [Mon, 8 Feb 2010 04:58:57 +0000 (23:58 -0500)]
liblbx: Clear the image mask when backtracking frames.

Without this, undrawn pixels in the first frame will have the pixel
values from the previously drawn frame.

11 years agodoc: Update moo2-data.
Nick Bowler [Mon, 8 Feb 2010 04:26:22 +0000 (23:26 -0500)]
doc: Update moo2-data.