home *** CD-ROM | disk | FTP | other *** search
- (***************************************************************************
-
- $RCSfile: Commodities.mod $
- Description: Interface to commodities.library
-
- Created by: fjc (Frank Copeland)
- $Revision: 3.2 $
- $Author: fjc $
- $Date: 1994/08/08 00:57:41 $
-
- Includes Release 40.15
-
- (C) Copyright 1985-1993 Commodore-Amiga, Inc.
- All Rights Reserved
-
- Oberon-A interface Copyright © 1994, Frank Copeland.
- This file is part of the Oberon-A Interface.
- See Oberon-A.doc for conditions of use and distribution.
-
- ***************************************************************************)
-
- MODULE Commodities;
-
- (*
- ** $C- CaseChk $I- IndexChk $L+ LongAdr $N- NilChk
- ** $P- PortableCode $R- RangeChk $S- StackChk $T- TypeChk
- ** $V- OvflChk $Z- ZeroVars
- *)
-
- IMPORT E := Exec, IE := InputEvent, KM := KeyMap, SYS := SYSTEM;
-
- (**-- Pointer declarations ---------------------------------------------*)
-
- TYPE
-
- NewBrokerPtr * = CPOINTER TO NewBroker;
- InputXpressionPtr * = CPOINTER TO InputXpression;
- IXPtr * = CPOINTER TO IX;
- CxObjPtr * = CPOINTER TO CxObj;
- CxMsgPtr * = CPOINTER TO CxMsg;
-
- (*
- ** $VER: commodities.h 38.4 (24.2.93)
- **
- ** Commodities definitions.
- *)
-
- (*****************************************************************************)
-
- TYPE
-
- NewBroker * = RECORD
- version * : SHORTINT; (* Must be set to NB_VERSION *)
- name * : E.STRPTR;
- title * : E.STRPTR;
- descr * : E.STRPTR;
- unique * : E.WSET;
- flags * : E.WSET;
- pri * : SHORTINT;
- port * : E.MsgPortPtr;
- reservedChannel * : INTEGER;
- END;
-
- CONST
-
- (* constant for NewBroker.version *)
- nbVersion * = 5; (* Version of NewBroker structure *)
-
- (* Sizes for various buffers *)
- cbdNamelen * = 24;
- cbdTitlelen * = 40;
- cbdDescrlen * = 40;
-
- (* Flags for NewBroker.unique *)
- nbuDuplicate * = 0;
- nbuUnique * = 1; (* will not allow duplicates *)
- nbuNotify * = 2; (* sends cxmUnique to existing broker *)
-
- (* Flags for NewBroker.flags *)
- cofShowHide * = 4;
-
-
- (*****************************************************************************)
-
- TYPE
-
- (* Fake data types for system private objects *)
- CxObj = RECORD END;
- CxMsg = RECORD END;
-
- (* Pointer to a function returning a LONG *)
- PFL = PROCEDURE () : LONGINT;
-
-
- (*****************************************************************************)
-
- CONST
-
- (* Commodities object types *)
- invalid * = 0; (* not a valid object (probably null) *)
- filter * = 1; (* input event messages only *)
- typeFilter * = 2; (* obsolete, do not use *)
- send * = 3; (* sends a message *)
- signal * = 4; (* sends a signal *)
- translate * = 5; (* translates input event into chain *)
- broker * = 6; (* application representative *)
- debug * = 7; (* dumps info to serial port *)
- custom * = 8; (* application provides function *)
- zero * = 9; (* system terminator node *)
-
-
- (*****************************************************************************)
-
- CONST
-
- (* Commodities message types *)
- mIEvent * = 32;
- mCommand * = 64;
-
- (* Only mIEvent 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.
- *
- * mIEvent: Messages of this type rattle around the Commodities input
- * network. They are 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 section of the message will point to the input event
- * triggering the message.
- *
- * mCommand: 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 value identifies the command.
- *)
-
- CONST
-
- (* ID values associated with a message of type mCommand *)
- cmdDisable * = 15; (* please disable yourself *)
- cmdEnable * = 17; (* please enable yourself *)
- cmdAppear * = 19; (* open your window, if you can *)
- cmdDisappear * = 21; (* go dormant *)
- cmdKill * = 23; (* go away for good *)
- cmdListChg * = 27; (* Someone changed the broker list *)
- cmdUnique * = 25; (* someone tried to create a broker
- * with your name. Suggest you appear.
- *)
-
-
- (*****************************************************************************)
-
- TYPE
-
- InputXpression * = RECORD
- version * : E.UBYTE; (* must be set to ixVersion *)
- class * : E.UBYTE; (* class must match exactly *)
-
- code * : E.WSET; (* Bits that we want *)
- codeMask * : E.WSET; (* Set bits here to indicate which bits in code
- * are don't care bits.
- *)
- qualifier * : E.WSET; (* Bits that we want *)
- qualMask * : E.WSET; (* Set bits here to indicate which bits in
- * qualifier are don't care bits
- *)
- qualSame * : E.WSET; (* synonyms in qualifier *)
- END;
-
- IX * = InputXpression;
-
- CONST
-
- (* constant for InputXpression.version *)
- ixVersion * = 2;
-
- (* constants for InputXpression.qualSame *)
- ixsymShift * = 0; (* left- and right- shift are equivalent *)
- ixsymCaps * = 1; (* either shift or caps lock are equivalent *)
- ixsymAlt * = 2; (* left- and right- alt are equivalent *)
-
- ixsymShiftMask * = {IE.qualLShift, IE.qualRShift};
- ixsymCapsMask * = ixsymShiftMask + {IE.qualCapsLock};
- ixsymAltMask * = {IE.qualLAlt, IE.qualRAlt};
-
- (* constant for InputXpression.qualMask *)
- ixNormalQuals * = {0..14}; (* avoid RELATIVEMOUSE *)
-
-
- (*****************************************************************************)
-
- CONST
-
- (* Error returns from CxBroker() *)
- cbErrOk * = 0; (* No error *)
- cbErrSysErr * = 1; (* System error, no memory, etc *)
- cbErrDup * = 2; (* uniqueness violation *)
- cbErrVersion * = 3; (* didn't understand NewBroker.nb_Version *)
-
-
- (*****************************************************************************)
-
- CONST
-
- (* Return values from CxObjError() *)
- coErrIsNull * = 1; (* you called CxObjError(NULL) *)
- coErrNullAttach * = 2; (* someone attached NULL to my list *)
- coErrBadFilter * = 4; (* a bad filter description was given *)
- coErrBadType * = 8; (* unmatched type-specific operation *)
-
-
- (*****************************************************************************)
-
-
- (**-- Library Base variable --------------------------------------------*)
-
- TYPE
-
- CommoditiesBasePtr * = CPOINTER TO CommoditiesBase;
- CommoditiesBase * = RECORD (E.Library) END;
-
- CONST
-
- name * = "commodities.library";
-
- VAR
-
- base * : CommoditiesBasePtr;
-
-
- (**-- Library Functions ------------------------------------------------*)
-
- (*
- ** $VER: commodities_protos.h 38.4 (27.2.92)
- *)
-
- TYPE
- CustomProcType * = PROCEDURE ( obj : CxObjPtr; msg : CxMsgPtr );
-
- (* --- functions in V36 or higher (distributed as Release 2.0) ---*)
-
- (* OBJECT UTILITIES *)
-
- LIBCALL (base : CommoditiesBasePtr) CreateCxObj*
- ( type [0] : E.ULONG;
- arg1 [8] : SYS.LONGWORD;
- arg2 [9] : SYS.LONGWORD )
- : CxObjPtr;
- -30;
- LIBCALL (base : CommoditiesBasePtr) CxBroker*
- ( VAR nb [8] : NewBroker;
- VAR error [0] : LONGINT )
- : CxObjPtr;
- -36;
- LIBCALL (base : CommoditiesBasePtr) ActivateCxObj*
- ( co [8] : CxObjPtr;
- true [0] : E.LBOOL )
- : E.LBOOL;
- -42;
- LIBCALL (base : CommoditiesBasePtr) DeleteCxObj*
- ( co [8] : CxObjPtr );
- -48;
- LIBCALL (base : CommoditiesBasePtr) DeleteCxObjAll*
- ( co [8] : CxObjPtr );
- -54;
- LIBCALL (base : CommoditiesBasePtr) CxObjType*
- ( co [8] : CxObjPtr )
- : E.ULONG;
- -60;
- LIBCALL (base : CommoditiesBasePtr) CxObjError*
- ( co [8] : CxObjPtr )
- : SET;
- -66;
- LIBCALL (base : CommoditiesBasePtr) ClearCxObjError*
- ( co [8] : CxObjPtr );
- -72;
- LIBCALL (base : CommoditiesBasePtr) SetCxObjPri*
- ( co [8] : CxObjPtr;
- pri [0] : LONGINT )
- : LONGINT;
- -78;
-
- (* OBJECT ATTACHMENT *)
-
- LIBCALL (base : CommoditiesBasePtr) AttachCxObj*
- ( headObj [8] : CxObjPtr;
- co [9] : CxObjPtr );
- -84;
- LIBCALL (base : CommoditiesBasePtr) EnqueueCxObj*
- ( headObj [8] : CxObjPtr;
- co [9] : CxObjPtr );
- -90;
- LIBCALL (base : CommoditiesBasePtr) InsertCxObj*
- ( headObj [8] : CxObjPtr;
- co [9] : CxObjPtr;
- pred [10] : CxObjPtr );
- -96;
- LIBCALL (base : CommoditiesBasePtr) RemoveCxObj*
- ( co [8] : CxObjPtr );
- -102;
-
- (* TYPE SPECIFIC *)
-
- LIBCALL (base : CommoditiesBasePtr) SetTranslate*
- ( translator [8] : CxObjPtr;
- VAR events [9] : IE.InputEvent );
- -114;
- LIBCALL (base : CommoditiesBasePtr) SetFilter*
- ( filter [8] : CxObjPtr;
- text [9] : ARRAY OF CHAR );
- -120;
- LIBCALL (base : CommoditiesBasePtr) SetFilterIX*
- ( filter [8] : CxObjPtr;
- VAR ix [9] : IX );
- -126;
- LIBCALL (base : CommoditiesBasePtr) ParseIX*
- ( description [8] : ARRAY OF CHAR;
- VAR ix [9] : IX )
- : LONGINT;
- -132;
-
- (* COMMON MESSAGE *)
-
- LIBCALL (base : CommoditiesBasePtr) CxMsgType*
- ( cxm [8] : CxMsgPtr )
- : SET;
- -138;
- LIBCALL (base : CommoditiesBasePtr) CxMsgData*
- ( cxm [8] : CxMsgPtr )
- : E.APTR;
- -144;
- LIBCALL (base : CommoditiesBasePtr) CxMsgID*
- ( cxm [8] : CxMsgPtr )
- : LONGINT;
- -150;
-
- (* MESSAGE ROUTING *)
-
- LIBCALL (base : CommoditiesBasePtr) DivertCxMsg*
- ( cxm [8] : CxMsgPtr;
- headobj [9] : CxObjPtr;
- ret [10] : CxObjPtr );
- -156;
- LIBCALL (base : CommoditiesBasePtr) RouteCxMsg*
- ( cxm [8] : CxMsgPtr;
- co [9] : CxObjPtr );
- -162;
- LIBCALL (base : CommoditiesBasePtr) DisposeCxMsg*
- ( cxm [8] : CxMsgPtr );
- -168;
-
- (* INPUT EVENT HANDLING *)
-
- LIBCALL (base : CommoditiesBasePtr) InvertKeyMap*
- ( ansicode [0] : E.ULONG;
- event [8] : IE.InputEventBasePtr;
- km [9] : KM.KeyMapPtr )
- : BOOLEAN;
- -174;
- LIBCALL (base : CommoditiesBasePtr) AddIEvents*
- ( events [8] : IE.InputEventBasePtr );
- -180;
-
- (*--- functions in V38 or higher (Release 2.1) ---*)
-
- (* MORE INPUT EVENT HANDLING *)
-
- LIBCALL (base : CommoditiesBasePtr) MatchIX *
- ( event [8] : IE.InputEventBasePtr;
- ix [9] : IXPtr )
- : BOOLEAN;
- -204;
-
- (**-- C Macros defined as procedures -----------------------------------*)
- (** $L+ Absolute long addressing for globals *)
-
- (*************************
- * object creation macros
- *************************)
-
- (**-----------------------------------*)
- PROCEDURE CxFilter *
- (base : CommoditiesBasePtr; d : E.STRPTR)
- : CxObjPtr;
- BEGIN (* CxFilter *)
- RETURN base.CreateCxObj (filter, d, NIL)
- END CxFilter;
-
- (**-----------------------------------*)
- PROCEDURE CxTypeFilter *
- (base : CommoditiesBasePtr; type : LONGINT)
- : CxObjPtr;
- BEGIN (* CxTypeFilter *)
- RETURN base.CreateCxObj (typeFilter, type, NIL)
- END CxTypeFilter;
-
- (**-----------------------------------*)
- PROCEDURE CxSender *
- (base : CommoditiesBasePtr; port : E.MsgPortPtr; id : LONGINT)
- : CxObjPtr;
- BEGIN (* CxSender *)
- RETURN base.CreateCxObj (send, port, id)
- END CxSender;
-
- (**-----------------------------------*)
- PROCEDURE CxSignal *
- (base : CommoditiesBasePtr; task : E.TaskPtr; sig : LONGINT)
- : CxObjPtr;
- BEGIN (* CxSignal *)
- RETURN base.CreateCxObj (signal, task, sig)
- END CxSignal;
-
- (**-----------------------------------*)
- PROCEDURE CxTranslate *
- (base : CommoditiesBasePtr; ie : IE.InputEventBasePtr)
- : CxObjPtr;
- BEGIN (* CxTranslate *)
- RETURN base.CreateCxObj (translate, ie, NIL)
- END CxTranslate;
-
- (**-----------------------------------*)
- PROCEDURE CxDebug *
- (base : CommoditiesBasePtr; id : LONGINT)
- : CxObjPtr;
- BEGIN (* CxDebug *)
- RETURN base.CreateCxObj (debug, id, NIL)
- END CxDebug;
-
- (**-----------------------------------*)
- PROCEDURE CxCustom *
- (base : CommoditiesBasePtr; action : CustomProcType; id : E.APTR)
- : CxObjPtr;
- BEGIN (* CxCustom *)
- RETURN base.CreateCxObj (custom, action, id)
- END CxCustom;
-
-
- (**-- Library Base variable --------------------------------------------*)
- (** $L- Address globals through A4 *)
-
-
- (**-----------------------------------*)
- PROCEDURE* CloseLib ();
-
- BEGIN (* CloseLib *)
- IF base # NIL THEN E.base.CloseLibrary (base) END;
- END CloseLib;
-
- (**-----------------------------------*)
- PROCEDURE OpenLib * (mustOpen : BOOLEAN);
-
- BEGIN (* OpenLib *)
- IF base = NIL THEN
- base :=
- SYS.VAL
- ( CommoditiesBasePtr,
- E.base.OpenLibrary (name, E.libraryMinimum) );
- IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
- ELSIF mustOpen THEN HALT (100)
- END;
- END;
- END OpenLib;
-
-
- BEGIN
- base := NIL
- END Commodities.
-