Source for Generalised Bitmap Module

This document should be used in conjunction with the main documentation.

Portability

This is all portable 32 bit C code, although some of the code is OS/2 specific.

The rest has all recently been compiled on OS/2 using VisualAge C++ 3.0 (with CTC306, CTD302 and CTU304), Win32 using Visual C++ 4.2, and AIX using xlc.

I get mail from people who use GCC to compile this code from time to time.

It should port to any modern 32 bit platform easily enough.

Directory structure

The GBM source is divided into a set of directorys, each of which defines a sub-project :-

.
Bits from elsewhere, included to make source complete. scroll.* is a pre-built OS/2 2.x PM scroller control.
.\gbm
Fully portable 32 bit C code that provides most of the functionality. Provides librarys to perform file I/O, error-diffusion, halftoning, colour reduction, reflecting, rotating, transposing, scaling and cropping.
.\gbmv
Simple 32 bit OS/2 PM bitmap viewer. Simply provides application whose client displays a bitmap.
.\gbmdlg
Provides a derivation of WinFileDlg, which is designed to allow the user to specify the file for loading or saving. Has additional entryfield for "Bitmap specific options". Has "Bitmap", "GIF", "PCX" etc. in the Filetypes combo box. Includes help source to generate accompanying help text.
.\gbmv2
Sophisticated 32 bit OS/2 PM bitmap viewer with menu and dialogs to give access to bitmap manipulation tools. Full help.
.\gbmvfsa
OS/2 Full Screen animation viewer using 320x200 8bpp VGA mode. Written using the almost documented Vio calls.
.\gbmlogo
Tool to make VRAM0.DAT, VRAM1.DAT, VRAM2.DAT and VRAM3.DAT for feeding into MAKELOGO.EXE as supplied on Developer Connection CD 6. MAKELOGO.EXE makes VRAM.DAT which can be copied over hidden file \OS2LOGO on the boot drive, to change the boot screen. Input to GBMLOGO.EXE should be a 640x400 bitmap.

The sub-projects should be built in the order listed above, because later sub-projects use headers/librarys etc. from the earlier ones.

If a makefile uses stuff from another directory, it accesses it via a make variable defined at the start. In this way, if I move a directory, I need only change a line at the top of a makefile.

In fact the source is supplied with makefiles that work on my machine. So you may need to edit the makefiles and change the following lines to :-

  SCROLL = place where . directory unzipped to
  GBM    = place where .\gbm directory unzipped to
  GBMDLG = place where .\gbmdlg directory unzipped to
  IJG    = place where IJG 6a library source is, typically \jpeg-6a

If you comment out the definition of IJG, then the GBM source doesn't know where the JPEG stuff is, and so builds a version without JPEG support.

Compiling a given platform

Many of the directorys listed above have a platform specific sub-directory.

Simply arrange to copy the platform specific sub-directory(s) to the main directory before building the main directory(s).

eg: to build the main gbm directory for Windows NT :-

  cd gbm
  copy win32
  nmake

JPEG support

When building with JPEG support, the build process works by copying a shrunk down makefile called makeijgo to wherever the IJG 6a is installed, and also a configuration file.

It then builds the library using compiler switches suitable for building objects which are to be a part of the main GBM library.


This documentation is written and maintained by the GBM author, Andy Key
nyangau@interalpha.co.uk