Device Independent Bitmap Utilities - MIT/GNU Scheme 9.1
Description: MIT/GNU Scheme 9.1

Previous: Foreign function interface, Up: Win32 Package Reference

### 18.3 Device Independent Bitmap Utilities

The Device Independent Bitmap (DIB) utilities library `DIBUTILS.DLL` and the associated procedures in `dib.scm` in the Win32 system source is an example of how to use the foreign function interface to access and manipulate non-Scheme objects.

— windows type: dib

> In the C world a DIB is a handle to a piece of memory containing the bits that represent information about the image and the pixels of the image. The handle is a machine-word sized piece of data which may be thought of as a 32 bit integer. The handle may be null (i.e. zero), indicating that there is no block of memory describing the DIB. The null value is usually returned by C functions that are supposed to create a DIB but failed, for some reason like the memory could not be allocated or a file could not be opened.

> In the Scheme world a DIB is a structure containing information about the bitmap (specifically the integer that represents the handle). We also include `#f` in the `dib` windows type to mirror the null handle error value.

>               (define dib-result
>                 (lambda (handle)
>                   (if (= handle 0)
>                       #f
>                       (make-dib handle))))

>               (define dib-arg
>                 (lambda (dib)
>                   (if dib
>                       (cell-contents (dib-handle dib))
>                       0)))

>               (define-windows-type dib
>                 (lambda (thing) (or (dib? thing) (eq? thing #f)))
>                 dib-arg
>                 dib-result)