Create a ToolTalk message and initialize its attributes. The value of attributes must be a list of alternating keyword/values, where keywords are symbols that name valid message attributes. For example:
(make-tooltalk-message '(class TT_NOTICE scope TT_SESSION address TT_PROCEDURE op "do-something" args ("arg1" 12345 (TT_INOUT "arg3" "string"))))Values must always be strings, integers, or symbols that represent ToolTalk constants. Attribute names are the same as those supported by
set-tooltalk-message-attribute, plusargs.The value of
argsshould be a list of message arguments where each message argument has the following form:‘(mode [value [type]])’ or just ‘value’Where mode is one of
TT_IN,TT_OUT, orTT_INOUTand type is a string. If type isn't specified thenintis used if value is a number; otherwisestringis used. If type isstringthen value is converted to a string (if it isn't a string already) withprin1-to-string. If only a value is specified then mode defaults toTT_IN. If mode isTT_OUTthen value and type don't need to be specified. You can find out more about the semantics and uses of ToolTalk message arguments in chapter 4 of the ToolTalk Programmer's Guide.
Send the message on its way. Once the message has been sent it's almost always a good idea to get rid of it with
destroy-tooltalk-message.
Send a reply to this message. The second argument can be
reply,rejectorfail; the default isreply. Before sending a reply, all message arguments whose mode isTT_INOUTorTT_OUTshould have been filled in—seeset-tooltalk-message-attribute.
Returns the indicated ToolTalk message attribute. Attributes are identified by symbols with the same name (underscores and all) as the suffix of the ToolTalk ‘tt_message_<attribute>’ function that extracts the value. String attribute values are copied and enumerated type values (except disposition) are converted to symbols; e.g. ‘TT_HANDLER’ is
'TT_HANDLER, ‘uid’ and ‘gid’ are represented by fixnums (small integers), ‘opnum’ is converted to a string, and ‘disposition’ is converted to a fixnum. We convert ‘opnum’ (a C int) to a string (e.g.123⇒"123") because there's no guarantee that opnums will fit within the range of SXEmacs Lisp integers.[TBD] Use the
plistattribute instead of C APIuserattribute for user-defined message data. To retrieve the value of a message property, specify the indicator for argn. For example, to get the value of a property calledrflag, use(get-tooltalk-message-attribute msg 'plist 'rflag)To get the value of a message argument use one of the
arg_val(strings),arg_ival(integers), orarg_bval(strings with embedded nulls), attributes. For example, to get the integer value of the third argument:(get-tooltalk-message-attribute msg 'arg_ival 2)As you can see, argument numbers are zero-based. The type of each arguments can be retrieved with the
arg_typeattribute; however ToolTalk doesn't define any semantics for the string value ofarg_type. Conventionallystringis used for strings andintfor 32 bit integers.Note: SXEmacs Lisp stores the lengths of strings explicitly (unlike C) so treating the value returned by
arg_bvallike a string is fine.
Initialize one ToolTalk message attribute.
Attribute names and values are the same as for
get-tooltalk-message-attribute. A property list is provided for user data (instead of theusermessage attribute); seeget-tooltalk-message-attribute.Callbacks are handled slightly differently than in the C ToolTalk API. The value of callback should be the name of a function of one argument. It will be called each time the state of the message changes. This is usually used to notice when the message's state has changed to
TT_HANDLED(orTT_FAILED), so that reply argument values can be used.If one of the argument attributes is specified as
arg_val,arg_ival, orarg_bval, then argn must be the number of an already created argument. Arguments can be added to a message withadd-tooltalk-message-arg.
Append one new argument to the message. mode must be one of
TT_IN,TT_INOUT, orTT_OUT, type must be a string, and value can be a string or an integer. ToolTalk doesn't define any semantics for type, so only the participants in the protocol you're using need to agree what types mean (if anything). Conventionallystringis used for strings andintfor 32 bit integers.Arguments can initialized by providing a value or with
set-tooltalk-message-attribute; the latter is necessary if you want to initialize the argument with a string that can contain embedded nulls (usearg_bval).
Create a new ToolTalk message. The message's session attribute is initialized to the default session. Other attributes can be initialized with
set-tooltalk-message-attribute.make-tooltalk-messageis the preferred way to create and initialize a message.Optional arg no-callback says don't add a C-level callback at all. Normally don't do that; just don't specify the Lisp callback when calling
make-tooltalk-message.