home *** CD-ROM | disk | FTP | other *** search
- 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()
-
-