Mercurial > hg > xemacs-beta
annotate src/device-tty.c @ 5167:e374ea766cc1
clean up, rearrange allocation statistics code
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-21 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (assert_proper_sizing):
* alloc.c (c_readonly):
* alloc.c (malloced_storage_size):
* alloc.c (fixed_type_block_overhead):
* alloc.c (lisp_object_storage_size):
* alloc.c (inc_lrecord_stats):
* alloc.c (dec_lrecord_stats):
* alloc.c (pluralize_word):
* alloc.c (object_memory_usage_stats):
* alloc.c (Fobject_memory_usage):
* alloc.c (compute_memusage_stats_length):
* alloc.c (disksave_object_finalization_1):
* alloc.c (Fgarbage_collect):
* mc-alloc.c:
* mc-alloc.c (mc_alloced_storage_size):
* mc-alloc.h:
No functionality change here. Collect the allocations-statistics
code that was scattered throughout alloc.c into one place. Add
remaining section headings so that all sections have headings
clearly identifying the start of the section and its purpose.
Expose mc_alloced_storage_size() even when not MEMORY_USAGE_STATS;
this fixes build problems and is related to the export of
lisp_object_storage_size() and malloced_storage_size() when
non-MEMORY_USAGE_STATS in the previous change set.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sun, 21 Mar 2010 04:41:49 -0500 |
parents | a9c41067dd88 |
children | 6c6d78781d59 |
rev | line source |
---|---|
428 | 1 /* TTY device functions. |
2 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1994, 1995 Free Software Foundation, Inc. | |
5043 | 4 Copyright (C) 1996, 2010 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 | |
25 /* Authors: Ben Wing and Chuck Thompson. */ | |
26 | |
27 #include <config.h> | |
28 #include "lisp.h" | |
29 | |
872 | 30 #include "device-impl.h" |
428 | 31 #include "events.h" |
32 #include "faces.h" | |
33 #include "frame.h" | |
34 #include "lstream.h" | |
35 #include "redisplay.h" | |
36 #include "sysdep.h" | |
37 | |
872 | 38 #include "console-tty-impl.h" |
800 | 39 #include "console-stream.h" |
40 | |
558 | 41 #include "sysfile.h" |
428 | 42 #include "syssignal.h" /* for SIGWINCH */ |
43 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
44 Lisp_Object Qmake_device_early_tty_entry_point; |
428 | 45 |
46 | |
3092 | 47 #ifdef NEW_GC |
48 static const struct memory_description tty_device_data_description_1 [] = { | |
49 { XD_END } | |
50 }; | |
51 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4477
diff
changeset
|
52 DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT ("tty-device", tty_device, |
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4477
diff
changeset
|
53 0, tty_device_data_description_1, |
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4477
diff
changeset
|
54 Lisp_Tty_Device); |
3092 | 55 #endif /* NEW_GC */ |
56 | |
428 | 57 static void |
58 allocate_tty_device_struct (struct device *d) | |
59 { | |
3092 | 60 #ifdef NEW_GC |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
61 d->device_data = XTTY_DEVICE (ALLOC_NORMAL_LISP_OBJECT (tty_device)); |
3092 | 62 #else /* not NEW_GC */ |
428 | 63 d->device_data = xnew_and_zero (struct tty_device); |
3092 | 64 #endif /* not NEW_GC */ |
428 | 65 } |
66 | |
67 static void | |
2286 | 68 tty_init_device (struct device *d, Lisp_Object UNUSED (props)) |
428 | 69 { |
70 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
71 Lisp_Object terminal_type = CONSOLE_TTY_DATA (con)->terminal_type; | |
72 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
73 /* Run part of the elisp side of the TTY device initialization. |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
74 The post-init is run in the tty_finish_init_device() method. */ |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
75 call0 (Qmake_device_early_tty_entry_point); |
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
76 |
428 | 77 DEVICE_INFD (d) = CONSOLE_TTY_DATA (con)->infd; |
78 DEVICE_OUTFD (d) = CONSOLE_TTY_DATA (con)->outfd; | |
79 | |
80 allocate_tty_device_struct (d); | |
81 init_baud_rate (d); | |
82 | |
83 switch (init_tty_for_redisplay (d, (char *) XSTRING_DATA (terminal_type))) | |
84 { | |
85 #if 0 | |
86 case TTY_UNABLE_OPEN_DATABASE: | |
87 suppress_early_error_handler_backtrace = 1; | |
563 | 88 signal_error (Qio_error, "Can't access terminal information database", Qunbound); |
428 | 89 break; |
90 #endif | |
91 case TTY_TYPE_UNDEFINED: | |
92 suppress_early_error_handler_backtrace = 1; | |
563 | 93 signal_error (Qio_error, "Terminal type undefined (or can't access database?)", |
94 terminal_type); | |
428 | 95 break; |
96 case TTY_TYPE_INSUFFICIENT: | |
97 suppress_early_error_handler_backtrace = 1; | |
563 | 98 signal_error (Qio_error, "Terminal type not powerful enough to run Emacs", |
99 terminal_type); | |
428 | 100 break; |
101 case TTY_SIZE_UNSPECIFIED: | |
102 suppress_early_error_handler_backtrace = 1; | |
563 | 103 signal_error (Qio_error, "Can't determine window size of terminal", Qunbound); |
428 | 104 break; |
105 case TTY_INIT_SUCCESS: | |
106 break; | |
107 default: | |
2500 | 108 ABORT (); |
428 | 109 } |
110 | |
111 init_one_device (d); | |
112 } | |
113 | |
3092 | 114 #ifndef NEW_GC |
428 | 115 static void |
116 free_tty_device_struct (struct device *d) | |
117 { | |
1726 | 118 if (d->device_data) |
4976
16112448d484
Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents:
4477
diff
changeset
|
119 xfree (d->device_data); |
428 | 120 } |
121 | |
122 static void | |
123 tty_delete_device (struct device *d) | |
124 { | |
125 free_tty_device_struct (d); | |
126 } | |
3092 | 127 #endif /* not NEW_GC */ |
428 | 128 |
129 #ifdef SIGWINCH | |
130 | |
131 static SIGTYPE | |
2286 | 132 tty_device_size_change_signal (int UNUSED (signo)) |
428 | 133 { |
134 int old_errno = errno; | |
135 asynch_device_change_pending++; | |
136 #ifdef HAVE_UNIXOID_EVENT_LOOP | |
137 signal_fake_event (); | |
138 #endif | |
139 EMACS_REESTABLISH_SIGNAL (SIGWINCH, tty_device_size_change_signal); | |
140 errno = old_errno; | |
141 SIGRETURN; | |
142 } | |
143 | |
144 /* frame_change_signal does nothing but set a flag that it was called. | |
145 When redisplay is called, it will notice that the flag is set and | |
146 call handle_pending_device_size_change to do the actual work. */ | |
147 static void | |
148 tty_asynch_device_change (void) | |
149 { | |
150 Lisp_Object devcons, concons; | |
151 | |
152 DEVICE_LOOP_NO_BREAK (devcons, concons) | |
153 { | |
154 int width, height; | |
155 Lisp_Object tail; | |
156 struct device *d = XDEVICE (XCAR (devcons)); | |
157 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
158 | |
159 if (!DEVICE_TTY_P (d)) | |
160 continue; | |
161 | |
162 get_tty_device_size (d, &width, &height); | |
163 if (width > 0 && height > 0 | |
164 && (CONSOLE_TTY_DATA (con)->width != width | |
165 || CONSOLE_TTY_DATA (con)->height != height)) | |
166 { | |
167 CONSOLE_TTY_DATA (con)->width = width; | |
168 CONSOLE_TTY_DATA (con)->height = height; | |
169 | |
170 for (tail = DEVICE_FRAME_LIST (d); | |
171 !NILP (tail); | |
172 tail = XCDR (tail)) | |
173 { | |
174 struct frame *f = XFRAME (XCAR (tail)); | |
175 | |
176 /* We know the frame is tty because we made sure that the | |
177 device is tty. */ | |
5043 | 178 change_frame_size (f, width, height, 1); |
428 | 179 } |
180 } | |
181 } | |
182 } | |
183 | |
184 #endif /* SIGWINCH */ | |
185 | |
186 static Lisp_Object | |
187 tty_device_system_metrics (struct device *d, | |
188 enum device_metrics m) | |
189 { | |
190 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
191 switch (m) | |
192 { | |
193 case DM_size_device: | |
194 return Fcons (make_int (CONSOLE_TTY_DATA (con)->width), | |
195 make_int (CONSOLE_TTY_DATA (con)->height)); | |
196 default: /* No such device metric property for TTY devices */ | |
197 return Qunbound; | |
198 } | |
199 } | |
200 | |
201 /************************************************************************/ | |
202 /* initialization */ | |
203 /************************************************************************/ | |
204 | |
205 void | |
206 syms_of_device_tty (void) | |
207 { | |
3092 | 208 #ifdef NEW_GC |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
4477
diff
changeset
|
209 INIT_LISP_OBJECT (tty_device); |
3092 | 210 #endif /* NEW_GC */ |
211 | |
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3092
diff
changeset
|
212 DEFSYMBOL (Qmake_device_early_tty_entry_point); |
428 | 213 } |
214 | |
215 void | |
216 console_type_create_device_tty (void) | |
217 { | |
218 /* device methods */ | |
219 CONSOLE_HAS_METHOD (tty, init_device); | |
3092 | 220 #ifndef NEW_GC |
428 | 221 CONSOLE_HAS_METHOD (tty, delete_device); |
3092 | 222 #endif /* not NEW_GC */ |
428 | 223 #ifdef SIGWINCH |
224 CONSOLE_HAS_METHOD (tty, asynch_device_change); | |
225 #endif /* SIGWINCH */ | |
226 CONSOLE_HAS_METHOD (tty, device_system_metrics); | |
227 } | |
228 | |
229 void | |
230 init_device_tty (void) | |
231 { | |
232 #ifdef SIGWINCH | |
233 if (initialized && !noninteractive) | |
613 | 234 EMACS_SIGNAL (SIGWINCH, tty_device_size_change_signal); |
428 | 235 #endif /* SIGWINCH */ |
236 } |