4 Data Structures

Global data structures and types are listed alphabetically below. Some data structures used by only a few routines or by only one or two classes are documented within those routines or classes.

4.1 Data Structures A-E


AddUndoActionFlags

typedef WordFlags AddUndoActionFlags;
#define AUAF_NOTIFY_BEFORE_FREEING                          0x8000
#define AUAF_NOTIFY_IF_FREED_WITHOUT_BEING_PLAYED_BACK      0x4000

AddUndoActionStruct

typedef struct {
    UndoActionStruct            AUAS_data;
    optr                        AUAS_output;
    AddUndoActionFlags          AUAS_flags;
} AddUndoActionStruct;

The “undo” structures work together to provide information vital to processes which will be working with undo events.


AppAttachFlags

typedef WordFlags AppAttachFlags;
    #define AAF_RESTORING_FROM_STATE        0x8000
    #define AAF_STATE_FILE_PASSED           0x4000
    #define AAF_DATA_FILE_PASSED            0x2000

These flags are passed to the process when the application is launching or being restored from a state file. The flags indicate whether the application is being launched from a state file, has a state file, and/or has a data file.

Note that if AAF_RESTORING_FROM_STATE is set, then AAF_STATE_FILE_PASSED will also be set.


AppInstanceReference

typedef struct {
    /* AIR_fileName:
     * Application being launched. Pathname is relative to application 
     * directory (which, of course, may be overriden with a direct path
     * to the application). */
    PathName                AIR_fileName;
    /* AIR_stateFile:
     * State filename. File is assumed to be in standard directory for
     * GEOS state files. If the first byte is "0", then there is no
     * state file for this application. This structure is copied into the
     * field as an aid in restarting applications, and if it comes across
     * one with this byte as 0, it will not restart it. */
    FileLongName            AIR_stateFile;
    /* AIR_diskHandle:
     * Disk handle for app (passed in) IF 0, use System disk, if -1, use
     * AIR_diskName. In the field, if this is a placeholder structure, this
     * word is the handle of the application object we are waiting to detach. */
    DiskHandle              AIR_diskHandle;
    /* AIR_savedDiskData:
     * Start of data stored by DiskSave when instance is saved to state file. */
    byte                    AIR_savedDiskData[1];
} AppInstanceReference;

AppLaunchBlock

typedef struct {
    /* ALB_appRef:
     * Instance reference. Contains full pathname to application, as 
     * referenced from app directory, plus the name of a state file. 
     * Is enough info to launch application again, restored. (State file 
     * need not be passed to GeodeLoad) */
    AppInstanceReference    ALB_appRef;
    /* ALB_appMode:
     * Application attach mode method. Should be one of the following:
     * MSG_GEN_PROCESS_RESTORE_FROM_STATE:
     *      State file must be passed; no data file should be passed.
     * MSG_GEN_PROCESS_OPEN_APPLICATION:
     *      State file normally should not be passed, although one could be to
     *      accomplish ui templates. A data file may be passed into the 
     *      application as well.
     * MSG_GEN_PROCESS_OPEN_ENGINE:
     *      State file normally should not be passed. The data file on which the 
     *      engine will operate must be passed. If zero, the default data file 
     *      should be used (enforced by app, not GenProcessClass).*/
    Message                 ALB_appMode;
    /* ALB_launchFlags:
     * Miscellaneous flags to specify desired application launch type. */
    AppLaunchFlags          ALB_launchFlags;
    /* ALB_diskHandle:
     * Disk handle for data path. (Set as application's current path in 
     * GenProcess' MSG_META_ATTACH handler.) */
    MemHandle               ALB_diskHandle;
    /* ALB_path:
     * Data path for application to use as initial path. (Usually this is 
     * a directory of any data file passed.) (Set as application current
     * path in GenProcess' MSG_META_ATTACH handler.)
    char                    ALB_path[PATH_BUFFER_SIZE];
    /* ALB_dataFile:
     * Name of data file passed in to be opened (0 if none). Pathname is 
     * relative to above path. */
    char                    ALB_dataFile[PATH_BUFFER_SIZE];
    /* ALB_genParent:
     * Generic parent for new application (0 to put on default field). (Should 
     * be passed NULL to MSG_GEN_FIELD_LAUNCH_APPLICATION).
    optr                    ALB_genParent;
    /* ALB_userLoadAckOutput, ALB_userLoadAckMessage:
     * Together, these form an Action Descriptor which will be activated when 
     * the application has been launched (used in conjunction with 
     * ALF_SEND_LAUNCH_REQUEST_TO_UI_TO_HANDLE). (Set to NULL/0 if you don't 
     * want to send anything). 
     * The acknowledgement will come with three arguments: the GeodeHandle 
     * (non-NULL if successful), a word value which will be zero if there was
     * an error, and the word value set in ALB_userLoackAckID (below).*/
    optr                    ALB_userLoadAckOutput;
    Message                 ALB_userLoadAckMessage;
    /* ALB_userLoadAckID:
     * ID sent out via above action descriptor, if any. */
    word                    ALB_userLoadAckID;
    /* ALB_extraData:
     * Extra data to send to process (possibly a handle to 
     * block containing arguments). */
    word                    ALB_extraData;
} AppLaunchBlock;

This structure is used when an application is first starting up. It is an argument of various messages which will be intercepted by system classes. The first fields (ALB_appRef, ALB_appMode, ALB_launchFlags, and ALB_uiLevel) are preserved in the application’s state file. The other information must be set correctly on launch.


AppLaunchFlags

typedef ByteFlags AppLaunchFlags;
    #define ALF_SEND_LAUNCH_REQUEST_TO_UI_TO_HANDLE     0x80
    #define ALF_OPEN_IN_BACK                            0x40

ApplicationStates

typedef ByteFlags ApplicationStates;
    #define AS_QUITTING                         0x80
    #define AS_DETACHING                        0x40
    #define AS_FOCUSABLE                        0x20
    #define AS_MODELABLE                        0x10
    #define AS_NOT_USER_INTERACTABLE            0x08
    #define AS_RECEIVED_APP_OBJECT_DETACH       0x04
    #define AS_ATTACHED_TO_STATE_FILE           0x02
    #define AS_ATTACHING                        0x01

ArcCloseType

typedef enum /* word */ {
    ACT_OPEN,
    ACT_CHORD,
    ACT_PIE
} ArcCloseType;

This structure is used when filling arcs.


AreaAttr

typedef struct {
    byte            AA_colorFlag;
    RGBValue        AA_color;
    SysDrawMask     AA_mask;
    ColorMapMode    AA_mapMode;
} AreaAttr;

ArgumentStackElement

typedef struct {
    EvalStackArgumentType ASE_type;
    EvalStackArgumentData ASE_data;
} ArgumentStackElement;

BBFixed

typedef struct {
    byte BBF_frac;
    byte BBF_int;
} BBFixed;

This structure represents an 8.8 fixed point number.


BBFixedAsWord

typedef word BBFixedAsWord;

This structure represents an 8.8 fixed point number.


Bitmap

typedef struct {
    word    B_width;            /* In bitmap pixels */
    word    B_height;           /* In bitmap pixels */
    byte    B_compact;          /* A BMCompact value */
    byte    B_type;             /* A BMFormat | BMType value */
} Bitmap;

This data structure provides some information about a simple graphics bitmap. It normally acts as the header for a set of bitmap data.

The bitmap data itself is organized into scan lines. If the bitmap has a mask (if the BMT_MASK bit is set in the B_type field), the first information for the scan line will be its mask information. There will be one bit of mask information for each pixel in the scan line (i.e. a number of bits equal to the bitmap width). The actual bitmap data for the scan line starts at the next byte boundary. For each pixel there will be a number of bits of color data, said number depending on the BMFormat value in the B_type field. The data for the next scan line will begin at the next byte boundary.

Thus, a 7x7 bitmap depicting an inverse “x” might appear:

(Bitmap)    {7, 7, BMC_UNCOMPACTED, BMF_MONO };
(byte)[]    {0x82,      /* 10000010 */
             0x44,      /* 01000100 */
             0x28,      /* 00101000 */
             0x10,      /* 00010000 */
             0x28,      /* 00101000 */
             0x44,      /* 01000100 */
             0x82 };    /* 10000010 */

A 3x3 color “-“ shape with a a “+” shaped mask might appear:

(Bitmap)    { 3, 3, BMC_UNCOMPACTED, 
             (BMF_4BIT | BMT_MASK)};
(byte) []   {/* scan line 1: */
             0x40,          /* mask: 010 */
             0, 0           /* data: 000 */

             /* scan line 2: */
             0xE0,          /* mask: 111 */
             0x43, 0x20,    /* data: 432 */ 

             /* scan line 3: */
             0x40,          /* mask: 010 */
             0, 0 };        /* data: 000 */

If standard BMC_PACKBITS compression is used, then the mask (if any) and color data for the bitmap is compressed using the Macintosh PackBits standard. Under this system, to uncompress the data for a scan line, follow the loop:

  1. Read a byte.

  2. If the byte read in step (1) is between -1 and -127, read the next byte and copy it into the target buffer from +2 to +128 times.

  3. If the byte read in step (1) is between +1 and +127, read the next 1 to 127 bytes and copy them into the target buffer.

  4. If the byte read in step (1) is -128, ignore it.

  5. You’re ready to read in the next batch of data; go back to step (1).

Thus a 16x4 color “=” with a matching mask would appear:

(Bitmap)    {15, 3, BMC_PACKBITS, BMF_4BIT | BMT_MASK } ;
(byte) []       {/* scan line 1: */
                    /* mask: 2 repetitions of 0xff */
                 0xff, 0xff, 
                    /* data: 16 repetitions of 0x14 */
                 0xf0, 0x14, 
                /* scan line 2: */
                    /* mask: 2 repetitions of 0x00 */
                    /* data: 16 repetitions of 0x00 */
                    /* total: 18 repetitions of 0x00 */
                 0xee, 0x00, 
                /* scan line 3: */
                    /* mask: 2 repetitions of 0x00 */
                    /* data: 16 repetitions of 0x00 */
                    /* total: 18 repetitions of 0x00 */
                 0xee, 0x00, 
                /* scan line 4: */
                    /* mask: 2 repetitions of 0xff */
                 0xff, 0xff, 
                    /* data: 16 repetitions of 0x14 */
                 0xf0, 0x14};

See Also: CBitmap.


BitmapMode

typedef WordFlags BitmapMode;
    #define BM_EDIT_MASK                    0x0002
    #define BM_CLUSTERED_DITHER             0x0001

BLTMode

typedef enum /* word */ {
    BLTM_COPY,
    BLTM_MOVE,
    BLTM_CLEAR
} BLTMode;

BMCompact

typedef ByteEnum ByteCompact;
    #define BMC_UNCOMPACTED             0
    #define BMC_PACKBITS                1
    #define BMC_USER_DEFINED            0x80

This data structure is used to specify what sort of compaction is used to store a graphics bitmap.


BMDestroy

typedef ByteEnum BMDestroy;
    #define BMD_KILL_DATA               0
    #define BMD_LEAVE_DATA              1

BMFormat

typedef ByteEnum BMFormat
    #define BMF_MONO  0
    #define BMF_4BIT  1
    #define BMF_8BIT  2
    #define BMF_24BIT 3
    #define BMF_4CMYK 4 This enumerated type determines a graphics bitmap's depth.

BMType

typedef ByteFlags BMType;
    #define BMT_PALETTE             0x40
    #define BMT_HUGE                0x20
    #define BMT_MASK                0x10
    #define BMT_COMPLEX             0x08
    #define BMT_FORMAT              0x07 This structure is used to store various facts about a graphics bitmap.

Boolean

typedef word Boolean; Booleans represent true/false values. If the Boolean is *false*, it will evaluate  to zero; otherwise, it will be non-zero.

Button

typedef ByteEnum Button;
    #define BUTTON_0                0
    #define BUTTON_1                1
    #define BUTTON_2                2
    #define BUTTON_3                3

ButtonInfo

typedef ByteFlags ButtonInfo;
    #define BI_PRESS                0x80
    #define BI_DOUBLE_PRESS         0x40
    #define BI_B3_DOWN              0x20
    #define BI_B2_DOWN              0x10
    #define BI_B1_DOWN              0x08
    #define BI_B0_DOWN              0x04
    #define BI_BUTTON               0x03 This structure contains the state of a mouse's buttons.

####@ byte typedef unsigned char byte;


ByteEnum

typedef byte ByteEnum;

ByteFlags

typedef byte ByteFlags;

CallbackType

typedef ByteEnum CallbackType;
    #define CT_FUNCTION_TO_TOKEN        0
    #define CT_NAME_TO_TOKEN            1
    #define CT_CHECK_NAME_EXISTS        2
    #define CT_CHECK_NAME_SPACE         3
    #define CT_EVAL_FUNCTION            4
    #define CT_LOCK_NAME                5
    #define CT_UNLOCK                   6
    #define CT_FORMAT_FUNCTION          7
    #define CT_FORMAT_NAME              8
    #define CT_CREATE_CELL              9
    #define CT_EMPTY_CELL               10
    #define CT_NAME_TO_CELL             11
    #define CT_FUNCTION_TO_CELL         12
    #define CT_DEREF_CELL               13
    #define CT_SPECIAL_FUNCTION         14

CBitmap

typedef struct {
    Bitmap  CB_simple;
    word    CB_startScan;
    word    CB_numScans;
    word    CB_devInfo;
    word    CB_data;
    word    CB_palette;
    word    CB_xres;
    word    CB_yres;
} CBitmap; The CBitmap structure contains the information for a "complex" bitmap. Use  the CBitmap structure to hold bitmaps which need to keep track of resolution  information, a palette, or a mask.

CellFunctionParameterFlags

typedef ByteFlags CellFunctionParameterFlags;
    #define CFPF_DIRTY          0x80 /* apps may read or change this. */
    #define CFPF_NO_FREE_COUNT  0x07

CellFunctionParameters

typedef struct {
    CellFunctionParameterFlags  CFP_flags;
    VMFileHandle                CFP_file;       /* File containing cells */
    VMBlockHandle               CFP_rowBlocks[N_ROW_BLOCKS];
} CellFunctionParameters;

This structure is used to pass specifics about a cell file to the cell library routines. Some of the data in the CellFunctionParameters structure is opaque to the application; others may be examined or changed by the application. The CellFunctionParameters structure contains the following fields:

CFP_flags - The cell library uses this byte for miscellaneous bookkeeping. When you create the structure, initialize this field to zero. There is only one flag which you should check or change; that is the flag CFPF_dirty. The cell library routines set this bit whenever they change the CellFunctionParameters structure, thus indicating that the structure ought to be resaved. After you save it, you may clear this bit.

CFP_file - This field must contain the VM file handle of the cell file. This field must be set each time you open the file.

CFP_rowBlocks - This field is an array of VM block handles, one for every existing or potential row block. The length of this array is N_ROW_BLOCKS (defined in cell.h). When you create a cell file, initialize all of these handles to zero; do not access or change this field thereafter.

Include: cell.h

Warnings: The cell library expects the CellFunctionParameters structure to remain motionless for the duration of a call. Therefore, if you allocate it as a DB item in the cell file, you must not have the structure be an ungrouped item.


CellRange

typedef struct {
    CellReference           CR_start;
    CellReference           CR_end;
} CellRange;

CellReference

typedef struct {
    CellRowColumn           CR_row;
    CellRowColumn           CR_column;
} CellReference;

CellRowColumn

typedef WordFlags CellRowColumn;
    #define CRC_ABSOLUTE                0x8000
    #define CRC_VALUE               0x7fff

CharacterSet

typedef ByteEnum CharacterSet;
    #define CS_BSW                  0
    #define CS_CONTROL              0xff
    #define CS_UI_FUNCS             0xfe
    #define VC_ISANSI               CS_BSW
    #define VC_ISCTRL               CS_CONTROL
    #define VC_ISUI                 CS_UI_FUNCS

CharFlags

typedef ByteFlags CharFlags;
    #define CF_STATE_KEY                0x80
    #define CF_EXTENDED                 0x10
    #define CF_TEMP_ACCENT              0x08
    #define CF_FIRST_PRESS              0x04
    #define CF_REPEAT_PRESS             0x02
    #define CF_RELEASE                  0x01

Chars

typedef ByteEnum Chars;
    #define C_NULL              0x0 /* NULL */
    #define C_CTRL_A            0x1 /* <ctrl>-A */
    #define C_CTRL_B            0x2 /* <ctrl>-B */
    #define C_CTRL_C            0x3 /* <ctrl>-C */
    #define C_CTRL_D            0x4 /* <ctrl>-D */
    #define C_CTRL_E            0x5 /* <ctrl>-E */
    #define C_CTRL_F            0x6 /* <ctrl>-F */
    #define C_CTRL_G            0x7 /* <ctrl>-G */
    #define C_CTRL_H            0x8 /* <ctrl>-H */
    #define C_TAB               0x9 /* TAB */
    #define C_LINEFEED          0xa /* LINE FEED */
    #define C_CTRL_K            0xb /* <ctrl>-K */
    #define C_CTRL_L            0xc /* <ctrl>-L */
    #define C_ENTER             0xd /* ENTER or CR */
    #define C_SHIFT_OUT         0xe /* <ctrl>-N */
    #define C_SHIFT_IN          0xf /* <ctrl>-O */
    #define C_CTRL_P            0x10 /* <ctrl>-P */
    #define C_CTRL_Q            0x11 /* <ctrl>-Q */
    #define C_CTRL_R            0x12 /* <ctrl>-R */
    #define C_CTRL_S            0x13 /* <ctrl>-S */
    #define C_CTRL_T            0x14 /* <ctrl>-T */
    #define C_CTRL_U            0x15 /* <ctrl>-U */
    #define C_CTRL_V            0x16 /* <ctrl>-V */
    #define C_CTRL_W            0x17 /* <ctrl>-W */
    #define C_CTRL_X            0x18 /* <ctrl>-X */
    #define C_CTRL_Y            0x19 /* <ctrl>-Y */
    #define C_CTRL_Z            0x1a /* <ctrl>-Z */
    #define C_ESCAPE            0x1b /* ESC */
    #define C_NULL_WIDTH        0x19 /* null width character */
    #define C_GRAPHIC           0x1a /* Graphic in text. */
    #define C_THINSPACE         0x1b /* 1/4 width space */
    #define C_ENSPACE           0x1c /* En-space, fixed width */
    #define C_EMSPACE           0x1d /* Em-space, fixed width. */
    #define C_NONBRKHYPHEN      0x1e /* Non breaking hyphen. */
    #define C_OPTHYPHEN         0x1f /* Optional hyphen, only drawn at eol */
    #define C_SPACE             ` '
    #define C_EXCLAMATION       `!'
    #define C_QUOTE             `"'
    #define C_NUMBER_SIGN       `#'
    #define C_DOLLAR_SIGN       `$'
    #define C_PERCENT           `%'
    #define C_AMPERSAND         `&'
    #define C_SNG_QUOTE         0x27
    #define C_LEFT_PAREN        `('
    #define C_RIGHT_PAREN       `)'
    #define C_ASTERISK          `*'
    #define C_PLUS              `+'
    #define C_COMMA             `,'
    #define C_MINUS             `-'
    #define C_PERIOD             '.'
    #define C_SLASH             `/'
    #define C_ZERO              `0'
    #define C_ONE               `1'
    #define C_TWO               `2'
    #define C_THREE             `3'
    #define C_FOUR              `4'
    #define C_FIVE              `5'
    #define C_SIX               `6'
    #define C_SEVEN             `7'
    #define C_EIGHT             `8'
    #define C_NINE              `9'
    #define C_COLON             `:'
    #define C_SEMICOLON         `;'
    #define C_LESS_THAN         `<'
    #define C_EQUAL             `='
    #define C_GREATER_THAN      `>'
    #define C_QUESTION_MARK     `?'
    #define C_AT_SIGN           0x40
    #define C_CAP_A             `A'
    #define C_CAP_B             `B'
    #define C_CAP_C             `C'
    #define C_CAP_D             `D'
    #define C_CAP_E             `E'
    #define C_CAP_F             `F'     
    #define C_CAP_G             `G'
    #define C_CAP_H             `H'
    #define C_CAP_I             `I'
    #define C_CAP_J             `J'
    #define C_CAP_K             `K'
    #define C_CAP_L             `L'
    #define C_CAP_M             `M'
    #define C_CAP_N             `N'
    #define C_CAP_O             `O'
    #define C_CAP_P             `P'
    #define C_CAP_Q             `Q'
    #define C_CAP_R             `R'
    #define C_CAP_S             `S'
    #define C_CAP_T             `T'
    #define C_CAP_U             `U'
    #define C_CAP_V             `V'
    #define C_CAP_W             `W'
    #define C_CAP_X             `X'
    #define C_CAP_Y             `Y'
    #define C_CAP_Z             `Z'
    #define C_LEFT_BRACKET      `['
    #define C_BACKSLASH         0x5c
    #define C_RIGHT_BRACKET     `]'
    #define C_ASCII_CIRCUMFLEX  `^'
    #define C_UNDERSCORE        `_'
    #define C_BACKQUOTE         ``'
    #define C_SMALL_A           `a'
    #define C_SMALL_B           `b'
    #define C_SMALL_C           `c'
    #define C_SMALL_D           `d'
    #define C_SMALL_E           `e'
    #define C_SMALL_F           `f'
    #define C_SMALL_G           `g'
    #define C_SMALL_H           `h'
    #define C_SMALL_I           `i'
    #define C_SMALL_J           `j'
    #define C_SMALL_K           `k'
    #define C_SMALL_L           `l'
    #define C_SMALL_M           `m'
    #define C_SMALL_N           `n'
    #define C_SMALL_O           `o'
    #define C_SMALL_P           `p'
    #define C_SMALL_Q           `q'
    #define C_SMALL_R           `r'
    #define C_SMALL_S           `s'
    #define C_SMALL_T           `t'
    #define C_SMALL_U           `u'
    #define C_SMALL_V           `v'
    #define C_SMALL_W           `w'
    #define C_SMALL_X           `x'
    #define C_SMALL_Y           `y'
    #define C_SMALL_Z           `z'
    #define C_LEFT_BRACE        `{'
    #define C_VERTICAL_BAR      `|'
    #define C_RIGHT_BRACE       `}'
    #define C_ASCII_TILDE       `~'
    #define C_DELETE            0x7f
    #define C_UA_DIERESIS       0x80
    #define C_UA_RING           0x81
    #define C_UC_CEDILLA        0x82
    #define C_UE_ACUTE          0x83
    #define C_UN_TILDE          0x84
    #define C_UO_DIERESIS       0x85
    #define C_UU_DIERESIS       0x86
    #define C_LA_ACUTE          0x87
    #define C_LA_GRAVE          0x88
    #define C_LA_CIRCUMFLEX     0x89
    #define C_LA_DIERESIS       0x8a
    #define C_LA_TILDE          0x8b
    #define C_LA_RING           0x8c
    #define C_LC_CEDILLA        0x8d
    #define C_LE_ACUTE          0x8e
    #define C_LE_GRAVE          0x8f
    #define C_LE_CIRCUMFLEX     0x90
    #define C_LE_DIERESIS       0x91
    #define C_LI_ACUTE          0x92
    #define C_LI_GRAVE          0x93
    #define C_LI_CIRCUMFLEX     0x94
    #define C_LI_DIERESIS       0x95
    #define C_LN_TILDE          0x96
    #define C_LO_ACUTE          0x97
    #define C_LO_GRAVE          0x98
    #define C_LO_CIRCUMFLEX     0x99
    #define C_LO_DIERESIS       0x9a
    #define C_LO_TILDE          0x9b
    #define C_LU_ACUTE          0x9c
    #define C_LU_GRAVE          0x9d
    #define C_LU_CIRCUMFLEX     0x9e
    #define C_LU_DIERESIS       0x9f
    #define C_DAGGER            0xa0
    #define C_DEGREE            0xa1
    #define C_CENT              0xa2
    #define C_STERLING          0xa3
    #define C_SECTION           0xa4
    #define C_BULLET            0xa5
    #define C_PARAGRAPH         0xa6
    #define C_GERMANDBLS        0xa7
    #define C_REGISTERED        0xa8
    #define C_COPYRIGHT         0xa9
    #define C_TRADEMARK         0xaa
    #define C_ACUTE             0xab
    #define C_DIERESIS          0xac
    #define C_NOTEQUAL          0xad
    #define C_U_AE              0xae
    #define C_UO_SLASH          0xaf
    #define C_INFINITY          0xb0
    #define C_PLUSMINUS         0xb1
    #define C_LESSEQUAL         0xb2
    #define C_GREATEREQUAL      0xb3
    #define C_YEN               0xb4
    #define C_L_MU              0xb5
    #define C_L_DELTA           0xb6
    #define C_U_SIGMA           0xb7
    #define C_U_PI              0xb8
    #define C_L_PI              0xb9
    #define C_INTEGRAL          0xba
    #define C_ORDFEMININE       0xbb
    #define C_ORDMASCULINE      0xbc
    #define C_U_OMEGA           0xbd
    #define C_L_AE              0xbe
    #define C_LO_SLASH          0xbf
    #define C_QUESTIONDOWN      0xc0
    #define C_EXCLAMDOWN        0xc1
    #define C_LOGICAL_NOT       0xc2
    #define C_ROOT              0xc3
    #define C_FLORIN            0xc4
    #define C_APPROX_EQUAL      0xc5
    #define C_U_DELTA           0xc6
    #define C_GUILLEDBLLEFT     0xc7
    #define C_GUILLEDBLRIGHT    0xc8
    #define C_ELLIPSIS          0xc9
    #define C_NONBRKSPACE       0xca
    #define C_UA_GRAVE          0xcb
    #define C_UA_TILDE          0xcc
    #define C_UO_TILDE          0xcd
    #define C_U_OE              0xce
    #define C_L_OE              0xcf
    #define C_ENDASH            0xd0
    #define C_EMDASH            0xd1
    #define C_QUOTEDBLLEFT      0xd2
    #define C_QUOTEDBLRIGHT     0xd3
    #define C_QUOTESNGLEFT      0xd4
    #define C_QUOTESNGRIGHT     0xd5
    #define C_DIVISION          0xd6
    #define C_DIAMONDBULLET     0xd7
    #define C_LY_DIERESIS       0xd8
    #define C_UY_DIERESIS       0xd9
    #define C_FRACTION          0xda
    #define C_CURRENCY          0xdb
    #define C_GUILSNGLEFT       0xdc
    #define C_GUILSNGRIGHT      0xdd
    #define C_LY_ACUTE          0xde
    #define C_UY_ACUTE          0xdf
    #define C_DBLDAGGER         0xe0
    #define C_CNTR_DOT          0xe1
    #define C_SNGQUOTELOW       0xe2
    #define C_DBLQUOTELOW       0xe3
    #define C_PERTHOUSAND       0xe4
    #define C_UA_CIRCUMFLEX     0xe5
    #define C_UE_CIRCUMFLEX     0xe6
    #define C_UA_ACUTE          0xe7
    #define C_UE_DIERESIS       0xe8
    #define C_UE_GRAVE          0xe9
    #define C_UI_ACUTE          0xea
    #define C_UI_CIRCUMFLEX     0xeb
    #define C_UI_DIERESIS       0xec
    #define C_UI_GRAVE          0xed
    #define C_UO_ACUTE          0xee
    #define C_UO_CIRCUMFLEX     0xef
    #define C_LOGO              0xf0
    #define C_UO_GRAVE          0xf1
    #define C_UU_ACUTE          0xf2
    #define C_UU_CIRCUMFLEX     0xf3
    #define C_UU_GRAVE          0xf4
    #define C_LI_DOTLESS        0xf5
    #define C_CIRCUMFLEX        0xf6
    #define C_TILDE             0xf7
    #define C_MACRON            0xf8
    #define C_BREVE             0xf9
    #define C_DOTACCENT         0xfa
    #define C_RING              0xfb
    #define C_CEDILLA           0xfc
    #define C_HUNGARUMLAT       0xfd
    #define C_OGONEK            0xfe
    #define C_CARON             0xff
    /*
     * common shortcuts for low 32 codes
     */
    #define C_NUL               C_NULL
    #define C_STX               C_CTRL_B
    #define C_ETX               C_CTRL_C
    #define C_BEL               C_CTRL_G
    #define C_BS                C_CTRL_H
    #define C_HT                C_CTRL_I
    #define C_VT                C_CTRL_K
    #define C_FF                C_CTRL_L
    #define C_SO                C_CTRL_N
    #define C_SI                C_CTRL_O
    #define C_DC1               C_CTRL_Q
    #define C_DC2               C_CTRL_R
    #define C_DC3               C_CTRL_S
    #define C_DC4               C_CTRL_T
    #define C_CAN               C_CTRL_X
    #define C_EM                C_CTRL_Y
    #define C_ESC               C_ESCAPE
    /*
     * Some alternative names
     */
    #define C_CR                C_ENTER
    #define C_CTRL_M            C_ENTER
    #define C_CTRL_I            C_TAB
    #define C_CTRL_J            C_LINEFEED
    #define C_LF                C_LINEFEED
    #define C_CTRL_N            C_SHIFT_OUT
    #define C_CTRL_O            C_SHIFT_IN
    #define C_FS                C_ENSPACE
    #define C_FIELD_SEP         C_FS
    #define C_HYPHEN            C_MINUS
    #define C_GRAVE             C_BACKQUOTE
    #define C_PARTIAL_DIFF      C_L_DELTA
    #define C_SUM               C_U_SIGMA
    #define C_PRODUCT           C_U_PI
    #define C_RADICAL           C_ROOT
    #define C_LOZENGE           C_DIAMONDBULLET

Text characters may be represented by the standard C type char or by the GEOS type Chars. The difference shows up in debugging. If printing the value of a string as char, then the debugger will output ASCII text. If the string is treated as Chars, then the debugger will print out the constant names.

Include: char.h


ChunkArrayHeader

typedef struct {
    word    CAH_count;          /* # of elements in chunk array */
    word    CAH_elementSize;    /* Size of each element (in bytes) */
    word    CAH_curOffset;      /* For internal use only */
    word    CAH_offset;         /* Offset from start of chunk to first element */
} ChunkArrayHeader;

Every chunk array begins with a ChunkArrayHeader. This structure contains information about the chunk array. Applications should never change the contents of the ChunkArrayHeader; only the chunk array routines should do this. However, applications can examine the header if they wish.

Contents: There are four word-length fields in the ChunkArrayHeader:

CAH_count - This word contains the number of elements in the chunk array.

CAH_elementSize - This word contains the size of each element (in bytes). If the elements are variable-sized, CAH_elementSize will be zero.

CAH_curOffset - This word is used by ChunkArrayEnum() for bookkeeping.

CAH_offset - This is the offset from the start of the chunk to the first element in the array.


ChunkHandle

typedef word ChunkHandle;

Chunk handles are offsets into a local memory heap. To find the current location of a chunk in an LMem heap, combine the segment address of the heap with the chunk handle. From this location you can read the current offset of the chunk itself.

See Also: optr, LMemDeref()


ChunkMapList

typedef struct {
    word    CML_source;
    word    CML_dest;
} ChunkMapList;

ClassFlags

typedef ByteFlags ClassFlags;
    #define CLASSF_HAS_DEFAULT                      0x80
    #define CLASSF_MASTER_CLASS                         0x40
    #define CLASSF_VARIANT_CLASS                        0x20
    #define CLASSF_DISCARD_ON_SAVE                      0x10
    #define CLASSF_NEVER_SAVED                      0x08
    #define CLASSF_HAS_RELOC                        0x04
    #define CLASSF_C_HANDLERS                       0x02

This record is stored in the ClassStruct structure’s Class_flags field. These flags are internal and may not be set or retrieved directly. See the entry on @class for more information about these flags.


ClassStruct

typedef struct  _ClassStruct {
    struct _ClassStruct *Class_superClass;  /* superclass pointer */
    word        Class_masterOffset;         /* offset to master offset in chunk */
    word        Class_methodCount;          /* number of methods in this class */
    word        Class_instanceSize;         /* size of entire master group */
    word        Class_vdRelocTable;         /* offset to vardata relocation table */
    word        Class_relocTable;           /* offset to relocation table */
    ClassFlags  Class_flags;                /* a record of ClassFlags */
    byte        Class_masterMessages;       /* internal flags for optimization */
} ClassStruct;

This is the structure that defines a class. It is internal and used only very rarely by anything other than the kernel and the UI.


ClipboardItemFlags

typedef WordFlags ClipboardItemFlags;
    #define CIF_QUICK               0x4000
    #define TIF_NORMAL              0x0000

ClipboardItemFormat

typedef enum /* word */ {
    CIF_TEXT,
    CIF_GRAPHICS_STRING,
    CIF_FILES,
    CIF_SPREADSHEET,
    CIF_INK,
    CIF_GROBJ,
    CIF_GEODEX,
    CIF_BITMAP,
    CIF_SOUND_SYNTH,
    CIF_SOUND_SAMPLE
} ClipboardItemFormat;

ClipboardItemFormatID

typedef dword ClipboardItemFormatID;

ClipboardItemFormatInfo

typedef struct {
    ClipboardItemFormatID       CIFI_format;
    word                        CIFI_extra1;
    word                        CIFI_extra2;
    VMChain                     CIFI_vmChain;
    GeodeToken                  CIFI_renderer;
} ClipboardItemFormatInfo;

ClipboardItemHeader

typedef struct {
    optr                        CIH_owner;
    ClipboardItemFlags          CIH_flags;
    ClipboardItemNameBuffer     CIH_name;
    word                        CIH_formatCount;
    optr                        CIH_sourceID;
    FormatArray                 CIH_formats;
    dword                       CIH_reserved;
} ClipboardItemHeader;

ClipboardItemNameBuffer

typedef char ClipboardItemNameBuffer[CLIPBOARD_ITEM_NAME_LENGTH+1];

ClipboardQueryArgs

See ClipboardQueryItem().


ClipboardQuickNotifyFlags

typedef WordFlags ClipboardQuickNotifyFlags;
    #define CQNF_ERROR                      0x8000
    #define CQNF_SOURCE_EQUAL_DEST          0x4000
    #define CQNF_MOVE                       0x2000
    #define CQNF_COPY                       0x1000
    #define CQNF_NO_OPERATION               0x0800
    #define CQNF_UNUSED                     0x04ff

These flags give information about the success or failure of a quick transfer operation.


ClipboardQuickTransferFeedback

typedef enum {
    CQTF_SET_DEFAULT,
    CQTF_CLEAR_DEFAULT,
    CQTF_MOVE,
    CQTF_COPY,
    CQTF_CLEAR
} ClipboardQuickTransferFeedback;

ClipboardQuickTransferFlags

typedef WordFlags ClipboardQuickTransferFlags;
    #define CQTF_IN_PROGRESS            0x8000
    #define CQTF_COPY_ONLY              0x4000
    #define CQTF_USE_REGION             0x2000
    #define CQTF_NOTIFICATION           0x1000

ClipboardQuickTransferRegionInfo

typedef struct {
    word    CQTRI_paramAX;
    word    CQTRI_paramBX;
    word    CQTRI_paramCX;
    word    CQTRI_paramDX;
    Point   CQTRI_regionPos;
    dword   CQTRI_strategy;
    dword   CQTRI_region;
} ClipboardQuickTransferRegionInfo;

ClipboardRequestArgs

See entry for ClipboardRequestItemFormat().


CMYKTransfer

typedef struct {
    byte    CMYKT_cyan[256];
    byte    CMYKT_magenta[256];
    byte    CMYKT_yellow[256];
    byte    CMYKT_black[256];
} CMYKTransfer;

Color

typedef ByteEnum Color;
    #define C_BLACK                 0
    #define C_BLUE                  1
    #define C_GREEN                 2
    #define C_CYAN                  3
    #define C_RED                   4
    #define C_VIOLET                5
    #define C_BROWN                 6
    #define C_LIGHT_GRAY            7
    #define C_DARK_GRAY             8
    #define C_LIGHT_BLUE            9
    #define C_LIGHT_GREEN           10
    #define C_LIGHT_CYAN            11
    #define C_LIGHT_RED             12
    #define C_LIGHT_VIOLET          13
    #define C_YELLOW                14
    #define C_WHITE                 15

    #define C_GRAY_0                0x10
    #define C_GRAY_7                0x11
    #define C_GRAY_13               0x12
    #define C_GRAY_20               0x13
    #define C_GRAY_27               0x14
    #define C_GRAY_33               0x15
    #define C_GRAY_40               0x16
    #define C_GRAY_47               0x17
    #define C_GRAY_53               0x18
    #define C_GRAY_60               0x19
    #define C_GRAY_68               0x1a
    #define C_GRAY_73               0x1b
    #define C_GRAY_80               0x1c
    #define C_GRAY_88               0x1d
    #define C_GRAY_93               0x1e
    #define C_GRAY_100              0x1f

    #define C_UNUSED_0              0x20
    #define C_UNUSED_1              0x21
    #define C_UNUSED_2              0x22
    #define C_UNUSED_3              0x23
    #define C_UNUSED_4              0x24
    #define C_UNUSED_5              0x25
    #define C_UNUSED_6              0x26
    #define C_UNUSED_7              0x27

    #define C_R0_G0_B0              0x28
    #define C_R0_G0_B1              0x29
    #define C_R0_G0_B2              0x2a
    #define C_R0_G0_B3              0x2b
    #define C_R0_G0_B4              0x2c
    #define C_R0_G0_B5              0x2d
    #define C_R0_G1_B0              0x2e
    #define C_R0_G1_B1              0x2f
    #define C_R0_G1_B2              0x30
    #define C_R0_G1_B3              0x31
    #define C_R0_G1_B4              0x32
    #define C_R0_G1_B5              0x33
    #define C_R0_G2_B0              0x34
    #define C_R0_G2_B1              0x35
    #define C_R0_G2_B2              0x36
    #define C_R0_G2_B3              0x37
    #define C_R0_G2_B4              0x38
    #define C_R0_G2_B5              0x39

    #define C_R0_G3_B0              0x3a
    #define C_R0_G3_B1              0x3b
    #define C_R0_G3_B2              0x3c
    #define C_R0_G3_B3              0x3d
    #define C_R0_G3_B4              0x3e
    #define C_R0_G3_B5              0x3f
    #define C_R0_G4_B0              0x40
    #define C_R0_G4_B1              0x41
    #define C_R0_G4_B2              0x42
    #define C_R0_G4_B3              0x43
    #define C_R0_G4_B4              0x44
    #define C_R0_G4_B5              0x45
    #define C_R0_G5_B0              0x46
    #define C_R0_G5_B1              0x47
    #define C_R0_G5_B2              0x48
    #define C_R0_G5_B3              0x49
    #define C_R0_G5_B4              0x4a
    #define C_R0_G5_B5              0x4b

    #define C_R1_G0_B0              0x4c
    #define C_R1_G0_B1              0x4d
    #define C_R1_G0_B2              0x4e
    #define C_R1_G0_B3              0x4f
    #define C_R1_G0_B4              0x50
    #define C_R1_G0_B5              0x51
    #define C_R1_G1_B0              0x52
    #define C_R1_G1_B1              0x53
    #define C_R1_G1_B2              0x54
    #define C_R1_G1_B3              0x55
    #define C_R1_G1_B4              0x56
    #define C_R1_G1_B5              0x57
    #define C_R1_G2_B0              0x58
    #define C_R1_G2_B1              0x59
    #define C_R1_G2_B2              0x5a
    #define C_R1_G2_B3              0x5b
    #define C_R1_G2_B4              0x5c
    #define C_R1_G2_B5              0x5d

    #define C_R1_G3_B0              0x5e
    #define C_R1_G3_B1              0x5f
    #define C_R1_G3_B2              0x60
    #define C_R1_G3_B3              0x61
    #define C_R1_G3_B4              0x62
    #define C_R1_G3_B5              0x63
    #define C_R1_G4_B0              0x64
    #define C_R1_G4_B1              0x65
    #define C_R1_G4_B2              0x66
    #define C_R1_G4_B3              0x67
    #define C_R1_G4_B4              0x68
    #define C_R1_G4_B5              0x69
    #define C_R1_G5_B0              0x6a
    #define C_R1_G5_B1              0x6b
    #define C_R1_G5_B2              0x6c
    #define C_R1_G5_B3              0x6d
    #define C_R1_G5_B4              0x6e
    #define C_R1_G5_B5              0x6f

    #define C_R2_G0_B0              0x70
    #define C_R2_G0_B1              0x71
    #define C_R2_G0_B2              0x72
    #define C_R2_G0_B3              0x73
    #define C_R2_G0_B4              0x74
    #define C_R2_G0_B5              0x75
    #define C_R2_G1_B0              0x76
    #define C_R2_G1_B1              0x77
    #define C_R2_G1_B2              0x78
    #define C_R2_G1_B3              0x79
    #define C_R2_G1_B4              0x7a
    #define C_R2_G1_B5              0x7b
    #define C_R2_G2_B0              0x7c
    #define C_R2_G2_B1              0x7d
    #define C_R2_G2_B2              0x7e
    #define C_R2_G2_B3              0x7f
    #define C_R2_G2_B4              0x80
    #define C_R2_G2_B5              0x81

    #define C_R2_G3_B0              0x82
    #define C_R2_G3_B1              0x83
    #define C_R2_G3_B2              0x84
    #define C_R2_G3_B3              0x85
    #define C_R2_G3_B4              0x86
    #define C_R2_G3_B5              0x87
    #define C_R2_G4_B0              0x88
    #define C_R2_G4_B1              0x89
    #define C_R2_G4_B2              0x8a
    #define C_R2_G4_B3              0x8b
    #define C_R2_G4_B4              0x8c
    #define C_R2_G4_B5              0x8d
    #define C_R2_G5_B0              0x8e
    #define C_R2_G5_B1              0x8f
    #define C_R2_G5_B2              0x90
    #define C_R2_G5_B3              0x91
    #define C_R2_G5_B4              0x92
    #define C_R2_G5_B5              0x93

    #define C_R3_G0_B0              0x94
    #define C_R3_G0_B1              0x95
    #define C_R3_G0_B2              0x96
    #define C_R3_G0_B3              0x97
    #define C_R3_G0_B4              0x98
    #define C_R3_G0_B5              0x99
    #define C_R3_G1_B0              0x9a
    #define C_R3_G1_B1              0x9b
    #define C_R3_G1_B2              0x9c
    #define C_R3_G1_B3              0x9d
    #define C_R3_G1_B4              0x9e
    #define C_R3_G1_B5              0x9f
    #define C_R3_G2_B0              0xa0
    #define C_R3_G2_B1              0xa1
    #define C_R3_G2_B2              0xa2
    #define C_R3_G2_B3              0xa3
    #define C_R3_G2_B4              0xa4
    #define C_R3_G2_B5              0xa5

    #define C_R3_G3_B0              0xa6
    #define C_R3_G3_B1              0xa7
    #define C_R3_G3_B2              0xa8
    #define C_R3_G3_B3              0xa9
    #define C_R3_G3_B4              0xaa
    #define C_R3_G3_B5              0xab
    #define C_R3_G4_B0              0xac
    #define C_R3_G4_B1              0xad
    #define C_R3_G4_B2              0xae
    #define C_R3_G4_B3              0xaf
    #define C_R3_G4_B4              0xb0
    #define C_R3_G4_B5              0xb1
    #define C_R3_G5_B0              0xb2
    #define C_R3_G5_B1              0xb3
    #define C_R3_G5_B2              0xb4
    #define C_R3_G5_B3              0xb5
    #define C_R3_G5_B4              0xb6
    #define C_R3_G5_B5              0xb7

    #define C_R4_G0_B0              0xb8
    #define C_R4_G0_B1              0xb9
    #define C_R4_G0_B2              0xba
    #define C_R4_G0_B3              0xbb
    #define C_R4_G0_B4              0xbc
    #define C_R4_G0_B5              0xbd
    #define C_R4_G1_B0              0xbe
    #define C_R4_G1_B1              0xbf
    #define C_R4_G1_B2              0xc0
    #define C_R4_G1_B3              0xc1
    #define C_R4_G1_B4              0xc2
    #define C_R4_G1_B5              0xc3
    #define C_R4_G2_B0              0xc4
    #define C_R4_G2_B1              0xc5
    #define C_R4_G2_B2              0xc6
    #define C_R4_G2_B3              0xc7
    #define C_R4_G2_B4              0xc8
    #define C_R4_G2_B5              0xc9

    #define C_R4_G3_B0              0xca
    #define C_R4_G3_B1              0xcb
    #define C_R4_G3_B2              0xcc
    #define C_R4_G3_B3              0xcd
    #define C_R4_G3_B4              0xce
    #define C_R4_G3_B5              0xcf
    #define C_R4_G4_B0              0xd0
    #define C_R4_G4_B1              0xd1
    #define C_R4_G4_B2              0xd2
    #define C_R4_G4_B3              0xd3
    #define C_R4_G4_B4              0xd4
    #define C_R4_G4_B5              0xd5
    #define C_R4_G5_B0              0xd6
    #define C_R4_G5_B1              0xd7
    #define C_R4_G5_B2              0xd8
    #define C_R4_G5_B3              0xd9
    #define C_R4_G5_B4              0xda
    #define C_R4_G5_B5              0xdb

    #define C_R5_G0_B0              0xdc
    #define C_R5_G0_B1              0xdd
    #define C_R5_G0_B2              0xde
    #define C_R5_G0_B3              0xdf
    #define C_R5_G0_B4              0xe0
    #define C_R5_G0_B5              0xe1
    #define C_R5_G1_B0              0xe2
    #define C_R5_G1_B1              0xe3
    #define C_R5_G1_B2              0xe4
    #define C_R5_G1_B3              0xe5
    #define C_R5_G1_B4              0xe6
    #define C_R5_G1_B5              0xe7
    #define C_R5_G2_B0              0xe8
    #define C_R5_G2_B1              0xe9
    #define C_R5_G2_B2              0xea
    #define C_R5_G2_B3              0xeb
    #define C_R5_G2_B4              0xec
    #define C_R5_G2_B5              0xed
    #define C_R5_G3_B0              0xee
    #define C_R5_G3_B1              0xef
    #define C_R5_G3_B2              0xf0
    #define C_R5_G3_B3              0xf1
    #define C_R5_G3_B4              0xf2
    #define C_R5_G3_B5              0xf3
    #define C_R5_G4_B0              0xf4
    #define C_R5_G4_B1              0xf5
    #define C_R5_G4_B2              0xf6
    #define C_R5_G4_B3              0xf7
    #define C_R5_G4_B4              0xf8
    #define C_R5_G4_B5              0xf9
    #define C_R5_G5_B0              0xfa
    #define C_R5_G5_B1              0xfb
    #define C_R5_G5_B2              0xfc
    #define C_R5_G5_B3              0xfd
    #define C_R5_G5_B4              0xfe
    #define C_R5_G5_B5              0xff

    #define C_LIGHT_GREY            C_LIGHT_GRAY
    #define C_DARK_GREY             C_DARK_GRAY
    #define C_BW_GREY               0x84

Include: color.h


ColorFlag

typedef ByteEnum ColorFlag;
    #define CF_INDEX        0
    #define CF_GRAY         1
    #define CF_SAME         2
    #define CF_RGB          0x80

Several color-related commands accept colors in a variety of formats. The ColorFlag enumerated type is used to specify how the color is being described. The ColorFlag is normally used as part of a ColorQuad. See ColorQuad for information about how to interpret color specifications using ColorFlags.


ColorMapMode

typedef ByteFlags ColorMapMode;
    #define CMM_ON_BLACK 0x04   /* Set this bit if you're drawing on black */
    #define CMM_MAP_TYPE 0x01   /* Either CMT_CLOSEST or CMT_DITHER) */
    #define LAST_MAP_MODE   (CMM_MAP_TYPE | CMM_ON_BLACK)

This structure defines how the system will try to simulate colors not in the palette. If the map type is CMT_CLOSEST, the closest available color will be used. If the map type is CMT_DITHER, the system will mix together two or more close colors in a dithered pattern. If you will be drawing against a black background, you may wish to set the CMM_ON_BLACK flag.


ColorQuad

typedef struct {
    byte            CQ_redOrIndex;
    ColorFlag       CQ_info;
    byte            CQ_green;
    byte            CQ_blue;
} ColorQuad;

This structure represents a color. The CQ_info field determines how the color is being described.

If the info field is CF_INDEX, then the color is being specified by its index, its place in the window’s palette. The index is in the CQ_redOrIndex field; the the CQ_green and CQ_blue fields are meaningless for this specification.

If the info field is CF_RGB, then the color is specified by RGB (red, green, and blue) components. CQ_redOrIndex contains the color’s red component, a number ranging from 0 to 255. The CQ_green and CQ_blue fields contain the color’s green and blue components, respectively.

If the info field is CF_GRAY, then the color is being expressed as a grey scale. This is basically an optimized way of describing RGB colors where the red, green, and blue components are equal. The CQ_redOrIndex field contains the brightess, a number between 0 and 255. The CQ_green and CQ_blue fields are ignored.

When defining hatch patterns, it is possible have a CF_SAME info field. This means that the hatch lines should use the “same” color when drawing. That is, when hatching text, the text color will be used; when filling an area, the area color will be used. The CQ_redOrIndex, CQ_green, and CQ_blue fields are all ignored.


ColorQuadAsDWord

typedef dword ColorQuadAsDWord;

ColorTransfer

typedef struct {
    RGBDelta                CT_data[125]; 
} ColorTransfer;

This structure consists of a 5x5x5 matrix of RGBDelta structures. This and be used to specify what sorts of adjustments to make to the color when displaying to a specific device. For instance, some color printers will wipe out certain colors if they try to use the amounts of ink suggested by the raw RGB values. The ColorTransfer structure thus serves to hold an array of “fudge factors” to tell the printer to use more or less ink than the raw RGB values would suggest.


ColorTransferData

typedef union {
    MonoTransfer        CTD_mono;
    RGBTransfer         CTD_rgb;
    CMYKTransfer        CTD_cmyk;
} ColorTransferData;

ColorTransferType

typedef ByteEnum ColorTransferType;
    #define CTT_MONO                 0
    #define CTT_RGB                  1
    #define CTT_CMYK                 2

CommonParameters

typedef struct {
    word    CP_row;
    word    CP_column;
    word    CP_maxRow;
    word    CP_maxColumn;
    void    * CP_callback;
    void    * CP_cellParams; /* ptr to an instance of SpreadsheetClass */
} CommonParameters;

CompChildFlags

typedef WordFlags CompChildFlags;
    #define CCF_MARK_DIRTY      0x8000
    #define CCF_REFERENCE       0x7fff
    #define     CCO_FIRST           0x0000
    #define     CCO_LAST            0x7FFF
    #define CCF_REFERENCE_OFFSET 0

A record used when adding, moving, or removing children in an object tree. The record has one flag and a value, as follows:

CCF_MARK_DIRTY
A flag indicating whether the object should be marked dirty at the end of the operation.

CCF_REFERENCE
A child number; when adding or moving a child, this is the child number after which the new object should be inserted. It can be any number less than 32768, or it can be either of the two constants shown above (CCO_FIRST or CCO_LAST).


CountryType

typedef enum /* word */ {
    CT_UNITED_STATES=1,
    CT_CANADA,
    CT_UNITED_KINGDOM,
    CT_GERMANY,
    CT_FRANCE,
    CT_SPAIN,
    CT_ITALY,
    CT_DENMARK,
    CT_NETHERLANDS,
} CountryType;

CRangeEnumParams

typedef struct {
    RangeEnumParams         CREP_params;
    void                    *CREP_locals;
    PCB(RANGE_ENUM_CALLBACK_RETURN_TYPE, CREP_callback,
                (RangeEnumCallbackParams));
} CRangeEnumParams;

The CREP_callback routine should be declared _pascal.


CurrencyFormatFlags

typedef ByteFlags CurrencyFormatFlags;
    #define CFF_LEADING_ZERO                    0x20
    #define CFF_SPACE_AROUND_SYMBOL             0x10
    #define CFF_USE_NEGATIVE_SIGN               0x08
    #define CFF_SYMBOL_BEFORE_NUMBER            0x04
    #define CFF_NEGATIVE_SIGN_BEFORE_NUMBER     0x02
    #define CFF_NEGATIVE_SIGN_BEFORE_SYMBOL     0x01

CustomDialogBoxFlags

typedef WordFlags CustomDialogBoxFlags;
    #define CDBF_SYSTEM_MODAL               0x8000
    #define CDBF_DIALOG_TYPE                0x6000
    #define CDBF_INTERACTION_TYPE           0x1e00

CustomDialogType

typedef ByteEnum CustomDialogType;
    #define CDT_QUESTION                    0
    #define CDT_WARNING                     1
    #define CDT_NOTIFICATION                2
    #define CDT_ERROR                       3
    #define CDBF_DIALOG_TYPE_OFFSET         13
    #define CDBF_INTERACTION_TYPE_OFFSET    9

DACPlayFlags

typedef ByteFlags DACPlayFlags;
#define DACPF_CATENATE 0x80

DACReferenceByte

typedef enum {
     DACRB_NO_REFERENCE_BYTE,
     DACRB_WITH_REFERENCE_BYTE
} DACReferenceByte;

DACSampleFormat

typedef enum {
    DACSF_8_BIT_PCM,
    DACSF_2_TO_1_ADPCM,
    DACSF_3_TO_1_ADPCM,
    DACSF_4_TO_1_ADPCM
} DACSampleFormat;

This structure specifies what sort of sampling should be used when recording or playing a sampled sound.


DashPairArray

See: LineStyle


DateTimeFormat

typedef enum /* word */ {
    DTF_LONG,
    DTF_LONG_CONDENSED,
    DTF_LONG_NO_WEEKDAY,
    DTF_LONG_NO_WEEKDAY_CONDENSED,
    DTF_SHORT,
    DTF_ZERO_PADDED_SHORT,
    DTF_MD_LONG,
    DTF_MD_LONG_NO_WEEKDAY,
    DTF_MD_SHORT,
    DTF_MY_LONG,
    DTF_MY_SHORT,
    DTF_MONTH,
    DTF_WEEKDAY,
    DTF_HMS,
    DTF_HM,
    DTF_H,
    DTF_MS,
    DTF_HMS_24HOUR,
    DTF_HM_24HOUR,
} DateTimeFormat;

DayOfTheWeek

typedef enum {
    DOTW_SUNDAY,
    DOTW_MONDAY,
    DOTW_TUESAY,
    DOTW_WEDNESDAY,
    DOTW_THURSDAY,
    DOTW_FRIDAY,
    DOTW_SATURDAY
} DayOfTheWeek;

This enumerated type is used in the TimerDateAndTime structure.


DBGroup

typedef word DBGroup;

This is the handle of a DB group. It is the VM handle of a DB group block. DB group handles do not change when a file is copied, or when it is closed and reopened.


DBGroupAndItem

typedef dword DBGroupAndItem;

This is a dword which contains the group and item handles of a database item. The high word is the item’s Group handle; the low word is the item’s Item handle.

Macros are provided to create and parse the DBGroupAndItem:

DBCombineGroupAndItem()
Creates a DBGroupAndItem from given group and item handles.

DBCombineGroupAndItem(group, item);

DBExtractGroupFromGroupAndItem()
Extracts the DBGroup from a given DBGroupAndItem.

DBExtractGroupFromGroupAndItem(groupAndItem);

DBExtractItemFromGroupAndItem()
Extracts the DBItem from a given DBGroupAndItem.

DBExtractItemFromGroupAndItem(groupAndItem);

Include: geos.h


DBItem

typedef word DBItem;

This is the handle of a DB item. The DBItem and DBGroup together uniquely identify a DB item in a specified file.


DBReturn

typedef struct {
    word    DBR_group;
    word    DBR_item;
    word    unused1;
    word    unused2;
} DBReturn;

DefaultPrintSizes

typedef struct {
    word    paperWidth;
    word    paperHeight;
    word    documentWidth;
    word    documentHeight;
} DefaultPrintSizes;

DevicePresent

typedef enum /* word */ {
    DP_NOT_PRESENT=0xffff,
    DP_CANT_TELL=0,
    DP_PRESENT=1,
    DP_INVALID_DEVICE=0xfffe
} DevicePresent;

DirPathInfo

typedef word DirPathInfo;
    #define DPI_EXISTS_LOCALLY                  0x8000
    #define DPI_ENTRY_NUMBER_IN_PATH            0x7f00
    #define DPI_ENTRY_NUMBER_IN_PATH_OFFSET     8
    #define DPI_STD_PATH                        0x00ff
    #define DPI_STD_PATH_OFFSET                 0

DiskCopyCallback

typedef enum /* word */ {
    CALLBACK_GET_SOURCE_DISK,
    CALLBACK_REPORT_NUM_SWAPS,
    CALLBACK_GET_DEST_DISK,
    CALLBACK_VERIFY_DEST_DESTRUCTION,
    CALLBACK_REPORT_FORMAT_PCT,
    CALLBACK_REPORT_COPY_PCT
} DiskCopyCallback;

DiskCopyError

typedef enum /* word */ {
    ERR_DISKCOPY_INSUFFICIENT_MEM=0xd0,
    ERR_CANT_COPY_FIXED_DISKS,
    ERR_CANT_READ_FROM_SOURCE,
    ERR_CANT_WRITE_TO_DEST,
    ERR_INCOMPATIBLE_FORMATS,
    ERR_OPERATION_CANCELLED,
    ERR_CANT_FORMAT_DEST,
} DiskCopyError;

DiskFindResult

typedef enum /* word */ {
    DFR_UNIQUE,
    DFR_NOT_UNIQUE,
    DFR_NOT_FOUND,
} DiskFindResult;

DiskHandle

typedef Handle DiskHandle;

DiskInfoStruct

typedef struct {
    word        DIS_blockSize;
    sdword      DIS_freeSpace;
    sdword      DIS_totalSpace;
    VolumeName      DIS_name;
} DiskInfoStruct;

DiskRestoreError

typedef enum /* word */ {
    DRE_DISK_IN_DRIVE,
    DRE_DRIVE_NO_LONGER_EXISTS,
    DRE_REMOVABLE_DRIVE_DOESNT_HOLD_DISK,
    DRE_USER_CANCELED_RESTORE,
    DRE_COULDNT_CREATE_NEW_DISK_HANDLE,
    DRE_REMOVABLE_DRIVE_IS_BUSY,
} DiskRestoreError;

DisplayAspectRatio

typedef ByteEnum DisplayAspectRatio;
    #define DAR_NORMAL              0
    #define DAR_SQUISHED            1
    #define DAR_VERY_SQUISHED       2

DisplayClass

typedef ByteEnum DisplayClass;
    #define DC_TEXT                 0
    #define DC_GRAY_1               1
    #define DC_GRAY_2               2
    #define DC_GRAY_4               3
    #define DC_GRAY_8               4
    #define DC_COLOR_2              5
    #define DC_COLOR_4              6
    #define DC_CF_RGB               7

DisplaySize

typedef ByteEnum DisplaySize;
    #define DS_TINY             0
    #define DS_STANDARD         1
    #define DS_LARGE            2
    #define DS_HUGE             3

DisplayType

typedef ByteFlags DisplayType;
    #define DT_DISP_SIZE                    0xc0
    #define DT_DISP_ASPECT_RATIO            0x30
    #define DT_DISP_CLASS                   0x0f

DistanceUnit

typedef ByteEnum DistanceUnit;
    #define DU_POINTS                           0
    #define DU_INCHES                           1
    #define DU_CENTIMETERS                      2
    #define DU_MILLIMETERS                      3
    #define DU_PICAS                            4
    #define DU_EUR_POINTS                       5
    #define DU_CICEROS                          6
    #define DU_POINTS_OR_MILLIMETERS            7
    #define DU_INCHES_OR_CENTIMETERS            8
    #define LOCAL_DISTANCE_BUFFER_SIZE          32

DocQuitStatus

typedef enum /* word */ {
    DQS_OK,
    DQS_CANCEL,
    DQS_DELAYED,
    DQS_SAVE_ERROR
} DocQuitStatus;

DocumentSize

typedef struct {
    int     leftMargin;
    int     topMargin;
    int     width;
    int     height;
} DocumentSize;

DosCodePage

typedef enum /* word */ {
    CODE_PAGE_US=437,
    CODE_PAGE_MULTILINGUAL=850,
    CODE_PAGE_MULTILINGUAL_EURO=858,
    CODE_PAGE_PORTUGUESE=860,
    CODE_PAGE_CANADIAN_FRENCH=863,
    CODE_PAGE_NORDIC=865
} DosCodePage;

DosDotFileName

typedef char DosDotFileName[DOS_DOT_DOS_FILE_NAME_SIZE];

DosExecFlags

typedef ByteFlags DosExecFlags;
    #define DEF_PROMPT              0x80    /* prompt user to return to GEOS */
    #define DEF_FORCED_SHUTDOWN     0x40    /* force shutdown; no abort */
    #define DEF_INTERACTIVE         0x20    /* program is interactive shell */

Flags used with DosExec(). DosExec() executes a DOS program based on these flags.


DosFileInfoStruct

typedef struct {
    byte DFIS_attributes;
    dword DFIS_modTimeDate;
    dword DFIS_fileSize;
    char DFIS_name[DOS_DOT_FILE_NAME_LENGTH_ZT];
    word DFIS_pathInfo;
} DosFileInfoStruct;

DosNoDotFileName

typedef char DosNoDotFileName[DOS_NO_DOT_DOS_FILE_NAME_SIZE];

DrawMask

typedef byte DrawMask[8];

The graphics system uses this structure for defining custom draw masks.


DriveType

typedef ByteEnum DriveType;
    #define DRIVE_5_25              0
    #define DRIVE_3_5               1
    #define DRIVE_FIXED             2
    #define DRIVE_RAM               3
    #define DRIVE_CD_ROM            4
    #define DRIVE_8                 5
    #define DRIVE_UNKNOWN           0xf
} DriveType;

Several routines (in particular, DriveGetStatus()) provide information about drives used by the computer running GEOS. These routines return a member of the DriveTypes enumerated type. Note that while the type is byte-length, all of the values are guaranteed to fit in four bits; thus, routines like DriveGetStatus() can return a DriveTypes value in the low four bits and other flags in the high four bits of a single byte.


DriverAttrs

typedef WordFlags DriverAttrs;
    #define DA_FILE_SYSTEM                  0x8000
    #define DA_CHARACTER                    0x4000
    #define DA_HAS_EXTENDED_INFO            0x2000

This record contains flags that indicate a given driver’s attributes. This record is stored in the driver’s DriverInfoStruct structure.


DriverExtendedInfoStruct

typedef struct {
    DriverInfoStruct    DEIS_common;    /* The base driver info structure */
    MemHandle           DEIS_resource;  /* Handle of driver's DriverExtendedInfo
                                         * table. */
} DriverExtendedInfoStruct;

This structure is used by Preferences to locate the names of devices supported by a particular driver.


DriverExtendedInfoTable

typedef struct {
    LMemBlockHeader     DEIT_common;
    word                DEIT_numDevices;
    ChunkHandle         DEIT_ChunkHandle;
    word                DEIT_infoTable;
} DriverExtendedInfoTable;

DriverInfoStruct

typedef struct {
     void (*DIS_strategy)();                /* Pointer to strategy routine */
     DriverAttrs    DIS_driverAttributes;   /* driver's attribute flags */
     DriverType     DIS_driverType;         /* driver's type */
} DriverInfoStruct;

This structure defines the characteristics of a particular driver. In general, applications will not need to access this structure unless they use a driver directly.


DriverType

typedef enum {
    DRIVER_TYPE_VIDEO = 1,          /* Video drivers */
    DRIVER_TYPE_INPUT,              /* Input (keyboard, mouse) drivers */
    DRIVER_TYPE_MASS_STORAGE,       /* Disk/Drive drivers */
    DRIVER_TYPE_STREAM,             /* Stream and port drivers */
    DRIVER_TYPE_FONT,               /* Font drivers */
    DRIVER_TYPE_OUTPUT,             /* Output (not video and printer) drivers */
    DRIVER_TYPE_LOCALIZATION,       /* Localization drivers */
    DRIVER_TYPE_FILE_SYSTEM,        /* File system drivers */
    DRIVER_TYPE_PRINTER,            /* Printer drivers */
    DRIVER_TYPE_SWAP,               /* Swap drivers */
    DRIVER_TYPE_POWER_MANAGEMENT,   /* Power management drivers */
    DRIVER_TYPE_TASK_SWITCH,        /* Task switch drivers */
    DRIVER_TYPE_NETWORK             /* Network file system drivers */
} DriverType;

This enumerated type has one value for each type of driver in the system. It is used primarily with GeodeUseDriver() and its associated routines. Each driver stores its type in its DriverInfoStruct structure.


DWFixed

typedef struct {
    word    WWF_frac;
    dword   WWF_int;
} DWFixed;

dword

typedef unsigned long dword;

DWordFlags

typedef dword DWordFlags;

ElementArrayHeader

typedef struct {
    ChunkArrayHeader    EAH_meta;       /* chunk array header structure */
    word                EAH_freePtr;    /* First free element */
} ElementArrayHeader;

Every element array must begin with an ElementArrayHeader. Since element arrays are special kinds of chunk arrays, the ElementArrayHeader must itself begin with a ChunkArrayHeader. The structure contains one additional field, EAH_freePtr. This is used to keep track of the freed elements in the element array. Applications should not examine or change this field.


EndOfSongFlags

typedef ByteFlags EndOfSongFlags;
        #define EOSF_UNLOCK 0x0080      /* unlock block at EOS ? */
        #define EOSF_DESTROY 0x0040     /* destroy block at EOS ? */

        #define UNLOCK_ON_EOS EOSF_UNLOCK
        #define DESTROY_ON_EOS EOSF_DESTROY

EntryPointRelocation

typedef struct {
    char    EPR_geodeName[GEODE_NAME_SIZE];
    word    EPR_entryNumber;
} EntryPointRelocation;

EnvelopeOrientation

typedef ByteEnum EnvelopeOrientation;
    #define EO_PORTAIT_LEFT             0x00
    #define EO_PORTAIT_RIGHT            0x01
    #define EO_LANDSCAPE_UP             0x02
    #define EO_LANDSCAPE_DOWN           0x03

EnvelopePath

typedef ByteEnum EnvelopePath;
    #define EP_LEFT             0x00
    #define EP_CENTER           0x01
    #define EP_RIGHT            0x02

Errors

    #define ERROR_UNSUPPORTED_FUNCTION                  1
    #define ERROR_FILE_NOT_FOUND                        2
    #define ERROR_PATH_NOT_FOUND                        3
    #define ERROR_TOO_MANY_OPEN_FILES                   4
    #define ERROR_ACCESS_DENIED                         5
    #define ERROR_INSUFFICIENT_MEMORY                   8
    #define ERROR_INVALID_VOLUME                        15
    #define ERROR_IS_CURRENT_DIRECTORY                  16
    #define ERROR_DIFFERENT_DEVICE                      17
    #define ERROR_NO_MORE_FILES                         18
    #define ERROR_WRITE_PROTECTED                       19
    #define ERROR_UNKNOWN_VOLUME                        20
    #define ERROR_DRIVE_NOT_READY                       21
    #define ERROR_CRC_ERROR                             23
    #define ERROR_SEEK_ERROR                            25
    #define ERROR_UNKNOWN_MEDIA                         26
    #define ERROR_SECTOR_NOT_FOUND                      27
    #define ERROR_WRITE_FAULT                           29
    #define ERROR_READ_FAULT                            30
    #define ERROR_GENERAL_FAILURE                       31
    #define ERROR_SHARING_VIOLATION                     32
    #define ERROR_ALREADY_LOCKED                        33
    #define ERROR_SHARING_OVERFLOW                      36
    #define ERROR_SHORT_READ_WRITE                      128
    #define ERROR_INVALID_LONGNAME                      129
    #define ERROR_FILE_EXISTS                           130
    #define ERROR_DOS_EXEC_IN_PROGRESS                  131
    #define ERROR_FILE_IN_USE                           132
    #define ERROR_ARGS_TOO_LONG                         133
    #define ERROR_DISK_UNAVAILABLE                      134
    #define ERROR_DISK_STALE                            135
    #define ERROR_FILE_FORMAT_MISMATCH                  136
    #define ERROR_CANNOT_MAP_NAME                       137
    #define ERROR_DIRECTORY_NOT_EMPTY                   138
    #define ERROR_ATTR_NOT_SUPPORTED                    139
    #define ERROR_ATTR_NOT_FOUND                        140
    #define ERROR_ATTR_SIZE_MISMATCH                    141
    #define ERROR_ATTR_CANNOT_BE_SET                    142
    #define ERROR_CANNOT_MOVE_DIRECTORY                 143
    #define ERROR_PATH_TOO_LONG                         144
    #define ERROR_ARGS_INVALID                          145
    #define ERROR_CANNOT_FIND_COMMAND_INTERPRETER       146
    #define ERROR_NO_TASK_DRIVER_LOADED                 147

ErrorCheckingFlags

typedef WordFlags ErrorCheckingFlags;
    #define ECF_REGION                  0x8000
    #define ECF_HEAP_FREE_BLOCKS        0x4000
    #define ECF_LMEM_INTERNAL           0x2000
    #define ECF_LMEM_FREE_AREAS         0x1000
    #define ECF_LMEM_OBJECT             0x0800
    #define ECF_BLOCK_CHECKSUM          0x0400
    #define ECF_GRAPHICS                0x0200
    #define ECF_SEGMENT                 0x0100
    #define ECF_NORMAL                  0x0080
    #define ECF_VMEM                    0x0040
    #define ECF_APP                     0x0020
    #define ECF_LMEM_MOVE               0x0010
    #define ECF_UNLOCK_MOVE             0x0008
    #define ECF_VMEM_DISCARD            0x0004

Error checking flags are used when setting the system’s error-checking level with SysSetECLevel(). The flags above may be individually set or cleared. It is important to use error checking when debugging; it can help catch obscure bugs that might otherwise go unnoticed until after a product ships.


EvalErrorData

typedef struct {
    byte    EED_errorCode;      /* ParserScannerEvaluatorError */
} EvalErrorData;

EvalFlags

typedef ByteFlags EvalFlags;
    #define EF_MAKE_DEPENDENCIES            0x80
    #define EF_ONLY_NAMES                   0x40
    #define EF_KEEP_LAST_CELL               0x20
    #define EF_NO_NAMES                     0x10
    #define EF_ERROR_PUSHED                 0x08
    #define EVAL_MAX_NESTED_LEVELS          32

EvalFunctionData

typedef struct {
    FunctionID      EFD_functionID;
    word            EFD_nArgs;
} EvalFunctionData;

EvalNameData

typedef struct {
    word    END_name;
} EvalNameData;

EvalOperatorData

typedef struct {
    OperatorType        EOD_opType;
} EvalOperatorData;

EvalStackArgumentData

typedef union {
    EvalStringData          ESAD_string;
    EvalRangeData           ESAD_range;
    EvalErrorData           ESAD_error;
} EvalStackArgumentData;

EvalParameters

typedef struct {
    CommonParameters    EP_common;
    EvalFlags           EP_flags;
    word                EP_fpStack;
    word                EP_depHandle;
    word                EP_nestedLevel;
    dword               EP_nestedAddresses[EVAL_MAX_NESTED_LEVELS];
} EvalParameters;

EvalRangeData

typedef struct {
    CellReference           ERD_firstCell;
    CellReference           ERD_lastCell;
} EvalRangeData;

EvalStackArgumentType

typedef ByteFlags EvalStackArgumentType;
    #define ESAT_EMPTY                  0x80
    #define ESAT_ERROR                  0x40
    #define ESAT_RANGE                  0x20
    #define ESAT_STRING                 0x10
    #define ESAT_NUMBER                 0x08
    #define ESAT_NUM_TYPE               0x03
    #define ESAT_TOP_OF_STACK           0
    #define ESAT_NAME                   (ESAT_RANGE | ESAT_STRING)
    #define ESAT_FUNCTION               (ESAT_NUMBER | ESAT_STRING)

EvalStackOperatorData

typedef union {
    EvalOperatorData            ESOD_operator;
    EvalFunctionData            ESOD_function;
} EvalStackOperatorData;

EvalStackOperatorType

typedef ByteEnum EvalStackOperatorType;
    #define ESOT_OPERATOR               0
    #define ESOT_FUNCTION               1
    #define ESOT_OPEN_PAREN             2
    #define ESOT_TOP_OF_STACK           3

EvalStringData

typedef struct {
    word    ESD_length;
} EvalStringData;

EventHandle

typedef Handle      EventHandle;

ExitFlags

typedef ByteFlags ExitFlags;
    #define EF_PANIC                0x80
    #define EF_RUN_DOS              0x40
    #define EF_OLD_EXIT             0x20
    #define EF_RESET                0x10
    #define EF_RESTART              0x08

ExportControlFeatures

typedef ByteFlags ExportControlFeatures;
    #define EXPORTCF_BASIC                      0x01

ExportControlToolboxFeatures

typedef ByteFlags ExportControlToolboxFeatures;
    #define EXPORTCTF_DIALOG_BOX                0x01

Routines U-Z <– Table of Contents    –> Data Structures F-K