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