#ifndef LIBRARIES_COMMODITIES_H #define LIBRARIES_COMMODITIES_H /* ** $Filename: libraries/commodities.h $ ** $Release: 2.04 Includes, V37.4 $ ** $Revision: 37.1 $ ** $Date: 91/04/15 $ ** ** Commodities definitions. ** ** (C) Copyright 1988-1999 Amiga, Inc. ** All Rights Reserved */ #ifndef EXEC_TYPES_H #include <exec/types.h> #endif /************************* * object creation macros *************************/ #define CxFilter(d) CreateCxObj((LONG)CX_FILTER, (LONG) d, 0) #define CxTypeFilter(type) CreateCxObj((LONG)CX_TYPEFILTER, (LONG) type, 0) #define CxSender(port,id) CreateCxObj((LONG)CX_SEND, (LONG) port, (LONG) id) #define CxSignal(task,sig) CreateCxObj((LONG)CX_SIGNAL,(LONG) task, (LONG) sig) #define CxTranslate(ie) CreateCxObj((LONG)CX_TRANSLATE, (LONG) ie, 0) #define CxDebug(id) CreateCxObj((LONG)CX_DEBUG, (LONG) id, 0) #define CxCustom(action,id) CreateCxObj((LONG)CX_CUSTOM,(LONG)action,(LONG)id) /*************** * Broker stuff ***************/ /* buffer sizes */ #define CBD_NAMELEN 24 #define CBD_TITLELEN 40 #define CBD_DESCRLEN 40 /* CxBroker errors */ #define CBERR_OK 0 /* No error */ #define CBERR_SYSERR 1 /* System error , no memory, etc */ #define CBERR_DUP 2 /* uniqueness violation */ #define CBERR_VERSION 3 /* didn't understand nb_VERSION */ #define NB_VERSION 5 /* Version of NewBroker structure */ struct NewBroker { BYTE nb_Version; /* set to NB_VERSION */ BYTE *nb_Name; BYTE *nb_Title; BYTE *nb_Descr; SHORT nb_Unique; SHORT nb_Flags; BYTE nb_Pri; struct MsgPort *nb_Port; WORD nb_ReservedChannel; /* plans for later port sharing */ }; /* Flags for nb_Unique */ #define NBU_DUPLICATE 0 #define NBU_UNIQUE 1 /* will not allow duplicates */ #define NBU_NOTIFY 2 /* sends CXM_UNIQUE to existing broker */ /* Flags for nb_Flags */ #define COF_SHOW_HIDE 4 /******** * cxusr ********/ /** Fake data types for system private objects */ #ifndef CX_H typedef LONG CxObj; typedef LONG CxMsg; #endif /* Pointer to Function returning Long */ typedef LONG (*PFL)(); /********************************/ /** Commodities Object Types **/ /********************************/ #define CX_INVALID 0 /* not a valid object (probably null) */ #define CX_FILTER 1 /* input event messages only */ #define CX_TYPEFILTER 2 /* filter on message type */ #define CX_SEND 3 /* sends a message */ #define CX_SIGNAL 4 /* sends a signal */ #define CX_TRANSLATE 5 /* translates IE into chain */ #define CX_BROKER 6 /* application representative */ #define CX_DEBUG 7 /* dumps kprintf to serial port */ #define CX_CUSTOM 8 /* application provids function */ #define CX_ZERO 9 /* system terminator node */ /*****************/ /** CxMsg types **/ /*****************/ #define CXM_UNIQUE (1 << 4) /* sent down broker by CxBroker() */ /* Obsolete: subsumed by CXM_COMMAND (below) */ /* Messages of this type rattle around the Commodities input network. * They will be sent to you by a Sender object, and passed to you * as a synchronous function call by a Custom object. * * The message port or function entry point is stored in the object, * and the ID field of the message will be set to what you arrange * issuing object. * * The Data field will point to the input event triggering the * message. */ #define CXM_IEVENT (1 << 5) /* These messages are sent to a port attached to your Broker. * They are sent to you when the controller program wants your * program to do something. The ID field identifies the command. * * The Data field will be used later. */ #define CXM_COMMAND (1 << 6) /* ID values */ #define CXCMD_DISABLE (15) /* please disable yourself */ #define CXCMD_ENABLE (17) /* please enable yourself */ #define CXCMD_APPEAR (19) /* open your window, if you can */ #define CXCMD_DISAPPEAR (21) /* go dormant */ #define CXCMD_KILL (23) /* go away for good */ #define CXCMD_UNIQUE (25) /* someone tried to create a broker * with your name. Suggest you Appear. */ #define CXCMD_LIST_CHG (27) /* Used by Exchange program. Someone */ /* has changed the broker list */ /* return values for BrokerCommand(): */ #define CMDE_OK (0) #define CMDE_NOBROKER (-1) #define CMDE_NOPORT (-2) #define CMDE_NOMEM (-3) /* IMPORTANT NOTE: * Only CXM_IEVENT messages are passed through the input network. * * Other types of messages are sent to an optional port in your broker. * * This means that you must test the message type in your message handling, * if input messages and command messages come to the same port. * * Older programs have no broker port, so processing loops which * make assumptions about type won't encounter the new message types. * * The TypeFilter CxObject is hereby obsolete. * * It is less convenient for the application, but eliminates testing * for type of input messages. */ /**********************************************************/ /** CxObj Error Flags (return values from CxObjError()) **/ /**********************************************************/ #define COERR_ISNULL 1 /* you called CxError(NULL) */ #define COERR_NULLATTACH 2 /* someone attached NULL to my list */ #define COERR_BADFILTER 4 /* a bad filter description was given */ #define COERR_BADTYPE 8 /* unmatched type-specific operation */ /***** * ix *****/ #define IX_VERSION 2 struct InputXpression { UBYTE ix_Version; /* must be set to IX_VERSION */ UBYTE ix_Class; /* class must match exactly */ UWORD ix_Code; UWORD ix_CodeMask; /* normally used for UPCODE */ UWORD ix_Qualifier; UWORD ix_QualMask; UWORD ix_QualSame; /* synonyms in qualifier */ }; typedef struct InputXpression IX; /* QualSame identifiers */ #define IXSYM_SHIFT 1 /* left- and right- shift are equivalent */ #define IXSYM_CAPS 2 /* either shift or caps lock are equivalent */ #define IXSYM_ALT 4 /* left- and right- alt are equivalent */ /* corresponding QualSame masks */ #define IXSYM_SHIFTMASK (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT) #define IXSYM_CAPSMASK (IXSYM_SHIFTMASK | IEQUALIFIER_CAPSLOCK) #define IXSYM_ALTMASK (IEQUALIFIER_LALT | IEQUALIFIER_RALT) #define IX_NORMALQUALS 0x7FFF;/* for QualMask field: avoid RELATIVEMOUSE */ /* matches nothing */ #define NULL_IX(I) ((I)->ix_Class == IECLASS_NULL) #endif