annotate src/lread.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 8488ad8eb302
children 09d0f4b26641
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,
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2901
diff changeset
3 1993 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 #include "config.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "lisp.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #include "buffer.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "paths.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #include "commands.h"
1591
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
34 #include "keyboard.h"
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
35 #include "termhooks.h"
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #ifdef lint
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include <sys/inode.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #endif /* lint */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #ifndef X_OK
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #define X_OK 01
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #ifdef LISP_FLOAT_TYPE
2781
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
47 #ifdef STDC_HEADERS
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
48 #include <stdlib.h>
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
49 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #include <math.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
53 Lisp_Object Qread_char, Qget_file_char, Qstandard_input, Qcurrent_load_list;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
55 Lisp_Object Qascii_character, Qload;
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
56
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
57 extern Lisp_Object Qevent_symbol_element_mask;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 /* non-zero if inside `load' */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 int load_in_progress;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 /* Search path for files to be loaded. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 Lisp_Object Vload_path;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
65 /* This is the user-visible association list that maps features to
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
66 lists of defs in their load files. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
67 Lisp_Object Vload_history;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
68
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
69 /* This is useud to build the load history. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
70 Lisp_Object Vcurrent_load_list;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
71
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 /* File for get_file_char to read from. Use by load */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 static FILE *instream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 /* When nonzero, read conses in pure space */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 static int read_pure;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 /* For use within read-from-string (this reader is non-reentrant!!) */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 static int read_from_string_index;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 static int read_from_string_limit;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 /* Handle unreading and rereading of characters.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 Write READCHAR to read a character,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 UNREAD(c) to unread c to be read again. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 #define READCHAR readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 #define UNREAD(c) unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 register struct buffer *inbuffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 register int c, mpos;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 if (XTYPE (readcharfun) == Lisp_Buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 inbuffer = XBUFFER (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 if (BUF_PT (inbuffer) >= BUF_ZV (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, BUF_PT (inbuffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 SET_BUF_PT (inbuffer, BUF_PT (inbuffer) + 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 if (XTYPE (readcharfun) == Lisp_Marker)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 inbuffer = XMARKER (readcharfun)->buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 mpos = marker_position (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 if (mpos > BUF_ZV (inbuffer) - 1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, mpos);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 if (mpos != BUF_GPT (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 XMARKER (readcharfun)->bufpos++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 Fset_marker (readcharfun, make_number (mpos + 1),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 Fmarker_buffer (readcharfun));
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 if (EQ (readcharfun, Qget_file_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 return getc (instream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 /* This used to be return of a conditional expression,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 but that truncated -1 to a char on VMS. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 if (read_from_string_index < read_from_string_limit)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 c = XSTRING (readcharfun)->data[read_from_string_index++];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 c = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 tem = call0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
141 if (NILP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 return XINT (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 /* Unread the character C in the way appropriate for the stream READCHARFUN.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 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
148
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 static void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 if (XTYPE (readcharfun) == Lisp_Buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 if (XBUFFER (readcharfun) == current_buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 SET_PT (point - 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 SET_BUF_PT (XBUFFER (readcharfun), BUF_PT (XBUFFER (readcharfun)) - 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 else if (XTYPE (readcharfun) == Lisp_Marker)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 XMARKER (readcharfun)->bufpos--;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 else if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 read_from_string_index--;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 else if (EQ (readcharfun, Qget_file_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 ungetc (c, instream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 call1 (readcharfun, make_number (c));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 static Lisp_Object read0 (), read1 (), read_list (), read_vector ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 /* get a character from the tty */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174
1519
5d0837ebee9c * lread.c (read_char): Add an extern declaration for this,
Jim Blandy <jimb@redhat.com>
parents: 1092
diff changeset
175 extern Lisp_Object read_char ();
5d0837ebee9c * lread.c (read_char): Add an extern declaration for this,
Jim Blandy <jimb@redhat.com>
parents: 1092
diff changeset
176
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
177 /* Read input events until we get one that's acceptable for our purposes.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
178
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
179 If NO_SWITCH_FRAME is non-zero, switch-frame events are stashed
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
180 until we get a character we like, and then stuffed into
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
181 unread_switch_frame.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
182
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
183 If ASCII_REQUIRED is non-zero, we check function key events to see
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
184 if the unmodified version of the symbol has a Qascii_character
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
185 property, and use that character, if present.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
186
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
187 If ERROR_NONASCII is non-zero, we signal an error if the input we
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
188 get isn't an ASCII character with modifiers. If it's zero but
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
189 ASCII_REQUIRED is non-zero, we just re-read until we get an ASCII
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
190 character. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
191 Lisp_Object
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
192 read_filtered_event (no_switch_frame, ascii_required, error_nonascii)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
193 int no_switch_frame, ascii_required, error_nonascii;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
194 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
195 #ifdef standalone
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
196 return make_number (getchar ());
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
197 #else
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
198 register Lisp_Object val;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
199 register Lisp_Object delayed_switch_frame = Qnil;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
200
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
201 /* Read until we get an acceptable event. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
202 retry:
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
203 val = read_char (0, 0, 0, Qnil, 0);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
204
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
205 /* switch-frame events are put off until after the next ASCII
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
206 character. This is better than signalling an error just because
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
207 the last characters were typed to a separate minibuffer frame,
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
208 for example. Eventually, some code which can deal with
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
209 switch-frame events will read it and process it. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
210 if (no_switch_frame
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
211 && EVENT_HAS_PARAMETERS (val)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
212 && EQ (EVENT_HEAD (val), Qswitch_frame))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
213 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
214 delayed_switch_frame = val;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
215 goto retry;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
216 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
217
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
218 if (ascii_required)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
219 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
220 /* Convert certain symbols to their ASCII equivalents. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
221 if (XTYPE (val) == Lisp_Symbol)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
222 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
223 Lisp_Object tem, tem1, tem2;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
224 tem = Fget (val, Qevent_symbol_element_mask);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
225 if (!NILP (tem))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
226 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
227 tem1 = Fget (Fcar (tem), Qascii_character);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
228 /* Merge this symbol's modifier bits
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
229 with the ASCII equivalent of its basic code. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
230 if (!NILP (tem1))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
231 XFASTINT (val) = XINT (tem1) | XINT (Fcar (Fcdr (tem)));
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
232 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
233 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
234
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
235 /* If we don't have a character now, deal with it appropriately. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
236 if (XTYPE (val) != Lisp_Int)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
237 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
238 if (error_nonascii)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
239 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
240 unread_command_events = Fcons (val, Qnil);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
241 error ("Non-character input-event");
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
242 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
243 else
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
244 goto retry;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
245 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
246 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
247
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
248 if (! NILP (delayed_switch_frame))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
249 unread_switch_frame = delayed_switch_frame;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
250
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
251 return val;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
252 #endif
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
253 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
254
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 DEFUN ("read-char", Fread_char, Sread_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 "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
257 It is returned as a number.\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
258 If the user generates an event which is not a character (i.e. a mouse\n\
1591
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
259 click or function key event), `read-char' signals an error. As an\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
260 exception, switch-frame events are put off until non-ASCII events can\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
261 be read.\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
262 If you want to read non-character events, or ignore them, call\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
263 `read-event' or `read-char-exclusive' instead.")
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
266 return read_filtered_event (1, 1, 1);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 DEFUN ("read-event", Fread_event, Sread_event, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 "Read an event object from the input stream.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
273 return read_filtered_event (0, 0, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 DEFUN ("read-char-exclusive", Fread_char_exclusive, Sread_char_exclusive, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 "Read a character from the command input (keyboard or macro).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 It is returned as a number. Non character events are ignored.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
281 return read_filtered_event (1, 1, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 "Don't use this yourself.")
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 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 XSET (val, Lisp_Int, getc (instream));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 static void readevalloop ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 static Lisp_Object load_unwind ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 DEFUN ("load", Fload, Sload, 1, 4, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 "Execute a file of Lisp code named FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 First try FILE with `.elc' appended, then try with `.el',\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 then try FILE unmodified.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 This function searches the directories in `load-path'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 If optional second arg NOERROR is non-nil,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 report no error if FILE doesn't exist.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 Print messages at start and end of loading unless\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 optional third arg NOMESSAGE is non-nil.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 If optional fourth arg NOSUFFIX is non-nil, don't try adding\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 suffixes `.elc' or `.el' to the specified name FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 Return t if file exists.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (str, noerror, nomessage, nosuffix)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 Lisp_Object str, noerror, nomessage, nosuffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 register FILE *stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 register int fd = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 register Lisp_Object lispstream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 register FILE **ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 Lisp_Object temp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 struct gcpro gcpro1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 Lisp_Object found;
1758
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
319 /* 1 means inhibit the message at the beginning. */
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
320 int nomessage1 = 0;
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
321 Lisp_Object handler;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 str = Fsubstitute_in_file_name (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
326 /* If file name is magic, call the handler. */
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
327 handler = Ffind_file_name_handler (str);
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
328 if (!NILP (handler))
3704
8488ad8eb302 (Fload): Use call5.
Richard M. Stallman <rms@gnu.org>
parents: 3625
diff changeset
329 return call5 (handler, Qload, str, noerror, nomessage, nosuffix);
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
330
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 /* Avoid weird lossage with null string as arg,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 since it would try to load a directory as a Lisp file */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 if (XSTRING (str)->size > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
335 fd = openp (Vload_path, str, !NILP (nosuffix) ? "" : ".elc:.el:",
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 &found, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 if (fd < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
341 if (NILP (noerror))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 Fsignal (Qfile_error, Fcons (build_string ("Cannot open load file"),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 Fcons (str, Qnil)));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 if (!bcmp (&(XSTRING (found)->data[XSTRING (found)->size - 4]),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 ".elc", 4))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 struct stat s1, s2;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 int result;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 stat (XSTRING (found)->data, &s1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 XSTRING (found)->data[XSTRING (found)->size - 1] = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 result = stat (XSTRING (found)->data, &s2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime)
1758
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
359 {
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
360 message ("Source file `%s' newer than byte-compiled file",
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
361 XSTRING (found)->data);
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
362 /* Don't immediately overwrite this message. */
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
363 if (!noninteractive)
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
364 nomessage1 = 1;
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
365 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 XSTRING (found)->data[XSTRING (found)->size - 1] = 'c';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 stream = fdopen (fd, "r");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 if (stream == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 close (fd);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 error ("Failure to create stdio stream for %s", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
1758
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
376 if (NILP (nomessage) && !nomessage1)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 message ("Loading %s...", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 GCPRO1 (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 /* 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
381 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
382 So malloc a full-size pointer, and record the address of that pointer. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 ptr = (FILE **) xmalloc (sizeof (FILE *));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 *ptr = stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 XSET (lispstream, Lisp_Internal_Stream, (int) ptr);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 record_unwind_protect (load_unwind, lispstream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 load_in_progress++;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
388 readevalloop (Qget_file_char, stream, str, Feval, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 /* Run any load-hooks for this file. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 temp = Fassoc (str, Vafter_load_alist);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
393 if (!NILP (temp))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 Fprogn (Fcdr (temp));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
397 if (!noninteractive && NILP (nomessage))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 message ("Loading %s...done", XSTRING (str)->data);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 return Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 load_unwind (stream) /* used as unwind-protect function in load */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 Lisp_Object stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 fclose (*(FILE **) XSTRING (stream));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2044
diff changeset
407 xfree (XPNTR (stream));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 if (--load_in_progress < 0) load_in_progress = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 complete_filename_p (pathname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 Lisp_Object pathname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 register unsigned char *s = XSTRING (pathname)->data;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 return (*s == '/'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 #ifdef ALTOS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 || *s == '@'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 #ifdef VMS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 || index (s, ':')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 #endif /* VMS */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 );
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 /* Search for a file whose name is STR, looking in directories
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 in the Lisp list PATH, and trying suffixes from SUFFIX.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 SUFFIX is a string containing possible suffixes separated by colons.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 On success, returns a file descriptor. On failure, returns -1.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 EXEC_ONLY nonzero means don't open the files,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 just look for one that is executable. In this case,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 returns 1 on success.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 If STOREPTR is nonzero, it points to a slot where the name of
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 the file actually found should be stored as a Lisp string.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 Nil is stored there on failure. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 openp (path, str, suffix, storeptr, exec_only)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 Lisp_Object path, str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 char *suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 Lisp_Object *storeptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 int exec_only;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 register int fd;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 int fn_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 char buf[100];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 register char *fn = buf;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 int absolute = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 int want_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 register Lisp_Object filename;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 struct stat st;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 *storeptr = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 if (complete_filename_p (str))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 absolute = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
463 for (; !NILP (path); path = Fcdr (path))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 char *nsuffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 filename = Fexpand_file_name (str, Fcar (path));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 /* If there are non-absolute elts in PATH (eg ".") */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 /* Of course, this could conceivably lose if luser sets
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 default-directory to be something non-absolute... */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 filename = Fexpand_file_name (filename, current_buffer->directory);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 /* Give up on this path element! */
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
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 /* Calculate maximum size of any filename made from
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 this path element/specified file name and any possible suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 want_size = strlen (suffix) + XSTRING (filename)->size + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 if (fn_size < want_size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 fn = (char *) alloca (fn_size = 100 + want_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 nsuffix = suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 /* Loop over suffixes. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 char *esuffix = (char *) index (nsuffix, ':');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 int lsuffix = esuffix ? esuffix - nsuffix : strlen (nsuffix);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 /* Concatenate path element/specified name with the suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 strncpy (fn, XSTRING (filename)->data, XSTRING (filename)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 fn[XSTRING (filename)->size] = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 if (lsuffix != 0) /* Bug happens on CCI if lsuffix is 0. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 strncat (fn, nsuffix, lsuffix);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 /* Ignore file if it's a directory. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 if (stat (fn, &st) >= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 && (st.st_mode & S_IFMT) != S_IFDIR)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 /* Check that we can access or open it. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 if (exec_only)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 fd = (access (fn, X_OK) == 0) ? 1 : -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 fd = open (fn, 0, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 if (fd >= 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 /* We succeeded; return this descriptor and filename. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 *storeptr = build_string (fn);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 return fd;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 /* Advance to next suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 if (esuffix == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 nsuffix += lsuffix + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 if (absolute) return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
530 /* Merge the list we've accumulated of globals from the current input source
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
531 into the load_history variable. The details depend on whether
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
532 the source has an associated file name or not. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
533
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
534 static void
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
535 build_load_history (stream, source)
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
536 FILE *stream;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
537 Lisp_Object source;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
538 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
539 register Lisp_Object tail, prev, newelt;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
540 register Lisp_Object tem, tem2;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
541 register int foundit, loading;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
542
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
543 /* Don't bother recording anything for preloaded files. */
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
544 if (!NILP (Vpurify_flag))
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
545 return;
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
546
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
547 loading = stream || !NARROWED;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
548
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
549 tail = Vload_history;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
550 prev = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
551 foundit = 0;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
552 while (!NILP (tail))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
553 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
554 tem = Fcar (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
555
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
556 /* Find the feature's previous assoc list... */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
557 if (!NILP (Fequal (source, Fcar (tem))))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
558 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
559 foundit = 1;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
560
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
561 /* If we're loading, remove it. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
562 if (loading)
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
563 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
564 if (NILP (prev))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
565 Vload_history = Fcdr (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
566 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
567 Fsetcdr (prev, Fcdr (tail));
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
568 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
569
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
570 /* Otherwise, cons on new symbols that are not already members. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
571 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
572 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
573 tem2 = Vcurrent_load_list;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
574
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
575 while (CONSP (tem2))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
576 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
577 newelt = Fcar (tem2);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
578
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
579 if (NILP (Fmemq (newelt, tem)))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
580 Fsetcar (tail, Fcons (Fcar (tem),
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
581 Fcons (newelt, Fcdr (tem))));
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
582
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
583 tem2 = Fcdr (tem2);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
584 QUIT;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
585 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
586 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
587 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
588 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
589 prev = tail;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
590 tail = Fcdr (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
591 QUIT;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
592 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
593
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
594 /* If we're loading, cons the new assoc onto the front of load-history,
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
595 the most-recently-loaded position. Also do this if we didn't find
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
596 an existing member for the current source. */
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
597 if (loading || !foundit)
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
598 Vload_history = Fcons (Fnreverse (Vcurrent_load_list),
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
599 Vload_history);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
600 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
601
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 unreadpure () /* Used as unwind-protect function in readevalloop */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 read_pure = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 static void
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
610 readevalloop (readcharfun, stream, sourcename, evalfun, printflag)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 Lisp_Object readcharfun;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
612 FILE *stream;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
613 Lisp_Object sourcename;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 Lisp_Object (*evalfun) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 int printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 int count = specpdl_ptr - specpdl;
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
620 struct gcpro gcpro1;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 specbind (Qstandard_input, readcharfun);
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
623 specbind (Qcurrent_load_list, Qnil);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
625 GCPRO1 (sourcename);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
626
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
627 LOADHIST_ATTACH (sourcename);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
628
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 instream = stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 if (c == ';')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 while ((c = READCHAR) != '\n' && c != -1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 if (c < 0) break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 if (c == ' ' || c == '\t' || c == '\n' || c == '\f') continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
641 if (!NILP (Vpurify_flag) && c == '(')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 record_unwind_protect (unreadpure, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 val = read_list (-1, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 unbind_to (count + 1, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 val = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 val = (*evalfun) (val);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 if (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 Vvalues = Fcons (val, Vvalues);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 if (EQ (Vstandard_output, Qt))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 Fprin1 (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 Fprint (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
664 build_load_history (stream, sourcename);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
665 UNGCPRO;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
666
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
672 DEFUN ("eval-buffer", Feval_buffer, Seval_buffer, 0, 2, "",
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
673 "Execute the current buffer as Lisp code.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
674 Programs can pass two arguments, BUFFER and PRINTFLAG.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
675 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
676 PRINTFLAG controls printing of output:\n\
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
677 nil means discard it; anything else is stream for print.\n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
678 \n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
679 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
680 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
681 (bufname, printflag)
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
682 Lisp_Object bufname, printflag;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
683 {
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
684 int count = specpdl_ptr - specpdl;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
685 Lisp_Object tem, buf;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
686
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
687 if (NILP (bufname))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
688 buf = Fcurrent_buffer ();
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
689 else
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
690 buf = Fget_buffer (bufname);
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
691 if (NILP (buf))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
692 error ("No such buffer.");
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
693
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
694 if (NILP (printflag))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
695 tem = Qsymbolp;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
696 else
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
697 tem = printflag;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
698 specbind (Qstandard_output, tem);
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
699 record_unwind_protect (save_excursion_restore, save_excursion_save ());
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
700 BUF_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
701 readevalloop (buf, 0, XBUFFER (buf)->filename, Feval, !NILP (printflag));
1924
21bd3a2189d3 * keyboard.c (recursive_edit_1, command_loop_1): Pass the proper
Jim Blandy <jimb@redhat.com>
parents: 1887
diff changeset
702 unbind_to (count, Qnil);
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
703
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
704 return Qnil;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
705 }
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
706
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
707 #if 0
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 DEFUN ("eval-current-buffer", Feval_current_buffer, Seval_current_buffer, 0, 1, "",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 "Execute the current buffer as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 Programs can pass argument PRINTFLAG which controls printing of output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 nil means discard it; anything else is stream for print.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 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
714 point remains at the end of the last character read from the buffer.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 Lisp_Object printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 int count = specpdl_ptr - specpdl;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
719 Lisp_Object tem, cbuf;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
720
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
721 cbuf = Fcurrent_buffer ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
723 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 SET_PT (BEGV);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
730 readevalloop (cbuf, 0, XBUFFER (cbuf)->filename, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 }
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
733 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 DEFUN ("eval-region", Feval_region, Seval_region, 2, 3, "r",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 "Execute the region as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 When called from programs, expects two arguments,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 giving starting and ending indices in the current buffer\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 of the text to be executed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 Programs can pass third argument PRINTFLAG which controls output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 nil means discard it; anything else is stream for printing it.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 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
744 point remains at the end of the last character read from the buffer.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 (b, e, printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 Lisp_Object b, e, printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 int count = specpdl_ptr - specpdl;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
749 Lisp_Object tem, cbuf;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
750
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
751 cbuf = Fcurrent_buffer ();
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
753 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
759 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 record_unwind_protect (save_restriction_restore, save_restriction_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 /* This both uses b and checks its type. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 Fgoto_char (b);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 Fnarrow_to_region (make_number (BEGV), e);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
766 readevalloop (cbuf, 0, XBUFFER (cbuf)->filename, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 #endif /* standalone */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 DEFUN ("read", Fread, Sread, 0, 1, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 "Read one Lisp expression as text from STREAM, return as Lisp object.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 If STREAM is nil, use the value of `standard-input' (which see).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 STREAM or the value of `standard-input' may be:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 a buffer (read from point and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 a marker (read from where it points and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 a function (call it with no arguments for each character,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 call it with a char as argument to push a char back)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 a string (takes text from string, starting at the beginning)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 t (read text line using minibuffer and use it).")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 extern Lisp_Object Fread_minibuffer ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
788 if (NILP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 readcharfun = Vstandard_input;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 if (EQ (readcharfun, Qt))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 readcharfun = Qread_char;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 if (EQ (readcharfun, Qread_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 return Fread_minibuffer (build_string ("Lisp expression: "), Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 if (XTYPE (readcharfun) == Lisp_String)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 return Fcar (Fread_from_string (readcharfun, Qnil, Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 return read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 "Read one Lisp expression which is represented as text by STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 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
808 they default to 0 and (length STRING) respectively.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 (string, start, end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 Lisp_Object string, start, end;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 int startval, endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 CHECK_STRING (string,0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
817 if (NILP (end))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 endval = XSTRING (string)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 { CHECK_NUMBER (end,2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 endval = XINT (end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 if (endval < 0 || endval > XSTRING (string)->size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 args_out_of_range (string, end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
826 if (NILP (start))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 startval = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 { CHECK_NUMBER (start,1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 startval = XINT (start);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 if (startval < 0 || startval > endval)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 args_out_of_range (string, start);
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 read_from_string_index = startval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 read_from_string_limit = endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 tem = read0 (string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 return Fcons (tem, make_number (read_from_string_index));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 /* Use this for recursive reads, in contexts where internal tokens are not allowed. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 read0 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 val = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 if (XTYPE (val) == Lisp_Internal)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 c = XINT (val);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (&c, 1), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 return 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
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 static int read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 static char *read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 read_escape (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 register int c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 switch (c)
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 'a':
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
872 return '\007';
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 case 'b':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 return '\b';
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
875 case 'd':
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
876 return 0177;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 case 'e':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 return 033;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 case 'f':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 return '\f';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 case 'n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 return '\n';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 case 'r':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 return '\r';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 case 't':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 return '\t';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 case 'v':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 return '\v';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 case '\n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 case 'M':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 c = read_escape (readcharfun);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
899 return c | meta_modifier;
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
900
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
901 case 'S':
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
902 c = READCHAR;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
903 if (c != '-')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
904 error ("Invalid escape character syntax");
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
905 c = READCHAR;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
906 if (c == '\\')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
907 c = read_escape (readcharfun);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
908 return c | shift_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
909
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
910 case 'H':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
911 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
912 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
913 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
914 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
915 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
916 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
917 return c | hyper_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
918
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
919 case 'A':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
920 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
921 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
922 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
923 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
924 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
925 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
926 return c | alt_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
927
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
928 case 's':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
929 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
930 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
931 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
932 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
933 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
934 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
935 return c | super_modifier;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 case 'C':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 case '^':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 c = read_escape (readcharfun);
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
945 if ((c & 0177) == '?')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
946 return 0177 | c;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
947 /* ASCII control chars are made from letters (both cases),
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
948 as well as the non-letters within 0100...0137. */
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
949 else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
950 return (c & (037 | ~0177));
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
951 else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
952 return (c & (037 | ~0177));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 else
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
954 return c | ctrl_modifier;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 case '0':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 case '1':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 case '2':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 case '3':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 case '4':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 case '5':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 case '6':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 case '7':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 /* An octal escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 register int i = c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 register int count = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 while (++count < 3)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 if ((c = READCHAR) >= '0' && c <= '7')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 i *= 8;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 case 'x':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 /* A hex escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 int i = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 if (c >= '0' && c <= '9')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 else if ((c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 || (c >= 'A' && c <= 'F'))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 if (c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 i += c - 'a' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 i += c - 'A' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 default:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 read1 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 register Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 retry:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 switch (c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 case '(':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 return read_list (0, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 case '[':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 return read_vector (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 case ')':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 case ']':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 XSET (val, Lisp_Internal, c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 case '#':
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1047 c = READCHAR;
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1048 if (c == '[')
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1049 {
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1050 /* 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
1051 build them using function calls. */
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1052 Lisp_Object tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1053 tmp = read_vector (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1054 return Fmake_byte_code (XVECTOR (tmp)->size,
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1055 XVECTOR (tmp)->contents);
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1056 }
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1057 #ifdef USE_TEXT_PROPERTIES
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1058 if (c == '(')
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1059 {
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1060 Lisp_Object tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1061 struct gcpro gcpro1;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1062
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1063 /* Read the string itself. */
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1064 tmp = read1 (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1065 if (XTYPE (tmp) != Lisp_String)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1066 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1067 GCPRO1 (tmp);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1068 /* Read the intervals and their properties. */
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1069 while (1)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1070 {
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1071 Lisp_Object beg, end, plist;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1072
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1073 beg = read1 (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1074 if (XTYPE (beg) == Lisp_Internal)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1075 {
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1076 if (XINT (beg) == ')')
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1077 break;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1078 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("invalid string property list", 28), Qnil));
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1079 }
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1080 end = read1 (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1081 if (XTYPE (end) == Lisp_Internal)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1082 Fsignal (Qinvalid_read_syntax,
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1083 Fcons (make_string ("invalid string property list", 28), Qnil));
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1084
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1085 plist = read1 (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1086 if (XTYPE (plist) == Lisp_Internal)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1087 Fsignal (Qinvalid_read_syntax,
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1088 Fcons (make_string ("invalid string property list", 28), Qnil));
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1089 Fset_text_properties (beg, end, plist, tmp);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1090 }
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1091 UNGCPRO;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1092 return tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1093 }
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1094 #endif
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1095 UNREAD (c);
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1096 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 case ';':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 while ((c = READCHAR) >= 0 && c != '\n');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 case '\'':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 return Fcons (Qquote, Fcons (read0 (readcharfun), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 case '?':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 XSET (val, Lisp_Int, read_escape (readcharfun));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 XSET (val, Lisp_Int, c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 case '\"':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 register char *p = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 int cancel = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 while ((c = READCHAR) >= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 && c != '\"')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 c = read_escape (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 /* c is -1 if \ newline has just been seen */
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1142 if (c == -1)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 if (p == read_buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 cancel = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 }
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1147 else if (c & CHAR_META)
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1148 /* Move the meta bit to the right place for a string. */
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1149 *p++ = (c & ~CHAR_META) | 0x80;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 *p++ = c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 /* If purifying, and string starts with \ newline,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 return zero instead. This is for doc strings
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1157 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
1158 if (!NILP (Vpurify_flag) && NILP (Vdoc_file_name) && cancel)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 return make_number (0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 if (read_pure)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 return make_pure_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 return make_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1167 case '.':
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1168 {
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1169 #ifdef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1170 /* 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
1171 as a floating point number. Otherwise, it denotes a dotted
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1172 pair. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1173 int next_char = READCHAR;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1174 UNREAD (next_char);
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1175
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1176 if (! isdigit (next_char))
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1177 #endif
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1178 {
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1179 register Lisp_Object val;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1180 XSET (val, Lisp_Internal, c);
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1181 return val;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1182 }
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1183
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1184 /* Otherwise, we fall through! Note that the atom-reading loop
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1185 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
1186 try to UNREAD two characters in a row. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1187 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 default:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 if (c <= 040) goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 register char *p = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 while (c > 040 &&
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 !(c == '\"' || c == '\'' || c == ';' || c == '?'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 || c == '(' || c == ')'
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1199 #ifndef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1200 /* If we have floating-point support, then we need
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1201 to allow <digits><dot><digits>. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 || c =='.'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 #endif /* not LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 || c == '[' || c == ']' || c == '#'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 ))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 register char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 *p++ = c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 /* end = read_buffer + read_buffer_size; */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 *p = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 if (c >= 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 /* Is it an integer? */
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 char *p1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 p1 = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 if (*p1 == '+' || *p1 == '-') p1++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 if (p1 != p)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 while (p1 != p && (c = *p1) >= '0' && c <= '9') p1++;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1241 #ifdef LISP_FLOAT_TYPE
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1242 /* Integers can have trailing decimal points. */
1827
e31051f17b9d * lread.c (read1): Although digits followed by a '.' are an
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
1243 if (p1 > read_buffer && p1 < p && *p1 == '.') p1++;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1244 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 if (p1 == p)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1246 /* It is an integer. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1248 #ifdef LISP_FLOAT_TYPE
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1249 if (p1[-1] == '.')
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1250 p1[-1] = '\0';
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1251 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 XSET (val, Lisp_Int, atoi (read_buffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 if (isfloat_string (read_buffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 return make_float (atof (read_buffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 return intern (read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 #define LEAD_INT 1
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 #define DOT_CHAR 2
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 #define TRAIL_INT 4
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 #define E_CHAR 8
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 #define EXP_INT 16
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 isfloat_string (cp)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 register char *cp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 register state;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 state = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 if (*cp == '+' || *cp == '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 if (isdigit(*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 state |= LEAD_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 cp ++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 if (*cp == '.')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 state |= DOT_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 if (isdigit(*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 state |= TRAIL_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 if (*cp == 'e')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 state |= E_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 if ((*cp == '+') || (*cp == '-'))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 if (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 state |= EXP_INT;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 while (isdigit (*cp))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 return (*cp == 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 && (state == (LEAD_INT|DOT_CHAR|TRAIL_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1318 || state == (DOT_CHAR|TRAIL_INT)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 || state == (LEAD_INT|E_CHAR|EXP_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1320 || state == (LEAD_INT|DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1321 || state == (DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 read_vector (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 register Lisp_Object *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 register Lisp_Object tem, vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 register struct Lisp_Cons *otem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 Lisp_Object len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 tem = read_list (1, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 len = Flength (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 vector = (read_pure ? make_pure_vector (XINT (len)) : Fmake_vector (len, Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 size = XVECTOR (vector)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 ptr = XVECTOR (vector)->contents;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 for (i = 0; i < size; i++)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 ptr[i] = read_pure ? Fpurecopy (Fcar (tem)) : Fcar (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 otem = XCONS (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 tem = Fcdr (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 free_cons (otem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 return vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 /* flag = 1 means check for ] to terminate rather than ) and .
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 flag = -1 means check for starting with defun
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 and make structure pure. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 read_list (flag, readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 int flag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 register Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 /* -1 means check next element for defun,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 0 means don't check,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 1 means already checked and found defun. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 int defunflag = flag < 0 ? -1 : 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 Lisp_Object val, tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 register Lisp_Object elt, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 struct gcpro gcpro1, gcpro2;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 val = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 tail = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 GCPRO2 (val, tail);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 elt = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 if (XTYPE (elt) == Lisp_Internal)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 if (flag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 if (XINT (elt) == ']')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 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
1385 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 if (XINT (elt) == ')')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 if (XINT (elt) == '.')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 GCPRO2 (val, tail);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1391 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 XCONS (tail)->cdr = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 val = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 elt = read1 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 if (XTYPE (elt) == Lisp_Internal && XINT (elt) == ')')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (". in wrong context", 18), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("] in a list", 11), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 tem = (read_pure && flag <= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 ? pure_cons (elt, Qnil)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 : Fcons (elt, Qnil));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1406 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 XCONS (tail)->cdr = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 val = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 tail = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 if (defunflag < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 defunflag = EQ (elt, Qdefun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 else if (defunflag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 read_pure = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 Lisp_Object Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 Lisp_Object initial_obarray;
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
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 check_obarray (obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 while (XTYPE (obarray) != Lisp_Vector || XVECTOR (obarray)->size == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 /* If Vobarray is now invalid, force it to be valid. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 if (EQ (Vobarray, obarray)) Vobarray = initial_obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 obarray = wrong_type_argument (Qvectorp, obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 return obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 static int hash_string ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 Lisp_Object oblookup ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 intern (str)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 char *str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 int len = strlen (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 Lisp_Object obarray = Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 if (XTYPE (obarray) != Lisp_Vector || XVECTOR (obarray)->size == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 tem = oblookup (obarray, str, len);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 if (XTYPE (tem) == Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 return tem;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1451 return Fintern ((!NILP (Vpurify_flag)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 ? make_pure_string (str, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 : make_string (str, len)),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 "Return the canonical symbol whose name is STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 If there is none, one is created by this function and returned.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 it defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 (str, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 Lisp_Object str, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 register Lisp_Object tem, sym, *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1467 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 tem = oblookup (obarray, XSTRING (str)->data, XSTRING (str)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 if (XTYPE (tem) != Lisp_Int)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1476 if (!NILP (Vpurify_flag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 str = Fpurecopy (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 sym = Fmake_symbol (str);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 ptr = &XVECTOR (obarray)->contents[XINT (tem)];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 if (XTYPE (*ptr) == Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 XSYMBOL (sym)->next = XSYMBOL (*ptr);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 XSYMBOL (sym)->next = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 *ptr = sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 return sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 "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
1491 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 it defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 (str, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 Lisp_Object str, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 register Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1498 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 CHECK_STRING (str, 0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 tem = oblookup (obarray, XSTRING (str)->data, XSTRING (str)->size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 if (XTYPE (tem) != Lisp_Int)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 oblookup (obarray, ptr, size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 register char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 int hash, obsize;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 Lisp_Object bucket, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 if (XTYPE (obarray) != Lisp_Vector ||
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 (obsize = XVECTOR (obarray)->size) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 obsize = XVECTOR (obarray)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 /* Combining next two lines breaks VMS C 2.3. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 hash = hash_string (ptr, size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 hash %= obsize;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 bucket = XVECTOR (obarray)->contents[hash];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 if (XFASTINT (bucket) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 ;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 else if (XTYPE (bucket) != Lisp_Symbol)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 error ("Bad data in guts of obarray"); /* Like CADR error message */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 else for (tail = bucket; ; XSET (tail, Lisp_Symbol, XSYMBOL (tail)->next))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 if (XSYMBOL (tail)->name->size == size &&
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 !bcmp (XSYMBOL (tail)->name->data, ptr, size))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 return tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 else if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 XSET (tem, Lisp_Int, hash);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 hash_string (ptr, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 unsigned char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 int len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 register unsigned char *p = ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 register unsigned char *end = p + len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 register unsigned char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 register int hash = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 while (p != end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 c = *p++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 if (c >= 0140) c -= 40;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 hash = ((hash<<3) + (hash>>28) + c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 return hash & 07777777777;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 map_obarray (obarray, fn, arg)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 int (*fn) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 Lisp_Object arg;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 CHECK_VECTOR (obarray, 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 for (i = XVECTOR (obarray)->size - 1; i >= 0; i--)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 tail = XVECTOR (obarray)->contents[i];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 if (XFASTINT (tail) != 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 (*fn) (tail, arg);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 XSET (tail, Lisp_Symbol, XSYMBOL (tail)->next);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 mapatoms_1 (sym, function)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 Lisp_Object sym, function;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 call1 (function, sym);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 "Call FUNCTION on every symbol in OBARRAY.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 OBARRAY defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 (function, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 Lisp_Object function, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1601 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 map_obarray (obarray, mapatoms_1, function);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 #define OBARRAY_SIZE 509
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 init_obarray ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 Lisp_Object oblength;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 int hash;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 Lisp_Object *tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 XFASTINT (oblength) = OBARRAY_SIZE;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 Qnil = Fmake_symbol (make_pure_string ("nil", 3));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 Vobarray = Fmake_vector (oblength, make_number (0));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 initial_obarray = Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 staticpro (&initial_obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 /* Intern nil in the obarray */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 /* These locals are to kludge around a pyramid compiler bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 hash = hash_string ("nil", 3);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 /* Separate statement here to avoid VAXC bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 hash %= OBARRAY_SIZE;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 tem = &XVECTOR (Vobarray)->contents[hash];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 *tem = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 Qunbound = Fmake_symbol (make_pure_string ("unbound", 7));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 XSYMBOL (Qnil)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 XSYMBOL (Qunbound)->value = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 XSYMBOL (Qunbound)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 Qt = intern ("t");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 XSYMBOL (Qnil)->value = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 XSYMBOL (Qnil)->plist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 XSYMBOL (Qt)->value = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 /* 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
1642 Vpurify_flag = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 Qvariable_documentation = intern ("variable-documentation");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 read_buffer_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 read_buffer = (char *) malloc (read_buffer_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 defsubr (sname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1653 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 sym = intern (sname->symbol_name);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 XSET (XSYMBOL (sym)->function, Lisp_Subr, sname);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 #ifdef NOTDEF /* use fset in subr.el now */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 defalias (sname, string)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 char *string;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 sym = intern (string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 XSET (XSYMBOL (sym)->function, Lisp_Subr, sname);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 #endif /* NOTDEF */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 /* New replacement for DefIntVar; it ignores the doc string argument
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672 on the assumption that make-docfile will handle that. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 /* Define an "integer variable"; a symbol whose value is forwarded
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 to a C variable of type int. Sample call: */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 /* DEFVARINT ("indent-tabs-mode", &indent_tabs_mode, "Documentation"); */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 defvar_int (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 XSET (XSYMBOL (sym)->value, Lisp_Intfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 /* Similar but define a variable whose value is T if address contains 1,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 NIL if address contains 0 */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692 defvar_bool (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1696 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699 XSET (XSYMBOL (sym)->value, Lisp_Boolfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 /* 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
1703
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 defvar_lisp (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 Lisp_Object *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 XSET (XSYMBOL (sym)->value, Lisp_Objfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 staticpro (address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 /* Similar but don't request gc-marking of the C variable.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 Used when that variable will be gc-marked for some other reason,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 since marking the same slot twice can cause trouble with strings. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 defvar_lisp_nopro (namestring, address, doc)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 Lisp_Object *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 XSET (XSYMBOL (sym)->value, Lisp_Objfwd, address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 /* Similar but define a variable whose value is the Lisp Object stored in
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734 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
1735
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 void
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
1737 defvar_per_buffer (namestring, address, type, doc)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 Lisp_Object *address;
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
1740 Lisp_Object type;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 int offset;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 extern struct buffer buffer_local_symbols;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 sym = intern (namestring);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 offset = (char *)address - (char *)current_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 XSET (XSYMBOL (sym)->value, Lisp_Buffer_Objfwd,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 (Lisp_Object *) offset);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 *(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
1753 *(Lisp_Object *)(offset + (char *)&buffer_local_types) = type;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 if (*(int *)(offset + (char *)&buffer_local_flags) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 slot of buffer_local_flags */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 abort ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 #endif /* standalone */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1762 init_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 {
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1764 char *normal;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1766 /* Compute the default load-path. */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1767 #ifdef CANNOT_DUMP
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1768 normal = PATH_LOADSEARCH;
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1769 Vload_path = decode_env_path (0, normal);
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1770 #else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1771 if (NILP (Vpurify_flag))
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1772 normal = PATH_LOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1773 else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1774 normal = PATH_DUMPLOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1775
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1776 /* 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
1777 Vload_path from PATH_LOADSEARCH, since the value that was dumped
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1778 uses ../lisp, instead of the path of the installed elisp
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1779 libraries. However, if it appears that Vload_path was changed
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1780 from the default before dumping, don't override that value. */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1781 if (initialized)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1782 {
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1783 Lisp_Object dump_path;
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1784
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1785 dump_path = decode_env_path (0, PATH_DUMPLOADSEARCH);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1786 if (! NILP (Fequal (dump_path, Vload_path)))
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1787 Vload_path = decode_env_path (0, normal);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1788 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
1789 else
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1790 Vload_path = decode_env_path (0, normal);
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1791 #endif
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1792
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 /* Warn if dirs in the *standard* path don't exist. */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1794 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1795 Lisp_Object path_tail;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1797 for (path_tail = Vload_path;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1798 !NILP (path_tail);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1799 path_tail = XCONS (path_tail)->cdr)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1800 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1801 Lisp_Object dirfile;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1802 dirfile = Fcar (path_tail);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1803 if (XTYPE (dirfile) == Lisp_String)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1804 {
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1805 dirfile = Fdirectory_file_name (dirfile);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1806 if (access (XSTRING (dirfile)->data, 0) < 0)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1807 printf ("Warning: lisp library (%s) does not exist.\n",
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1808 XSTRING (Fcar (path_tail))->data);
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1809 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1810 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1811 }
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1812
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1813 /* If the EMACSLOADPATH environment variable is set, use its value.
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1814 This doesn't apply if we're dumping. */
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1815 if (NILP (Vpurify_flag)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1816 && egetenv ("EMACSLOADPATH"))
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1817 Vload_path = decode_env_path ("EMACSLOADPATH", normal);
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1818
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1819 Vvalues = Qnil;
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1820
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 load_in_progress = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 void
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
1825 syms_of_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 defsubr (&Sread);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 defsubr (&Sread_from_string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 defsubr (&Sintern);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 defsubr (&Sintern_soft);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 defsubr (&Sload);
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
1832 defsubr (&Seval_buffer);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 defsubr (&Seval_region);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 defsubr (&Sread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 defsubr (&Sread_char_exclusive);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 defsubr (&Sread_event);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 defsubr (&Sget_file_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 defsubr (&Smapatoms);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 DEFVAR_LISP ("obarray", &Vobarray,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 "Symbol table for use by `intern' and `read'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 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
1843 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
1844 to find all the symbols in an obarray, use `mapatoms'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 DEFVAR_LISP ("values", &Vvalues,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 "List of values of all expressions which were read, evaluated and printed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 Order is reverse chronological.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 DEFVAR_LISP ("standard-input", &Vstandard_input,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 "Stream for read to get input from.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 See documentation of `read' for possible values.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 Vstandard_input = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 DEFVAR_LISP ("load-path", &Vload_path,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 "*List of directories to search for files to load.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 Each element is a string (directory name) or nil (try default directory).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 Initialized based on EMACSLOADPATH environment variable, if any,\n\
1887
ab56990c27c4 (syms_of_lread): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1827
diff changeset
1859 otherwise to default specified by file `paths.h' when Emacs was built.");
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 DEFVAR_BOOL ("load-in-progress", &load_in_progress,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 "Non-nil iff inside of `load'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 DEFVAR_LISP ("after-load-alist", &Vafter_load_alist,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 "An alist of expressions to be evalled when particular files are loaded.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 Each element looks like (FILENAME FORMS...).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 When `load' is run and the file-name argument is FILENAME,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 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
1869 FILENAME must match exactly! Normally FILENAME is the name of a library,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 with no directory specified, since that is how `load' is normally called.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 An error in FORMS does not undo the load,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 but does prevent execution of the rest of the FORMS.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873 Vafter_load_alist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1875 DEFVAR_LISP ("load-history", &Vload_history,
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1876 "Alist mapping source file names to symbols and features.\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1877 Each alist element is a list that starts with a file name,\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1878 except for one element (optional) that starts with nil and describes\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1879 definitions evaluated from buffers not visiting files.\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1880 The remaining elements of each list are symbols defined as functions\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1881 or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.");
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1882 Vload_history = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1883
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
1884 DEFVAR_LISP ("current-load-list", &Vcurrent_load_list,
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
1885 "Used for internal purposes by `load'.");
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1886 Vcurrent_load_list = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
1887
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
1888 Qcurrent_load_list = intern ("current-load-list");
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
1889 staticpro (&Qcurrent_load_list);
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
1890
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 Qstandard_input = intern ("standard-input");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892 staticpro (&Qstandard_input);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 Qread_char = intern ("read-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 staticpro (&Qread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 Qget_file_char = intern ("get-file-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 staticpro (&Qget_file_char);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1899
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1900 Qascii_character = intern ("ascii-character");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1901 staticpro (&Qascii_character);
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
1902
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
1903 Qload = intern ("load");
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
1904 staticpro (&Qload);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 }