Mercurial > hg > xemacs-beta
view man/lispref/tooltalk.texi @ 4981:4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_lo_import):
* postgresql/postgresql.c (Fpq_lo_export):
* ldap/eldap.c (Fldap_open):
* ldap/eldap.c (Fldap_search_basic):
* ldap/eldap.c (Fldap_add):
* ldap/eldap.c (Fldap_modify):
* ldap/eldap.c (Fldap_delete):
* canna/canna_api.c (Fcanna_initialize):
* canna/canna_api.c (Fcanna_store_yomi):
* canna/canna_api.c (Fcanna_parse):
* canna/canna_api.c (Fcanna_henkan_begin):
EXTERNAL_TO_C_STRING returns its argument instead of storing it
in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar
things happen to related macros. See entry in src/ChangeLog.
More Mule-izing of postgresql.c. Extract out common code
between `pq-connectdb' and `pq-connect-start'. Fix places
that signal an error string using a formatted string to instead
follow the standard and have a fixed reason followed by the
particular error message stored as one of the frobs.
src/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* console-msw.c (write_string_to_mswindows_debugging_output):
* console-msw.c (Fmswindows_message_box):
* console-x.c (x_perhaps_init_unseen_key_defaults):
* console.c:
* database.c (dbm_get):
* database.c (dbm_put):
* database.c (dbm_remove):
* database.c (berkdb_get):
* database.c (berkdb_put):
* database.c (berkdb_remove):
* database.c (Fopen_database):
* device-gtk.c (gtk_init_device):
* device-msw.c (msprinter_init_device_internal):
* device-msw.c (msprinter_default_printer):
* device-msw.c (msprinter_init_device):
* device-msw.c (sync_printer_with_devmode):
* device-msw.c (Fmsprinter_select_settings):
* device-x.c (sanity_check_geometry_resource):
* device-x.c (Dynarr_add_validified_lisp_string):
* device-x.c (x_init_device):
* device-x.c (Fx_put_resource):
* device-x.c (Fx_valid_keysym_name_p):
* device-x.c (Fx_set_font_path):
* dialog-msw.c (push_lisp_string_as_unicode):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-x.c (dbox_descriptor_to_widget_value):
* editfns.c (Fformat_time_string):
* editfns.c (Fencode_time):
* editfns.c (Fset_time_zone_rule):
* emacs.c (make_argc_argv):
* emacs.c (Fdump_emacs):
* emodules.c (emodules_load):
* eval.c:
* eval.c (maybe_signal_error_1):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (mswindows_wnd_proc):
* fileio.c (report_error_with_errno):
* fileio.c (Fsysnetunam):
* fileio.c (Fdo_auto_save):
* font-mgr.c (extract_fcapi_string):
* font-mgr.c (Ffc_config_app_font_add_file):
* font-mgr.c (Ffc_config_app_font_add_dir):
* font-mgr.c (Ffc_config_filename):
* frame-gtk.c (gtk_set_frame_text_value):
* frame-gtk.c (gtk_create_widgets):
* frame-msw.c (mswindows_init_frame_1):
* frame-msw.c (mswindows_set_title_from_ibyte):
* frame-msw.c (msprinter_init_frame_3):
* frame-x.c (x_set_frame_text_value):
* frame-x.c (x_set_frame_properties):
* frame-x.c (start_drag_internal_1):
* frame-x.c (x_cde_transfer_callback):
* frame-x.c (x_create_widgets):
* glyphs-eimage.c (my_jpeg_output_message):
* glyphs-eimage.c (jpeg_instantiate):
* glyphs-eimage.c (gif_instantiate):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (xbm_instantiate_1):
* glyphs-gtk.c (gtk_xbm_instantiate):
* glyphs-gtk.c (gtk_xpm_instantiate):
* glyphs-gtk.c (gtk_xface_instantiate):
* glyphs-gtk.c (cursor_font_instantiate):
* glyphs-gtk.c (gtk_redisplay_widget):
* glyphs-gtk.c (gtk_widget_instantiate_1):
* glyphs-gtk.c (gtk_add_tab_item):
* glyphs-msw.c (mswindows_xpm_instantiate):
* glyphs-msw.c (bmp_instantiate):
* glyphs-msw.c (mswindows_resource_instantiate):
* glyphs-msw.c (xbm_instantiate_1):
* glyphs-msw.c (mswindows_xbm_instantiate):
* glyphs-msw.c (mswindows_xface_instantiate):
* glyphs-msw.c (mswindows_redisplay_widget):
* glyphs-msw.c (mswindows_widget_instantiate):
* glyphs-msw.c (add_tree_item):
* glyphs-msw.c (add_tab_item):
* glyphs-msw.c (mswindows_combo_box_instantiate):
* glyphs-msw.c (mswindows_widget_query_string_geometry):
* glyphs-x.c (x_locate_pixmap_file):
* glyphs-x.c (xbm_instantiate_1):
* glyphs-x.c (x_xbm_instantiate):
* glyphs-x.c (extract_xpm_color_names):
* glyphs-x.c (x_xpm_instantiate):
* glyphs-x.c (x_xface_instantiate):
* glyphs-x.c (autodetect_instantiate):
* glyphs-x.c (safe_XLoadFont):
* glyphs-x.c (cursor_font_instantiate):
* glyphs-x.c (x_redisplay_widget):
* glyphs-x.c (Fchange_subwindow_property):
* glyphs-x.c (x_widget_instantiate):
* glyphs-x.c (x_tab_control_redisplay):
* glyphs.c (pixmap_to_lisp_data):
* gui-x.c (menu_separator_style_and_to_external):
* gui-x.c (add_accel_and_to_external):
* gui-x.c (button_item_to_widget_value):
* hpplay.c (player_error_internal):
* hpplay.c (play_sound_file):
* hpplay.c (play_sound_data):
* intl.c (Fset_current_locale):
* lisp.h:
* menubar-gtk.c (gtk_xemacs_set_accel_keys):
* menubar-msw.c (populate_menu_add_item):
* menubar-msw.c (populate_or_checksum_helper):
* menubar-x.c (menu_item_descriptor_to_widget_value_1):
* nt.c (init_user_info):
* nt.c (get_long_basename):
* nt.c (nt_get_resource):
* nt.c (init_mswindows_environment):
* nt.c (get_cached_volume_information):
* nt.c (mswindows_readdir):
* nt.c (read_unc_volume):
* nt.c (mswindows_stat):
* nt.c (mswindows_getdcwd):
* nt.c (mswindows_executable_type):
* nt.c (Fmswindows_short_file_name):
* ntplay.c (nt_play_sound_file):
* objects-gtk.c:
* objects-gtk.c (gtk_valid_color_name_p):
* objects-gtk.c (gtk_initialize_font_instance):
* objects-gtk.c (gtk_font_list):
* objects-msw.c (font_enum_callback_2):
* objects-msw.c (parse_font_spec):
* objects-x.c (x_parse_nearest_color):
* objects-x.c (x_valid_color_name_p):
* objects-x.c (x_initialize_font_instance):
* objects-x.c (x_font_instance_truename):
* objects-x.c (x_font_list):
* objects-xlike-inc.c (XFUN):
* objects-xlike-inc.c (xft_find_charset_font):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_create_process):
* process-nt.c (get_internet_address):
* process-nt.c (nt_open_network_stream):
* process-unix.c:
* process-unix.c (allocate_pty):
* process-unix.c (get_internet_address):
* process-unix.c (unix_canonicalize_host_name):
* process-unix.c (unix_open_network_stream):
* realpath.c:
* select-common.h (lisp_data_to_selection_data):
* select-gtk.c (symbol_to_gtk_atom):
* select-gtk.c (atom_to_symbol):
* select-msw.c (symbol_to_ms_cf):
* select-msw.c (mswindows_register_selection_data_type):
* select-x.c (symbol_to_x_atom):
* select-x.c (x_atom_to_symbol):
* select-x.c (hack_motif_clipboard_selection):
* select-x.c (Fx_store_cutbuffer_internal):
* sound.c (Fplay_sound_file):
* sound.c (Fplay_sound):
* sound.h (sound_perror):
* sysdep.c:
* sysdep.c (qxe_allocating_getcwd):
* sysdep.c (qxe_execve):
* sysdep.c (copy_in_passwd):
* sysdep.c (qxe_getpwnam):
* sysdep.c (qxe_ctime):
* sysdll.c (dll_open):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (search_linked_libs):
* sysdll.c (dll_error):
* sysfile.h:
* sysfile.h (PATHNAME_CONVERT_OUT_TSTR):
* sysfile.h (PATHNAME_CONVERT_OUT_UTF_8):
* sysfile.h (PATHNAME_CONVERT_OUT):
* sysfile.h (LISP_PATHNAME_CONVERT_OUT):
* syswindows.h (ITEXT_TO_TSTR):
* syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR):
* syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT):
* syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN):
* syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR):
* text.h:
* text.h (eicpy_ext_len):
* text.h (enum new_dfc_src_type):
* text.h (EXTERNAL_TO_ITEXT):
* text.h (GET_STRERROR):
* tooltalk.c (check_status):
* tooltalk.c (Fadd_tooltalk_message_arg):
* tooltalk.c (Fadd_tooltalk_pattern_attribute):
* tooltalk.c (Fadd_tooltalk_pattern_arg):
* win32.c (tstr_to_local_file_format):
* win32.c (mswindows_lisp_error_1):
* win32.c (mswindows_report_process_error):
* win32.c (Fmswindows_shell_execute):
* win32.c (mswindows_read_link_1):
Changes involving external/internal format conversion,
mostly code cleanup and renaming.
1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL
that stored its result in a parameter. The new version of
LISP_STRING_TO_EXTERNAL returns its result through the
return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL.
Use the new-style macros throughout the code.
2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL,
in keeping with overall naming rationalization involving
Itext and related types.
Macros involved in previous two:
EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT
EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC
SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT
SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC
C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL
C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC
LISP_STRING_TO_EXTERNAL
LISP_STRING_TO_EXTERNAL_MALLOC
LISP_STRING_TO_TSTR
C_STRING_TO_TSTR -> ITEXT_TO_TSTR
TSTR_TO_C_STRING -> TSTR_TO_ITEXT
The following four still return their values through parameters,
since they have more than one value to return:
C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL
LISP_STRING_TO_SIZED_EXTERNAL
C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC
LISP_STRING_TO_SIZED_EXTERNAL_MALLOC
Sometimes additional casts had to be inserted, since the old
macros played strange games and completely defeated the type system
of the store params.
3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT
occurred with calls to one of the convenience macros listed above,
or to make_extstring().
4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway)
and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT.
4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something
like LISP_STRING_TO_EXTERNAL(..., Qfile_name).
5. Eliminate some temporary variables that are no longer necessary
now that we return a value rather than storing it into a variable.
6. Some Mule-izing in database.c.
7. Error functions:
-- A bit of code cleanup in maybe_signal_error_1.
-- Eliminate report_file_type_error; it's just an alias for
signal_error_2 with params in a different order.
-- Fix some places in the hostname-handling code that directly
inserted externally-retrieved error strings into the
supposed ASCII "reason" param instead of doing the right thing
and sticking text descriptive of what was going on in "reason"
and putting the external message in a frob.
8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one
or two other places.
9. Some code cleanup in copy_in_passwd() in sysdep.c.
10. Fix a real bug due to accidental variable shadowing in
tstr_to_local_file_format() in win32.c.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 05 Feb 2010 11:02:24 -0600 |
parents | 576fb035e263 |
children | 9fae6227ede5 |
line wrap: on
line source
@c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tooltalk.info @node ToolTalk Support, LDAP Support, X-Windows, top @chapter ToolTalk Support @cindex ToolTalk @menu * XEmacs ToolTalk API Summary:: * Sending Messages:: * Receiving Messages:: @end menu @node XEmacs ToolTalk API Summary @section XEmacs ToolTalk API Summary The XEmacs Lisp interface to ToolTalk is similar, at least in spirit, to the standard C ToolTalk API. Only the message and pattern parts of the API are supported at present; more of the API could be added if needed. The Lisp interface departs from the C API in a few ways: @itemize @bullet @item ToolTalk is initialized automatically at XEmacs startup-time. Messages can only be sent other ToolTalk applications connected to the same X11 server that XEmacs is running on. @item There are fewer entry points; polymorphic functions with keyword arguments are used instead. @item The callback interface is simpler and marginally less functional. A single callback may be associated with a message or a pattern; the callback is specified with a Lisp symbol (the symbol should have a function binding). @item The session attribute for messages and patterns is always initialized to the default session. @item Anywhere a ToolTalk enum constant, e.g. @samp{TT_SESSION}, is valid, one can substitute the corresponding symbol, e.g. @code{'TT_SESSION}. This simplifies building lists that represent messages and patterns. @end itemize @node Sending Messages @section Sending Messages @cindex sending ToolTalk messages @cindex ToolTalk message @menu * Example of Sending Messages:: * Elisp Interface for Sending Messages:: @end menu @node Example of Sending Messages @subsection Example of Sending Messages Here's a simple example that sends a query to another application and then displays its reply. Both the query and the reply are stored in the first argument of the message. @example (defun tooltalk-random-query-handler (msg) (let ((state (get-tooltalk-message-attribute msg 'state))) (cond ((eq state 'TT_HANDLED) (message (get-tooltalk-message-attribute msg arg_val 0))) ((memq state '(TT_FAILED TT_REJECTED)) (message "Random query turns up nothing"))))) (defvar random-query-message '( class TT_REQUEST scope TT_SESSION address TT_PROCEDURE op "random-query" args '((TT_INOUT "?" "string")) callback tooltalk-random-query-handler)) (let ((m (make-tooltalk-message random-query-message))) (send-tooltalk-message m)) @end example @node Elisp Interface for Sending Messages @subsection Elisp Interface for Sending Messages @defun make-tooltalk-message attributes Create a ToolTalk message and initialize its attributes. The value of @var{attributes} must be a list of alternating keyword/values, where keywords are symbols that name valid message attributes. For example: @example (make-tooltalk-message '(class TT_NOTICE scope TT_SESSION address TT_PROCEDURE op "do-something" args ("arg1" 12345 (TT_INOUT "arg3" "string")))) @end example Values must always be strings, integers, or symbols that represent ToolTalk constants. Attribute names are the same as those supported by @code{set-tooltalk-message-attribute}, plus @code{args}. The value of @code{args} should be a list of message arguments where each message argument has the following form: @quotation @samp{(mode [value [type]])} or just @samp{value} @end quotation Where @var{mode} is one of @code{TT_IN}, @code{TT_OUT}, or @code{TT_INOUT} and @var{type} is a string. If @var{type} isn't specified then @code{int} is used if @var{value} is a number; otherwise @code{string} is used. If @var{type} is @code{string} then @var{value} is converted to a string (if it isn't a string already) with @code{prin1-to-string}. If only a value is specified then @var{mode} defaults to @code{TT_IN}. If @var{mode} is @code{TT_OUT} then @var{value} and @var{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 @cite{ToolTalk Programmer's Guide}. @refill @end defun @defun send-tooltalk-message msg 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 @code{destroy-tooltalk-message}. @refill @end defun @defun return-tooltalk-message msg &optional mode Send a reply to this message. The second argument can be @code{reply}, @code{reject} or @code{fail}; the default is @code{reply}. Before sending a reply, all message arguments whose mode is @code{TT_INOUT} or @code{TT_OUT} should have been filled in---see @code{set-tooltalk-message-attribute}. @refill @end defun @defun get-tooltalk-message-attribute msg attribute &optional argn Returns the indicated ToolTalk message attribute. Attributes are identified by symbols with the same name (underscores and all) as the suffix of the ToolTalk @samp{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. @samp{TT_HANDLER} is @code{'TT_HANDLER}, @samp{uid} and @samp{gid} are represented by fixnums (small integers), @samp{opnum} is converted to a string, and @samp{disposition} is converted to a fixnum. We convert @samp{opnum} (a C int) to a string (e.g. @code{123} @result{} @code{"123"}) because there's no guarantee that opnums will fit within the range of XEmacs Lisp integers. @refill [TBD] Use the @code{plist} attribute instead of C API @code{user} attribute for user-defined message data. To retrieve the value of a message property, specify the indicator for @var{argn}. For example, to get the value of a property called @code{rflag}, use @example (get-tooltalk-message-attribute msg 'plist 'rflag) @end example To get the value of a message argument use one of the @code{arg_val} (strings), @code{arg_ival} (integers), or @code{arg_bval} (strings with embedded nulls), attributes. For example, to get the integer value of the third argument: @example (get-tooltalk-message-attribute msg 'arg_ival 2) @end example As you can see, argument numbers are zero-based. The type of each arguments can be retrieved with the @code{arg_type} attribute; however ToolTalk doesn't define any semantics for the string value of @code{arg_type}. Conventionally @code{string} is used for strings and @code{int} for 32 bit integers. Note that XEmacs Lisp stores the lengths of strings explicitly (unlike C) so treating the value returned by @code{arg_bval} like a string is fine. @refill @end defun @defun set-tooltalk-message-attribute value msg attribute &optional argn Initialize one ToolTalk message attribute. Attribute names and values are the same as for @code{get-tooltalk-message-attribute}. A property list is provided for user data (instead of the @code{user} message attribute); see @code{get-tooltalk-message-attribute}. @refill Callbacks are handled slightly differently than in the C ToolTalk API. The value of @var{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 @code{TT_HANDLED} (or @code{TT_FAILED}), so that reply argument values can be used. @refill If one of the argument attributes is specified as @code{arg_val}, @code{arg_ival}, or @code{arg_bval}, then @var{argn} must be the number of an already created argument. Arguments can be added to a message with @code{add-tooltalk-message-arg}. @refill @end defun @defun add-tooltalk-message-arg msg mode type &optional value Append one new argument to the message. @var{mode} must be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}, @var{type} must be a string, and @var{value} can be a string or an integer. ToolTalk doesn't define any semantics for @var{type}, so only the participants in the protocol you're using need to agree what types mean (if anything). Conventionally @code{string} is used for strings and @code{int} for 32 bit integers. Arguments can initialized by providing a value or with @code{set-tooltalk-message-attribute}; the latter is necessary if you want to initialize the argument with a string that can contain embedded nulls (use @code{arg_bval}). @refill @end defun @defun create-tooltalk-message &optional no-callback Create a new ToolTalk message. The message's session attribute is initialized to the default session. Other attributes can be initialized with @code{set-tooltalk-message-attribute}. @code{make-tooltalk-message} is the preferred way to create and initialize a message. Optional arg @var{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 @code{make-tooltalk-message}. @refill @end defun @defun destroy-tooltalk-message msg Apply @samp{tt_message_destroy} to the message. It's not necessary to destroy messages after they've been processed by a message or pattern callback, the Lisp/ToolTalk callback machinery does this for you. @end defun @node Receiving Messages @section Receiving Messages @cindex ToolTalk pattern @cindex receiving ToolTalk messages @menu * Example of Receiving Messages:: * Elisp Interface for Receiving Messages:: @end menu @node Example of Receiving Messages @subsection Example of Receiving Messages Here's a simple example of a handler for a message that tells XEmacs to display a string in the mini-buffer area. The message operation is called @samp{emacs-display-string}. Its first (0th) argument is the string to display. @example (defun tooltalk-display-string-handler (msg) (message (get-tooltalk-message-attribute msg 'arg_val 0))) (defvar display-string-pattern '(category TT_HANDLE scope TT_SESSION op "emacs-display-string" callback tooltalk-display-string-handler)) (let ((p (make-tooltalk-pattern display-string-pattern))) (register-tooltalk-pattern p)) @end example @node Elisp Interface for Receiving Messages @subsection Elisp Interface for Receiving Messages @defun make-tooltalk-pattern attributes Create a ToolTalk pattern and initialize its attributes. The value of attributes must be a list of alternating keyword/values, where keywords are symbols that name valid pattern attributes or lists of valid attributes. For example: @example (make-tooltalk-pattern '(category TT_OBSERVE scope TT_SESSION op ("operation1" "operation2") args ("arg1" 12345 (TT_INOUT "arg3" "string")))) @end example Attribute names are the same as those supported by @code{add-tooltalk-pattern-attribute}, plus @code{'args}. Values must always be strings, integers, or symbols that represent ToolTalk constants or lists of same. When a list of values is provided all of the list elements are added to the attribute. In the example above, messages whose @samp{op} attribute is @samp{"operation1"} or @samp{"operation2"} would match the pattern. The value of @var{args} should be a list of pattern arguments where each pattern argument has the following form: @quotation @samp{(mode [value [type]])} or just @samp{value} @end quotation Where @var{mode} is one of @code{TT_IN}, @code{TT_OUT}, or @code{TT_INOUT} and @var{type} is a string. If @var{type} isn't specified then @code{int} is used if @var{value} is a number; otherwise @code{string} is used. If @var{type} is @code{string} then @var{value} is converted to a string (if it isn't a string already) with @code{prin1-to-string}. If only a value is specified then @var{mode} defaults to @code{TT_IN}. If @var{mode} is @code{TT_OUT} then @var{value} and @var{type} don't need to be specified. You can find out more about the semantics and uses of ToolTalk pattern arguments in chapter 3 of the @cite{ToolTalk Programmer's Guide}. @refill @end defun @defun register-tooltalk-pattern pattern XEmacs will begin receiving messages that match this pattern. @end defun @defun unregister-tooltalk-pattern pattern XEmacs will stop receiving messages that match this pattern. @end defun @defun add-tooltalk-pattern-attribute value pattern indicator Add one value to the indicated pattern attribute. The names of attributes are the same as the ToolTalk accessors used to set them less the @samp{tooltalk_pattern_} prefix and the @samp{_add} suffix. For example, the name of the attribute for the @samp{tt_pattern_disposition_add} attribute is @code{disposition}. The @code{category} attribute is handled specially, since a pattern can only be a member of one category (@code{TT_OBSERVE} or @code{TT_HANDLE}). @refill Callbacks are handled slightly differently than in the C ToolTalk API. The value of @var{callback} should be the name of a function of one argument. It will be called each time the pattern matches an incoming message. @end defun @defun add-tooltalk-pattern-arg pattern mode vtype &optional value Add one fully-specified argument to a ToolTalk pattern. @var{mode} must be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}. @var{vtype} must be a string. @var{value} can be an integer, string or @code{nil}. If @var{value} is an integer then an integer argument (@samp{tt_pattern_iarg_add}) is added; otherwise a string argument is added. At present there's no way to add a binary data argument. @refill @end defun @defun create-tooltalk-pattern Create a new ToolTalk pattern and initialize its session attribute to be the default session. @end defun @defun destroy-tooltalk-pattern pattern Apply @samp{tt_pattern_destroy} to the pattern. This effectively unregisters the pattern. @end defun @defun describe-tooltalk-message msg &optional stream Print the message's attributes and arguments to @var{stream}. This is often useful for debugging. @end defun