| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2016 by Free Pascal development team
- comodities.library functions
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$PACKRECORDS 2}
- unit commodities;
- interface
- uses
- exec, inputevent, keymap;
- type
- CxObj = LongInt;
- PCxObj = ^CxObj;
- CxMsg = LongInt;
- PCXMsg = ^CxMsg;
- PNewBroker = ^TNewBroker;
- TNewBroker = record
- nb_Version: Shortint; // NB_VERSION see below
- nb_Name: STRPTR;
- nb_Title: STRPTR;
- nb_Descr: STRPTR;
- nb_Unique: SmallInt; // see below NBU_*
- nb_Flags: SmallInt; // see below COF_*
- nb_Pri: Shortint;
- nb_Port: PMsgPort;
- nb_ReservedChannel: SmallInt;
- end;
- const
- // nb_Version
- NB_VERSION = 5; // Version of NewBroker structure
- // buffer sizes
- CBD_NAMELEN = 24; // length of nb_Name
- CBD_TITLELEN = 40; // length of nb_Title
- CBD_DESCRLEN = 40; // length of nb_Descr
- // nb_Unique
- NBU_DUPLICATE = 0;
- NBU_UNIQUE = 1; // will not allow duplicates
- NBU_NOTIFY = 2; // sends CXM_UNIQUE to existing broker
- // nb_Flags
- COF_SHOW_HIDE = 4;
- // Commodities Object Types
- CX_INVALID = 0; // not a valid object (probably null)
- CX_FILTER = 1; // input event messages only
- CX_TYPEFILTER = 2; // filter on message type
- CX_SEND = 3; // sends a message
- CX_SIGNAL = 4; // sends a signal
- CX_TRANSLATE = 5; // translates IE into chain
- CX_BROKER = 6; // application representative
- CX_DEBUG = 7; // dumps kprintf to serial port
- CX_CUSTOM = 8; // application provids function
- CX_ZERO = 9; // system terminator node
- CXM_IEVENT = 1 shl 5;
- CXM_COMMAND = 1 shl 6;
- // ID values
- CXCMD_DISABLE = 15; // please disable yourself
- CXCMD_ENABLE = 17; // please enable yourself
- CXCMD_APPEAR = 19; // open your window, if you can
- CXCMD_DISAPPEAR = 21; // go dormant
- CXCMD_KILL = 23; // go away for good
- CXCMD_LIST_CHG = 27; // Used by Exchange program. Someone has changed the broker list
- CXCMD_UNIQUE = 25; // someone tried to create a broker with your name. Suggest you Appear.
- type
- PInputXpression = ^TInputXpression;
- TInputXpression = record
- ix_Version: Byte; // must be set to IX_VERSION
- ix_Class: Byte; // class must match exactly
- ix_Code: Word; // Bits that we want
- ix_CodeMask: Word; // Set bits here to indicate which bits in ix_Code are don't care bits.
- ix_Qualifier: Word; // Bits that we want
- ix_QualMask : Word; // Set bits here to indicate which bits in ix_Qualifier are don't care bits
- ix_QualSame : Word; // synonyms in qualifier
- end;
- IX = TInputXpression;
- PIX = ^IX;
- const
- // ix_Version
- IX_VERSION = 2;
- // ix_QualSame
- IXSYM_SHIFT = 1; // left- and right- shift are equivalent
- IXSYM_CAPS = 2; // either shift or caps lock are equivalent
- IXSYM_ALT = 4; // left- and right- alt are equivalent
- // corresponding QualSame masks
- IXSYM_SHIFTMASK = IEQUALIFIER_LSHIFT or IEQUALIFIER_RSHIFT;
- IXSYM_CAPSMASK = IXSYM_SHIFTMASK or IEQUALIFIER_CAPSLOCK;
- IXSYM_ALTMASK = IEQUALIFIER_LALT or IEQUALIFIER_RALT;
- // ix_QualMask
- IX_NORMALQUALS = $7FFF; // avoid RELATIVEMOUSE
- // Return Values of CxBroker()
- CBERR_OK = 0; // No error
- CBERR_SYSERR = 1; // System error , no memory, etc
- CBERR_DUP = 2; // uniqueness violation
- CBERR_VERSION = 3; // didn't understand nb_VERSION
- // Return Values of CxObjError()
- COERR_ISNULL = 1; // you called CxError(NULL)
- COERR_NULLATTACH = 2; // someone attached NULL to my list
- COERR_BADFILTER = 4; // a bad filter description was given
- COERR_BADTYPE = 8; // unmatched type-specific operation
- var
- CxBase: PLibrary = nil;
- const
- COMMODITIESNAME: PChar = 'commodities.library';
- function CreateCxObj(Typ: LongWord location 'd0'; Arg1: LongInt location 'a0'; Arg2: LongInt location 'a1'): PCxObj; syscall CxBase 30;
- function CxBroker(Nb: PNewBroker location 'a0'; var Error: LongInt location 'd0'): PCxObj; syscall CxBase 36;
- function ActivateCxObj(Co: PCxObj location 'a0'; Tru: LongInt location 'd0'): LongInt; syscall CxBase 42;
- procedure DeleteCxObj(Co: PCxObj location 'a0'); syscall CxBase 48;
- procedure DeleteCxObjAll(Co: PCxObj location 'a0'); syscall CxBase 54;
- function CxObjType(Co: PCxObj location 'a0'): LongWord; syscall CxBase 60;
- function CxObjError(Co: PCxObj location 'a0'): LongInt; syscall CxBase 66;
- procedure ClearCxObjError(Co: PCxObj location 'a0'); syscall CxBase 72;
- function SetCxObjPri(Co: PCxObj location 'a0'; Pri: LongInt location 'd0'): LongInt; syscall CxBase 78;
- procedure AttachCxObj(HeadObj: PCxObj location 'a0'; Co: PCxObj location 'a1'); syscall CxBase 84;
- procedure EnqueueCxObj(HeadObj: PCxObj location 'a0'; Co: PCxObj location 'a1'); syscall CxBase 90;
- procedure InsertCxObj(HeadObj: PCxObj location 'a0'; Co: PCxObj location 'a1'; Pred: PCxObj location 'a2'); syscall CxBase 96;
- procedure RemoveCxObj(Co: PCxObj location 'a0'); syscall CxBase 102;
- procedure SetTranslate(Translator: PCxObj location 'a0'; Events: PInputEvent location 'a1'); syscall CxBase 114;
- procedure SetFilter(Filter: PCxObj location 'a0'; Text: STRPTR location 'a1'); syscall CxBase 120;
- procedure SetFilterIX(Filter: PCxObj location 'a0'; Ix: PInputXpression location 'a1'); syscall CxBase 126;
- function ParseIX(Description: STRPTR location 'a0'; Ix: PInputXpression location 'a1'): LongInt; syscall CxBase 132;
- function CxMsgType(Cxm: PCxMsg location 'a0'): LongWord; syscall CxBase 138;
- function CxMsgData(Cxm: PCxMsg location 'a0'): APTR; syscall CxBase 144;
- function CxMsgID(Cxm: PCxMsg location 'a0'): LongInt; syscall CxBase 150;
- procedure DivertCxMsg(Cxm: PCxMsg location 'a0'; HeadObj: PCxObj location 'a1'; ReturnObj: PCxObj location 'a2'); syscall CxBase 156;
- procedure RouteCxMsg(Cxm: PCxMsg location 'a0'; Co: PCxObj location 'a1'); syscall CxBase 162;
- procedure DisposeCxMsg(Cxm: PCxMsg location 'a0'); syscall CxBase 168;
- function InvertKeyMap(AnsiCode: LongWord location 'd0'; Event: PInputEvent location 'a0'; Km: PKeyMap location 'a1'): LongBool; syscall CxBase 174;
- procedure AddIEvents(Events: PInputEvent location 'a0'); syscall CxBase 180;
- function MatchIX(Event: PInputEvent location 'a0'; Ix: PInputXpression location 'a1'): LongBool; syscall CxBase 204;
- // macros
- function CxFilter(D: STRPTR): PCxObj; inline;
- function CxSender(Port: PMsgPort; Id: longint): PCxObj; inline;
- function CxSignal(Task: pTask; Sig: Byte): PCxObj; inline;
- function CxTranslate(Ie: PInputEvent): PCxObj; inline;
- function CxDebug(Id: LongInt): PCxObj; inline;
- function CxCustom(Action: Pointer; Id: LongInt): PCxObj; inline;
- function Null_IX(ix: PIX): Boolean; inline;
- implementation
- function CxFilter(D: STRPTR): PCxObj; inline;
- begin
- CxFilter := CreateCxObj(CX_FILTER, IPTR(d), 0)
- end;
- function CxSender(Port: PMsgPort; Id: longint): PCxObj; inline;
- begin
- CxSender := CreateCxObj(CX_SEND, IPTR(Port), Id);
- end;
- function CxSignal(Task: pTask; Sig: Byte): PCxObj;
- begin
- CxSignal:= CreateCxObj(CX_SIGNAL, IPTR(task), Sig);
- end;
- function CxTranslate(Ie: PInputEvent): PCxObj;
- begin
- CxTranslate := CreateCxObj(CX_TRANSLATE, IPTR(Ie), 0);
- end;
- function CxDebug(Id: LongInt): PCxObj;
- begin
- CxDebug := CreateCxObj(CX_DEBUG, Id, 0)
- end;
- function CxCustom(Action: Pointer; Id: LongInt): PCxObj;
- begin
- CxCustom := CreateCxObj(CX_CUSTOM, IPTR(Action), Id);
- end;
- function Null_IX(Ix: PIX): Boolean;
- begin
- Null_IX := Ix^.ix_Class = IECLASS_NULL;
- end;
- const
- // Change LIBVERSION to proper values
- LIBVERSION: longword = 0;
- initialization
- CxBase := OpenLibrary(COMMODITIESNAME, LIBVERSION);
- finalization
- if Assigned(CxBase) then
- CloseLibrary(CxBase);
- end.
|