| 1 | # Set up something to print out s-expressions. |
| 2 | define pr |
| 3 | set Fprin1 ($, Qexternal_debugging_output) |
| 4 | echo \n |
| 5 | end |
| 6 | document pr |
| 7 | Print the emacs s-expression which is $. |
| 8 | Works only when an inferior emacs is executing. |
| 9 | end |
| 10 | |
| 11 | # Set this to the same thing as the DATA_SEG_BITS macro in your |
| 12 | # machine-description files. |
| 13 | set $data_seg_bits = 0 |
| 14 | |
| 15 | define mips |
| 16 | set $data_seg_bits = 0x10000000 |
| 17 | end |
| 18 | document mips |
| 19 | Set up the xfoo macros to deal with the MIPS processor. |
| 20 | Specifically, this sets $data_seg_bits to the right thing. |
| 21 | end |
| 22 | |
| 23 | define xtype |
| 24 | output (enum Lisp_Type) (($ >> 24) & 0x7f) |
| 25 | echo \n |
| 26 | end |
| 27 | document xtype |
| 28 | Print the type of $, assuming it is an Elisp value. |
| 29 | end |
| 30 | |
| 31 | define xint |
| 32 | print (($ & 0x00ffffff) << 8) >> 8 |
| 33 | end |
| 34 | document xint |
| 35 | Print $, assuming it is an Elisp integer. This gets the sign right. |
| 36 | end |
| 37 | |
| 38 | define xptr |
| 39 | print (void *) (($ & 0x00ffffff) | $data_seg_bits) |
| 40 | end |
| 41 | document xptr |
| 42 | Print the pointer portion of $, assuming it is an Elisp value. |
| 43 | end |
| 44 | |
| 45 | define xwindow |
| 46 | print (struct window *) (($ & 0x00ffffff) | $data_seg_bits) |
| 47 | printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top |
| 48 | end |
| 49 | document xwindow |
| 50 | Print $ as a window pointer, assuming it is an Elisp window value. |
| 51 | Print the window's position as "WIDTHxHEIGHT+LEFT+TOP". |
| 52 | end |
| 53 | |
| 54 | define xmarker |
| 55 | print (struct Lisp_Marker *) (($ & 0x00ffffff) | $data_seg_bits) |
| 56 | end |
| 57 | document xmarker |
| 58 | Print $ as a marker pointer, assuming it is an Elisp marker value. |
| 59 | end |
| 60 | |
| 61 | define xbuffer |
| 62 | print (struct buffer *) (($ & 0x00ffffff) | $data_seg_bits) |
| 63 | output &((struct Lisp_String *) ((($->name) & 0x00ffffff) | $data_seg_bits))->data |
| 64 | echo \n |
| 65 | end |
| 66 | document xbuffer |
| 67 | Set $ as a buffer pointer, assuming it is an Elisp buffer value. |
| 68 | Print the name of the buffer. |
| 69 | end |
| 70 | |
| 71 | define xsymbol |
| 72 | print (struct Lisp_Symbol *) (($ & 0x00ffffff) | $data_seg_bits) |
| 73 | output &$->name->data |
| 74 | echo \n |
| 75 | end |
| 76 | document xsymbol |
| 77 | Print the name and address of the symbol $. |
| 78 | This command assumes that $ is an Elisp symbol value. |
| 79 | end |
| 80 | |
| 81 | define xstring |
| 82 | print (struct Lisp_String *) (($ & 0x00ffffff) | $data_seg_bits) |
| 83 | output ($->size > 10000) ? "big string" : ($->data[0])@($->size) |
| 84 | echo \n |
| 85 | end |
| 86 | document xstring |
| 87 | Print the contents and address of the string $. |
| 88 | This command assumes that $ is an Elisp string value. |
| 89 | end |
| 90 | |
| 91 | define xvector |
| 92 | print (struct Lisp_Vector *) (($ & 0x00ffffff) | $data_seg_bits) |
| 93 | output ($->size > 1000) ? "big vector" : ($->contents[0])@($->size) |
| 94 | echo \n |
| 95 | end |
| 96 | document xvector |
| 97 | Print the contents and address of the vector $. |
| 98 | This command assumes that $ is an Elisp vector value. |
| 99 | end |
| 100 | |
| 101 | define xframe |
| 102 | print (struct frame *) (($ & 0x00ffffff) | $data_seg_bits) |
| 103 | end |
| 104 | document xframe |
| 105 | Print $ as a frame pointer, assuming it is an Elisp frame value. |
| 106 | end |
| 107 | |
| 108 | define xcons |
| 109 | print (struct Lisp_Cons *) (($ & 0x00ffffff) | $data_seg_bits) |
| 110 | output *$ |
| 111 | echo \n |
| 112 | end |
| 113 | document xcons |
| 114 | Print the contents of $, assuming it is an Elisp cons. |
| 115 | end |
| 116 | |
| 117 | define xcar |
| 118 | print ((($ >> 24) & 0x7f) == Lisp_Cons ? ((struct Lisp_Cons *) (($ & 0x00ffffff) | $data_seg_bits))->car : 0) |
| 119 | end |
| 120 | document xcar |
| 121 | Print the car of $, assuming it is an Elisp pair. |
| 122 | end |
| 123 | |
| 124 | define xcdr |
| 125 | print ((($ >> 24) & 0x7f) == Lisp_Cons ? ((struct Lisp_Cons *) (($ & 0x00ffffff) | $data_seg_bits))->cdr : 0) |
| 126 | end |
| 127 | document xcdr |
| 128 | Print the cdr of $, assuming it is an Elisp pair. |
| 129 | end |
| 130 | |
| 131 | define xsubr |
| 132 | print (struct Lisp_Subr *) (($ & 0x00ffffff) | $data_seg_bits) |
| 133 | output *$ |
| 134 | echo \n |
| 135 | end |
| 136 | document xsubr |
| 137 | Print the address of the subr which the Lisp_Object $ points to. |
| 138 | end |
| 139 | |
| 140 | define xprocess |
| 141 | print (struct Lisp_Process *) (($ & 0x00ffffff) | $data_seg_bits) |
| 142 | output *$ |
| 143 | echo \n |
| 144 | end |
| 145 | document xprocess |
| 146 | Print the address of the struct Lisp_process which the Lisp_Object $ points to. |
| 147 | end |
| 148 | |
| 149 | define xscrollbar |
| 150 | print (struct scrollbar *) (($ & 0x00ffffff) | $data_seg_bits) |
| 151 | output *$ |
| 152 | echo \n |
| 153 | end |
| 154 | document xsubr |
| 155 | Print $ as a scrollbar pointer. |
| 156 | end |
| 157 | |
| 158 | set print pretty on |
| 159 | |
| 160 | unset environment TERMCAP |
| 161 | unset environment TERM |
| 162 | echo TERMCAP and TERM environment variables unset.\n |
| 163 | show environment DISPLAY |
| 164 | set args -q -geometry +0+0 |
| 165 | |
| 166 | # Don't let abort actually run, as it will make |
| 167 | # stdio stop working and therefore the `pr' command above as well. |
| 168 | break abort |
| 169 | |
| 170 | # If we are running in synchronous mode, we want a chance to look around |
| 171 | # before Emacs exits. Perhaps we should put the break somewhere else |
| 172 | # instead... |
| 173 | break _XPrintDefaultError |
| 174 | |