Mercurial > hg > xemacs-beta
view lwlib/lwlib-internal.h @ 4745:0c54de4c4b9d
Resolve the unregistered-CCL-programs-get-garbage-collected problem correctly
src/ChangeLog addition:
2009-11-15 Aidan Kehoe <kehoea@parhasard.net>
* mule-ccl.c (CCL_CALL_FOR_MAP_INSTRUCTION): Assert that we always
have a symbol in this macro.
(setup_ccl_program): Ensure we're not allocating unreachable
memory in this function; all symbols must have been resolved in a
given CCL program before this function is called.
(find_ccl_program): New function, return a CCL program with all
its symbols resolved if it is valid (possibly allocating memory),
Qnil otherwise.
(get_ccl_program): New function, exported to other files; call
find_ccl_program, and error if it gives nil.
(Fccl_program_p): Call find_ccl_program from this function instead
of implementing the bulk of it here.
(Fccl_execute): Call get_ccl_program instead of implementing the
bulk of it here.
(Fccl_execute_on_string): Ditto.
* mule-ccl.h (Vfont_ccl_encoder_alist): Remove this declaration,
it hasn't been used in years.
(get_ccl_program): Declare this function.
* mule-coding.c (ccl_putprop): Use get_ccl_program on any
specified encode or decode CCL program property.
(fixed_width_putprop): Ditto.
* mule-charset.c (Fmake_charset): Use get_ccl_program on any
specified ccl-program.
(Fset_charset_ccl_program): Ditto.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 15 Nov 2009 16:53:14 +0000 |
parents | facf3239ba30 |
children | 03ab78e48ef6 |
line wrap: on
line source
#ifndef INCLUDED_lwlib_internal_h_ #define INCLUDED_lwlib_internal_h_ #include "lwlib.h" #ifdef USE_ASSERTIONS /* Highly dubious kludge */ /* (thanks, Jamie, I feel better now -- ben) */ EXTERN_C void assert_failed (const char *, int, const char *); # define abort() (assert_failed (__FILE__, __LINE__, "abort()")) # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x)) #else # ifdef DEBUG_XEMACS # define assert(x) ((x) ? (void) 0 : (void) abort ()) # else # define assert(x) ((void) 0) # endif #endif /* This represents a single widget within a widget tree. All the widgets in a widget tree are chained through the `next' field. `info' is a back pointer to the widget tree. */ typedef struct _widget_instance { Widget widget; Widget parent; Boolean pop_up_p; struct _widget_info* info; struct _widget_instance* next; } widget_instance; /* This represents a single widget tree, such as a single menubar. The global variable `all_widget_info' lists all widget trees, chained through the `next' field of this structure. */ typedef struct _widget_info { char* type; char* name; LWLIB_ID id; widget_value* val; Boolean busy; lw_callback pre_activate_cb; lw_callback selection_cb; lw_callback post_activate_cb; struct _widget_instance* instances; struct _widget_info* next; } widget_info; typedef Widget (*widget_creation_function) (widget_instance* instance); typedef struct _widget_creation_entry { const char* type; widget_creation_function function; } widget_creation_entry; /* update all other instances of a widget. Can be used in a callback when a widget has been used by the user */ void lw_internal_update_other_instances (Widget widget, XtPointer closure, XtPointer call_data); /* get the widget_value for a widget in a given instance */ widget_value* lw_get_widget_value_for_widget (widget_instance* instance, Widget w); widget_info *lw_get_widget_info (LWLIB_ID id); #endif /* INCLUDED_lwlib_internal_h_ */