annotate src/lread.c @ 1016:817b0ce337d7

* window.c (Fset_window_configuration): Removed #if 0'd code which assumes that minibuf_window is on the same frame as the window configuration. Removed special case for windows whose prevs point to themselves. * window.c (Fset_window_configuration): Rename the argument from ARG to CONFIGURATION, so it matches the docstring. The make-docfile program cares. * window.c [MULTI_FRAME] (syms_of_window): Don't staticpro minibuf_window; the frame list will take care of it. * window.c (window_loop): This used to keep track of the first window processed and wait until we came back around to it. Sadly, this doesn't work if that window gets deleted. So instead, use Fprevious_window to find the last window to process, and loop until we've done that one. * window.c [not MULTI_FRAME] (init_window_once): Don't forget to set the `mini_p' flag on the new minibuffer window to t. * window.c (Fwindow_at): Don't check the type of the frame argument. * window.c [not MULTI_FRAME] (window_loop): Set frame to zero, instead of trying to decode it. * window.c (init_window_once): Initialize minibuf_window before FRAME_ROOT_WINDOW, so the latter actually points to something.
author Jim Blandy <jimb@redhat.com>
date Wed, 19 Aug 1992 06:40:02 +0000
parents bf78b5ea9b3a
children c2259db856ee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Lisp parsing and input streams.
692
681c352bbf30 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 675
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1989,
681c352bbf30 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 675
diff changeset
3 1992 Free Software Foundation, Inc.
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include <stdio.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include <sys/types.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <sys/stat.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <sys/file.h>
796
465cf9f9153b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 762
diff changeset
26 #include <ctype.h>
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #undef NULL
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "config.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "lisp.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "buffer.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #include "paths.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #include "commands.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #ifdef lint
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include <sys/inode.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #endif /* lint */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #ifndef X_OK
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #define X_OK 01
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #include <math.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 Lisp_Object Qread_char, Qget_file_char, Qstandard_input;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 /* non-zero if inside `load' */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 int load_in_progress;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 /* Search path for files to be loaded. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 Lisp_Object Vload_path;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 /* File for get_file_char to read from. Use by load */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 static FILE *instream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 /* When nonzero, read conses in pure space */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 static int read_pure;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 /* For use within read-from-string (this reader is non-reentrant!!) */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 static int read_from_string_index;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 static int read_from_string_limit;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 /* Handle unreading and rereading of characters.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 Write READCHAR to read a character,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 UNREAD(c) to unread c to be read again. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 #define READCHAR readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 #define UNREAD(c) unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 register struct buffer *inbuffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 register int c, mpos;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 if (XTYPE (readcharfun) == Lisp_Buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 inbuffer = XBUFFER (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 if (BUF_PT (inbuffer) >= BUF_ZV (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, BUF_PT (inbuffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 SET_BUF_PT (inbuffer, BUF_PT (inbuffer) + 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 if (XTYPE (readcharfun) == Lisp_Marker)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 inbuffer = XMARKER (readcharfun)->buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 mpos = marker_position (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 if (mpos > BUF_ZV (inbuffer) - 1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, mpos);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 if (mpos != BUF_GPT (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 XMARKER (readcharfun)->bufpos++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 Fset_marker (readcharfun, make_number (mpos + 1),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 Fmarker_buffer (readcharfun));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 if (EQ (readcharfun, Qget_file_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 return getc (instream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 /* This used to be return of a conditional expression,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 but that truncated -1 to a char on VMS. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 if (read_from_string_index < read_from_string_limit)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 c = XSTRING (readcharfun)->data[read_from_string_index++];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 c = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 tem = call0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
127 if (NILP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 return XINT (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 /* Unread the character C in the way appropriate for the stream READCHARFUN.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 If the stream is a user function, call it with the char as argument. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 static void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 if (XTYPE (readcharfun) == Lisp_Buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 if (XBUFFER (readcharfun) == current_buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 SET_PT (point - 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 SET_BUF_PT (XBUFFER (readcharfun), BUF_PT (XBUFFER (readcharfun)) - 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 else if (XTYPE (readcharfun) == Lisp_Marker)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 XMARKER (readcharfun)->bufpos--;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 else if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 read_from_string_index--;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 else if (EQ (readcharfun, Qget_file_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 ungetc (c, instream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 call1 (readcharfun, make_number (c));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 static Lisp_Object read0 (), read1 (), read_list (), read_vector ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 /* get a character from the tty */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 DEFUN ("read-char", Fread_char, Sread_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 "Read a character from the command input (keyboard or macro).\n\
851
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
163 It is returned as a number.\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
164 If the user generates an event which is not a character (i.e. a mouse\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
165 click or function key event), `read-char' signals an error. If you\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
166 want to read non-character events, or ignore them, call `read-event'\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
167 or `read-char-exclusive' instead.")
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 val = read_char (0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 if (XTYPE (val) != Lisp_Int)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 unread_command_char = val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 error ("Object read was not a character");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 #else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 val = getchar ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 DEFUN ("read-event", Fread_event, Sread_event, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 "Read an event object from the input stream.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 val = read_char (0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 DEFUN ("read-char-exclusive", Fread_char_exclusive, Sread_char_exclusive, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 "Read a character from the command input (keyboard or macro).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 It is returned as a number. Non character events are ignored.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 #ifndef standalone
851
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
204 do
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
205 {
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
206 val = read_char (0);
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
207 }
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
208 while (XTYPE (val) != Lisp_Int);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 #else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 val = getchar ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 "Don't use this yourself.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 XSET (val, Lisp_Int, getc (instream));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 static void readevalloop ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 static Lisp_Object load_unwind ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 DEFUN ("load", Fload, Sload, 1, 4, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 "Execute a file of Lisp code named FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 First try FILE with `.elc' appended, then try with `.el',\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 then try FILE unmodified.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 This function searches the directories in `load-path'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 If optional second arg NOERROR is non-nil,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 report no error if FILE doesn't exist.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 Print messages at start and end of loading unless\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 optional third arg NOMESSAGE is non-nil.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 If optional fourth arg NOSUFFIX is non-nil, don't try adding\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 suffixes `.elc' or `.el' to the specified name FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 Return t if file exists.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (str, noerror, nomessage, nosuffix)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 Lisp_Object str, noerror, nomessage, nosuffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 register FILE *stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 register int fd = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 register Lisp_Object lispstream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 register FILE **ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 Lisp_Object temp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 struct gcpro gcpro1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 Lisp_Object found;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 str = Fsubstitute_in_file_name (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 /* Avoid weird lossage with null string as arg,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 since it would try to load a directory as a Lisp file */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 if (XSTRING (str)->size > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
259 fd = openp (Vload_path, str, !NILP (nosuffix) ? "" : ".elc:.el:",
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 &found, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 if (fd < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
265 if (NILP (noerror))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 Fsignal (Qfile_error, Fcons (build_string ("Cannot open load file"),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 Fcons (str, Qnil)));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 if (!bcmp (&(XSTRING (found)->data[XSTRING (found)->size - 4]),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 ".elc", 4))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 struct stat s1, s2;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 int result;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 stat (XSTRING (found)->data, &s1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 XSTRING (found)->data[XSTRING (found)->size - 1] = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 result = stat (XSTRING (found)->data, &s2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 message ("Source file `%s' newer than byte-compiled file",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 XSTRING (found)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 XSTRING (found)->data[XSTRING (found)->size - 1] = 'c';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 stream = fdopen (fd, "r");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 if (stream == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 close (fd);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 error ("Failure to create stdio stream for %s", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
295 if (NILP (nomessage))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 message ("Loading %s...", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 GCPRO1 (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 /* We may not be able to store STREAM itself as a Lisp_Object pointer
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 since that is guaranteed to work only for data that has been malloc'd.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 So malloc a full-size pointer, and record the address of that pointer. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 ptr = (FILE **) xmalloc (sizeof (FILE *));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 *ptr = stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 XSET (lispstream, Lisp_Internal_Stream, (int) ptr);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 record_unwind_protect (load_unwind, lispstream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 load_in_progress++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 readevalloop (Qget_file_char, stream, Feval, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 /* Run any load-hooks for this file. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 temp = Fassoc (str, Vafter_load_alist);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
312 if (!NILP (temp))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 Fprogn (Fcdr (temp));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
316 if (!noninteractive && NILP (nomessage))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 message ("Loading %s...done", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 return Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 load_unwind (stream) /* used as unwind-protect function in load */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 Lisp_Object stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 fclose (*(FILE **) XSTRING (stream));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 free (XPNTR (stream));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 if (--load_in_progress < 0) load_in_progress = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 complete_filename_p (pathname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 Lisp_Object pathname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 register unsigned char *s = XSTRING (pathname)->data;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 return (*s == '/'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 #ifdef ALTOS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 || *s == '@'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 #ifdef VMS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 || index (s, ':')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 #endif /* VMS */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 );
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 /* Search for a file whose name is STR, looking in directories
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 in the Lisp list PATH, and trying suffixes from SUFFIX.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 SUFFIX is a string containing possible suffixes separated by colons.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 On success, returns a file descriptor. On failure, returns -1.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 EXEC_ONLY nonzero means don't open the files,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 just look for one that is executable. In this case,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 returns 1 on success.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 If STOREPTR is nonzero, it points to a slot where the name of
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 the file actually found should be stored as a Lisp string.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 Nil is stored there on failure. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 openp (path, str, suffix, storeptr, exec_only)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 Lisp_Object path, str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 char *suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 Lisp_Object *storeptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 int exec_only;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 register int fd;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 int fn_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 char buf[100];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 register char *fn = buf;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 int absolute = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 int want_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 register Lisp_Object filename;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 struct stat st;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 *storeptr = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 if (complete_filename_p (str))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 absolute = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
382 for (; !NILP (path); path = Fcdr (path))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 char *nsuffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 filename = Fexpand_file_name (str, Fcar (path));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 /* If there are non-absolute elts in PATH (eg ".") */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 /* Of course, this could conceivably lose if luser sets
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 default-directory to be something non-absolute... */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 filename = Fexpand_file_name (filename, current_buffer->directory);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 /* Give up on this path element! */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 /* Calculate maximum size of any filename made from
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 this path element/specified file name and any possible suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 want_size = strlen (suffix) + XSTRING (filename)->size + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 if (fn_size < want_size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 fn = (char *) alloca (fn_size = 100 + want_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 nsuffix = suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 /* Loop over suffixes. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 char *esuffix = (char *) index (nsuffix, ':');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 int lsuffix = esuffix ? esuffix - nsuffix : strlen (nsuffix);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 /* Concatenate path element/specified name with the suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 strncpy (fn, XSTRING (filename)->data, XSTRING (filename)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 fn[XSTRING (filename)->size] = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 if (lsuffix != 0) /* Bug happens on CCI if lsuffix is 0. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 strncat (fn, nsuffix, lsuffix);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 /* Ignore file if it's a directory. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 if (stat (fn, &st) >= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 && (st.st_mode & S_IFMT) != S_IFDIR)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 /* Check that we can access or open it. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 if (exec_only)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 fd = (access (fn, X_OK) == 0) ? 1 : -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 fd = open (fn, 0, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 if (fd >= 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 /* We succeeded; return this descriptor and filename. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 *storeptr = build_string (fn);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 return fd;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 /* Advance to next suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 if (esuffix == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 nsuffix += lsuffix + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 if (absolute) return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 unreadpure () /* Used as unwind-protect function in readevalloop */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 read_pure = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 static void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 readevalloop (readcharfun, stream, evalfun, printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 FILE *stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 Lisp_Object (*evalfun) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 int printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 specbind (Qstandard_input, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 instream = stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 if (c == ';')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 while ((c = READCHAR) != '\n' && c != -1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 if (c < 0) break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 if (c == ' ' || c == '\t' || c == '\n' || c == '\f') continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
481 if (!NILP (Vpurify_flag) && c == '(')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 record_unwind_protect (unreadpure, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 val = read_list (-1, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 unbind_to (count + 1, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 val = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 val = (*evalfun) (val);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 if (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 Vvalues = Fcons (val, Vvalues);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 if (EQ (Vstandard_output, Qt))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 Fprin1 (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 Fprint (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
509 DEFUN ("eval-buffer", Feval_buffer, Seval_buffer, 0, 2, "",
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
510 "Execute the current buffer as Lisp code.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
511 Programs can pass two arguments, BUFFER and PRINTFLAG.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
512 BUFFER is the buffer to evaluate (nil means use current buffer).\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
513 PRINTFLAG controls printing of output:\n\
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
514 nil means discard it; anything else is stream for print.\n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
515 \n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
516 If there is no error, point does not move. If there is an error,\n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
517 point remains at the end of the last character read from the buffer.")
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
518 (bufname, printflag)
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
519 Lisp_Object bufname, printflag;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
520 {
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
521 int count = specpdl_ptr - specpdl;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
522 Lisp_Object tem, buf;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
523
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
524 if (NILP (bufname))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
525 buf = Fcurrent_buffer ();
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
526 else
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
527 buf = Fget_buffer (bufname);
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
528 if (NILP (buf))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
529 error ("No such buffer.");
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
530
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
531 if (NILP (printflag))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
532 tem = Qsymbolp;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
533 else
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
534 tem = printflag;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
535 specbind (Qstandard_output, tem);
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
536 record_unwind_protect (save_excursion_restore, save_excursion_save ());
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
537 BUF_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
538 readevalloop (buf, 0, Feval, !NILP (printflag));
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
539 unbind_to (count);
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
540
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
541 return Qnil;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
542 }
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
543
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
544 #if 0
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 DEFUN ("eval-current-buffer", Feval_current_buffer, Seval_current_buffer, 0, 1, "",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 "Execute the current buffer as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 Programs can pass argument PRINTFLAG which controls printing of output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 nil means discard it; anything else is stream for print.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 If there is no error, point does not move. If there is an error,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 point remains at the end of the last character read from the buffer.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 Lisp_Object printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
558 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 SET_PT (BEGV);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
565 readevalloop (Fcurrent_buffer (), 0, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 }
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
568 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 DEFUN ("eval-region", Feval_region, Seval_region, 2, 3, "r",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 "Execute the region as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 When called from programs, expects two arguments,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 giving starting and ending indices in the current buffer\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 of the text to be executed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 Programs can pass third argument PRINTFLAG which controls output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 nil means discard it; anything else is stream for printing it.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 If there is no error, point does not move. If there is an error,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 point remains at the end of the last character read from the buffer.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 (b, e, printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 Lisp_Object b, e, printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
586 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
592 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 record_unwind_protect (save_restriction_restore, save_restriction_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 /* This both uses b and checks its type. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 Fgoto_char (b);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 Fnarrow_to_region (make_number (BEGV), e);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
599 readevalloop (Fcurrent_buffer (), 0, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 #endif /* standalone */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 DEFUN ("read", Fread, Sread, 0, 1, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 "Read one Lisp expression as text from STREAM, return as Lisp object.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 If STREAM is nil, use the value of `standard-input' (which see).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 STREAM or the value of `standard-input' may be:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 a buffer (read from point and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 a marker (read from where it points and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 a function (call it with no arguments for each character,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 call it with a char as argument to push a char back)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 a string (takes text from string, starting at the beginning)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 t (read text line using minibuffer and use it).")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 extern Lisp_Object Fread_minibuffer ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
621 if (NILP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 readcharfun = Vstandard_input;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 if (EQ (readcharfun, Qt))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 readcharfun = Qread_char;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 if (EQ (readcharfun, Qread_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 return Fread_minibuffer (build_string ("Lisp expression: "), Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 return Fcar (Fread_from_string (readcharfun, Qnil, Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 return read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 "Read one Lisp expression which is represented as text by STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 START and END optionally delimit a substring of STRING from which to read;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 they default to 0 and (length STRING) respectively.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 (string, start, end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 Lisp_Object string, start, end;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 int startval, endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 CHECK_STRING (string,0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
650 if (NILP (end))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 endval = XSTRING (string)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 { CHECK_NUMBER (end,2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 endval = XINT (end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 if (endval < 0 || endval > XSTRING (string)->size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 args_out_of_range (string, end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
659 if (NILP (start))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 startval = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 { CHECK_NUMBER (start,1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 startval = XINT (start);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 if (startval < 0 || startval > endval)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 args_out_of_range (string, start);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 read_from_string_index = startval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 read_from_string_limit = endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 tem = read0 (string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 return Fcons (tem, make_number (read_from_string_index));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 /* Use this for recursive reads, in contexts where internal tokens are not allowed. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 read0 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 val = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 if (XTYPE (val) == Lisp_Internal)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 c = XINT (val);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (&c, 1), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 static int read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 static char *read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 read_escape (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 register int c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 switch (c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 case 'a':
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
705 return '\007';
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 case 'b':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 return '\b';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 case 'e':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 return 033;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 case 'f':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 return '\f';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 case 'n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 return '\n';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 case 'r':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 return '\r';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 case 't':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 return '\t';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 case 'v':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 return '\v';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 case '\n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 case 'M':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 c = read_escape (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 return c | 0200;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 case 'C':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 case '^':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 c = read_escape (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 if (c == '?')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 return 0177;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 return (c & (0200 | 037));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 case '0':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 case '1':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 case '2':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 case '3':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 case '4':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 case '5':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 case '6':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 case '7':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 /* An octal escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 register int i = c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 register int count = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 while (++count < 3)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 if ((c = READCHAR) >= '0' && c <= '7')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 i *= 8;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 case 'x':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 /* A hex escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 int i = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 if (c >= '0' && c <= '9')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 else if ((c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 || (c >= 'A' && c <= 'F'))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 if (c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 i += c - 'a' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 i += c - 'A' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 default:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 read1 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 register Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 retry:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 switch (c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 case '(':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 return read_list (0, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 case '[':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 return read_vector (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 case ')':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 case ']':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 XSET (val, Lisp_Internal, c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 case '#':
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
836 c = READCHAR;
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
837 if (c == '[')
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
838 {
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
839 /* Accept compiled functions at read-time so that we don't have to
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
840 build them using function calls. */
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
841 Lisp_Object tmp = read_vector (readcharfun);
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
842 return Fmake_byte_code (XVECTOR(tmp)->size, XVECTOR (tmp)->contents);
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
843 }
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
844 UNREAD (c);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 case ';':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 while ((c = READCHAR) >= 0 && c != '\n');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 case '\'':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 return Fcons (Qquote, Fcons (read0 (readcharfun), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 case '?':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 XSET (val, Lisp_Int, read_escape (readcharfun));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 XSET (val, Lisp_Int, c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 case '\"':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 register char *p = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 int cancel = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 while ((c = READCHAR) >= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 && c != '\"')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 c = read_escape (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 /* c is -1 if \ newline has just been seen */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 if (c < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 if (p == read_buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 cancel = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 *p++ = c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 /* If purifying, and string starts with \ newline,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 return zero instead. This is for doc strings
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
903 that we are really going to find in etc/DOC.nn.nn */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
904 if (!NILP (Vpurify_flag) && NILP (Vdoc_file_name) && cancel)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 return make_number (0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 if (read_pure)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 return make_pure_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 return make_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
913 case '.':
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
914 {
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
915 #ifdef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
916 /* If a period is followed by a number, then we should read it
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
917 as a floating point number. Otherwise, it denotes a dotted
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
918 pair. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
919 int next_char = READCHAR;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
920 UNREAD (next_char);
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
921
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
922 if (! isdigit (next_char))
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
923 #endif
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
924 {
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
925 register Lisp_Object val;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
926 XSET (val, Lisp_Internal, c);
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
927 return val;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
928 }
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
929
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
930 /* Otherwise, we fall through! Note that the atom-reading loop
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
931 below will now loop at least once, assuring that we will not
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
932 try to UNREAD two characters in a row. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
933 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 default:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 if (c <= 040) goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 register char *p = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 while (c > 040 &&
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 !(c == '\"' || c == '\'' || c == ';' || c == '?'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 || c == '(' || c == ')'
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
945 #ifndef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
946 /* If we have floating-point support, then we need
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
947 to allow <digits><dot><digits>. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 || c =='.'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 #endif /* not LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 || c == '[' || c == ']' || c == '#'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 ))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 register char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 *p++ = c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 /* end = read_buffer + read_buffer_size; */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 *p = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 if (c >= 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 /* Is it an integer? */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 register char *p1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 p1 = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 if (*p1 == '+' || *p1 == '-') p1++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 if (p1 != p)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 while (p1 != p && (c = *p1) >= '0' && c <= '9') p1++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 if (p1 == p)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 /* It is. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 XSET (val, Lisp_Int, atoi (read_buffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 if (isfloat_string (read_buffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 return make_float (atof (read_buffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 return intern (read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 #define LEAD_INT 1
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 #define DOT_CHAR 2
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 #define TRAIL_INT 4
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 #define E_CHAR 8
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 #define EXP_INT 16
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 isfloat_string (cp)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 register char *cp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 register state;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 state = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 if (*cp == '+' || *cp == '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 if (isdigit(*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 state |= LEAD_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 cp ++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 if (*cp == '.')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 state |= DOT_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 if (isdigit(*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 state |= TRAIL_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 if (*cp == 'e')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 state |= E_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 if ((*cp == '+') || (*cp == '-'))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 if (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 state |= EXP_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 return (*cp == 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 && (state == (LEAD_INT|DOT_CHAR|TRAIL_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1056 || state == (DOT_CHAR|TRAIL_INT)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 || state == (LEAD_INT|E_CHAR|EXP_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1058 || state == (LEAD_INT|DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1059 || state == (DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 read_vector (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 register Lisp_Object *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 register Lisp_Object tem, vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 register struct Lisp_Cons *otem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 Lisp_Object len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 tem = read_list (1, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 len = Flength (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 vector = (read_pure ? make_pure_vector (XINT (len)) : Fmake_vector (len, Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 size = XVECTOR (vector)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 ptr = XVECTOR (vector)->contents;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 for (i = 0; i < size; i++)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 ptr[i] = read_pure ? Fpurecopy (Fcar (tem)) : Fcar (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 otem = XCONS (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 tem = Fcdr (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 free_cons (otem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 return vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 /* flag = 1 means check for ] to terminate rather than ) and .
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 flag = -1 means check for starting with defun
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 and make structure pure. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 read_list (flag, readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 int flag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 register Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 /* -1 means check next element for defun,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 0 means don't check,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 1 means already checked and found defun. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 int defunflag = flag < 0 ? -1 : 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 Lisp_Object val, tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 register Lisp_Object elt, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 struct gcpro gcpro1, gcpro2;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 val = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 tail = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 GCPRO2 (val, tail);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 elt = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 if (XTYPE (elt) == Lisp_Internal)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 if (flag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 if (XINT (elt) == ']')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (") or . in a vector", 18), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 if (XINT (elt) == ')')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 if (XINT (elt) == '.')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 GCPRO2 (val, tail);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1129 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 XCONS (tail)->cdr = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 val = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 elt = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 if (XTYPE (elt) == Lisp_Internal && XINT (elt) == ')')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (". in wrong context", 18), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("] in a list", 11), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 tem = (read_pure && flag <= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 ? pure_cons (elt, Qnil)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 : Fcons (elt, Qnil));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1144 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 XCONS (tail)->cdr = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 val = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 tail = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 if (defunflag < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 defunflag = EQ (elt, Qdefun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 else if (defunflag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 read_pure = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 Lisp_Object Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 Lisp_Object initial_obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 check_obarray (obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 while (XTYPE (obarray) != Lisp_Vector || XVECTOR (obarray)->size == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 /* If Vobarray is now invalid, force it to be valid. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 if (EQ (Vobarray, obarray)) Vobarray = initial_obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 obarray = wrong_type_argument (Qvectorp, obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 return obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 static int hash_string ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 Lisp_Object oblookup ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 intern (str)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 char *str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 int len = strlen (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 Lisp_Object obarray = Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 if (XTYPE (obarray) != Lisp_Vector || XVECTOR (obarray)->size == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 tem = oblookup (obarray, str, len);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 if (XTYPE (tem) == Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 return tem;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1189 return Fintern ((!NILP (Vpurify_flag)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 ? make_pure_string (str, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 : make_string (str, len)),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 "Return the canonical symbol whose name is STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 If there is none, one is created by this function and returned.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 it defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 (str, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 Lisp_Object str, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 register Lisp_Object tem, sym, *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1205 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 tem = oblookup (obarray, XSTRING (str)->data, XSTRING (str)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 if (XTYPE (tem) != Lisp_Int)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1214 if (!NILP (Vpurify_flag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 str = Fpurecopy (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 sym = Fmake_symbol (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 ptr = &XVECTOR (obarray)->contents[XINT (tem)];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 if (XTYPE (*ptr) == Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 XSYMBOL (sym)->next = XSYMBOL (*ptr);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 XSYMBOL (sym)->next = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 *ptr = sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 return sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 "Return the canonical symbol whose name is STRING, or nil if none exists.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 it defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 (str, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 Lisp_Object str, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 register Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1236 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 tem = oblookup (obarray, XSTRING (str)->data, XSTRING (str)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 if (XTYPE (tem) != Lisp_Int)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 oblookup (obarray, ptr, size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 register char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 int hash, obsize;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 Lisp_Object bucket, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 if (XTYPE (obarray) != Lisp_Vector ||
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 (obsize = XVECTOR (obarray)->size) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 obsize = XVECTOR (obarray)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 /* Combining next two lines breaks VMS C 2.3. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 hash = hash_string (ptr, size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 hash %= obsize;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 bucket = XVECTOR (obarray)->contents[hash];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 if (XFASTINT (bucket) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 ;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 else if (XTYPE (bucket) != Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 error ("Bad data in guts of obarray"); /* Like CADR error message */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 else for (tail = bucket; ; XSET (tail, Lisp_Symbol, XSYMBOL (tail)->next))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 if (XSYMBOL (tail)->name->size == size &&
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 !bcmp (XSYMBOL (tail)->name->data, ptr, size))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 return tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 else if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 XSET (tem, Lisp_Int, hash);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 hash_string (ptr, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 unsigned char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 int len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 register unsigned char *p = ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 register unsigned char *end = p + len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 register unsigned char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 register int hash = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 while (p != end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 c = *p++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 if (c >= 0140) c -= 40;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 hash = ((hash<<3) + (hash>>28) + c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 return hash & 07777777777;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 map_obarray (obarray, fn, arg)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 int (*fn) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 Lisp_Object arg;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 CHECK_VECTOR (obarray, 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 for (i = XVECTOR (obarray)->size - 1; i >= 0; i--)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 tail = XVECTOR (obarray)->contents[i];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 if (XFASTINT (tail) != 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 (*fn) (tail, arg);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 XSET (tail, Lisp_Symbol, XSYMBOL (tail)->next);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 mapatoms_1 (sym, function)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 Lisp_Object sym, function;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 call1 (function, sym);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 "Call FUNCTION on every symbol in OBARRAY.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 OBARRAY defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 (function, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 Lisp_Object function, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1339 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 map_obarray (obarray, mapatoms_1, function);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 #define OBARRAY_SIZE 509
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 init_obarray ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 Lisp_Object oblength;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 int hash;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 Lisp_Object *tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 XFASTINT (oblength) = OBARRAY_SIZE;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 Qnil = Fmake_symbol (make_pure_string ("nil", 3));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 Vobarray = Fmake_vector (oblength, make_number (0));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 initial_obarray = Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 staticpro (&initial_obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 /* Intern nil in the obarray */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 /* These locals are to kludge around a pyramid compiler bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 hash = hash_string ("nil", 3);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 /* Separate statement here to avoid VAXC bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 hash %= OBARRAY_SIZE;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 tem = &XVECTOR (Vobarray)->contents[hash];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 *tem = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 Qunbound = Fmake_symbol (make_pure_string ("unbound", 7));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 XSYMBOL (Qnil)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 XSYMBOL (Qunbound)->value = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 XSYMBOL (Qunbound)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 Qt = intern ("t");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 XSYMBOL (Qnil)->value = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 XSYMBOL (Qnil)->plist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 XSYMBOL (Qt)->value = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 Vpurify_flag = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 Qvariable_documentation = intern ("variable-documentation");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 read_buffer_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 read_buffer = (char *) malloc (read_buffer_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 defsubr (sname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 sym = intern (sname->symbol_name);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 XSET (XSYMBOL (sym)->function, Lisp_Subr, sname);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 #ifdef NOTDEF /* use fset in subr.el now */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 defalias (sname, string)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 char *string;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 sym = intern (string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 XSET (XSYMBOL (sym)->function, Lisp_Subr, sname);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 #endif /* NOTDEF */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 /* New replacement for DefIntVar; it ignores the doc string argument
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 on the assumption that make-docfile will handle that. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 /* Define an "integer variable"; a symbol whose value is forwarded
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 to a C variable of type int. Sample call: */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 /* DEFVARINT ("indent-tabs-mode", &indent_tabs_mode, "Documentation"); */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 defvar_int (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 XSET (XSYMBOL (sym)->value, Lisp_Intfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 /* Similar but define a variable whose value is T if address contains 1,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 NIL if address contains 0 */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 defvar_bool (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 XSET (XSYMBOL (sym)->value, Lisp_Boolfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 /* Similar but define a variable whose value is the Lisp Object stored at address. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 defvar_lisp (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 Lisp_Object *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 XSET (XSYMBOL (sym)->value, Lisp_Objfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 staticpro (address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 /* Similar but don't request gc-marking of the C variable.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 Used when that variable will be gc-marked for some other reason,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 since marking the same slot twice can cause trouble with strings. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 defvar_lisp_nopro (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 Lisp_Object *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 XSET (XSYMBOL (sym)->value, Lisp_Objfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 /* Similar but define a variable whose value is the Lisp Object stored in
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 the current buffer. address is the address of the slot in the buffer that is current now. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 void
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
1475 defvar_per_buffer (namestring, address, type, doc)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 Lisp_Object *address;
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
1478 Lisp_Object type;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 int offset;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 extern struct buffer buffer_local_symbols;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 offset = (char *)address - (char *)current_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 XSET (XSYMBOL (sym)->value, Lisp_Buffer_Objfwd,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 (Lisp_Object *) offset);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 *(Lisp_Object *)(offset + (char *)&buffer_local_symbols) = sym;
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
1491 *(Lisp_Object *)(offset + (char *)&buffer_local_types) = type;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 if (*(int *)(offset + (char *)&buffer_local_flags) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 slot of buffer_local_flags */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 abort ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 #endif /* standalone */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1500 init_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 {
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1502 char *normal;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1504 /* Compute the default load-path. */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1505 #ifdef CANNOT_DUMP
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1506 normal = PATH_LOADSEARCH;
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1507 Vload_path = decode_env_path (0, normal);
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1508 #else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1509 if (NILP (Vpurify_flag))
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1510 normal = PATH_LOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1511 else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1512 normal = PATH_DUMPLOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1513
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1514 /* In a dumped Emacs, we normally have to reset the value of
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1515 Vload_path from PATH_LOADSEARCH, since the value that was dumped
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1516 uses ../lisp, instead of the path of the installed elisp
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1517 libraries. However, if it appears that Vload_path was changed
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1518 from the default before dumping, don't override that value. */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1519 if (initialized)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1520 {
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1521 Lisp_Object dump_path;
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1522
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1523 dump_path = decode_env_path (0, PATH_DUMPLOADSEARCH);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1524 if (! NILP (Fequal (dump_path, Vload_path)))
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1525 Vload_path = decode_env_path (0, normal);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1526 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1527 else
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1528 Vload_path = decode_env_path (0, normal);
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1529 #endif
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1530
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 /* Warn if dirs in the *standard* path don't exist. */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1532 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1533 Lisp_Object path_tail;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1535 for (path_tail = Vload_path;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1536 !NILP (path_tail);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1537 path_tail = XCONS (path_tail)->cdr)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1538 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1539 Lisp_Object dirfile;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1540 dirfile = Fcar (path_tail);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1541 if (XTYPE (dirfile) == Lisp_String)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1542 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1543 dirfile = Fdirectory_file_name (dirfile);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1544 if (access (XSTRING (dirfile)->data, 0) < 0)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1545 printf ("Warning: lisp library (%s) does not exist.\n",
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1546 XSTRING (Fcar (path_tail))->data);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1547 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1548 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1549 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1550
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1551 /* If the EMACSLOADPATH environment variable is set, use its value.
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1552 This doesn't apply if we're dumping. */
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1553 if (NILP (Vpurify_flag)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1554 && egetenv ("EMACSLOADPATH"))
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1555 Vload_path = decode_env_path ("EMACSLOADPATH", normal);
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1556
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1557 Vvalues = Qnil;
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1558
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 load_in_progress = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 void
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1563 syms_of_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 defsubr (&Sread);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 defsubr (&Sread_from_string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 defsubr (&Sintern);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 defsubr (&Sintern_soft);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 defsubr (&Sload);
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
1570 defsubr (&Seval_buffer);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 defsubr (&Seval_region);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 defsubr (&Sread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 defsubr (&Sread_char_exclusive);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 defsubr (&Sread_event);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 defsubr (&Sget_file_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 defsubr (&Smapatoms);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 DEFVAR_LISP ("obarray", &Vobarray,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 "Symbol table for use by `intern' and `read'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 It is a vector whose length ought to be prime for best results.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 The vector's contents don't make sense if examined from Lisp programs;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 to find all the symbols in an obarray, use `mapatoms'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 DEFVAR_LISP ("values", &Vvalues,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 "List of values of all expressions which were read, evaluated and printed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 Order is reverse chronological.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 DEFVAR_LISP ("standard-input", &Vstandard_input,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 "Stream for read to get input from.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 See documentation of `read' for possible values.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 Vstandard_input = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 DEFVAR_LISP ("load-path", &Vload_path,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 "*List of directories to search for files to load.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 Each element is a string (directory name) or nil (try default directory).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 Initialized based on EMACSLOADPATH environment variable, if any,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 otherwise to default specified in by file `paths.h' when Emacs was built.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 DEFVAR_BOOL ("load-in-progress", &load_in_progress,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 "Non-nil iff inside of `load'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 DEFVAR_LISP ("after-load-alist", &Vafter_load_alist,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 "An alist of expressions to be evalled when particular files are loaded.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 Each element looks like (FILENAME FORMS...).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 When `load' is run and the file-name argument is FILENAME,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 the FORMS in the corresponding element are executed at the end of loading.\n\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 FILENAME must match exactly! Normally FILENAME is the name of a library,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 with no directory specified, since that is how `load' is normally called.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 An error in FORMS does not undo the load,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 but does prevent execution of the rest of the FORMS.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 Vafter_load_alist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 Qstandard_input = intern ("standard-input");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 staticpro (&Qstandard_input);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 Qread_char = intern ("read-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 staticpro (&Qread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 Qget_file_char = intern ("get-file-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 staticpro (&Qget_file_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 }