TABLE OF CONTENTS
commodities.library/ActivateCxObj
commodities.library/AddIEvents
commodities.library/AttachCxObj
commodities.library/ClearCxObjError
commodities.library/CreateCxObj
commodities.library/CxBroker
commodities.library/CxMsgData
commodities.library/CxMsgID
commodities.library/CxMsgType
commodities.library/CxObjError
commodities.library/CxObjType
commodities.library/DeleteCxObj
commodities.library/DeleteCxObjAll
commodities.library/DisposeCxMsg
commodities.library/DivertCxMsg
commodities.library/EnqueueCxObj
commodities.library/InsertCxObj
commodities.library/InvertKeyMap
commodities.library/ParseIX
commodities.library/RemoveCxObj
commodities.library/RouteCxMsg
commodities.library/SetCxObjPri
commodities.library/SetFilter
commodities.library/SetFilterIX
commodities.library/SetTranslate
commodities.library/ActivateCxObj commodities.library/ActivateCxObj
NAME
ActivateCxObj -- change the activation state of a commodity object.
(V36)
SYNOPSIS
previous = ActivateCxObj(co,true);
A0 D0
LONG ActivateCxObj(CxObj *,LONG);
FUNCTION
Commodity objects of all types maintain an "activation state".
If an object is "active", then it performs its particular action
whenever a commodity message arrives. If the object is "inactive"
no action is taken, and the message goes on to its next destination.
All objects are created in the "active" state except brokers
which are created "inactive". Thus, after you create your
broker and hang a tree of objects off of it, you must remember
to use this function to activate it. This causes it to divert all
messages to your tree of objects.
This function activates 'co' if 'true' is different than 0. and
deactivates it otherwise. The previous activation state is
returned.
INPUTS
co - the commodity object to affect
true - 0 to deactivate the object, anything else to activate it
RESULTS
previous - the previous activation state: 0 if the object was
inactive, anything else if the object was active
SEE ALSO
CxBroker()
commodities.library/AddIEvents commodities.library/AddIEvents
NAME
AddIEvents -- add input events to commodities' input stream. (V36)
SYNOPSIS
AddIEvents(events)
A0
VOID AddIEvents(struct InputEvent *);
FUNCTION
This function adds a null-terminated linked list of input events to
the input stream of commodities. It is a touch easier than using the
input device directly.
The contents of the input events are copied into commodity
messages, so they may be disposed of as soon as this call returns.
The messages are initially routed to the first broker in the
Commodities Object List.
INPUTS
events - the list of input events to add
SEE ALSO
cx_lib/FreeIEvents()
commodities.library/AttachCxObj commodities.library/AttachCxObj
NAME
AttachCxObj -- attach a commodity object to the end of an existing
list of objects. (V36)
SYNOPSIS
AttachCxObj(headObj,co);
A0 A1
VOID AttachCxObj(CxObj *,CxObj *);
FUNCTION
Adds 'co' to the list of objects pointed to by 'headObj'. The
new object is added at the end of the list.
INPUTS
headObj - pointer to a list of objects
co - the object to add to the list
RESULTS
If 'co' is NULL, this function will record that fact in the
internal accumulated error of 'headObj'. This error record
can be retrieved using CxObjError() and cleared using
ClearCxObjError().
SEE ALSO
CxObjError(), ClearCxObjError()
commodities.library/ClearCxObjError commodities.library/ClearCxObjError
NAME
ClearCxObjError -- clear the accumulated error value of a commodity
object. (V36)
SYNOPSIS
ClearCxObjError(co);
A0
VOID ClearCxObjError(CxObj *);
FUNCTION
This function clears the accumulated error value of commodity object
'co'.
It is unwise to do this to a filter if COERR_BADFILTER is set.
This will fool commodities into thinking the filter is OK. Set
another valid filter, or leave the error value alone.
INPUTS
co - the object to affect
SEE ALSO
CxObjError()
commodities.library/CreateCxObj commodities.library/CreateCxObj
NAME
CreateCxObj -- create a new commodity object. (V36)
SYNOPSIS
co = CreateCxObj(type,arg1,arg2);
D0 A0 A1
CxObj *CreateCxObj(ULONG,LONG,LONG);
FUNCTION
This function creates a commodity object of type 'type'. It is not
proper to call this function directly. Each object creation routine
except CxBroker() is defined as a macro in <libraries/commodities.h>
These are independently documented.
All functions which operate on a commodity object are made with
a reference to the thirty-two bit value returned by this function
(or by CxBroker()).
INPUTS
type - the type of object to create as defined in
<libraries/commodities.h>
arg1 - first argument, meaning depends on 'type'
arg2 - second argument, meaning depends on 'type'
RESULTS
co - a pointer to the new object or NULL if it could not be created.
A NULL return indicates typically a lack of system memory. Minor
problems in creating an object, such as providing a bad filter
description to cx_lib/CxFilter(), typically don't cause failure,
but are recorded in an internal error field in the new object
which can be accessed via CxObjError().
SEE ALSO
CxObjError(), cx_lib/CxFilter(), cx_lib/CxSender(),
cx_lib/CxSignal(), cx_lib/CxTranslate(), cx_lib/CxDebug(),
cx_lib/CxCustom(), CxBroker()
commodities.library/CxBroker commodities.library/CxBroker
NAME
CxBroker -- create a commodity broker. (V36)
SYNOPSIS
broker = CxBroker(nb,error);
A0 D0
CxObj *CxBroker(struct NewBroker *,LONG *);
FUNCTION
This function creates a broker from the specification found in the
NewBroker structure pointed to by 'nb'. The purpose and meaning of the
fields of the NewBroker structure are described below. Also see
<libraries/commodities.h> for more info.
struct NewBroker
{
BYTE nb_Version;
BYTE *nb_Name;
BYTE *nb_Title;
BYTE *nb_Descr;
SHORT nb_Unique;
BYTE nb_Pri;
struct MsgPort *nb_Port;
WORD nb_ReservedChannel;
};
nb_Version
This is the way that future versions of commodities.library
can identify which version of the NewBroker structure you are using.
This should be set to NB_VERSION, defined in <libraries/commodities.h>
nb_Name
This is the name of the broker. This name is used to find the broker
in the Commodities Object List and is the name shown in the list
gadget of the Exchange program. The name string is copied in the
broker object upon creation, so this string can be discarded right
after CxBroker() returns. The maximum length of the name string is
defined by a constant in <libraries/commodities.h>.
nb_Title, nb_Descr
These are two strings which appear to the user in the Exchange
program and describe the application the broker is representing.
Note that these strings are copied into the broker object.
The maximum length of these strings that will be recognized are
defined by constants in <libraries/commodities.h>.
nb_Unique
This field indicates what should happen if a broker of the same name
(nb_Name) already exists in the Commodities Object List. Constants
in <libraries/commodities.h> allow the caller to specify whether
another broker is to be created, and whether any existing broker of
the same name should be notified that an attempt at creating a
duplicate has been made.
nb_Pri
This specifies with what priority the new broker is to be inserted
within the Commodities Object List. Higher priority nodes appear
earlier in a list. See <libraries/commodities.h> for guidelines for
priorities of different types of applications. It is strongly
recommended that the ToolTypes environment of an application be used
to allow the end-user to set the priority of the broker.
INPUTS
nb - an initialized NewBroker structure
error - a pointer to a longword where to store a failure code, this
may be NULL
RESULTS
broker - a pointer to the broker object or NULL upon failure. If the
'error' is not NULL, a further diagnostic code is placed at
that address. Error codes are in <libraries/commodities.h> and
include:
CBERR_OK
No problems; broker created OK.
CBERR_SYSERR
System problems, not your fault. Sign of low memory or
big problems.
CBERR_DUP
The nb_Unique field specified that only one broker of
'nb_Name' should be allowed, and one already exists.
CBERR_VERSION
The version specified in 'nb_Version' is unknown to the
library.
SEE ALSO
SetCxObjPri(), <libraries/commodities.h>
commodities.library/CxMsgData commodities.library/CxMsgData
NAME
CxMsgData -- obtain a pointer to a commodity message's data area. (V36)
SYNOPSIS
data = CxMsgData(cxm);
A0
UBYTE *CxMsgData(struct CxMsg *);
FUNCTION
Most commodity messages contain meaningful data, such as an InputEvent
structure. This function returns a pointer to this data.
You may get a commodity message from a synchronous (custom object) or
asynchronous (sender object) source. In the second case, 'data' is
not valid after you have replied to the message.
INPUTS
cxm - the commodity message to get the data pointer from
RESULTS
data - a pointer to the message's data, or NULL if 'cxm' is NULL.
SEE ALSO
cx_lib/CxSender(), cx_lib/CxCustom()
commodities.library/CxMsgID commodities.library/CxMsgID
NAME
CxMsgID -- obtain the ID of a commodity message. (V36)
SYNOPSIS
id = CxMsgID(cxm);
A0
LONG CxMsgID(struct CxMsg *);
FUNCTION
This function returns the value associated with the cause or source
of the commodity message 'cxm'. Values are provided by the application
when a sender or custom object is created.
INPUTS
cxm - the commodity message to inquire about
RESULTS
id - if not specified by the application, the ID value of a
commodity message will be 0. It is suggested that using
non-zero values in your program as a rule may identify some
possible errors.
SEE ALSO
cx_lib/CxSender(), cx_lib/CxCustom()
commodities.library/CxMsgType commodities.library/CxMsgType
NAME
CxMsgType -- obtain the type of a commodity message. (V36)
SYNOPSIS
type = CxMsgType(cxm);
A0
ULONG CxMsgType(struct CxMsg *);
FUNCTION
This function returns the type of a commodity message. Possible values
of 'type' are defined in <libraries/commodities.h>. Most commodity
messages are of type CXM_IEVENT.
INPUTS
cxm - the commodity message to inquire about
RESULTS
type - the type of the commodity message, possible values are defined
in <libraries/commodities.h>
commodities.library/CxObjError commodities.library/CxObjError
NAME
CxObjError -- obtain a commodity object's accumulated error. (V36)
SYNOPSIS
error = CxObjError(co);
A0
LONG CxObjError(CxObj *);
FUNCTION
When a function acting on an object fails, it records the failure
in the object. This function returns the accumulated error value.
The values are represented by flag bits defined in
<libraries/commodities.h>. Several errors may be recorded by multiple
bits in 'error'.
The currently defined errors are:
COERR_ISNULL
The value of parameter 'co' was in fact NULL. This error
means "the problem with the object you inquire about is
that it failed to be created."
COERR_NULLATTACH
Using the commodities' list manipulation functions, an attempt was
made to add a NULL object to the list belonging to 'co'. This allows
a line of code as follows to exist in an error-tolerant program:
AttachCxObj(filter,CxSender(myport,MY_ID));
COERR_BADFILTER
The most recent filter specification for a filter object
was faulty. This happens if no sense can be made out of a
description string, or if an input expression (IX) has an
invalid format or version byte. When this bit is set in a
filter's error field, the filter will match nothing, but this
is not the proper way to "turn off" a filter, use ActivateCxObj().
COERR_BADTYPE
A type specific operation, such as SetFilterIX(), was called
for object 'co', but 'co' isn't of the proper type.
INPUTS
co - the commodity object to get the accumulated error from
RESULTS
error - the accumulated error
SEE ALSO
SetFilter(), SetFilterIX(), AttachCxObj(), ActivateCxObj(),
ClearCxObjError()
commodities.library/CxObjType commodities.library/CxObjType
NAME
CxObjType -- obtain the type of a commodity object. (V36)
SYNOPSIS
type = CxObjType(co);
A0
ULONG CxObjType(CxObj *);
FUNCTION
This function should not really be necessary. It returns
the type of a commodity object, which you should already
know, since you created it in the first place.
INPUTS
co - the commodity object to inquire about
RESULTS
type - the type of the commodity object, possible values are
defined in <libraries/commodities.h>
SEE ALSO
CreateCxObj()
commodities.library/DeleteCxObj commodities.library/DeleteCxObj
NAME
DeleteCxObj -- delete a commmodity object. (V36)
SYNOPSIS
DeleteCxObj(co);
A0
VOID DeleteCxObj(CxObj *);
FUNCTION
Deletes a commodity object of any type. If the object
is linked into a list, it is first removed. Note that
the handle 'co' is invalid after this function is called.
Also note that deleting an object which has other objects attached
to it may be undesirable. Use the function DeleteCxObjAll()
to delete an entire sub-tree of objects.
INPUTS
co - the commodity object to delete
SEE ALSO
DeleteCxObjAll()
commodities.library/DeleteCxObjAll commodities.library/DeleteCxObjAll
NAME
DeleteCxObjAll -- recursively delete a tree of commodity objects.
(V36)
SYNOPSIS
DeleteCxObjAll(co);
A0
VOID DeleteCxObjAll(CxObj *);
FUNCTION
This function deletes the commodity object 'co', and
recursively deletes all objects attached to it, and the
objects attached to them, etc.
If 'co' is linked into a list, it is first removed. Note
that the handle 'co' is invalid after this function is called.
This function is useful when an application exits: most
applications can clean up completely by deleting the
entire sub-tree of objects starting at their broker.
INPUTS
co - the first commodity object to delete
SEE ALSO
DeleteCxObj()
commodities.library/DisposeCxMsg commodities.library/DisposeCxMsg
NAME
DisposeCxMsg -- delete a commodity message. (V36)
SYNOPSIS
DisposeCxMsg(cxm);
A0
VOID DisposeCxMsg(struct CxMsg *);
FUNCTION
This function eliminates the commodity message pointed to by 'cxm'.
Can be used to 'swallow' InputEvents by disposing of every commodity
message of type CXM_IEVENT.
INPUTS
cxm - the commodity message to delete
commodities.library/DivertCxMsg commodities.library/DivertCxMsg
NAME
DivertCxMsg -- send a commodity message down an object list. (V36)
SYNOPSIS
DivertCxMsg(cxm,headObj,returnObj);
A0 A1 A2
VOID DivertCxMsg(struct CxMsg *,CxObj *,CxObj *);
FUNCTION
This function sends the commodity message 'cxm' down the list of
objects attached to 'headObj'. The pointer 'returnObj' is first
pushed onto the routing stack of 'cxm' so that when the end of the
list of 'headObj' is reached the SUCCESSOR of 'returnObj' is the
next destination.
For example, when a filter finds a match with a message, the
message is diverted down the filter's list like this:
DivertCxMsg(cxm,filter,filter);
INPUTS
cxm - the commodity message to divert
headObj - the list of objects to divert the message to
returnObj - the object to use as a place holder
SEE ALSO
RouteCxMsg()
commodities.library/EnqueueCxObj commodities.library/EnqueueCxObj
NAME
EnqueueCxObj -- insert a commodity object within a list of objects
based on object priority. (V36)
SYNOPSIS
EnqueueCxObj(headObj,co);
A0 A1
VOID EnqueueCxObj(CxObj *,CxObj *);
FUNCTION
This function puts object 'co' into the list of object 'headObj'.
The insertion point is determined by the object's priority. The
objects are kept in the list from the highest priority to the
lowest. New nodes are inserted in front of the first node with a
lower priority. Hence a FIFO queue for nodes of equal priority.
The priority of the commodity object can be set using SetCxObjPri().
INPUTS
headObj - pointer to a list of objects
co - the object to add to the list
RESULTS
If 'co' is NULL, this function will record that fact in the
internal accumulated error of 'headObj'. This error record
can be retrieved using CxObjError() and cleared using
ClearCxObjError().
SEE ALSO
SetCxObjPri(), CxObjError(), ClearCxObjError()
commodities.library/InsertCxObj commodities.library/InsertCxObj
NAME
InsertCxObj -- insert a commodity object in a list after a given
object. (V36)
SYNOPSIS
InsertCxObj(headObj,co,pred);
A0 A1 A2
VOID InsertCxObj(CxObj *,CxObj *,CxObj *);
FUNCTION
Adds 'co' to the list of objects pointed to by 'headObj' after
object 'pred'.
INPUTS
headObj - pointer to a list of objects
co - the object to insert in the list
pred - the object after which 'co' should be inserted. If this is NULL
then 'co' is added to the head of the list.
RESULTS
If 'co' is NULL, this function will record that fact in the
internal accumulated error of 'headObj'. This error record
can be retrieved using CxObjError() and cleared using
ClearCxObjError().
SEE ALSO
CxObjError(), ClearCxObjError()
commodities.library/InvertKeyMap commodities.library/InvertKeyMap
NAME
InvertKeyMap -- generate an input event from an ANSI code. (V36)
SYNOPSIS
success = InvertKeyMap(ansicode,event,km)
D0 A0 A1
BOOL InvertKeyMap(ULONG,struct InputEvent *,struct KeyMap *);
FUNCTION
This function uses the system call MapANSI() to figure out what
InputEvent translates to an ANSI character code 'ansicode'. The
InputEvent pointed to by 'event' is filled in with that information.
The KeyMap 'km' is used for the translation, unless it is NULL, in
which case the system default keymap (as defined when
commodities.library is initialized) is used.
INPUTS
ansicode - the ANSI code to convert to an input event
event - the InputEvent to fill-in
km - the keymap to use for the translation, or NULL to use the
system default keymap.
RESULTS
success - TRUE if the translation worked, FALSE otherwise.
BUGS
This function currently handles one-deep dead keys (such as
<alt f>o). It does not look up the high key map (keystrokes
with scan codes greater than 0x40), and misses system changes to
the default key map.
SEE ALSO
cx_lib/InvertString()
commodities.library/ParseIX commodities.library/ParseIX
NAME
ParseIX -- initialize an input expression given a description string.
(V36)
SYNOPSIS
failureCode = ParseIX(description,ix);
A0 A1
LONG ParseIX(STRPTR,IX *);
FUNCTION
Given an input description string and an allocated input
expression, sets the fields of the input expression to
correspond to the description string.
INPUTS
description - the string to parse
ix - the input expression to hold the result of the parse
RESULTS
failureCode - 0 if all went well,
-1 if tokens after end (code spec)
-2 if 'description' was NULL
commodities.library/RemoveCxObj commodities.library/RemoveCxObj
NAME
RemoveCxObj -- remove a commodity object from a list. (V36)
SYNOPSIS
RemoveCxObj(co);
A0
VOID RemoveCxObj(CxObj *);
FUNCTION
This function remove 'co' from any list it may be a part of.
Will not crash if 'co' is NULL, or if it has not been inserted
in a list (and is not corrupted).
It is not recommended to remove a broker from the master list.
INPUTS
co - the object to remove, may be NULL
SEE ALSO
AttachCxObj(), EnqueueCxObj(), InsertCxObj()
commodities.library/RouteCxMsg commodities.library/RouteCxMsg
NAME
RouteCxMsg -- set the next destination of a commodity message. (V36)
SYNOPSIS
RouteCxMsg(cxm,co);
A0 A1
VOID RouteCxMsg(struct CxMsg *,CxObj *);
FUNCTION
Establishes the next destination of a commodity message
to be 'co', which must be a valid commodity object, and
must be linked in ultimately to the Commodities Object List.
Routing of an object is analogous to a 'goto' in a program.
There is no effect on the message's routing stack.
INPUTS
cxm - the commodity message to route
co - the commodity object to route the message to
SEE ALSO
DivertCxMsg()
commodities.library/SetCxObjPri commodities.library/SetCxObjPri
NAME
SetCxObjPri -- set the priority of a commodity object. (V36)
SYNOPSIS
SetCxObjPri(co,pri)
A0 D0
VOID SetCxObjPri(CxObj *,LONG);
FUNCTION
This function sets the priority of a commodity object for the
purposes of EnqueueCxObj().
It is strongly recommended that the ToolTypes environment be
utilized to provide end-user control over the priority of
brokers, but application specific ordering of other objects
within their lists is not dictated.
INPUTS
co - the commodity object to affect
pri - the object's new priority in the range -128 to +127. A value
of 0 is normal.
SEE ALSO
EnqueueCxObj()
commodities.library/SetFilter commodities.library/SetFilter
NAME
SetFilter -- change the matching condition of a commodity filter.
(V36)
SYNOPSIS
SetFilter(filter,text);
A0 A1
VOID SetFilter(CxObj *,STRPTR);
FUNCTION
This function changes the matching condition of a commodity input
filter to that described by the input description string 'text'.
INPUTS
filter - the filter object to affect
text - the new matching conditions for the filter
RESULTS
The internal error of 'filter' will have the COERR_BADFILTER
bit set or cleared depending on the failure or success of this
function.
SEE ALSO
SetFilterIX(), CxObjError()
commodities.library/SetFilterIX commodities.library/SetFilterIX
NAME
SetFilterIX -- change the matching condition of a commodity filter.
(V36)
SYNOPSIS
SetFilterIX(filter,ix);
A0 A1
VOID SetFilterIX(CxObj *,IX *);
FUNCTION
This function changes the matching condition of a commodity input
filter to that described by the binary input expression pointed by
'ix'.
Input expressions are defined in <libraries/commodities.h>.
It is important to remember that the first field of the input
expression structure must indicate which version of the
input expression structure is being used.
INPUTS
filter - the filter object to affect
ix - the new matching conditions for the filter
RESULTS
The internal error of 'filter' will have the COERR_BADFILTER
bit set or cleared depending on the failure or success of this
function.
SEE ALSO
SetFilter(), CxObjError(), <libraries/commodities.h>
commodities.library/SetTranslate commodities.library/SetTranslate
NAME
SetTranslate -- replace a translator object's translation list. (V36)
SYNOPSIS
SetTranslate(translator,events);
A0 A1
VOID SetTranslate(CxObj *,struct InputEvent *);
FUNCTION
This function replaces the translation list of a commodity
translator object with the linked list starting at 'events'.
A NULL value for 'events' indicates that the object 'translator'
should swallow all commodity messages that are sent its way.
Note that the input events are not copied into commodities' private
memory, but the value of 'events' is used -- asynchronously to the
application program -- to find a chain of InputEvents in the
application's data space. At the time of translation, each input event
is copied into its own new commodity message.
The above means that no other commodities' user, nor
commodities.library itself will be modifying your list of InputEvents.
On the other hand, your program must not corrupt the input event
chain that has been presented to a translator.
INPUTS
translator - the translator object to affect
events - the new input event translation list
SEE ALSO
<devices/inputevent.h>, cx_lib/CxTranslate()
[Back to Amiga Developer Docs]