Mercurial > hg > xemacs-beta
annotate src/console-tty-impl.h @ 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 | 5256fedd50e6 308d34e9f07d |
rev | line source |
---|---|
872 | 1 /* Define TTY specific console, device, and frame object for XEmacs. |
2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1996 Ben Wing. | |
4 | |
5 This file is part of XEmacs. | |
6 | |
7 XEmacs is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 2, or (at your option) any | |
10 later version. | |
11 | |
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with XEmacs; see the file COPYING. If not, write to | |
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 Boston, MA 02111-1307, USA. */ | |
21 | |
22 /* Synched up with: Not in FSF. */ | |
23 | |
24 /* Written by Chuck Thompson and Ben Wing. */ | |
25 | |
26 /* NOTE: Currently each TTY console can have only one device. | |
27 Therefore, all stuff for both input and output is lumped into | |
28 the console structure. If it ever becomes meaningful to | |
29 have more than one device on a TTY console, the output stuff | |
30 will have to get separated out. */ | |
31 | |
32 #ifndef INCLUDED_console_tty_impl_h_ | |
33 #define INCLUDED_console_tty_impl_h_ | |
34 | |
35 #include "console-impl.h" | |
36 #include "console-tty.h" | |
37 | |
38 DECLARE_CONSOLE_TYPE (tty); | |
39 | |
40 struct tty_console | |
41 { | |
3092 | 42 #ifdef NEW_GC |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5120
diff
changeset
|
43 NORMAL_LISP_OBJECT_HEADER header; |
3092 | 44 #endif /* NEW_GC */ |
872 | 45 int infd, outfd; |
46 Lisp_Object instream, outstream; | |
47 Lisp_Object terminal_type; | |
48 Lisp_Object controlling_process; | |
49 char *term_entry_buffer; | |
50 | |
51 /* Physical location of cursor on this console. */ | |
52 int cursor_x; | |
53 int cursor_y; | |
54 | |
55 /* The real location of the cursor. The above physical location may | |
56 be ahead of where we really are. */ | |
57 int real_cursor_x; | |
58 int real_cursor_y; | |
59 | |
60 int final_cursor_x; | |
61 int final_cursor_y; | |
62 | |
63 int height; | |
64 int width; | |
65 | |
66 /* The count of frame number. */ | |
67 int frame_count; | |
68 | |
69 /* flags indicating presence, absence or value of various features */ | |
70 struct | |
71 { | |
72 unsigned int must_write_spaces :1; /* terminal inserts nulls, not | |
73 spaces to fill whitespace on | |
74 screen */ | |
75 unsigned int insert_mode_motion :1; /* cursor movement commands | |
76 work while in insert mode */ | |
77 unsigned int standout_motion :1; /* cursor movement is graceful | |
78 in standout or underline mode */ | |
79 unsigned int memory_above_frame :1; /* display retained above screen */ | |
80 unsigned int memory_below_frame :1; /* display retained below screen */ | |
81 unsigned int meta_key :2; /* 0 == mask off top bit; | |
82 1 == top bit is meta; | |
83 2 == top bit is useful as | |
84 character info */ | |
85 unsigned int flow_control :1; /* Nonzero means use ^S/^Q as | |
86 cretinous flow control. */ | |
87 int standout_width; /* # of spaces printed when | |
88 change to standout mode */ | |
89 int underline_width; /* # of spaces printed when | |
90 change to underline mode */ | |
91 } flags; | |
92 | |
93 /* cursor motion entries - each entry is commented with the terminfo | |
94 and the termcap entry */ | |
95 struct | |
96 { | |
97 /* local cursor movement */ | |
98 const char *up; /* cuu1, up */ | |
99 const char *down; /* cud1, do */ | |
100 const char *left; /* cub1, le */ | |
101 const char *right; /* cuf1, nd */ | |
102 const char *home; /* home, ho */ | |
103 const char *low_left; /* ll, ll */ | |
104 const char *car_return; /* cr, cr */ | |
105 | |
106 /* parameterized local cursor movement */ | |
107 const char *multi_up; /* cuu, UP */ | |
108 const char *multi_down; /* cud, DO */ | |
109 const char *multi_left; /* cub, LE */ | |
110 const char *multi_right; /* cuf, RI */ | |
111 | |
112 /* absolute cursor motion */ | |
113 const char *abs; /* cup, cm */ | |
114 const char *hor_abs; /* hpa, ch */ | |
115 const char *ver_abs; /* vpa, cv */ | |
116 | |
117 /* scrolling */ | |
118 const char *scroll_forw; /* ind, sf */ | |
119 const char *scroll_back; /* ri, sr */ | |
120 const char *multi_scroll_forw; /* indn, SF */ | |
121 const char *multi_scroll_back; /* rin, SR */ | |
122 const char *set_scroll_region; /* csr, cs */ | |
123 } cm; | |
124 | |
125 /* screen editing entries - each entry is commented with the | |
126 terminfo and the termcap entry */ | |
127 struct | |
128 { | |
129 /* adding to the screen */ | |
130 const char *ins_line; /* il1, al */ | |
131 const char *multi_ins_line; /* il, AL */ | |
132 const char *repeat; /* rep, rp */ | |
133 const char *begin_ins_mode; /* smir, im */ | |
134 const char *end_ins_mode; /* rmir, ei */ | |
135 const char *ins_char; /* ich1, ic */ | |
136 const char *multi_ins_char; /* ich, IC */ | |
137 const char *insert_pad; /* ip, ip */ | |
138 | |
139 /* deleting from the screen */ | |
140 const char *clr_frame; /* clear, cl */ | |
141 const char *clr_from_cursor; /* ed, cd */ | |
142 const char *clr_to_eol; /* el, ce */ | |
143 const char *del_line; /* dl1, dl */ | |
144 const char *multi_del_line; /* dl, DL */ | |
145 const char *del_char; /* dch1, dc */ | |
146 const char *multi_del_char; /* dch, DC */ | |
147 const char *begin_del_mode; /* smdc, dm */ | |
148 const char *end_del_mode; /* rmdc, ed */ | |
149 const char *erase_at_cursor; /* ech, ec */ | |
150 } se; | |
151 | |
152 /* screen display entries - each entry is commented with the | |
153 terminfo and termcap entry */ | |
154 struct | |
155 { | |
156 const char *begin_standout; /* smso, so */ | |
157 const char *end_standout; /* rmso, se */ | |
158 const char *begin_underline; /* smul, us */ | |
159 const char *end_underline; /* rmul, ue */ | |
160 const char *begin_alternate; /* smacs, as */ | |
161 const char *end_alternate; /* rmacs, ae */ | |
162 | |
163 const char *turn_on_reverse; /* rev, mr */ | |
164 const char *turn_on_blinking; /* blink, mb */ | |
165 const char *turn_on_bold; /* bold, md */ | |
166 const char *turn_on_dim; /* dim, mh */ | |
167 const char *turn_off_attributes; /* sgr0, me */ | |
168 | |
169 const char *visual_bell; /* flash, vb */ | |
170 const char *audio_bell; /* bel, bl */ | |
171 | |
172 const char *cursor_visible; /* cvvis, vs */ | |
173 const char *cursor_normal; /* cnorm, ve */ | |
174 const char *init_motion; /* smcup, ti */ | |
175 const char *end_motion; /* rmcup, te */ | |
176 const char *keypad_on; /* smkx, ks */ | |
177 const char *keypad_off; /* rmkx, ke */ | |
178 | |
179 const char *orig_pair; /* op, op */ | |
180 } sd; | |
181 | |
182 /* costs of various operations */ | |
183 struct | |
184 { | |
185 int cm_up; | |
186 int cm_down; | |
187 int cm_left; | |
188 int cm_right; | |
189 int cm_home; | |
190 int cm_low_left; | |
191 int cm_car_return; | |
192 int cm_abs; | |
193 int cm_hor_abs; | |
194 int cm_ver_abs; | |
195 } cost; | |
196 | |
197 /* The initial tty mode bits */ | |
198 struct emacs_tty old_tty; | |
199 | |
200 /* Is this TTY our controlling terminal? */ | |
201 unsigned int controlling_terminal :1; | |
202 unsigned int is_stdio :1; | |
3571 | 203 /* Do East Asian chars take up two columns? */ |
204 unsigned int multiple_width :1; | |
872 | 205 }; |
206 | |
3092 | 207 #ifdef NEW_GC |
208 typedef struct tty_console Lisp_Tty_Console; | |
209 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3571
diff
changeset
|
210 DECLARE_LISP_OBJECT (tty_console, Lisp_Tty_Console); |
3092 | 211 |
212 #define XTTY_CONSOLE(x) \ | |
213 XRECORD (x, tty_console, Lisp_Tty_Console) | |
214 #define wrap_tty_console(p) wrap_record (p, tty_console) | |
215 #define TTY_CONSOLE_P(x) RECORDP (x, tty_console) | |
216 #endif /* NEW_GC */ | |
217 | |
872 | 218 #define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty) |
219 #define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x) | |
220 #define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y) | |
221 #define CONSOLE_TTY_REAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->real_cursor_x) | |
222 #define CONSOLE_TTY_REAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->real_cursor_y) | |
223 #define CONSOLE_TTY_FINAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->final_cursor_x) | |
224 #define CONSOLE_TTY_FINAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->final_cursor_y) | |
225 | |
3571 | 226 /* In a more ideal world where available terminfo files actually included |
227 information on whether a given TTY supports double-width characters or | |
228 not, oh, and where Mule was not conditional, SUPPORTS_MULTIPLE_WIDTH | |
229 would be as console-specific as its syntax implies. | |
230 | |
231 In this world, this is overengineering more than it is anything. */ | |
232 #define CONSOLE_TTY_SUPPORTS_MULTIPLE_WIDTH(c) (1 != MAX_ICHAR_LEN) | |
233 #define CONSOLE_TTY_MULTIPLE_WIDTH(c) \ | |
234 (CONSOLE_TTY_SUPPORTS_MULTIPLE_WIDTH(c) ? \ | |
235 CONSOLE_TTY_DATA (c)->multiple_width : (0)) | |
236 | |
872 | 237 #define TTY_CM(c) (CONSOLE_TTY_DATA (c)->cm) |
238 #define TTY_SE(c) (CONSOLE_TTY_DATA (c)->se) | |
239 #define TTY_SD(c) (CONSOLE_TTY_DATA (c)->sd) | |
240 #define TTY_FLAGS(c) (CONSOLE_TTY_DATA (c)->flags) | |
241 #define TTY_COST(c) (CONSOLE_TTY_DATA (c)->cost) | |
242 | |
243 #define TTY_INC_CURSOR_X(c, n) do { \ | |
244 int TICX_n = (n); \ | |
245 assert (CONSOLE_TTY_CURSOR_X (c) == CONSOLE_TTY_REAL_CURSOR_X (c)); \ | |
246 CONSOLE_TTY_CURSOR_X (c) += TICX_n; \ | |
247 CONSOLE_TTY_REAL_CURSOR_X (c) += TICX_n; \ | |
248 } while (0) | |
249 | |
250 #define TTY_INC_CURSOR_Y(c, n) do { \ | |
251 int TICY_n = (n); \ | |
252 CONSOLE_TTY_CURSOR_Y (c) += TICY_n; \ | |
253 CONSOLE_TTY_REAL_CURSOR_Y (c) += TICY_n; \ | |
254 } while (0) | |
255 | |
256 struct tty_device | |
257 { | |
3092 | 258 #ifdef NEW_GC |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5120
diff
changeset
|
259 NORMAL_LISP_OBJECT_HEADER header; |
3092 | 260 #endif /* NEW_GC */ |
872 | 261 #ifdef HAVE_TERMIOS |
262 speed_t ospeed; /* Output speed (from sg_ospeed) */ | |
263 #else | |
264 short ospeed; /* Output speed (from sg_ospeed) */ | |
265 #endif | |
266 }; | |
267 | |
3092 | 268 #ifdef NEW_GC |
269 typedef struct tty_device Lisp_Tty_Device; | |
270 | |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3571
diff
changeset
|
271 DECLARE_LISP_OBJECT (tty_device, Lisp_Tty_Device); |
3092 | 272 |
273 #define XTTY_DEVICE(x) \ | |
274 XRECORD (x, tty_device, Lisp_Tty_Device) | |
275 #define wrap_tty_device(p) wrap_record (p, tty_device) | |
276 #define TTY_DEVICE_P(x) RECORDP (x, tty_device) | |
277 #endif /* NEW_GC */ | |
278 | |
872 | 279 #define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty) |
280 | |
281 /* termcap requires this to be global */ | |
282 #ifndef HAVE_TERMIOS | |
283 extern short ospeed; /* Output speed (from sg_ospeed) */ | |
284 #endif | |
285 | |
286 #endif /* INCLUDED_console_tty_impl_h_ */ |