Mercurial > hg > xemacs-beta
annotate src/console-msw.h @ 5169:6c6d78781d59
cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-24 Ben Wing <ben@xemacs.org>
* array.h:
* array.h (XD_LISP_DYNARR_DESC):
* dumper.c (pdump_register_sub):
* dumper.c (pdump_store_new_pointer_offsets):
* dumper.c (pdump_reloc_one_mc):
* elhash.c:
* gc.c (lispdesc_one_description_line_size):
* gc.c (kkcc_marking):
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* lrecord.h (enum memory_description_type):
* lrecord.h (enum data_description_entry_flags):
* lrecord.h (struct opaque_convert_functions):
Rename XD_LISP_OBJECT_BLOCK_PTR to XD_INLINE_LISP_OBJECT_BLOCK_PTR
and document it in lrecord.h.
* data.c:
* data.c (finish_marking_weak_lists):
* data.c (continue_marking_ephemerons):
* data.c (finish_marking_ephemerons):
* elhash.c (MARK_OBJ):
* gc.c:
* gc.c (lispdesc_indirect_count_1):
* gc.c (struct):
* gc.c (kkcc_bt_push):
* gc.c (kkcc_gc_stack_push):
* gc.c (kkcc_gc_stack_push_lisp_object):
* gc.c (kkcc_gc_stack_repush_dirty_object):
* gc.c (KKCC_DO_CHECK_FREE):
* gc.c (mark_object_maybe_checking_free):
* gc.c (mark_struct_contents):
* gc.c (mark_lisp_object_block_contents):
* gc.c (register_for_finalization):
* gc.c (mark_object):
* gc.h:
* lisp.h:
* profile.c:
* profile.c (mark_profiling_info_maphash):
Clean up KKCC code related to DEBUG_XEMACS. Rename
kkcc_backtrace() to kkcc_backtrace_1() and add two params: a
`size' arg to control how many stack elements to print and a
`detailed' arg to control whether Lisp objects are printed using
`debug_print()'. Create front-ends to kkcc_backtrace_1() --
kkcc_detailed_backtrace(), kkcc_short_backtrace(),
kkcc_detailed_backtrace_full(), kkcc_short_backtrace_full(), as
well as shortened versions kbt(), kbts(), kbtf(), kbtsf() -- to
call it with various parameter values. Add an `is_lisp' field to
the stack and backtrace structures and use it to keep track of
whether an object pushed onto the stack is a Lisp object or a
non-Lisp structure; in kkcc_backtrace_1(), don't try to print a
non-Lisp structure as a Lisp object.
* elhash.c:
* extents.c:
* file-coding.c:
* lrecord.h:
* lrecord.h (IF_NEW_GC):
* marker.c:
* marker.c (Fmarker_buffer):
* mule-coding.c:
* number.c:
* rangetab.c:
* specifier.c:
New macros IF_OLD_GC(), IF_NEW_GC() to simplify declaration of
Lisp objects when a finalizer may exist in one but not the other.
Use them appropriately.
* extents.c (finalize_extent_info):
Don't zero out data->soe and data->extents before trying to free,
else we get memory leaks.
* lrecord.h (enum lrecord_type):
Make the first lrecord type have value 1 not 0 so that 0 remains
without implementation and attempts to interpret zeroed memory
as a Lisp object will be more obvious.
* array.c (Dynarr_free):
* device-msw.c (msprinter_delete_device):
* device-tty.c (free_tty_device_struct):
* device-tty.c (tty_delete_device):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-x.c:
* emacs.c (free_argc_argv):
* emodules.c (attempt_module_delete):
* file-coding.c (chain_finalize_coding_stream_1):
* file-coding.c (chain_finalize_coding_stream):
* glyphs-eimage.c:
* glyphs-eimage.c (jpeg_instantiate_unwind):
* glyphs-eimage.c (gif_instantiate_unwind):
* glyphs-eimage.c (png_instantiate_unwind):
* glyphs-eimage.c (tiff_instantiate_unwind):
* imgproc.c:
* imgproc.c (build_EImage_quantable):
* insdel.c (uninit_buffer_text):
* mule-coding.c (iso2022_finalize_detection_state):
* objects-tty.c (tty_finalize_color_instance):
* objects-tty.c (tty_finalize_font_instance):
* objects-tty.c (tty_font_list):
* process.c:
* process.c (finalize_process):
* redisplay.c (add_propagation_runes):
* scrollbar-gtk.c:
* scrollbar-gtk.c (gtk_free_scrollbar_instance):
* scrollbar-gtk.c (gtk_release_scrollbar_instance):
* scrollbar-msw.c:
* scrollbar-msw.c (mswindows_free_scrollbar_instance):
* scrollbar-msw.c (unshow_that_mofo):
* scrollbar-x.c (x_free_scrollbar_instance):
* scrollbar-x.c (x_release_scrollbar_instance):
* select-x.c:
* select-x.c (x_handle_selection_request):
* syntax.c:
* syntax.c (uninit_buffer_syntax_cache):
* text.h (eifree):
If possible, whenever we call xfree() on a field in a structure,
set the field to 0 afterwards. A lot of code is written so that
it checks the value being freed to see if it is non-zero before
freeing it -- doing this and setting the value to 0 afterwards
ensures (a) we won't try to free twice if the cleanup code is
called twice; (b) if the object itself stays around, KKCC won't
crash when attempting to mark the freed field.
* rangetab.c:
Add a finalization method when not NEW_GC to avoid memory leaks.
(#### We still get memory leaks when NEW_GC; need to convert gap
array to Lisp object).
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 24 Mar 2010 01:22:51 -0500 |
parents | e0db3c197671 |
children | 308d34e9f07d |
rev | line source |
---|---|
428 | 1 /* Define mswindows-specific console, device, and frame object for XEmacs. |
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. | |
3 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
1318 | 4 Copyright (C) 2001, 2002, 2003 Ben Wing. |
428 | 5 |
6 This file is part of XEmacs. | |
7 | |
8 XEmacs is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
10 Free Software Foundation; either version 2, or (at your option) any | |
11 later version. | |
12 | |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with XEmacs; see the file COPYING. If not, write to | |
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
21 Boston, MA 02111-1307, USA. */ | |
22 | |
23 /* Synched up with: Not in FSF. */ | |
24 | |
771 | 25 /* This file essentially Mule-ized (except perhaps some Unicode splitting). |
26 5-2000. */ | |
428 | 27 |
28 /* Authorship: | |
29 | |
30 Ultimately based on FSF, then later on JWZ work for Lemacs. | |
31 Rewritten over time by Ben Wing and Chuck Thompson. | |
32 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0. | |
33 */ | |
34 | |
440 | 35 #ifndef INCLUDED_console_msw_h_ |
36 #define INCLUDED_console_msw_h_ | |
428 | 37 |
2367 | 38 /* See win32.c for info about the different Windows files in XEmacs. */ |
39 | |
428 | 40 #include "console.h" |
442 | 41 #include "syswindows.h" |
428 | 42 |
43 #ifdef HAVE_XPM | |
44 #include <X11/xpm.h> | |
45 #endif | |
46 | |
47 /* The name of the main window class */ | |
771 | 48 #define XEMACS_CLASS "XEmacs" /* WARNING: uses of this need XETEXT */ |
428 | 49 |
771 | 50 /* WARNING: uses of this need XETEXT */ |
428 | 51 #define XEMACS_CONTROL_CLASS "XEmacsControl" |
52 | |
53 /* | |
442 | 54 * Printer settings, aka devmode |
55 */ | |
56 | |
872 | 57 typedef struct Lisp_Devmode Lisp_Devmode; |
442 | 58 |
59 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
2367
diff
changeset
|
60 DECLARE_LISP_OBJECT (devmode, Lisp_Devmode); |
442 | 61 #define XDEVMODE(x) XRECORD (x, devmode, Lisp_Devmode) |
617 | 62 #define wrap_devmode(p) wrap_record (p, devmode) |
442 | 63 #define DEVMODEP(x) RECORDP (x, devmode) |
64 #define CHECK_DEVMODE(x) CHECK_RECORD (x, devmode) | |
65 #define CONCHECK_DEVMODE(x) CONCHECK_RECORD (x, devmode) | |
66 | |
67 /* | |
68 * Devices | |
428 | 69 */ |
70 | |
771 | 71 #define MSW_FONTSIZE (LF_FACESIZE * 4 + 12) |
428 | 72 |
442 | 73 /* Printer functions in frame-msw.c */ |
74 void msprinter_start_page (struct frame *f); | |
75 | |
428 | 76 /* |
442 | 77 * Frames |
428 | 78 */ |
79 typedef struct | |
80 { | |
81 int left; | |
82 int top; | |
83 int width; | |
84 int height; | |
85 } XEMACS_RECT_WH; | |
86 | |
2367 | 87 ANSI_ALIASING_TYPEDEF (POINTS, POINTS); |
88 #define XE_MAKEPOINTS(l) ANSI_ALIASING_CAST (POINTS, l) | |
89 | |
428 | 90 /* |
91 * Random globals | |
92 */ | |
93 | |
94 /* win32 "Windows" procedure */ | |
95 LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, | |
96 LPARAM lParam); | |
97 LRESULT WINAPI mswindows_control_wnd_proc (HWND hwnd, | |
98 UINT msg, WPARAM wParam, | |
99 LPARAM lParam); | |
100 | |
771 | 101 void mswindows_size_frame_internal (struct frame *f, XEMACS_RECT_WH *dest); |
442 | 102 HWND mswindows_get_selected_frame_hwnd (void); |
440 | 103 void mswindows_enqueue_magic_event (HWND hwnd, UINT msg); |
442 | 104 int mswindows_is_dialog_msg (MSG *msg); |
428 | 105 |
106 /* win32 DDE management library */ | |
903 | 107 |
108 /* WARNING: uses of these constants need XETEXT */ | |
109 #define MSWINDOWS_DDE_ITEM_OPEN "Open" | |
110 #define MSWINDOWS_DDE_TOPIC_EVAL "Eval" | |
111 #define MSWINDOWS_DDE_ITEM_RESULT "Result" | |
112 | |
428 | 113 extern DWORD mswindows_dde_mlid; |
114 extern HSZ mswindows_dde_service; | |
115 extern HSZ mswindows_dde_topic_system; | |
903 | 116 extern HSZ mswindows_dde_topic_eval; |
117 extern HSZ mswindows_dde_item_result; | |
428 | 118 extern HSZ mswindows_dde_item_open; |
119 HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv, | |
442 | 120 HSZ hszTopic, HSZ hszItem, |
121 HDDEDATA hdata, | |
428 | 122 DWORD dwData1, DWORD dwData2); |
123 | |
442 | 124 void mswindows_enqueue_dispatch_event (Lisp_Object event); |
428 | 125 void mswindows_enqueue_misc_user_event (Lisp_Object channel, |
126 Lisp_Object function, | |
127 Lisp_Object object); | |
771 | 128 Lisp_Object mswindows_cancel_dispatch_event (Lisp_Event *event); |
428 | 129 Lisp_Object mswindows_pump_outstanding_events (void); |
130 void mswindows_unmodalize_signal_maybe (void); | |
131 | |
867 | 132 COLORREF mswindows_string_to_color (const Ibyte *name); |
440 | 133 |
428 | 134 #ifdef HAVE_WIN32_PROCESSES |
853 | 135 HANDLE get_nt_process_handle_only_first_time (Lisp_Process *p); |
440 | 136 HANDLE get_nt_process_handle (Lisp_Process *p); |
428 | 137 #endif |
138 | |
791 | 139 void mswindows_unwait_process (Lisp_Process *p); |
140 | |
428 | 141 extern Lisp_Object Vmswindows_frame_being_created; |
142 extern Lisp_Object mswindows_frame_being_created; | |
143 | |
442 | 144 void mswindows_get_workspace_coords (RECT *rc); |
145 | |
440 | 146 Lisp_Object mswindows_enumerate_fonts (HDC hdc); |
428 | 147 |
827 | 148 #ifdef HAVE_MENUBARS |
867 | 149 int mswindows_char_is_accelerator (struct frame *f, Ichar ch); |
1346 | 150 |
151 /* Message handlers. Called from window procedure */ | |
152 Lisp_Object mswindows_handle_wm_initmenupopup (HMENU hmenu, struct frame *frm); | |
153 Lisp_Object mswindows_handle_wm_initmenu (HMENU hmenu, struct frame *f); | |
154 Lisp_Object mswindows_handle_wm_command (struct frame *f, WORD command); | |
827 | 155 #endif |
442 | 156 |
157 #ifdef HAVE_TOOLBARS | |
771 | 158 Lisp_Object mswindows_get_toolbar_button_text (struct frame *f, |
440 | 159 int command_id); |
771 | 160 Lisp_Object mswindows_handle_toolbar_wm_command (struct frame *f, |
440 | 161 HWND ctrl, WORD id); |
442 | 162 #endif |
771 | 163 Lisp_Object mswindows_handle_gui_wm_command (struct frame *f, |
442 | 164 HWND ctrl, LPARAM id); |
1204 | 165 Lisp_Object mswindows_translate_menu_or_dialog_item (Lisp_Object item, |
166 Ichar *accel); | |
771 | 167 void mswindows_handle_destroyclipboard (void); |
442 | 168 |
169 Lisp_Object mswindows_handle_print_dialog_box (struct frame *f, | |
170 Lisp_Object keys); | |
171 Lisp_Object mswindows_handle_page_setup_dialog_box (struct frame *f, | |
172 Lisp_Object keys); | |
506 | 173 int mswindows_get_default_margin (Lisp_Object prop); |
442 | 174 |
175 void mswindows_register_popup_frame (Lisp_Object frame); | |
176 void mswindows_unregister_popup_frame (Lisp_Object frame); | |
177 | |
178 void mswindows_destroy_selection (Lisp_Object selection); | |
179 | |
771 | 180 int mswindows_window_is_xemacs (HWND hwnd); |
181 | |
442 | 182 Lisp_Object msprinter_default_printer (void); |
183 | |
546 | 184 Lisp_Object mswindows_find_frame (HWND hwnd); |
185 | |
872 | 186 /* Defined in console-msw.c */ |
187 EXFUN (Fmswindows_message_box, 3); | |
188 extern int mswindows_message_outputted; | |
189 void mswindows_hide_console (void); | |
190 int mswindows_output_console_string (const Ibyte *ptr, Bytecount len); | |
1346 | 191 void write_string_to_mswindows_debugging_output (const Ibyte *str, |
192 Bytecount len); | |
872 | 193 |
194 | |
771 | 195 #ifdef MULE |
196 Lisp_Object mswindows_get_code_page_charset (int code_page); | |
197 void mswindows_start_ime_composition (struct frame *f); | |
198 #endif /* MULE */ | |
199 | |
872 | 200 /* Defined in intl-win32.c */ |
201 EXFUN (Fmswindows_set_current_locale, 1); | |
202 EXFUN (Fmswindows_current_locale, 0); | |
203 EXFUN (Fmswindows_user_default_locale, 0); | |
204 EXFUN (Fmswindows_system_default_locale, 0); | |
205 EXFUN (Fmswindows_locale_code_page, 1); | |
206 EXFUN (Fmswindows_supported_locales, 0); | |
207 EXFUN (Fmswindows_charset_code_page, 1); | |
208 EXFUN (Fmswindows_charset_registry, 1); | |
209 EXFUN (Fmswindows_set_charset_code_page, 2); | |
442 | 210 |
872 | 211 struct mswindows_dialog_id; |
442 | 212 |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
2367
diff
changeset
|
213 DECLARE_LISP_OBJECT (mswindows_dialog_id, struct mswindows_dialog_id); |
442 | 214 #define XMSWINDOWS_DIALOG_ID(x) XRECORD (x, mswindows_dialog_id, struct mswindows_dialog_id) |
617 | 215 #define wrap_mswindows_dialog_id(p) wrap_record (p, mswindows_dialog_id) |
442 | 216 #define MSWINDOWS_DIALOG_IDP(x) RECORDP (x, mswindows_dialog_id) |
217 #define CHECK_MSWINDOWS_DIALOG_ID(x) CHECK_RECORD (x, mswindows_dialog_id) | |
218 #define CONCHECK_MSWINDOWS_DIALOG_ID(x) CONCHECK_RECORD (x, mswindows_dialog_id) | |
440 | 219 |
220 #endif /* INCLUDED_console_msw_h_ */ |