Commit | Line | Data |
---|---|---|
ab422c4d | 1 | # Copyright (C) 1992-1998, 2000-2013 Free Software Foundation, Inc. |
e3efab9c GM |
2 | # |
3 | # This file is part of GNU Emacs. | |
4 | # | |
5 | # GNU Emacs is free software; you can redistribute it and/or modify | |
6 | # it under the terms of the GNU General Public License as published by | |
684d6f5b | 7 | # the Free Software Foundation; either version 3, or (at your option) |
e3efab9c GM |
8 | # any later version. |
9 | # | |
10 | # GNU Emacs is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | # GNU General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU General Public License | |
fee0bd5f | 16 | # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
e3efab9c | 17 | |
1781b9e9 | 18 | # Force loading of symbols, enough to give us VALBITS etc. |
0a05a035 | 19 | set $dummy = main + 8 |
2d4018aa | 20 | # With some compilers, we need this to give us struct Lisp_Symbol etc.: |
0a05a035 | 21 | set $dummy = Fmake_symbol + 8 |
7faa0236 | 22 | |
39d10e52 RS |
23 | # Find lwlib source files too. |
24 | dir ../lwlib | |
892d8fcd | 25 | #dir /gd/gnu/lesstif-0.89.9/lib/Xm |
39d10e52 | 26 | |
056515d8 KH |
27 | # Don't enter GDB when user types C-g to quit. |
28 | # This has one unfortunate effect: you can't type C-c | |
29 | # at the GDB to stop Emacs, when using X. | |
30 | # However, C-z works just as well in that case. | |
31 | handle 2 noprint pass | |
32 | ||
19b9d1de NR |
33 | # Make it work like SIGINT normally does. |
34 | handle SIGTSTP nopass | |
35 | ||
6a7d16fe KS |
36 | # Pass on user signals |
37 | handle SIGUSR1 noprint pass | |
38 | handle SIGUSR2 noprint pass | |
39 | ||
3266f62b GM |
40 | # Don't pass SIGALRM to Emacs. This makes problems when |
41 | # debugging. | |
42 | handle SIGALRM ignore | |
43 | ||
0e73312b RS |
44 | # Use $bugfix so that the value isn't a constant. |
45 | # Using a constant runs into GDB bugs sometimes. | |
6b61353c | 46 | define xgetptr |
4706125e PE |
47 | if (CHECK_LISP_OBJECT_TYPE) |
48 | set $bugfix = $arg0.i | |
49 | else | |
50 | set $bugfix = $arg0 | |
51 | end | |
1781b9e9 | 52 | set $ptr = ($bugfix & VALMASK) | DATA_SEG_BITS |
6b61353c KH |
53 | end |
54 | ||
55 | define xgetint | |
4706125e PE |
56 | if (CHECK_LISP_OBJECT_TYPE) |
57 | set $bugfix = $arg0.i | |
58 | else | |
59 | set $bugfix = $arg0 | |
60 | end | |
61 | set $int = $bugfix << (USE_LSB_TAG ? 0 : INTTYPEBITS) >> INTTYPEBITS | |
6b61353c KH |
62 | end |
63 | ||
64 | define xgettype | |
4706125e PE |
65 | if (CHECK_LISP_OBJECT_TYPE) |
66 | set $bugfix = $arg0.i | |
67 | else | |
68 | set $bugfix = $arg0 | |
69 | end | |
1781b9e9 | 70 | set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : $bugfix >> VALBITS) |
6b61353c | 71 | end |
b74f15c6 | 72 | |
a6ffc6a2 | 73 | # Set up something to print out s-expressions. |
4fccedb5 EZ |
74 | # We save and restore print_output_debug_flag to prevent the w32 port |
75 | # from calling OutputDebugString, which causes GDB to display each | |
76 | # character twice (yuk!). | |
a6ffc6a2 | 77 | define pr |
3723ec07 | 78 | pp $ |
a6ffc6a2 | 79 | end |
a6ffc6a2 JB |
80 | document pr |
81 | Print the emacs s-expression which is $. | |
82 | Works only when an inferior emacs is executing. | |
83 | end | |
84 | ||
6c5d0c52 KS |
85 | # Print out s-expressions |
86 | define pp | |
87 | set $tmp = $arg0 | |
4fccedb5 EZ |
88 | set $output_debug = print_output_debug_flag |
89 | set print_output_debug_flag = 0 | |
6b1319ce | 90 | call safe_debug_print ($tmp) |
4fccedb5 | 91 | set print_output_debug_flag = $output_debug |
6c5d0c52 KS |
92 | end |
93 | document pp | |
94 | Print the argument as an emacs s-expression | |
95 | Works only when an inferior emacs is executing. | |
96 | end | |
97 | ||
1609a963 KS |
98 | # Print value of lisp variable |
99 | define pv | |
1609a963 | 100 | set $tmp = "$arg0" |
4fccedb5 EZ |
101 | set $output_debug = print_output_debug_flag |
102 | set print_output_debug_flag = 0 | |
6b1319ce | 103 | call safe_debug_print (find_symbol_value (intern ($tmp))) |
4fccedb5 | 104 | set print_output_debug_flag = $output_debug |
1609a963 | 105 | end |
3723ec07 | 106 | document pv |
1609a963 KS |
107 | Print the value of the lisp variable given as argument. |
108 | Works only when an inferior emacs is executing. | |
1609a963 KS |
109 | end |
110 | ||
decf4020 KS |
111 | # Print out current buffer point and boundaries |
112 | define ppt | |
113 | set $b = current_buffer | |
114 | set $t = $b->text | |
115 | printf "BUF PT: %d", $b->pt | |
116 | if ($b->pt != $b->pt_byte) | |
117 | printf "[%d]", $b->pt_byte | |
118 | end | |
119 | printf " of 1..%d", $t->z | |
120 | if ($t->z != $t->z_byte) | |
121 | printf "[%d]", $t->z_byte | |
122 | end | |
123 | if ($b->begv != 1 || $b->zv != $t->z) | |
124 | printf " NARROW=%d..%d", $b->begv, $b->zv | |
125 | if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte) | |
126 | printf " [%d..%d]", $b->begv_byte, $b->zv_byte | |
127 | end | |
128 | end | |
129 | printf " GAP: %d", $t->gpt | |
130 | if ($t->gpt != $t->gpt_byte) | |
131 | printf "[%d]", $t->gpt_byte | |
132 | end | |
133 | printf " SZ=%d\n", $t->gap_size | |
134 | end | |
135 | document ppt | |
2d5ed88d EZ |
136 | Print current buffer's point and boundaries. |
137 | Prints values of point, beg, end, narrow, and gap for current buffer. | |
decf4020 KS |
138 | end |
139 | ||
be996d82 EZ |
140 | define pitmethod |
141 | set $itmethod = $arg0 | |
142 | # output $itmethod | |
143 | if ($itmethod == 0) | |
144 | printf "GET_FROM_BUFFER" | |
145 | end | |
146 | if ($itmethod == 1) | |
147 | printf "GET_FROM_DISPLAY_VECTOR" | |
148 | end | |
149 | if ($itmethod == 2) | |
150 | printf "GET_FROM_STRING" | |
151 | end | |
152 | if ($itmethod == 3) | |
153 | printf "GET_FROM_C_STRING" | |
154 | end | |
155 | if ($itmethod == 4) | |
156 | printf "GET_FROM_IMAGE" | |
157 | end | |
158 | if ($itmethod == 5) | |
159 | printf "GET_FROM_STRETCH" | |
160 | end | |
161 | if ($itmethod < 0 || $itmethod > 5) | |
162 | output $itmethod | |
163 | end | |
164 | end | |
165 | document pitmethod | |
166 | Pretty print it->method given as first arg | |
167 | end | |
168 | ||
afca296c KS |
169 | # Print out iterator given as first arg |
170 | define pitx | |
171 | set $it = $arg0 | |
172 | printf "cur=%d", $it->current.pos.charpos | |
173 | if ($it->current.pos.charpos != $it->current.pos.bytepos) | |
174 | printf "[%d]", $it->current.pos.bytepos | |
175 | end | |
82d59cb0 KS |
176 | printf " pos=%d", $it->position.charpos |
177 | if ($it->position.charpos != $it->position.bytepos) | |
178 | printf "[%d]", $it->position.bytepos | |
179 | end | |
afca296c KS |
180 | printf " start=%d", $it->start.pos.charpos |
181 | if ($it->start.pos.charpos != $it->start.pos.bytepos) | |
182 | printf "[%d]", $it->start.pos.bytepos | |
183 | end | |
2fde1500 KS |
184 | printf " end=%d", $it->end_charpos |
185 | printf " stop=%d", $it->stop_charpos | |
186 | printf " face=%d", $it->face_id | |
187 | if ($it->multibyte_p) | |
188 | printf " MB" | |
189 | end | |
190 | if ($it->header_line_p) | |
191 | printf " HL" | |
192 | end | |
193 | if ($it->n_overlay_strings > 0) | |
338fa84a | 194 | printf " nov=%d", $it->n_overlay_strings |
2fde1500 KS |
195 | end |
196 | if ($it->sp != 0) | |
197 | printf " sp=%d", $it->sp | |
198 | end | |
2d20eee3 EZ |
199 | # IT_CHARACTER |
200 | if ($it->what == 0) | |
afca296c | 201 | if ($it->len == 1 && $it->c >= ' ' && it->c < 255) |
501b66fa | 202 | printf " ch='%c'", $it->c |
afca296c | 203 | else |
501b66fa | 204 | printf " ch=[%d,%d]", $it->c, $it->len |
2fde1500 KS |
205 | end |
206 | else | |
1e99743b | 207 | printf " " |
be996d82 EZ |
208 | # output $it->what |
209 | if ($it->what == 0) | |
210 | printf "IT_CHARACTER" | |
211 | end | |
212 | if ($it->what == 1) | |
213 | printf "IT_COMPOSITION" | |
214 | end | |
215 | if ($it->what == 2) | |
216 | printf "IT_IMAGE" | |
217 | end | |
218 | if ($it->what == 3) | |
219 | printf "IT_STRETCH" | |
220 | end | |
221 | if ($it->what == 4) | |
222 | printf "IT_EOB" | |
223 | end | |
224 | if ($it->what == 5) | |
225 | printf "IT_TRUNCATION" | |
226 | end | |
227 | if ($it->what == 6) | |
228 | printf "IT_CONTINUATION" | |
229 | end | |
230 | if ($it->what < 0 || $it->what > 6) | |
231 | output $it->what | |
232 | end | |
afca296c | 233 | end |
2d20eee3 EZ |
234 | if ($it->method != 0) |
235 | # !GET_FROM_BUFFER | |
2fde1500 | 236 | printf " next=" |
be996d82 | 237 | pitmethod $it->method |
2d20eee3 EZ |
238 | if ($it->method == 2) |
239 | # GET_FROM_STRING | |
501b66fa KS |
240 | printf "[%d]", $it->current.string_pos.charpos |
241 | end | |
2d20eee3 EZ |
242 | if ($it->method == 4) |
243 | # GET_FROM_IMAGE | |
1e99743b KS |
244 | printf "[%d]", $it->image_id |
245 | end | |
2fde1500 | 246 | end |
afca296c | 247 | printf "\n" |
241ab1c1 EZ |
248 | if ($it->bidi_p) |
249 | printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level | |
250 | end | |
2fde1500 KS |
251 | if ($it->region_beg_charpos >= 0) |
252 | printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos | |
253 | end | |
afca296c KS |
254 | printf "vpos=%d hpos=%d", $it->vpos, $it->hpos, |
255 | printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y | |
2fde1500 | 256 | printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x |
28c1e1ca | 257 | printf " w=%d", $it->pixel_width |
afca296c KS |
258 | printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent |
259 | printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent | |
260 | printf "\n" | |
0058964e | 261 | set $i = 0 |
82d59cb0 | 262 | while ($i < $it->sp && $i < 4) |
0058964e KS |
263 | set $e = $it->stack[$i] |
264 | printf "stack[%d]: ", $i | |
3eb49e71 EZ |
265 | pitmethod $e.method |
266 | printf "[%d]", $e.position.charpos | |
0058964e KS |
267 | printf "\n" |
268 | set $i = $i + 1 | |
269 | end | |
afca296c KS |
270 | end |
271 | document pitx | |
272 | Pretty print a display iterator. | |
273 | Take one arg, an iterator object or pointer. | |
274 | end | |
275 | ||
276 | define pit | |
277 | pitx it | |
278 | end | |
279 | document pit | |
280 | Pretty print the display iterator it. | |
281 | end | |
282 | ||
283 | define prowx | |
284 | set $row = $arg0 | |
285 | printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width | |
286 | printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height | |
287 | printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height | |
b12cd789 EZ |
288 | printf " vis=%d\n", $row->visible_height |
289 | printf "used=(LMargin=%d,Text=%d,RMargin=%d) Hash=%d\n", $row->used[0], $row->used[1], $row->used[2], $row->hash | |
afca296c KS |
290 | printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos |
291 | if ($row->enabled_p) | |
292 | printf " ENA" | |
293 | end | |
294 | if ($row->displays_text_p) | |
295 | printf " DISP" | |
296 | end | |
297 | if ($row->mode_line_p) | |
298 | printf " MODEL" | |
299 | end | |
300 | if ($row->continued_p) | |
301 | printf " CONT" | |
302 | end | |
303 | if ($row-> truncated_on_left_p) | |
304 | printf " TRUNC:L" | |
305 | end | |
306 | if ($row-> truncated_on_right_p) | |
307 | printf " TRUNC:R" | |
308 | end | |
309 | if ($row->starts_in_middle_of_char_p) | |
310 | printf " STARTMID" | |
311 | end | |
312 | if ($row->ends_in_middle_of_char_p) | |
313 | printf " ENDMID" | |
314 | end | |
315 | if ($row->ends_in_newline_from_string_p) | |
316 | printf " ENDNLFS" | |
317 | end | |
318 | if ($row->ends_at_zv_p) | |
319 | printf " ENDZV" | |
320 | end | |
321 | if ($row->overlapped_p) | |
322 | printf " OLAPD" | |
323 | end | |
324 | if ($row->overlapping_p) | |
325 | printf " OLAPNG" | |
326 | end | |
327 | printf "\n" | |
328 | end | |
329 | document prowx | |
330 | Pretty print information about glyph_row. | |
331 | Takes one argument, a row object or pointer. | |
332 | end | |
333 | ||
334 | define prow | |
335 | prowx row | |
336 | end | |
337 | document prow | |
338 | Pretty print information about glyph_row in row. | |
339 | end | |
340 | ||
341 | ||
342 | define pcursorx | |
343 | set $cp = $arg0 | |
344 | printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos | |
345 | end | |
346 | document pcursorx | |
89955f2e | 347 | Pretty print a window cursor. |
afca296c KS |
348 | end |
349 | ||
350 | define pcursor | |
351 | printf "output: " | |
352 | pcursorx output_cursor | |
353 | printf "\n" | |
354 | end | |
355 | document pcursor | |
89955f2e | 356 | Pretty print the output_cursor. |
afca296c KS |
357 | end |
358 | ||
359 | define pwinx | |
360 | set $w = $arg0 | |
361 | xgetint $w->sequence_number | |
362 | if ($w->mini_p != Qnil) | |
363 | printf "Mini " | |
364 | end | |
365 | printf "Window %d ", $int | |
366 | xgetptr $w->buffer | |
367 | set $tem = (struct buffer *) $ptr | |
c40f8d15 | 368 | xgetptr $tem->name_ |
afca296c KS |
369 | printf "%s", ((struct Lisp_String *) $ptr)->data |
370 | printf "\n" | |
371 | xgetptr $w->start | |
372 | set $tem = (struct Lisp_Marker *) $ptr | |
373 | printf "start=%d end:", $tem->charpos | |
374 | if ($w->window_end_valid != Qnil) | |
375 | xgetint $w->window_end_pos | |
376 | printf "pos=%d", $int | |
377 | xgetint $w->window_end_vpos | |
378 | printf " vpos=%d", $int | |
379 | else | |
380 | printf "invalid" | |
381 | end | |
382 | printf " vscroll=%d", $w->vscroll | |
383 | if ($w->force_start != Qnil) | |
384 | printf " FORCE_START" | |
385 | end | |
386 | if ($w->must_be_updated_p) | |
387 | printf " MUST_UPD" | |
388 | end | |
389 | printf "\n" | |
390 | printf "cursor: " | |
391 | pcursorx $w->cursor | |
392 | printf " phys: " | |
393 | pcursorx $w->phys_cursor | |
394 | if ($w->phys_cursor_on_p) | |
395 | printf " ON" | |
396 | else | |
397 | printf " OFF" | |
398 | end | |
399 | printf " blk=" | |
400 | if ($w->last_cursor_off_p != $w->cursor_off_p) | |
401 | if ($w->last_cursor_off_p) | |
402 | printf "ON->" | |
403 | else | |
404 | printf "OFF->" | |
405 | end | |
406 | end | |
407 | if ($w->cursor_off_p) | |
408 | printf "ON" | |
409 | else | |
410 | printf "OFF" | |
411 | end | |
412 | printf "\n" | |
413 | end | |
414 | document pwinx | |
415 | Pretty print a window structure. | |
89955f2e | 416 | Takes one argument, a pointer to a window structure. |
afca296c KS |
417 | end |
418 | ||
419 | define pwin | |
420 | pwinx w | |
421 | end | |
422 | document pwin | |
423 | Pretty print window structure w. | |
424 | end | |
425 | ||
bc5a45f3 | 426 | define pbiditype |
9443b3c7 EZ |
427 | if ($arg0 == 0) |
428 | printf "UNDEF" | |
429 | end | |
bc5a45f3 EZ |
430 | if ($arg0 == 1) |
431 | printf "L" | |
432 | end | |
433 | if ($arg0 == 2) | |
434 | printf "R" | |
435 | end | |
436 | if ($arg0 == 3) | |
437 | printf "EN" | |
438 | end | |
439 | if ($arg0 == 4) | |
440 | printf "AN" | |
441 | end | |
442 | if ($arg0 == 5) | |
443 | printf "BN" | |
444 | end | |
445 | if ($arg0 == 6) | |
446 | printf "B" | |
447 | end | |
9443b3c7 | 448 | if ($arg0 < 0 || $arg0 > 6) |
bc5a45f3 EZ |
449 | printf "%d??", $arg0 |
450 | end | |
451 | end | |
452 | document pbiditype | |
453 | Print textual description of bidi type given as first argument. | |
454 | end | |
455 | ||
1e99743b KS |
456 | define pgx |
457 | set $g = $arg0 | |
be996d82 | 458 | # CHAR_GLYPH |
a1674f0b EZ |
459 | if ($g.type == 0) |
460 | if ($g.u.ch >= ' ' && $g.u.ch < 127) | |
461 | printf "CHAR[%c]", $g.u.ch | |
1e99743b | 462 | else |
a1674f0b | 463 | printf "CHAR[0x%x]", $g.u.ch |
1e99743b KS |
464 | end |
465 | end | |
be996d82 | 466 | # COMPOSITE_GLYPH |
a1674f0b EZ |
467 | if ($g.type == 1) |
468 | printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to | |
1e99743b | 469 | end |
0eb025fb | 470 | # GLYPHLESS_GLYPH |
a1674f0b | 471 | if ($g.type == 2) |
0eb025fb | 472 | printf "GLYPHLESS[" |
a1674f0b | 473 | if ($g.u.glyphless.method == 0) |
0eb025fb EZ |
474 | printf "THIN]" |
475 | end | |
a1674f0b | 476 | if ($g.u.glyphless.method == 1) |
0eb025fb EZ |
477 | printf "EMPTY]" |
478 | end | |
a1674f0b | 479 | if ($g.u.glyphless.method == 2) |
0eb025fb EZ |
480 | printf "ACRO]" |
481 | end | |
a1674f0b | 482 | if ($g.u.glyphless.method == 3) |
0eb025fb EZ |
483 | printf "HEX]" |
484 | end | |
485 | end | |
486 | # IMAGE_GLYPH | |
a1674f0b EZ |
487 | if ($g.type == 3) |
488 | printf "IMAGE[%d]", $g.u.img_id | |
1e99743b | 489 | end |
be996d82 | 490 | # STRETCH_GLYPH |
a1674f0b EZ |
491 | if ($g.type == 4) |
492 | printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent | |
1e99743b | 493 | end |
a1674f0b | 494 | xgettype ($g.object) |
1e99743b | 495 | if ($type == Lisp_String) |
8654a41b EZ |
496 | xgetptr $g.object |
497 | printf " str=0x%x[%d]", ((struct Lisp_String *)$ptr)->data, $g.charpos | |
1e99743b | 498 | else |
a1674f0b | 499 | printf " pos=%d", $g.charpos |
1e99743b | 500 | end |
bc5a45f3 | 501 | # For characters, print their resolved level and bidi type |
a1674f0b EZ |
502 | if ($g.type == 0) |
503 | printf " blev=%d,btyp=", $g.resolved_level | |
504 | pbiditype $g.bidi_type | |
bc5a45f3 | 505 | end |
a1674f0b | 506 | printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent |
be996d82 | 507 | # If not DEFAULT_FACE_ID |
a1674f0b EZ |
508 | if ($g.face_id != 0) |
509 | printf " face=%d", $g.face_id | |
1e99743b | 510 | end |
a1674f0b EZ |
511 | if ($g.voffset) |
512 | printf " vof=%d", $g.voffset | |
1e99743b | 513 | end |
a1674f0b | 514 | if ($g.multibyte_p) |
1e99743b KS |
515 | printf " MB" |
516 | end | |
a1674f0b | 517 | if ($g.padding_p) |
1e99743b KS |
518 | printf " PAD" |
519 | end | |
a1674f0b | 520 | if ($g.glyph_not_available_p) |
1e99743b KS |
521 | printf " N/A" |
522 | end | |
a1674f0b | 523 | if ($g.overlaps_vertically_p) |
1e99743b KS |
524 | printf " OVL" |
525 | end | |
a1674f0b | 526 | if ($g.avoid_cursor_p) |
cb4545ad EZ |
527 | printf " AVOID" |
528 | end | |
a1674f0b | 529 | if ($g.left_box_line_p) |
1e99743b KS |
530 | printf " [" |
531 | end | |
a1674f0b | 532 | if ($g.right_box_line_p) |
1e99743b KS |
533 | printf " ]" |
534 | end | |
a1674f0b EZ |
535 | if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height) |
536 | printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height | |
1e99743b KS |
537 | end |
538 | printf "\n" | |
539 | end | |
540 | document pgx | |
541 | Pretty print a glyph structure. | |
89955f2e | 542 | Takes one argument, a pointer to a glyph structure. |
1e99743b KS |
543 | end |
544 | ||
545 | define pg | |
546 | set $pgidx = 0 | |
547 | pgx glyph | |
548 | end | |
549 | document pg | |
550 | Pretty print glyph structure glyph. | |
551 | end | |
552 | ||
553 | define pgi | |
554 | set $pgidx = $arg0 | |
555 | pgx (&glyph[$pgidx]) | |
556 | end | |
557 | document pgi | |
558 | Pretty print glyph structure glyph[I]. | |
559 | Takes one argument, a integer I. | |
560 | end | |
561 | ||
562 | define pgn | |
563 | set $pgidx = $pgidx + 1 | |
564 | pgx (&glyph[$pgidx]) | |
565 | end | |
566 | document pgn | |
567 | Pretty print next glyph structure. | |
568 | end | |
569 | ||
570 | define pgrowx | |
571 | set $row = $arg0 | |
572 | set $area = 0 | |
573 | set $xofs = $row->x | |
574 | while ($area < 3) | |
575 | set $used = $row->used[$area] | |
576 | if ($used > 0) | |
577 | set $gl0 = $row->glyphs[$area] | |
578 | set $pgidx = 0 | |
579 | printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used | |
580 | while ($pgidx < $used) | |
581 | printf "%3d %4d: ", $pgidx, $xofs | |
582 | pgx $gl0[$pgidx] | |
583 | set $xofs = $xofs + $gl0[$pgidx]->pixel_width | |
584 | set $pgidx = $pgidx + 1 | |
585 | end | |
586 | end | |
587 | set $area = $area + 1 | |
588 | end | |
589 | end | |
590 | document pgrowx | |
591 | Pretty print all glyphs in a row structure. | |
592 | Takes one argument, a pointer to a row structure. | |
593 | end | |
594 | ||
595 | define pgrow | |
596 | pgrowx row | |
597 | end | |
598 | document pgrow | |
599 | Pretty print all glyphs in row structure row. | |
600 | end | |
afca296c | 601 | |
be996d82 EZ |
602 | define pgrowit |
603 | pgrowx it->glyph_row | |
604 | end | |
605 | document pgrowit | |
606 | Pretty print all glyphs in it->glyph_row. | |
607 | end | |
608 | ||
f866d742 | 609 | define prowlims |
0416466c | 610 | printf "edges=(%d,%d),r2l=%d,cont=%d,trunc=(%d,%d),at_zv=%d\n", $arg0->minpos.charpos, $arg0->maxpos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->truncated_on_left_p, $arg0->truncated_on_right_p, $arg0->ends_at_zv_p |
f866d742 EZ |
611 | end |
612 | document prowlims | |
613 | Print important attributes of a glyph_row structure. | |
614 | Takes one argument, a pointer to a glyph_row structure. | |
615 | end | |
616 | ||
617 | define pmtxrows | |
618 | set $mtx = $arg0 | |
619 | set $gl = $mtx->rows | |
0416466c EZ |
620 | set $glend = $mtx->rows + $mtx->nrows - 1 |
621 | set $i = 0 | |
f866d742 | 622 | while ($gl < $glend) |
0416466c | 623 | printf "%d: ", $i |
f866d742 EZ |
624 | prowlims $gl |
625 | set $gl = $gl + 1 | |
0416466c | 626 | set $i = $i + 1 |
f866d742 EZ |
627 | end |
628 | end | |
629 | document pmtxrows | |
630 | Print data about glyph rows in a glyph matrix. | |
631 | Takes one argument, a pointer to a glyph_matrix structure. | |
632 | end | |
633 | ||
a6ffc6a2 | 634 | define xtype |
6b61353c KH |
635 | xgettype $ |
636 | output $type | |
637 | echo \n | |
638 | if $type == Lisp_Misc | |
639 | xmisctype | |
640 | else | |
641 | if $type == Lisp_Vectorlike | |
642 | xvectype | |
643 | end | |
644 | end | |
a6ffc6a2 | 645 | end |
e065a56e | 646 | document xtype |
ba1e23bf | 647 | Print the type of $, assuming it is an Emacs Lisp value. |
3fe8bda5 | 648 | If the first type printed is Lisp_Vector or Lisp_Misc, |
6b61353c | 649 | a second line gives the more precise type. |
3fe8bda5 RS |
650 | end |
651 | ||
7d377c48 DA |
652 | define pvectype |
653 | set $size = ((struct Lisp_Vector *) $arg0)->header.size | |
c20fdd9e | 654 | if ($size & PSEUDOVECTOR_FLAG) |
914adc42 | 655 | output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS) |
c20fdd9e | 656 | else |
914adc42 | 657 | output PVEC_NORMAL_VECTOR |
c20fdd9e | 658 | end |
6b61353c | 659 | echo \n |
3fe8bda5 | 660 | end |
7d377c48 DA |
661 | document pvectype |
662 | Print the subtype of vectorlike object. | |
663 | Takes one argument, a pointer to an object. | |
914adc42 DA |
664 | end |
665 | ||
7d377c48 | 666 | define xvectype |
914adc42 | 667 | xgetptr $ |
7d377c48 DA |
668 | pvectype $ptr |
669 | end | |
670 | document xvectype | |
671 | Print the subtype of vectorlike object. | |
672 | This command assumes that $ is a Lisp_Object. | |
673 | end | |
674 | ||
675 | define pvecsize | |
676 | set $size = ((struct Lisp_Vector *) $arg0)->header.size | |
914adc42 DA |
677 | if ($size & PSEUDOVECTOR_FLAG) |
678 | output ($size & PSEUDOVECTOR_SIZE_MASK) | |
679 | echo \n | |
680 | output (($size & PSEUDOVECTOR_REST_MASK) >> PSEUDOVECTOR_SIZE_BITS) | |
681 | else | |
682 | output ($size & ~ARRAY_MARK_FLAG) | |
683 | end | |
684 | echo \n | |
685 | end | |
7d377c48 DA |
686 | document pvecsize |
687 | Print the size of vectorlike object. | |
688 | Takes one argument, a pointer to an object. | |
689 | end | |
690 | ||
691 | define xvecsize | |
692 | xgetptr $ | |
693 | pvecsize $ptr | |
694 | end | |
914adc42 | 695 | document xvecsize |
7d377c48 DA |
696 | Print the size of $ |
697 | This command assumes that $ is a Lisp_Object. | |
3fe8bda5 RS |
698 | end |
699 | ||
700 | define xmisctype | |
6b61353c KH |
701 | xgetptr $ |
702 | output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type) | |
703 | echo \n | |
3fe8bda5 RS |
704 | end |
705 | document xmisctype | |
2d5ed88d | 706 | Assume that $ is some misc type and print its specific type. |
e065a56e | 707 | end |
a6ffc6a2 JB |
708 | |
709 | define xint | |
6b61353c KH |
710 | xgetint $ |
711 | print $int | |
a6ffc6a2 | 712 | end |
e065a56e | 713 | document xint |
2d5ed88d | 714 | Print $ as an Emacs Lisp integer. This gets the sign right. |
e065a56e | 715 | end |
a6ffc6a2 JB |
716 | |
717 | define xptr | |
6b61353c KH |
718 | xgetptr $ |
719 | print (void *) $ptr | |
a6ffc6a2 | 720 | end |
e065a56e | 721 | document xptr |
2d5ed88d | 722 | Print the pointer portion of an Emacs Lisp value in $. |
e065a56e | 723 | end |
a6ffc6a2 | 724 | |
a6ffc6a2 | 725 | define xmarker |
6b61353c KH |
726 | xgetptr $ |
727 | print (struct Lisp_Marker *) $ptr | |
a6ffc6a2 | 728 | end |
e065a56e | 729 | document xmarker |
2d5ed88d EZ |
730 | Print $ as a marker pointer. |
731 | This command assumes that $ is an Emacs Lisp marker value. | |
e065a56e | 732 | end |
a6ffc6a2 | 733 | |
a6a3acf0 | 734 | define xoverlay |
6b61353c KH |
735 | xgetptr $ |
736 | print (struct Lisp_Overlay *) $ptr | |
a6a3acf0 KH |
737 | end |
738 | document xoverlay | |
89955f2e NR |
739 | Print $ as a overlay pointer. |
740 | This command assumes that $ is an Emacs Lisp overlay value. | |
a6a3acf0 KH |
741 | end |
742 | ||
743 | define xmiscfree | |
6b61353c KH |
744 | xgetptr $ |
745 | print (struct Lisp_Free *) $ptr | |
a6a3acf0 KH |
746 | end |
747 | document xmiscfree | |
89955f2e NR |
748 | Print $ as a misc free-cell pointer. |
749 | This command assumes that $ is an Emacs Lisp Misc value. | |
a6a3acf0 KH |
750 | end |
751 | ||
a6ffc6a2 | 752 | define xsymbol |
cfcde636 KS |
753 | set $sym = $ |
754 | xgetptr $sym | |
6b61353c | 755 | print (struct Lisp_Symbol *) $ptr |
cfcde636 | 756 | xprintsym $sym |
6b61353c | 757 | echo \n |
a6ffc6a2 | 758 | end |
e065a56e JB |
759 | document xsymbol |
760 | Print the name and address of the symbol $. | |
ba1e23bf | 761 | This command assumes that $ is an Emacs Lisp symbol value. |
e065a56e | 762 | end |
a6ffc6a2 JB |
763 | |
764 | define xstring | |
6b61353c KH |
765 | xgetptr $ |
766 | print (struct Lisp_String *) $ptr | |
0001e968 | 767 | xprintstr $ |
6b61353c | 768 | echo \n |
a6ffc6a2 | 769 | end |
a6ffc6a2 | 770 | document xstring |
e065a56e | 771 | Print the contents and address of the string $. |
ba1e23bf | 772 | This command assumes that $ is an Emacs Lisp string value. |
a6ffc6a2 JB |
773 | end |
774 | ||
775 | define xvector | |
6b61353c KH |
776 | xgetptr $ |
777 | print (struct Lisp_Vector *) $ptr | |
1781b9e9 | 778 | output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~ARRAY_MARK_FLAG) |
ef15f270 | 779 | echo \n |
a6ffc6a2 | 780 | end |
a6ffc6a2 | 781 | document xvector |
e065a56e | 782 | Print the contents and address of the vector $. |
ba1e23bf | 783 | This command assumes that $ is an Emacs Lisp vector value. |
a6ffc6a2 JB |
784 | end |
785 | ||
14a8902a | 786 | define xprocess |
6b61353c KH |
787 | xgetptr $ |
788 | print (struct Lisp_Process *) $ptr | |
789 | output *$ | |
790 | echo \n | |
14a8902a RS |
791 | end |
792 | document xprocess | |
89955f2e NR |
793 | Print the address of the struct Lisp_process to which $ points. |
794 | This command assumes that $ is a Lisp_Object. | |
14a8902a RS |
795 | end |
796 | ||
ec558adc | 797 | define xframe |
6b61353c KH |
798 | xgetptr $ |
799 | print (struct frame *) $ptr | |
26d16b35 | 800 | xgetptr $->name |
28c1e1ca KS |
801 | set $ptr = (struct Lisp_String *) $ptr |
802 | xprintstr $ptr | |
803 | echo \n | |
a6ffc6a2 | 804 | end |
ec558adc | 805 | document xframe |
2d5ed88d EZ |
806 | Print $ as a frame pointer. |
807 | This command assumes $ is an Emacs Lisp frame value. | |
e065a56e | 808 | end |
a6ffc6a2 | 809 | |
14a8902a | 810 | define xcompiled |
6b61353c KH |
811 | xgetptr $ |
812 | print (struct Lisp_Vector *) $ptr | |
cc7245e4 | 813 | output ($->contents[0])@($->header.size & 0xff) |
14a8902a RS |
814 | end |
815 | document xcompiled | |
89955f2e NR |
816 | Print $ as a compiled function pointer. |
817 | This command assumes that $ is an Emacs Lisp compiled value. | |
14a8902a RS |
818 | end |
819 | ||
820 | define xwindow | |
6b61353c KH |
821 | xgetptr $ |
822 | print (struct window *) $ptr | |
25d34643 | 823 | set $window = (struct window *) $ptr |
26d16b35 | 824 | xgetint $window->total_cols |
25d34643 | 825 | set $width=$int |
26d16b35 | 826 | xgetint $window->total_lines |
25d34643 | 827 | set $height=$int |
26d16b35 | 828 | xgetint $window->left_col |
25d34643 | 829 | set $left=$int |
26d16b35 | 830 | xgetint $window->top_line |
25d34643 RS |
831 | set $top=$int |
832 | printf "%dx%d+%d+%d\n", $width, $height, $left, $top | |
14a8902a RS |
833 | end |
834 | document xwindow | |
835 | Print $ as a window pointer, assuming it is an Emacs Lisp window value. | |
836 | Print the window's position as "WIDTHxHEIGHT+LEFT+TOP". | |
837 | end | |
838 | ||
029c56f6 | 839 | define xwinconfig |
6b61353c KH |
840 | xgetptr $ |
841 | print (struct save_window_data *) $ptr | |
a6a3acf0 | 842 | end |
029c56f6 | 843 | document xwinconfig |
89955f2e NR |
844 | Print $ as a window configuration pointer. |
845 | This command assumes that $ is an Emacs Lisp window configuration value. | |
a6a3acf0 KH |
846 | end |
847 | ||
14a8902a | 848 | define xsubr |
6b61353c KH |
849 | xgetptr $ |
850 | print (struct Lisp_Subr *) $ptr | |
851 | output *$ | |
852 | echo \n | |
a6a3acf0 | 853 | end |
14a8902a RS |
854 | document xsubr |
855 | Print the address of the subr which the Lisp_Object $ points to. | |
856 | end | |
857 | ||
858 | define xchartable | |
6b61353c KH |
859 | xgetptr $ |
860 | print (struct Lisp_Char_Table *) $ptr | |
861 | printf "Purpose: " | |
862 | xprintsym $->purpose | |
cc7245e4 | 863 | printf " %d extra slots", ($->header.size & 0x1ff) - 68 |
6b61353c | 864 | echo \n |
14a8902a RS |
865 | end |
866 | document xchartable | |
867 | Print the address of the char-table $, and its purpose. | |
868 | This command assumes that $ is an Emacs Lisp char-table value. | |
869 | end | |
870 | ||
d1da276f EZ |
871 | define xsubchartable |
872 | xgetptr $ | |
873 | print (struct Lisp_Sub_Char_Table *) $ptr | |
874 | xgetint $->depth | |
875 | set $depth = $int | |
876 | xgetint $->min_char | |
877 | printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int | |
878 | end | |
879 | document xsubchartable | |
880 | Print the address of the sub-char-table $, its depth and min-char. | |
881 | This command assumes that $ is an Emacs Lisp sub-char-table value. | |
882 | end | |
883 | ||
14a8902a | 884 | define xboolvector |
6b61353c KH |
885 | xgetptr $ |
886 | print (struct Lisp_Bool_Vector *) $ptr | |
1781b9e9 | 887 | output ($->size > 256) ? 0 : ($->data[0])@(($->size + BOOL_VECTOR_BITS_PER_CHAR - 1)/ BOOL_VECTOR_BITS_PER_CHAR) |
6b61353c | 888 | echo \n |
14a8902a RS |
889 | end |
890 | document xboolvector | |
891 | Print the contents and address of the bool-vector $. | |
892 | This command assumes that $ is an Emacs Lisp bool-vector value. | |
893 | end | |
894 | ||
895 | define xbuffer | |
6b61353c KH |
896 | xgetptr $ |
897 | print (struct buffer *) $ptr | |
c40f8d15 | 898 | xgetptr $->name_ |
6b61353c KH |
899 | output ((struct Lisp_String *) $ptr)->data |
900 | echo \n | |
14a8902a RS |
901 | end |
902 | document xbuffer | |
2d5ed88d EZ |
903 | Set $ as a buffer pointer and the name of the buffer. |
904 | This command assumes $ is an Emacs Lisp buffer value. | |
a6a3acf0 KH |
905 | end |
906 | ||
3266f62b | 907 | define xhashtable |
6b61353c KH |
908 | xgetptr $ |
909 | print (struct Lisp_Hash_Table *) $ptr | |
3266f62b GM |
910 | end |
911 | document xhashtable | |
89955f2e NR |
912 | Set $ as a hash table pointer. |
913 | This command assumes that $ is an Emacs Lisp hash table value. | |
3266f62b GM |
914 | end |
915 | ||
a6ffc6a2 | 916 | define xcons |
6b61353c KH |
917 | xgetptr $ |
918 | print (struct Lisp_Cons *) $ptr | |
919 | output/x *$ | |
920 | echo \n | |
a6ffc6a2 | 921 | end |
e065a56e | 922 | document xcons |
2d5ed88d | 923 | Print the contents of $ as an Emacs Lisp cons. |
e065a56e | 924 | end |
a6ffc6a2 | 925 | |
6f493884 | 926 | define nextcons |
26d16b35 | 927 | p $.u.cdr |
6b61353c | 928 | xcons |
6f493884 RS |
929 | end |
930 | document nextcons | |
931 | Print the contents of the next cell in a list. | |
89955f2e | 932 | This command assumes that the last thing you printed was a cons cell contents |
6f493884 RS |
933 | (type struct Lisp_Cons) or a pointer to one. |
934 | end | |
a6ffc6a2 | 935 | define xcar |
6b61353c KH |
936 | xgetptr $ |
937 | xgettype $ | |
26d16b35 | 938 | print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0) |
a6ffc6a2 | 939 | end |
e065a56e | 940 | document xcar |
2d5ed88d | 941 | Assume that $ is an Emacs Lisp pair and print its car. |
e065a56e | 942 | end |
a6ffc6a2 JB |
943 | |
944 | define xcdr | |
6b61353c KH |
945 | xgetptr $ |
946 | xgettype $ | |
26d16b35 | 947 | print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0) |
a6ffc6a2 | 948 | end |
e065a56e | 949 | document xcdr |
2d5ed88d | 950 | Assume that $ is an Emacs Lisp pair and print its cdr. |
e065a56e | 951 | end |
a6ffc6a2 | 952 | |
28c1e1ca KS |
953 | define xlist |
954 | xgetptr $ | |
955 | set $cons = (struct Lisp_Cons *) $ptr | |
956 | xgetptr Qnil | |
957 | set $nil = $ptr | |
958 | set $i = 0 | |
959 | while $cons != $nil && $i < 10 | |
26d16b35 | 960 | p/x $cons->car |
28c1e1ca | 961 | xpr |
26d16b35 | 962 | xgetptr $cons->u.cdr |
28c1e1ca KS |
963 | set $cons = (struct Lisp_Cons *) $ptr |
964 | set $i = $i + 1 | |
965 | printf "---\n" | |
966 | end | |
967 | if $cons == $nil | |
968 | printf "nil\n" | |
969 | else | |
970 | printf "...\n" | |
971 | p $ptr | |
972 | end | |
973 | end | |
974 | document xlist | |
975 | Print $ assuming it is a list. | |
976 | end | |
977 | ||
df86e57e | 978 | define xfloat |
6b61353c | 979 | xgetptr $ |
b4483658 | 980 | print ((struct Lisp_Float *) $ptr)->u.data |
df86e57e JB |
981 | end |
982 | document xfloat | |
983 | Print $ assuming it is a lisp floating-point number. | |
984 | end | |
985 | ||
b2367490 | 986 | define xscrollbar |
6b61353c KH |
987 | xgetptr $ |
988 | print (struct scrollbar *) $ptr | |
b2367490 JB |
989 | output *$ |
990 | echo \n | |
991 | end | |
dec5f4e3 | 992 | document xscrollbar |
b2367490 JB |
993 | Print $ as a scrollbar pointer. |
994 | end | |
995 | ||
28c1e1ca KS |
996 | define xpr |
997 | xtype | |
646b5f55 AS |
998 | if $type == Lisp_Int0 || $type == Lisp_Int1 |
999 | xint | |
28c1e1ca KS |
1000 | end |
1001 | if $type == Lisp_Symbol | |
1002 | xsymbol | |
1003 | end | |
1004 | if $type == Lisp_String | |
1005 | xstring | |
1006 | end | |
1007 | if $type == Lisp_Cons | |
1008 | xcons | |
1009 | end | |
1010 | if $type == Lisp_Float | |
1011 | xfloat | |
1012 | end | |
1013 | if $type == Lisp_Misc | |
1014 | set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type) | |
1015 | if $misc == Lisp_Misc_Free | |
1016 | xmiscfree | |
1017 | end | |
28c1e1ca KS |
1018 | if $misc == Lisp_Misc_Marker |
1019 | xmarker | |
1020 | end | |
28c1e1ca KS |
1021 | if $misc == Lisp_Misc_Overlay |
1022 | xoverlay | |
1023 | end | |
28c1e1ca KS |
1024 | # if $misc == Lisp_Misc_Save_Value |
1025 | # xsavevalue | |
1026 | # end | |
1027 | end | |
1028 | if $type == Lisp_Vectorlike | |
cc7245e4 | 1029 | set $size = ((struct Lisp_Vector *) $ptr)->header.size |
1781b9e9 | 1030 | if ($size & PSEUDOVECTOR_FLAG) |
914adc42 | 1031 | set $vec = (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS) |
28c1e1ca KS |
1032 | if $vec == PVEC_NORMAL_VECTOR |
1033 | xvector | |
1034 | end | |
1035 | if $vec == PVEC_PROCESS | |
1036 | xprocess | |
1037 | end | |
1038 | if $vec == PVEC_FRAME | |
1039 | xframe | |
1040 | end | |
1041 | if $vec == PVEC_COMPILED | |
1042 | xcompiled | |
1043 | end | |
1044 | if $vec == PVEC_WINDOW | |
1045 | xwindow | |
1046 | end | |
1047 | if $vec == PVEC_WINDOW_CONFIGURATION | |
1048 | xwinconfig | |
1049 | end | |
1050 | if $vec == PVEC_SUBR | |
1051 | xsubr | |
1052 | end | |
1053 | if $vec == PVEC_CHAR_TABLE | |
1054 | xchartable | |
1055 | end | |
1056 | if $vec == PVEC_BOOL_VECTOR | |
1057 | xboolvector | |
1058 | end | |
1059 | if $vec == PVEC_BUFFER | |
1060 | xbuffer | |
1061 | end | |
1062 | if $vec == PVEC_HASH_TABLE | |
1063 | xhashtable | |
1064 | end | |
1065 | else | |
1066 | xvector | |
1067 | end | |
1068 | end | |
1069 | end | |
1070 | document xpr | |
1071 | Print $ as a lisp object of any type. | |
1072 | end | |
1073 | ||
0001e968 | 1074 | define xprintstr |
d3332249 | 1075 | set $data = (char *) $arg0->data |
1781b9e9 | 1076 | output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte) |
0001e968 SM |
1077 | end |
1078 | ||
24b4d1bc | 1079 | define xprintsym |
6b61353c KH |
1080 | xgetptr $arg0 |
1081 | set $sym = (struct Lisp_Symbol *) $ptr | |
c644523b | 1082 | xgetptr $sym->name |
6b61353c | 1083 | set $sym_name = (struct Lisp_String *) $ptr |
0001e968 | 1084 | xprintstr $sym_name |
24b4d1bc GM |
1085 | end |
1086 | document xprintsym | |
1087 | Print argument as a symbol. | |
1088 | end | |
1089 | ||
d5fb9ac8 | 1090 | define xcoding |
1781b9e9 PE |
1091 | set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & VALMASK) | DATA_SEG_BITS) |
1092 | set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS) | |
d5fb9ac8 KH |
1093 | set $name = $tmp->contents[$arg0 * 2] |
1094 | print $name | |
1095 | pr | |
1096 | print $tmp->contents[$arg0 * 2 + 1] | |
1097 | pr | |
1098 | end | |
1099 | document xcoding | |
8f924df7 | 1100 | Print the name and attributes of coding system that has ID (argument). |
d5fb9ac8 KH |
1101 | end |
1102 | ||
1103 | define xcharset | |
1781b9e9 PE |
1104 | set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & VALMASK) | DATA_SEG_BITS) |
1105 | set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS) | |
af800dc0 | 1106 | p $tmp->contents[charset_table[$arg0].hash_index * 2] |
d5fb9ac8 KH |
1107 | pr |
1108 | end | |
1109 | document xcharset | |
8f924df7 | 1110 | Print the name of charset that has ID (argument). |
d5fb9ac8 KH |
1111 | end |
1112 | ||
9e067dbc KH |
1113 | define xfontset |
1114 | xgetptr $ | |
1115 | set $tbl = (struct Lisp_Char_Table *) $ptr | |
1116 | print $tbl | |
1117 | xgetint $tbl->extras[0] | |
1118 | printf " ID:%d", $int | |
1119 | xgettype $tbl->extras[1] | |
1120 | xgetptr $tbl->extras[1] | |
1121 | if $type == Lisp_String | |
1122 | set $ptr = (struct Lisp_String *) $ptr | |
1123 | printf " Name:" | |
1124 | xprintstr $ptr | |
1125 | else | |
1126 | xgetptr $tbl->extras[2] | |
1127 | set $ptr = (struct Lisp_Char_Table *) $ptr | |
1128 | xgetptr $ptr->extras[1] | |
1129 | set $ptr = (struct Lisp_String *) $ptr | |
1130 | printf " Realized from:" | |
1131 | xprintstr $ptr | |
1132 | end | |
1133 | echo \n | |
1134 | end | |
1135 | ||
322081f1 KH |
1136 | define xfont |
1137 | xgetptr $ | |
cc7245e4 | 1138 | set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF) |
322081f1 KH |
1139 | if $size == FONT_SPEC_MAX |
1140 | print (struct font_spec *) $ptr | |
1141 | else | |
1142 | if $size == FONT_ENTITY_MAX | |
1143 | print (struct font_entity *) $ptr | |
1144 | else | |
1145 | print (struct font *) $ptr | |
1146 | end | |
1147 | end | |
1148 | end | |
1149 | document xfont | |
1150 | Print $ assuming it is a list font (font-spec, font-entity, or font-object). | |
1151 | end | |
1152 | ||
24b4d1bc GM |
1153 | define xbacktrace |
1154 | set $bt = backtrace_list | |
177c0ea7 | 1155 | while $bt |
b43d62ae | 1156 | xgettype ($bt->function) |
3176a27e | 1157 | if $type == Lisp_Symbol |
b43d62ae | 1158 | xprintsym ($bt->function) |
c51842ec | 1159 | printf " (0x%x)\n", $bt->args |
3176a27e | 1160 | else |
b43d62ae | 1161 | xgetptr $bt->function |
cf07311b | 1162 | printf "0x%x ", $ptr |
3176a27e | 1163 | if $type == Lisp_Vectorlike |
b43d62ae | 1164 | xgetptr ($bt->function) |
cc7245e4 | 1165 | set $size = ((struct Lisp_Vector *) $ptr)->header.size |
c20fdd9e | 1166 | if ($size & PSEUDOVECTOR_FLAG) |
914adc42 | 1167 | output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS) |
c20fdd9e PE |
1168 | else |
1169 | output $size & ~ARRAY_MARK_FLAG | |
1170 | end | |
3176a27e GM |
1171 | else |
1172 | printf "Lisp type %d", $type | |
1173 | end | |
1174 | echo \n | |
1175 | end | |
24b4d1bc GM |
1176 | set $bt = $bt->next |
1177 | end | |
1178 | end | |
1179 | document xbacktrace | |
1180 | Print a backtrace of Lisp function calls from backtrace_list. | |
177c0ea7 | 1181 | Set a breakpoint at Fsignal and call this to see from where |
3176a27e | 1182 | an error was signaled. |
24b4d1bc GM |
1183 | end |
1184 | ||
8b058d44 EZ |
1185 | define xprintbytestr |
1186 | set $data = (char *) $arg0->data | |
1187 | printf "Bytecode: " | |
1781b9e9 | 1188 | output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte) |
8b058d44 EZ |
1189 | end |
1190 | document xprintbytestr | |
1191 | Print a string of byte code. | |
1192 | end | |
1193 | ||
1194 | define xwhichsymbols | |
1195 | set $output_debug = print_output_debug_flag | |
1196 | set print_output_debug_flag = 0 | |
6b1319ce | 1197 | call safe_debug_print (which_symbols ($arg0, $arg1)) |
8b058d44 | 1198 | set print_output_debug_flag = $output_debug |
28c1e1ca | 1199 | end |
8b058d44 | 1200 | document xwhichsymbols |
89955f2e | 1201 | Print symbols which references a given lisp object |
28c1e1ca | 1202 | either as its symbol value or symbol function. |
8b058d44 EZ |
1203 | Call with two arguments: the lisp object and the |
1204 | maximum number of symbols referencing it to produce. | |
28c1e1ca KS |
1205 | end |
1206 | ||
1207 | define xbytecode | |
1208 | set $bt = byte_stack_list | |
1209 | while $bt | |
8b058d44 EZ |
1210 | xgetptr $bt->byte_string |
1211 | set $ptr = (struct Lisp_String *) $ptr | |
1212 | xprintbytestr $ptr | |
1213 | printf "\n0x%x => ", $bt->byte_string | |
1214 | xwhichsymbols $bt->byte_string 5 | |
28c1e1ca KS |
1215 | set $bt = $bt->next |
1216 | end | |
1217 | end | |
1218 | document xbytecode | |
1219 | Print a backtrace of the byte code stack. | |
1220 | end | |
1221 | ||
338fa84a KS |
1222 | # Show Lisp backtrace after normal backtrace. |
1223 | define hookpost-backtrace | |
1224 | set $bt = backtrace_list | |
1225 | if $bt | |
1226 | echo \n | |
1227 | echo Lisp Backtrace:\n | |
1228 | xbacktrace | |
1229 | end | |
1230 | end | |
1231 | ||
6c5d0c52 KS |
1232 | # Flush display (X only) |
1233 | define ff | |
1234 | set x_flush (0) | |
1235 | end | |
1236 | document ff | |
1237 | Flush pending X window display updates to screen. | |
1238 | Works only when an inferior emacs is executing. | |
1239 | end | |
1240 | ||
1241 | ||
e065a56e | 1242 | set print pretty on |
df86e57e | 1243 | set print sevenbit-strings |
a6ffc6a2 | 1244 | |
e5d77022 | 1245 | show environment DISPLAY |
6f5d1a4f | 1246 | show environment TERM |
e5d77022 | 1247 | |
d41e491e | 1248 | # When debugging, it is handy to be able to "return" from |
5101529e EZ |
1249 | # terminate_due_to_signal when an assertion failure is non-fatal. |
1250 | break terminate_due_to_signal | |
dd878ee1 | 1251 | |
feaf060a EZ |
1252 | # x_error_quitter is defined only on X. But window-system is set up |
1253 | # only at run time, during Emacs startup, so we need to defer setting | |
1254 | # the breakpoint. init_sys_modes is the first function called on | |
1255 | # every platform after init_display, where window-system is set. | |
1256 | tbreak init_sys_modes | |
1257 | commands | |
1258 | silent | |
2787bba3 | 1259 | xgetptr globals.f_Vinitial_window_system |
913645cd | 1260 | set $tem = (struct Lisp_Symbol *) $ptr |
c644523b | 1261 | xgetptr $tem->name |
913645cd EZ |
1262 | set $tem = (struct Lisp_String *) $ptr |
1263 | set $tem = (char *) $tem->data | |
feaf060a EZ |
1264 | # If we are running in synchronous mode, we want a chance to look |
1265 | # around before Emacs exits. Perhaps we should put the break | |
1266 | # somewhere else instead... | |
913645cd | 1267 | if $tem[0] == 'x' && $tem[1] == '\0' |
2d90e492 | 1268 | break x_error_quitter |
913645cd | 1269 | end |
feaf060a | 1270 | continue |
dd878ee1 | 1271 | end |