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