annotate lib-src/make-docfile.c @ 1016:817b0ce337d7

* window.c (Fset_window_configuration): Removed #if 0'd code which assumes that minibuf_window is on the same frame as the window configuration. Removed special case for windows whose prevs point to themselves. * window.c (Fset_window_configuration): Rename the argument from ARG to CONFIGURATION, so it matches the docstring. The make-docfile program cares. * window.c [MULTI_FRAME] (syms_of_window): Don't staticpro minibuf_window; the frame list will take care of it. * window.c (window_loop): This used to keep track of the first window processed and wait until we came back around to it. Sadly, this doesn't work if that window gets deleted. So instead, use Fprevious_window to find the last window to process, and loop until we've done that one. * window.c [not MULTI_FRAME] (init_window_once): Don't forget to set the `mini_p' flag on the new minibuffer window to t. * window.c (Fwindow_at): Don't check the type of the frame argument. * window.c [not MULTI_FRAME] (window_loop): Set frame to zero, instead of trying to decode it. * window.c (init_window_once): Initialize minibuf_window before FRAME_ROOT_WINDOW, so the latter actually points to something.
author Jim Blandy <jimb@redhat.com>
date Wed, 19 Aug 1992 06:40:02 +0000
parents 8a4c2c149ec2
children de54d705652f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* Generate doc-string file for GNU Emacs from source files.
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
2 Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
38
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
7 it under the terms of the GNU General Public License as published by
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
38
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
9 any later version.
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
38
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
14 GNU General Public License for more details.
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
15
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
16 You should have received a copy of the GNU General Public License
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 24
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 /* The arguments given to this program are all the C and Lisp source files
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 of GNU Emacs. .elc and .el and .c files are allowed.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 A .o file can also be specified; the .c file it was made from is used.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 This helps the makefile pass the correct list of files.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 The results, which go to standard output or to a file
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 specified with -a or -o (-a to append, -o to start from nothing),
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 are entries containing function or variable names and their documentation.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 Each entry starts with a ^_ character.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 Then comes F for a function or V for a variable.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 Then comes the function or variable name, terminated with a newline.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 Then comes the documentation for that function or variable.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include <stdio.h>
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 FILE *outfile;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 main (argc, argv)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 int argc;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 char **argv;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 int i;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 int err_count = 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 outfile = stdout;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 /* If first two args are -o FILE, output to FILE. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 i = 1;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 if (argc > i + 1 && !strcmp (argv[i], "-o"))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 outfile = fopen (argv[i + 1], "w");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 i += 2;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 if (argc > i + 1 && !strcmp (argv[i], "-a"))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 outfile = fopen (argv[i + 1], "a");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 i += 2;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 for (; i < argc; i++)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 err_count += scan_file (argv[i]); /* err_count seems to be {mis,un}used */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 #ifndef VMS
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 exit (err_count); /* see below - shane */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 #endif VMS
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
67 /* Read file FILENAME and output its doc strings to outfile. */
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 /* Return 1 if file is not found, 0 if it is found. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 scan_file (filename)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 char *filename;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 int len = strlen (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 if (!strcmp (filename + len - 4, ".elc"))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 return scan_lisp_file (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 else if (!strcmp (filename + len - 3, ".el"))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 return scan_lisp_file (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 else
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 return scan_c_file (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 char buf[128];
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 /* Skip a C string from INFILE,
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 and return the character that follows the closing ".
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
86 If printflag is positive, output string contents to outfile.
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 If it is negative, store contents in buf.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 Convert escape sequences \n and \t to newline and tab;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 discard \ followed by newline. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 read_c_string (infile, printflag)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 FILE *infile;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 int printflag;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 register int c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 char *p = buf;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 while (c != EOF)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 while (c != '"' && c != EOF)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 if (c == '\\')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 if (c == '\n')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 if (c == 'n')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 c = '\n';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 if (c == 't')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 c = '\t';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 if (printflag > 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 putc (c, outfile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 else if (printflag < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 *p++ = c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 if (c != '"')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 break;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 if (printflag > 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 putc (c, outfile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 else if (printflag < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 *p++ = c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 if (printflag < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 *p = 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 return c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 /* Write to file OUT the argument names of the function whose text is in BUF.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 MINARGS and MAXARGS are the minimum and maximum number of arguments. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 write_c_args (out, buf, minargs, maxargs)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 FILE *out;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 char *buf;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 int minargs, maxargs;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 register int c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 register char *p = buf;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 int space = 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
168
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
150 fprintf (out, "arguments: ");
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 while (*p)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 c = *p++;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 if (c == ',')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 minargs--;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 maxargs--;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 if (!space)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 putc (' ', out);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 if (minargs == 0 && maxargs > 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 fprintf (out, "&optional ");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 space = 1;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 else if (c == ' ' && space)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 space = (c == ' ');
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
169
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
170 /* Print the C arguments as they would appear in Elisp;
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
171 print underscores as hyphens. */
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
172 if (c == '_')
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
173 putc ('-', out);
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
174 else
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 168
diff changeset
175 putc (c, out);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 putc ('\n', out);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 /* Read through a c file. If a .o file is named,
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 the corresponding .c file is read instead.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 Looks for DEFUN constructs such as are defined in ../src/lisp.h.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 scan_c_file (filename)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 char *filename;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 FILE *infile;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 register int c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 register int commas;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 register int defunflag;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 register int defvarflag;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 int minargs, maxargs;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 if (filename[strlen (filename) - 1] == 'o')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 filename[strlen (filename) - 1] = 'c';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 infile = fopen (filename, "r");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 /* No error if non-ex input file */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 if (infile == NULL)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 perror (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 return 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 c = '\n';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 while (!feof (infile))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 if (c != '\n')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 if (c == ' ')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 while (c == ' ')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 if (c != 'D')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 if (c != 'E')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 if (c != 'F')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 if (c != 'V')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 defvarflag = 1;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 defunflag = 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 else if (c == 'D')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 if (c != 'E')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 if (c != 'F')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 defunflag = c == 'U';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 defvarflag = 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 else continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 while (c != '(')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 if (c < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 goto eof;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 if (c != '"')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 c = read_c_string (infile, -1);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 if (defunflag)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 commas = 5;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 else if (defvarflag)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 commas = 1;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 else /* For DEFSIMPLE and DEFPRED */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 commas = 2;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 while (commas)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 if (c == ',')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 commas--;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 if (defunflag && (commas == 1 || commas == 2))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 do
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 while (c == ' ' || c == '\n' || c == '\t');
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 if (c < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 goto eof;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ungetc (c, infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 if (commas == 2) /* pick up minargs */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 fscanf (infile, "%d", &minargs);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 else /* pick up maxargs */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 if (c == 'M' || c == 'U') /* MANY || UNEVALLED */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 maxargs = -1;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 else
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 fscanf (infile, "%d", &maxargs);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 if (c < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 goto eof;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 while (c == ' ' || c == '\n' || c == '\t')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 if (c == '"')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 c = read_c_string (infile, 0);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 while (c != ',')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 while (c == ' ' || c == '\n' || c == '\t')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 if (c == '"')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 putc (037, outfile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 putc (defvarflag ? 'V' : 'F', outfile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 fprintf (outfile, "%s\n", buf);
168
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
309 c = read_c_string (infile, 1);
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
310
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
311 /* If this is a defun, find the arguments and print them. If
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
312 this function takes MANY or UNEVALLED args, then the C source
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
313 won't give the names of the arguments, so we shouldn't bother
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
314 trying to find them. */
e0ec73426aea *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 164
diff changeset
315 if (defunflag && maxargs != -1)
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 char argbuf[1024], *p = argbuf;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 while (c != ')')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 if (c < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 goto eof;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 /* Skip into arguments. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 while (c != '(')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 if (c < 0)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 goto eof;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 /* Copy arguments into ARGBUF. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 *p++ = c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 do
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 *p++ = c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 while (c != ')');
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 *p = '\0';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 /* Output them. */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 fprintf (outfile, "\n\n");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 write_c_args (outfile, argbuf, minargs, maxargs);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 eof:
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 fclose (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 return 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 /* Read a file of Lisp code, compiled or interpreted.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 Looks for
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (defun NAME ARGS DOCSTRING ...)
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
351 (defmacro NAME ARGS DOCSTRING ...)
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
352 (autoload (quote NAME) FILE DOCSTRING ...)
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 (defvar NAME VALUE DOCSTRING)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (defconst NAME VALUE DOCSTRING)
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
355 (fset (quote NAME) (make-byte-code ... DOCSTRING ...))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
356 (fset (quote NAME) #[... DOCSTRING ...])
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 starting in column zero.
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
358 (quote NAME) may appear as 'NAME as well.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
359 For defun, defmacro, and autoload, we know how to skip over the arglist.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
360 For defvar, defconst, and fset we skip to the docstring with a klugey
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
361 formatting convention: all docstrings must appear on the same line as the
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
362 initial open-paren (the one in column zero) and must contain a backslash
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
363 and a double-quote immediately after the initial double-quote. No newlines
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
364 must appear between the beginning of the form and the first double-quote.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
365 The only source file that must follow this convention is loaddefs.el; aside
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
366 from that, it is always the .elc file that we look at, and they are no
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
367 problem because byte-compiler output follows this convention.
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 The NAME and DOCSTRING are output.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 NAME is preceded by `F' for a function or `V' for a variable.
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 An entry is output only if DOCSTRING has \ newline just after the opening "
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
373 void
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
374 skip_white (infile)
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
375 FILE *infile;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
376 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
377 char c = ' ';
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
378 while (c == ' ' || c == '\t' || c == '\n')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
379 c = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
380 ungetc (c, infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
381 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
382
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
383 void
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
384 read_lisp_symbol (infile, buffer)
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
385 FILE *infile;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
386 char *buffer;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
387 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
388 char c;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
389 char *fillp = buffer;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
390
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
391 skip_white (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
392 while (1)
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
393 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
394 c = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
395 if (c == '\\')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
396 *(++fillp) = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
397 else if (c == ' ' || c == '\t' || c == '\n' || c == '(' || c == ')')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
398 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
399 ungetc (c, infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
400 *fillp = 0;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
401 break;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
402 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
403 else
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
404 *fillp++ = c;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
405 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
406
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
407 if (! buffer[0])
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
408 fprintf (stderr, "## expected a symbol, got '%c'\n", c);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
409
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
410 skip_white (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
411 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
412
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
413
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 scan_lisp_file (filename)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 char *filename;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 FILE *infile;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 register int c;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 infile = fopen (filename, "r");
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 if (infile == NULL)
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 perror (filename);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 return 0; /* No error */
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 c = '\n';
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 while (!feof (infile))
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
430 char buffer [BUFSIZ];
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
431 char *fillp = buffer;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
432 char type;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
433
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 if (c != '\n')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 if (c != '(')
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 continue;
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
442
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
443 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
444
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
445 if (! strcmp (buffer, "defun") ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
446 ! strcmp (buffer, "defmacro"))
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
448 type = 'F';
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
449 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
450
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
451 /* Skip the arguments: either "nil" or a list in parens */
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 c = getc (infile);
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
454 if (c == 'n') /* nil */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
455 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
456 if ((c = getc (infile)) != 'i' ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
457 (c = getc (infile)) != 'l')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
458 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
459 fprintf (stderr, "## unparsable arglist in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
460 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
461 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
462 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
463 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
464 else if (c != '(')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
465 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
466 fprintf (stderr, "## unparsable arglist in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
467 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
468 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
469 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
470 else
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
471 while (c != ')')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
472 c = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
473 skip_white (infile);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
475 /* If the next three characters aren't `dquote bslash newline'
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
476 then we're not reading a docstring.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
477 */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
478 if ((c = getc (infile)) != '"' ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
479 (c = getc (infile)) != '\\' ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
480 (c = getc (infile)) != '\n')
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
482 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
483 fprintf (stderr, "## non-docstring in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
484 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
485 #endif
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
486 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
487 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
488 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
489
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
490 else if (! strcmp (buffer, "defvar") ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
491 ! strcmp (buffer, "defconst"))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
492 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
493 char c1 = 0, c2 = 0;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
494 type = 'V';
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
495 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
496
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
497 /* Skip until the first newline; remember the two previous chars. */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
498 while (c != '\n' && c >= 0)
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
499 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
500 c2 = c1;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
501 c1 = c;
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 }
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
504
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
505 /* If two previous characters were " and \,
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
506 this is a doc string. Otherwise, there is none. */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
507 if (c2 != '"' || c1 != '\\')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
508 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
509 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
510 fprintf (stderr, "## non-docstring in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
511 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
512 #endif
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
513 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
514 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
515 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
516
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
517 else if (! strcmp (buffer, "fset"))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
518 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
519 char c1 = 0, c2 = 0;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
520 type = 'F';
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
521
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
522 c = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
523 if (c == '\'')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
524 read_lisp_symbol (infile, buffer);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 else
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 {
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 if (c != '(')
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
528 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
529 fprintf (stderr, "## unparsable name in fset in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
530 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
531 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
532 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
533 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
534 if (strcmp (buffer, "quote"))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
535 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
536 fprintf (stderr, "## unparsable name in fset in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
537 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
538 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
539 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
540 read_lisp_symbol (infile, buffer);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 c = getc (infile);
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
542 if (c != ')')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
543 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
544 fprintf (stderr,
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
545 "## unparsable quoted name in fset in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
546 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
547 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
548 }
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 }
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
550
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
551 /* Skip until the first newline; remember the two previous chars. */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
552 while (c != '\n' && c >= 0)
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
554 c2 = c1;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
555 c1 = c;
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 c = getc (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 }
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
558
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
559 /* If two previous characters were " and \,
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
560 this is a doc string. Otherwise, there is none. */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
561 if (c2 != '"' || c1 != '\\')
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
563 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
564 fprintf (stderr, "## non-docstring in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
565 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
566 #endif
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 continue;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 }
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
570
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
571 else if (! strcmp (buffer, "autoload"))
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
572 {
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
573 type = 'F';
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
574 c = getc (infile);
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
575 if (c == '\'')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
576 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
577 else
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
578 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
579 if (c != '(')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
580 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
581 fprintf (stderr, "## unparsable name in autoload in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
582 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
583 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
584 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
585 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
586 if (strcmp (buffer, "quote"))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
587 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
588 fprintf (stderr, "## unparsable name in autoload in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
589 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
590 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
591 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
592 read_lisp_symbol (infile, buffer);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
593 c = getc (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
594 if (c != ')')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
595 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
596 fprintf (stderr,
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
597 "## unparsable quoted name in autoload in %s\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
598 filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
599 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
600 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
601 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
602 skip_white (infile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
603 if ((c = getc (infile)) != '\"')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
604 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
605 fprintf (stderr, "## autoload of %s unparsable (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
606 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
607 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
608 }
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
609 read_c_string (infile, 0);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
610 skip_white (infile);
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
611
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
612 /* If the next three characters aren't `dquote bslash newline'
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
613 then we're not reading a docstring.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
614 */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
615 if ((c = getc (infile)) != '"' ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
616 (c = getc (infile)) != '\\' ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
617 (c = getc (infile)) != '\n')
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
618 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
619 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
620 fprintf (stderr, "## non-docstring in %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
621 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
622 #endif
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
623 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
624 }
164
aba3ff2b9eb4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 162
diff changeset
625 }
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
627 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
628 else if (! strcmp (buffer, "if") ||
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
629 ! strcmp (buffer, "byte-code"))
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
630 ;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
631 #endif
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
633 else
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
634 {
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
635 #ifdef DEBUG
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
636 fprintf (stderr, "## unrecognised top-level form, %s (%s)\n",
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
637 buffer, filename);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
638 #endif
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
639 continue;
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
640 }
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
642 /* At this point, there is a docstring that we should gobble.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
643 The opening quote (and leading backslash-newline) have already
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
644 been read.
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
645 */
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
646 putc ('\n', outfile);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 putc (037, outfile);
753
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
648 putc (type, outfile);
8a4c2c149ec2 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
649 fprintf (outfile, "%s\n", buffer);
24
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 read_c_string (infile, 1);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 }
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 fclose (infile);
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 return 0;
2354a499c504 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 }