Two structures in the RastPort -- AreaInfo and TmpRas -- define certain information for area filling operations. The AreaInfo pointer is initialized by a call to the routine InitArea(). #define AREA_SIZE 200 register USHORT i; WORD areaBuffer[AREA_SIZE]; struct AreaInfo areaInfo = {0}; /* Clear areaBuffer before calling InitArea(). */ for (i=0; i<AREA_SIZE; i++) areaBuffer[i] = 0; InitArea(&areaInfo, areaBuffer, (AREA_SIZE*2)/5); The area buffer must start on a word boundary. That is why the sample declaration shows areaBuffer as composed of unsigned words (200), rather than unsigned bytes (400). It still reserves the same amount of space, but aligns the data space correctly. To use area fill, you must first provide a work space in memory for the system to store the list of points that define your area. You must allow a storage space of 5 bytes per vertex. To create the areas in the work space, you use the functions AreaMove(), AreaDraw(), and AreaEnd(). Typically, you prepare the RastPort for area-filling by following the steps in the code fragment above and then linking your AreaInfo into the RastPort like so: rastPort->AreaInfo = &areaInfo; In addition to the AreaInfo structure in the RastPort, you must also provide the system with some work space to build the object whose vertices you are going to define. This requires that you initialize a TmpRas structure, then point to that structure for your RastPort to use. First the TmpRas structure is initialized (via InitTmpRas()) then it is linked into the RastPort structure. Allocate Enough Space. ---------------------- The area to which TmpRas.RasPtr points must be at least as large as the area (width times height) of the largest rectangular region you plan to fill. Typically, you allocate a space as large as a single bitplane (usually 320 by 200 bits for Lores mode, 640 by 200 for Hires, and 1280 by 200 for SuperHires). When you use functions that dynamically allocate memory from the system, you must remember to return these memory blocks to the system before your program exits. See the description of FreeRaster() in the Amiga ROM Kernel Reference Manual: Includes and Autodocs.