typedef ByteFlags RangeSortFlags; #define RSF_SORT_ROWS 0x80 #define RSF_SORT_ASCENDING 0x40 #define RSF_IGNORE_CASE 0x20
typedef struct { Rectangle RSP_range; Point RSP_active; dword RSP_callback; byte RSP_flags; /* RangeSortFlags */ dword RSP_cfp; word RSP_sourceChunk; word RSP_destChunk; word RSP_base; dword RSP_lockedEntry; byte RSP_cachedFlags; } RangeSortParams;
typedef struct { RecordID RH_id; word RH_size; byte RH_fieldCount; } RecordHeader;
Structure containing metadata about a record; first
FieldHeader
follows.
typedef dword RecordID;
Uniquely identifies a record in a datastore; this value stays constant and does not change when other records are added or deleted.
typedef dword RecordNum;
Specifies relative place in the datastore; this value may change when other records are added or deleted.
typedef struct { sword R_left; sword R_top; sword R_right; sword R_bottom; } Rectangle;
This structure represents a graphics rectangle.
typedef struct { sdword RD_left; sdword RD_top; sdword RD_right; sdword RD_bottom; } RectDWord;
This structure represents a graphics rectangle.
typedef struct { word RR_y1M1; word RR_eo1; /* EOREGREC */ word RR_y2; word RR_x1; word RR_x2; word RR_eo2; /* EOREGREC */ word RR_eo3; /* EOREGREC */ } RectRegion;
typedef word Region; #define EOREGREC 0x8000 #define EOREG_HIGH 0x80
This structure represents a region of a graphics coordinate space.
Regions are described in terms of a rectangular array (thus the similarity to bitmaps). Instead of specifying an on/off value for each pixel, however, regions assume that the region will be fairly undetailed and that the data structure can thus be treated in the manner of a sparse array. Only the cells in which the color value of a row changes are recorded. The tricky part here is keeping in mind that when figuring out whether or not a row is the same as a previous row, the system works its way up from the bottom, so that you should compare each row with the row beneath it to determine whether it needs an entry.
The easiest region to describe is the null region, which is a special case described by a single word with the value EOREGREC (a constant whose name stands for E nd Of REG ion REC ord value). Describing a non-null region requires several numbers.
The first four numbers of the region description give the bounds of the region. Next come one or more series of numbers. Each series describes a row, specifying which pixels of that row are part of the region. The only rows which need to be described are those which are different from the row below. The first number of each row description is the row number, its y coordinate. The last number of each series is a special token, EOREGREC, which lets the kernel know that the next number of the description will be the start of another row. Between the row number and EOREGREC are the column numbers where the pixels toggle on and off. The first number after the row number corresponds to the first column in which the pixel is on; the next number is the first subsequent column in which the pixel is off; and so on.
typedef ByteEnum RegionFillRule; #define ODD_EVEN 0 #define WINDING 1
This enumerated type determines how a path or region should be filled. Winding fill is more versatile, but requires that the path or polygon's edges run in the correct direction.