Mercurial > emacs
annotate lib-src/make-docfile.c @ 23323:0800a4f84757
(underlying_strftime):
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
| author | Paul Eggert <eggert@twinsun.com> |
|---|---|
| date | Fri, 25 Sep 1998 21:40:23 +0000 |
| parents | 798a28989dde |
| children | 7ebe942c4a9c |
| rev | line source |
|---|---|
| 24 | 1 /* Generate doc-string file for GNU Emacs from source files. |
|
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
2 Copyright (C) 1985, 1986, 92, 93, 94, 1997 Free Software Foundation, Inc. |
| 24 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 38 | 6 GNU Emacs is free software; you can redistribute it and/or modify |
| 7 it under the terms of the GNU General Public License as published by | |
| 638 | 8 the Free Software Foundation; either version 2, or (at your option) |
| 38 | 9 any later version. |
| 24 | 10 |
| 38 | 11 GNU Emacs is distributed in the hope that it will be useful, |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
12351
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
12351
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
| 24 | 20 |
| 21 /* The arguments given to this program are all the C and Lisp source files | |
| 22 of GNU Emacs. .elc and .el and .c files are allowed. | |
| 23 A .o file can also be specified; the .c file it was made from is used. | |
| 24 This helps the makefile pass the correct list of files. | |
| 25 | |
| 26 The results, which go to standard output or to a file | |
| 27 specified with -a or -o (-a to append, -o to start from nothing), | |
| 28 are entries containing function or variable names and their documentation. | |
| 29 Each entry starts with a ^_ character. | |
| 30 Then comes F for a function or V for a variable. | |
| 31 Then comes the function or variable name, terminated with a newline. | |
| 32 Then comes the documentation for that function or variable. | |
| 33 */ | |
| 34 | |
| 11690 | 35 #define NO_SHORTNAMES /* Tell config not to load remap.h */ |
| 36 #include <../src/config.h> | |
| 37 | |
| 24 | 38 #include <stdio.h> |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
39 #ifdef MSDOS |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
40 #include <fcntl.h> |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
41 #endif /* MSDOS */ |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
42 #ifdef WINDOWSNT |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
43 #include <stdlib.h> |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
44 #include <fcntl.h> |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
45 #include <direct.h> |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
46 #endif /* WINDOWSNT */ |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
47 |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
48 #ifdef DOS_NT |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
49 #define READ_TEXT "rt" |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
50 #define READ_BINARY "rb" |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
51 #else /* not DOS_NT */ |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
52 #define READ_TEXT "r" |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
53 #define READ_BINARY "r" |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
54 #endif /* not DOS_NT */ |
| 24 | 55 |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
56 int scan_file (); |
|
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
57 int scan_lisp_file (); |
|
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
58 int scan_c_file (); |
|
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
59 |
| 12134 | 60 #ifdef MSDOS |
| 61 /* s/msdos.h defines this as sys_chdir, but we're not linking with the | |
| 62 file where that function is defined. */ | |
| 63 #undef chdir | |
| 64 #endif | |
| 65 | |
|
21783
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
66 #ifdef HAVE_UNISTD_H |
|
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
67 #include <unistd.h> |
|
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
68 #endif |
|
798a28989dde
Include <unistd.h> for chdir.
Andreas Schwab <schwab@suse.de>
parents:
19636
diff
changeset
|
69 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
70 /* Stdio stream for output to the DOC file. */ |
| 24 | 71 FILE *outfile; |
| 72 | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
73 /* Name this program was invoked with. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
74 char *progname; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
75 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
76 /* Print error message. `s1' is printf control string, `s2' is arg for it. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
77 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
78 /* VARARGS1 */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
79 void |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
80 error (s1, s2) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
81 char *s1, *s2; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
82 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
83 fprintf (stderr, "%s: ", progname); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
84 fprintf (stderr, s1, s2); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
85 fprintf (stderr, "\n"); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
86 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
87 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
88 /* Print error message and exit. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
89 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
90 /* VARARGS1 */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
91 void |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
92 fatal (s1, s2) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
93 char *s1, *s2; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
94 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
95 error (s1, s2); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
96 exit (1); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
97 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
98 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
99 /* Like malloc but get fatal error if memory is exhausted. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
100 |
| 11690 | 101 long * |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
102 xmalloc (size) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
103 unsigned int size; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
104 { |
| 11690 | 105 long *result = (long *) malloc (size); |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
106 if (result == NULL) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
107 fatal ("virtual memory exhausted", 0); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
108 return result; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
109 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
110 |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
111 int |
| 24 | 112 main (argc, argv) |
| 113 int argc; | |
| 114 char **argv; | |
| 115 { | |
| 116 int i; | |
| 117 int err_count = 0; | |
|
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
118 int first_infile; |
| 24 | 119 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
120 progname = argv[0]; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
121 |
|
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
122 outfile = stdout; |
|
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
123 |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
124 /* Don't put CRs in the DOC file. */ |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
125 #ifdef MSDOS |
|
12350
68508136431f
(main) [MSDOS]: Do set _fmode.
Richard M. Stallman <rms@gnu.org>
parents:
12328
diff
changeset
|
126 _fmode = O_BINARY; |
|
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
127 #if 0 /* Suspicion is that this causes hanging. |
|
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
128 So instead we require people to use -o on MSDOS. */ |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
129 (stdout)->_flag &= ~_IOTEXT; |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
130 _setmode (fileno (stdout), O_BINARY); |
|
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
131 #endif |
|
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
132 outfile = 0; |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
133 #endif /* MSDOS */ |
|
9772
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
134 #ifdef WINDOWSNT |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
135 _fmode = O_BINARY; |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
136 _setmode (fileno (stdout), O_BINARY); |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
137 #endif /* WINDOWSNT */ |
|
20652342eb9a
(main) [WINDOWSNT]: Now sets _fmode and stdout to O_BINARY.
Richard M. Stallman <rms@gnu.org>
parents:
9643
diff
changeset
|
138 |
| 24 | 139 /* If first two args are -o FILE, output to FILE. */ |
| 140 i = 1; | |
| 141 if (argc > i + 1 && !strcmp (argv[i], "-o")) | |
| 142 { | |
| 143 outfile = fopen (argv[i + 1], "w"); | |
| 144 i += 2; | |
| 145 } | |
| 146 if (argc > i + 1 && !strcmp (argv[i], "-a")) | |
| 147 { | |
| 148 outfile = fopen (argv[i + 1], "a"); | |
| 149 i += 2; | |
| 150 } | |
|
2814
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
151 if (argc > i + 1 && !strcmp (argv[i], "-d")) |
|
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
152 { |
|
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
153 chdir (argv[i + 1]); |
|
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
154 i += 2; |
|
0da5b58e98ed
Install patches from David J. Mackenzie to make the srcdir option
Jim Blandy <jimb@redhat.com>
parents:
2483
diff
changeset
|
155 } |
| 24 | 156 |
|
12328
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
157 if (outfile == 0) |
|
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
158 fatal ("No output file specified", ""); |
|
dbc55496f684
(main): On MSDOS, don't change stdout to binary, and insist on an -o option.
Richard M. Stallman <rms@gnu.org>
parents:
12134
diff
changeset
|
159 |
|
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
160 first_infile = i; |
| 24 | 161 for (; i < argc; i++) |
|
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
162 { |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
163 int j; |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
164 /* Don't process one file twice. */ |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
165 for (j = first_infile; j < i; j++) |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
166 if (! strcmp (argv[i], argv[j])) |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
167 break; |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
168 if (j == i) |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
169 err_count += scan_file (argv[i]); |
|
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
170 } |
| 24 | 171 #ifndef VMS |
|
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
172 exit (err_count > 0); |
| 3028 | 173 #endif /* VMS */ |
|
9643
5d1e70b22a93
(main): Don't process one input file twice.
Richard M. Stallman <rms@gnu.org>
parents:
9491
diff
changeset
|
174 return err_count > 0; |
| 24 | 175 } |
| 176 | |
| 164 | 177 /* Read file FILENAME and output its doc strings to outfile. */ |
| 24 | 178 /* Return 1 if file is not found, 0 if it is found. */ |
| 179 | |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
180 int |
| 24 | 181 scan_file (filename) |
| 182 char *filename; | |
| 183 { | |
| 184 int len = strlen (filename); | |
|
12351
f2e9eb6a8939
(scan_file): Make sure it never looks at filename[-1].
Richard M. Stallman <rms@gnu.org>
parents:
12350
diff
changeset
|
185 if (len > 4 && !strcmp (filename + len - 4, ".elc")) |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
186 return scan_lisp_file (filename, READ_BINARY); |
|
12351
f2e9eb6a8939
(scan_file): Make sure it never looks at filename[-1].
Richard M. Stallman <rms@gnu.org>
parents:
12350
diff
changeset
|
187 else if (len > 3 && !strcmp (filename + len - 3, ".el")) |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
188 return scan_lisp_file (filename, READ_TEXT); |
| 24 | 189 else |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
190 return scan_c_file (filename, READ_TEXT); |
| 24 | 191 } |
| 192 | |
| 193 char buf[128]; | |
| 194 | |
| 195 /* Skip a C string from INFILE, | |
| 196 and return the character that follows the closing ". | |
| 164 | 197 If printflag is positive, output string contents to outfile. |
| 24 | 198 If it is negative, store contents in buf. |
| 199 Convert escape sequences \n and \t to newline and tab; | |
| 200 discard \ followed by newline. */ | |
| 201 | |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
202 int |
| 24 | 203 read_c_string (infile, printflag) |
| 204 FILE *infile; | |
| 205 int printflag; | |
| 206 { | |
| 207 register int c; | |
| 208 char *p = buf; | |
| 209 | |
| 210 c = getc (infile); | |
| 211 while (c != EOF) | |
| 212 { | |
| 213 while (c != '"' && c != EOF) | |
| 214 { | |
| 215 if (c == '\\') | |
| 216 { | |
| 217 c = getc (infile); | |
| 218 if (c == '\n') | |
| 219 { | |
| 220 c = getc (infile); | |
| 221 continue; | |
| 222 } | |
| 223 if (c == 'n') | |
| 224 c = '\n'; | |
| 225 if (c == 't') | |
| 226 c = '\t'; | |
| 227 } | |
| 228 if (printflag > 0) | |
| 229 putc (c, outfile); | |
| 230 else if (printflag < 0) | |
| 231 *p++ = c; | |
| 232 c = getc (infile); | |
| 233 } | |
| 234 c = getc (infile); | |
| 235 if (c != '"') | |
| 236 break; | |
|
4987
f052db139432
(read_c_string): For "", concatenate the two strings.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
237 /* If we had a "", concatenate the two strings. */ |
| 24 | 238 c = getc (infile); |
| 239 } | |
| 240 | |
| 241 if (printflag < 0) | |
| 242 *p = 0; | |
| 243 | |
| 244 return c; | |
| 245 } | |
| 246 | |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
247 /* Write to file OUT the argument names of function FUNC, whose text is in BUF. |
| 24 | 248 MINARGS and MAXARGS are the minimum and maximum number of arguments. */ |
| 249 | |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
250 void |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
251 write_c_args (out, func, buf, minargs, maxargs) |
| 24 | 252 FILE *out; |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
253 char *func, *buf; |
| 24 | 254 int minargs, maxargs; |
| 255 { | |
| 1206 | 256 register char *p; |
| 1250 | 257 int in_ident = 0; |
| 258 int just_spaced = 0; | |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
259 int need_space = 1; |
| 24 | 260 |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
261 fprintf (out, "(%s", func); |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
262 |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
263 if (*buf == '(') |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
264 ++buf; |
| 24 | 265 |
| 1206 | 266 for (p = buf; *p; p++) |
| 24 | 267 { |
| 1250 | 268 char c = *p; |
|
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
269 int ident_start = 0; |
| 1250 | 270 |
| 271 /* Notice when we start printing a new identifier. */ | |
| 272 if ((('A' <= c && c <= 'Z') | |
| 273 || ('a' <= c && c <= 'z') | |
| 274 || ('0' <= c && c <= '9') | |
| 275 || c == '_') | |
| 276 != in_ident) | |
| 24 | 277 { |
| 1250 | 278 if (!in_ident) |
| 279 { | |
| 280 in_ident = 1; | |
|
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
281 ident_start = 1; |
| 1206 | 282 |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
283 if (need_space) |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
284 putc (' ', out); |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
285 |
| 1250 | 286 if (minargs == 0 && maxargs > 0) |
| 287 fprintf (out, "&optional "); | |
| 288 just_spaced = 1; | |
| 1206 | 289 |
| 1250 | 290 minargs--; |
| 291 maxargs--; | |
| 292 } | |
| 293 else | |
| 294 in_ident = 0; | |
| 24 | 295 } |
| 638 | 296 |
| 1250 | 297 /* Print the C argument list as it would appear in lisp: |
| 298 print underscores as hyphens, and print commas as spaces. | |
| 299 Collapse adjacent spaces into one. */ | |
| 300 if (c == '_') c = '-'; | |
| 301 if (c == ',') c = ' '; | |
| 302 | |
|
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
303 /* In C code, `default' is a reserved word, so we spell it |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
304 `defalt'; unmangle that here. */ |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
305 if (ident_start |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
306 && strncmp (p, "defalt", 6) == 0 |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
307 && ! (('A' <= p[6] && p[6] <= 'Z') |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
308 || ('a' <= p[6] && p[6] <= 'z') |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
309 || ('0' <= p[6] && p[6] <= '9') |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
310 || p[6] == '_')) |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
311 { |
|
7564
d5d803ffff27
(write_c_args): Put `default' in upper case.
Richard M. Stallman <rms@gnu.org>
parents:
5604
diff
changeset
|
312 fprintf (out, "DEFAULT"); |
|
2483
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
313 p += 5; |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
314 in_ident = 0; |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
315 just_spaced = 0; |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
316 } |
|
b4145a12422d
* make-docfile.c (write_c_args): Print an argument named "defalt"
Jim Blandy <jimb@redhat.com>
parents:
1676
diff
changeset
|
317 else if (c != ' ' || ! just_spaced) |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
318 { |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
319 if (c >= 'a' && c <= 'z') |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
320 /* Upcase the letter. */ |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
321 c += 'A' - 'a'; |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
322 putc (c, out); |
|
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
323 } |
| 1250 | 324 |
| 325 just_spaced = (c == ' '); | |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
326 need_space = 0; |
| 24 | 327 } |
| 328 } | |
| 329 | |
| 330 /* Read through a c file. If a .o file is named, | |
| 331 the corresponding .c file is read instead. | |
| 332 Looks for DEFUN constructs such as are defined in ../src/lisp.h. | |
| 333 Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */ | |
| 334 | |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
335 int |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
336 scan_c_file (filename, mode) |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
337 char *filename, *mode; |
| 24 | 338 { |
| 339 FILE *infile; | |
| 340 register int c; | |
| 341 register int commas; | |
| 342 register int defunflag; | |
|
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
343 register int defvarperbufferflag; |
| 24 | 344 register int defvarflag; |
| 345 int minargs, maxargs; | |
|
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
346 int extension = filename[strlen (filename) - 1]; |
| 24 | 347 |
|
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
348 if (extension == 'o') |
| 24 | 349 filename[strlen (filename) - 1] = 'c'; |
| 350 | |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
351 infile = fopen (filename, mode); |
| 24 | 352 |
| 353 /* No error if non-ex input file */ | |
| 354 if (infile == NULL) | |
| 355 { | |
| 356 perror (filename); | |
| 357 return 0; | |
| 358 } | |
| 359 | |
|
11413
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
360 /* Reset extension to be able to detect duplicate files. */ |
|
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
361 filename[strlen (filename) - 1] = extension; |
|
9cd115f44483
(scan_c_file): At end, restore file name last char to its original value.
Richard M. Stallman <rms@gnu.org>
parents:
10199
diff
changeset
|
362 |
| 24 | 363 c = '\n'; |
| 364 while (!feof (infile)) | |
| 365 { | |
| 366 if (c != '\n') | |
| 367 { | |
| 368 c = getc (infile); | |
| 369 continue; | |
| 370 } | |
| 371 c = getc (infile); | |
| 372 if (c == ' ') | |
| 373 { | |
| 374 while (c == ' ') | |
| 375 c = getc (infile); | |
| 376 if (c != 'D') | |
| 377 continue; | |
| 378 c = getc (infile); | |
| 379 if (c != 'E') | |
| 380 continue; | |
| 381 c = getc (infile); | |
| 382 if (c != 'F') | |
| 383 continue; | |
| 384 c = getc (infile); | |
| 385 if (c != 'V') | |
| 386 continue; | |
|
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
387 c = getc (infile); |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
388 if (c != 'A') |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
389 continue; |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
390 c = getc (infile); |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
391 if (c != 'R') |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
392 continue; |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
393 c = getc (infile); |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
394 if (c != '_') |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
395 continue; |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
396 |
| 24 | 397 defvarflag = 1; |
| 398 defunflag = 0; | |
|
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
399 |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
400 c = getc (infile); |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
401 defvarperbufferflag = (c == 'P'); |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
402 |
| 24 | 403 c = getc (infile); |
| 404 } | |
| 405 else if (c == 'D') | |
| 406 { | |
| 407 c = getc (infile); | |
| 408 if (c != 'E') | |
| 409 continue; | |
| 410 c = getc (infile); | |
| 411 if (c != 'F') | |
| 412 continue; | |
| 413 c = getc (infile); | |
| 414 defunflag = c == 'U'; | |
| 415 defvarflag = 0; | |
| 416 } | |
| 417 else continue; | |
| 418 | |
| 419 while (c != '(') | |
| 420 { | |
| 421 if (c < 0) | |
| 422 goto eof; | |
| 423 c = getc (infile); | |
| 424 } | |
| 425 | |
| 426 c = getc (infile); | |
| 427 if (c != '"') | |
| 428 continue; | |
| 429 c = read_c_string (infile, -1); | |
| 430 | |
| 431 if (defunflag) | |
| 432 commas = 5; | |
|
1676
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
433 else if (defvarperbufferflag) |
|
e8b3c6b52c1e
* make-docfile.c (scan_c_file): Since DEFVAR_PER_BUFFER now takes
Jim Blandy <jimb@redhat.com>
parents:
1250
diff
changeset
|
434 commas = 2; |
| 24 | 435 else if (defvarflag) |
| 436 commas = 1; | |
| 437 else /* For DEFSIMPLE and DEFPRED */ | |
| 438 commas = 2; | |
| 439 | |
| 440 while (commas) | |
| 441 { | |
| 442 if (c == ',') | |
| 443 { | |
| 444 commas--; | |
| 445 if (defunflag && (commas == 1 || commas == 2)) | |
| 446 { | |
| 447 do | |
| 448 c = getc (infile); | |
| 449 while (c == ' ' || c == '\n' || c == '\t'); | |
| 450 if (c < 0) | |
| 451 goto eof; | |
| 452 ungetc (c, infile); | |
| 453 if (commas == 2) /* pick up minargs */ | |
| 454 fscanf (infile, "%d", &minargs); | |
| 455 else /* pick up maxargs */ | |
| 456 if (c == 'M' || c == 'U') /* MANY || UNEVALLED */ | |
| 457 maxargs = -1; | |
| 458 else | |
| 459 fscanf (infile, "%d", &maxargs); | |
| 460 } | |
| 461 } | |
| 462 if (c < 0) | |
| 463 goto eof; | |
| 464 c = getc (infile); | |
| 465 } | |
| 466 while (c == ' ' || c == '\n' || c == '\t') | |
| 467 c = getc (infile); | |
| 468 if (c == '"') | |
| 469 c = read_c_string (infile, 0); | |
| 470 while (c != ',') | |
| 471 c = getc (infile); | |
| 472 c = getc (infile); | |
| 473 while (c == ' ' || c == '\n' || c == '\t') | |
| 474 c = getc (infile); | |
| 475 | |
| 476 if (c == '"') | |
| 477 { | |
| 478 putc (037, outfile); | |
| 479 putc (defvarflag ? 'V' : 'F', outfile); | |
| 480 fprintf (outfile, "%s\n", buf); | |
| 168 | 481 c = read_c_string (infile, 1); |
| 482 | |
| 483 /* If this is a defun, find the arguments and print them. If | |
| 484 this function takes MANY or UNEVALLED args, then the C source | |
| 485 won't give the names of the arguments, so we shouldn't bother | |
| 486 trying to find them. */ | |
| 487 if (defunflag && maxargs != -1) | |
| 24 | 488 { |
| 489 char argbuf[1024], *p = argbuf; | |
| 490 while (c != ')') | |
| 491 { | |
| 492 if (c < 0) | |
| 493 goto eof; | |
| 494 c = getc (infile); | |
| 495 } | |
| 496 /* Skip into arguments. */ | |
| 497 while (c != '(') | |
| 498 { | |
| 499 if (c < 0) | |
| 500 goto eof; | |
| 501 c = getc (infile); | |
| 502 } | |
| 503 /* Copy arguments into ARGBUF. */ | |
| 504 *p++ = c; | |
| 505 do | |
| 506 *p++ = c = getc (infile); | |
| 507 while (c != ')'); | |
| 508 *p = '\0'; | |
| 509 /* Output them. */ | |
| 510 fprintf (outfile, "\n\n"); | |
|
5604
32ac07bd58ef
Make the argument list output look more like the Lisp docstrings do.
Roland McGrath <roland@gnu.org>
parents:
5449
diff
changeset
|
511 write_c_args (outfile, buf, argbuf, minargs, maxargs); |
| 24 | 512 } |
| 513 } | |
| 514 } | |
| 515 eof: | |
| 516 fclose (infile); | |
| 517 return 0; | |
| 518 } | |
| 519 | |
| 520 /* Read a file of Lisp code, compiled or interpreted. | |
| 521 Looks for | |
| 522 (defun NAME ARGS DOCSTRING ...) | |
| 753 | 523 (defmacro NAME ARGS DOCSTRING ...) |
| 524 (autoload (quote NAME) FILE DOCSTRING ...) | |
| 24 | 525 (defvar NAME VALUE DOCSTRING) |
| 526 (defconst NAME VALUE DOCSTRING) | |
| 753 | 527 (fset (quote NAME) (make-byte-code ... DOCSTRING ...)) |
| 528 (fset (quote NAME) #[... DOCSTRING ...]) | |
|
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
529 (defalias (quote NAME) #[... DOCSTRING ...]) |
|
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
530 (custom-declare-variable (quote NAME) VALUE DOCSTRING ...) |
| 24 | 531 starting in column zero. |
| 753 | 532 (quote NAME) may appear as 'NAME as well. |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
533 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
534 We also look for #@LENGTH CONTENTS^_ at the beginning of the line. |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
535 When we find that, we save it for the following defining-form, |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
536 and we use that instead of reading a doc string within that defining-form. |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
537 |
| 753 | 538 For defun, defmacro, and autoload, we know how to skip over the arglist. |
|
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3028
diff
changeset
|
539 For defvar, defconst, and fset we skip to the docstring with a kludgy |
| 753 | 540 formatting convention: all docstrings must appear on the same line as the |
| 541 initial open-paren (the one in column zero) and must contain a backslash | |
| 542 and a double-quote immediately after the initial double-quote. No newlines | |
| 543 must appear between the beginning of the form and the first double-quote. | |
| 544 The only source file that must follow this convention is loaddefs.el; aside | |
| 545 from that, it is always the .elc file that we look at, and they are no | |
| 546 problem because byte-compiler output follows this convention. | |
| 24 | 547 The NAME and DOCSTRING are output. |
| 548 NAME is preceded by `F' for a function or `V' for a variable. | |
| 549 An entry is output only if DOCSTRING has \ newline just after the opening " | |
| 550 */ | |
| 551 | |
| 753 | 552 void |
| 553 skip_white (infile) | |
| 554 FILE *infile; | |
| 555 { | |
| 556 char c = ' '; | |
| 557 while (c == ' ' || c == '\t' || c == '\n') | |
| 558 c = getc (infile); | |
| 559 ungetc (c, infile); | |
| 560 } | |
| 561 | |
| 562 void | |
| 563 read_lisp_symbol (infile, buffer) | |
| 564 FILE *infile; | |
| 565 char *buffer; | |
| 566 { | |
| 567 char c; | |
| 568 char *fillp = buffer; | |
| 569 | |
| 570 skip_white (infile); | |
| 571 while (1) | |
| 572 { | |
| 573 c = getc (infile); | |
| 574 if (c == '\\') | |
| 575 *(++fillp) = getc (infile); | |
| 576 else if (c == ' ' || c == '\t' || c == '\n' || c == '(' || c == ')') | |
| 577 { | |
| 578 ungetc (c, infile); | |
| 579 *fillp = 0; | |
| 580 break; | |
| 581 } | |
| 582 else | |
| 583 *fillp++ = c; | |
| 584 } | |
| 585 | |
| 586 if (! buffer[0]) | |
| 587 fprintf (stderr, "## expected a symbol, got '%c'\n", c); | |
| 588 | |
| 589 skip_white (infile); | |
| 590 } | |
| 591 | |
|
9491
dd3b83e4ceb0
Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents:
7564
diff
changeset
|
592 int |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
593 scan_lisp_file (filename, mode) |
|
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
594 char *filename, *mode; |
| 24 | 595 { |
| 596 FILE *infile; | |
| 597 register int c; | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
598 char *saved_string = 0; |
| 24 | 599 |
|
5449
296db649863d
[MSDOS]: Use text/binary mode as appropriate.
Richard M. Stallman <rms@gnu.org>
parents:
5317
diff
changeset
|
600 infile = fopen (filename, mode); |
| 24 | 601 if (infile == NULL) |
| 602 { | |
| 603 perror (filename); | |
| 604 return 0; /* No error */ | |
| 605 } | |
| 606 | |
| 607 c = '\n'; | |
| 608 while (!feof (infile)) | |
| 609 { | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
610 char buffer[BUFSIZ]; |
| 753 | 611 char type; |
| 612 | |
| 24 | 613 if (c != '\n') |
| 614 { | |
| 615 c = getc (infile); | |
| 616 continue; | |
| 617 } | |
| 618 c = getc (infile); | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
619 /* Detect a dynamic doc string and save it for the next expression. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
620 if (c == '#') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
621 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
622 c = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
623 if (c == '@') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
624 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
625 int length = 0; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
626 int i; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
627 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
628 /* Read the length. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
629 while ((c = getc (infile), |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
630 c >= '0' && c <= '9')) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
631 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
632 length *= 10; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
633 length += c - '0'; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
634 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
635 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
636 /* The next character is a space that is counted in the length |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
637 but not part of the doc string. |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
638 We already read it, so just ignore it. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
639 length--; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
640 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
641 /* Read in the contents. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
642 if (saved_string != 0) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
643 free (saved_string); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
644 saved_string = (char *) malloc (length); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
645 for (i = 0; i < length; i++) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
646 saved_string[i] = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
647 /* The last character is a ^_. |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
648 That is needed in the .elc file |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
649 but it is redundant in DOC. So get rid of it here. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
650 saved_string[length - 1] = 0; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
651 /* Skip the newline. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
652 c = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
653 while (c != '\n') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
654 c = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
655 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
656 continue; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
657 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
658 |
| 24 | 659 if (c != '(') |
| 660 continue; | |
| 164 | 661 |
| 753 | 662 read_lisp_symbol (infile, buffer); |
| 663 | |
| 664 if (! strcmp (buffer, "defun") || | |
| 665 ! strcmp (buffer, "defmacro")) | |
| 24 | 666 { |
| 753 | 667 type = 'F'; |
| 668 read_lisp_symbol (infile, buffer); | |
| 669 | |
| 670 /* Skip the arguments: either "nil" or a list in parens */ | |
| 24 | 671 |
| 672 c = getc (infile); | |
| 753 | 673 if (c == 'n') /* nil */ |
| 674 { | |
| 675 if ((c = getc (infile)) != 'i' || | |
| 676 (c = getc (infile)) != 'l') | |
| 677 { | |
| 678 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
| 679 buffer, filename); | |
| 680 continue; | |
| 681 } | |
| 682 } | |
| 683 else if (c != '(') | |
| 684 { | |
| 685 fprintf (stderr, "## unparsable arglist in %s (%s)\n", | |
| 686 buffer, filename); | |
| 687 continue; | |
| 688 } | |
| 689 else | |
| 690 while (c != ')') | |
| 691 c = getc (infile); | |
| 692 skip_white (infile); | |
| 24 | 693 |
| 753 | 694 /* If the next three characters aren't `dquote bslash newline' |
| 695 then we're not reading a docstring. | |
| 696 */ | |
| 697 if ((c = getc (infile)) != '"' || | |
| 698 (c = getc (infile)) != '\\' || | |
| 699 (c = getc (infile)) != '\n') | |
| 24 | 700 { |
| 753 | 701 #ifdef DEBUG |
| 702 fprintf (stderr, "## non-docstring in %s (%s)\n", | |
| 703 buffer, filename); | |
| 704 #endif | |
| 705 continue; | |
| 706 } | |
| 707 } | |
| 708 | |
| 709 else if (! strcmp (buffer, "defvar") || | |
| 710 ! strcmp (buffer, "defconst")) | |
| 711 { | |
| 712 char c1 = 0, c2 = 0; | |
| 713 type = 'V'; | |
| 714 read_lisp_symbol (infile, buffer); | |
| 715 | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
716 if (saved_string == 0) |
| 753 | 717 { |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
718 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
719 /* Skip until the first newline; remember the two previous chars. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
720 while (c != '\n' && c >= 0) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
721 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
722 c2 = c1; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
723 c1 = c; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
724 c = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
725 } |
| 753 | 726 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
727 /* If two previous characters were " and \, |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
728 this is a doc string. Otherwise, there is none. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
729 if (c2 != '"' || c1 != '\\') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
730 { |
| 753 | 731 #ifdef DEBUG |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
732 fprintf (stderr, "## non-docstring in %s (%s)\n", |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
733 buffer, filename); |
| 753 | 734 #endif |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
735 continue; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
736 } |
| 753 | 737 } |
| 738 } | |
| 739 | |
|
19636
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
740 else if (! strcmp (buffer, "custom-declare-variable")) |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
741 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
742 char c1 = 0, c2 = 0; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
743 type = 'V'; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
744 |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
745 c = getc (infile); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
746 if (c == '\'') |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
747 read_lisp_symbol (infile, buffer); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
748 else |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
749 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
750 if (c != '(') |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
751 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
752 fprintf (stderr, |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
753 "## unparsable name in custom-declare-variable in %s\n", |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
754 filename); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
755 continue; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
756 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
757 read_lisp_symbol (infile, buffer); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
758 if (strcmp (buffer, "quote")) |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
759 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
760 fprintf (stderr, |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
761 "## unparsable name in custom-declare-variable in %s\n", |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
762 filename); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
763 continue; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
764 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
765 read_lisp_symbol (infile, buffer); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
766 c = getc (infile); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
767 if (c != ')') |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
768 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
769 fprintf (stderr, |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
770 "## unparsable quoted name in custom-declare-variable in %s\n", |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
771 filename); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
772 continue; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
773 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
774 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
775 |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
776 if (saved_string == 0) |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
777 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
778 /* Skip until the first newline; remember the two previous |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
779 chars. */ |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
780 while (c != '\n' && c >= 0) |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
781 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
782 c2 = c1; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
783 c1 = c; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
784 c = getc (infile); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
785 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
786 |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
787 /* If two previous characters were " and \, |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
788 this is a doc string. Otherwise, there is none. */ |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
789 if (c2 != '"' || c1 != '\\') |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
790 { |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
791 #ifdef DEBUG |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
792 fprintf (stderr, "## non-docstring in %s (%s)\n", |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
793 buffer, filename); |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
794 #endif |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
795 continue; |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
796 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
797 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
798 } |
|
77fa90ed939d
(scan_lisp_file): Handle custom-declare-variable.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
799 |
|
2966
e936d56c2354
(scan_lisp_file): Recognize defalias like fset.
Richard M. Stallman <rms@gnu.org>
parents:
2814
diff
changeset
|
800 else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias")) |
| 753 | 801 { |
| 802 char c1 = 0, c2 = 0; | |
| 803 type = 'F'; | |
| 804 | |
| 805 c = getc (infile); | |
| 806 if (c == '\'') | |
| 807 read_lisp_symbol (infile, buffer); | |
| 24 | 808 else |
| 809 { | |
| 810 if (c != '(') | |
| 753 | 811 { |
| 812 fprintf (stderr, "## unparsable name in fset in %s\n", | |
| 813 filename); | |
| 814 continue; | |
| 815 } | |
| 816 read_lisp_symbol (infile, buffer); | |
| 817 if (strcmp (buffer, "quote")) | |
| 818 { | |
| 819 fprintf (stderr, "## unparsable name in fset in %s\n", | |
| 820 filename); | |
| 821 continue; | |
| 822 } | |
| 823 read_lisp_symbol (infile, buffer); | |
| 24 | 824 c = getc (infile); |
| 753 | 825 if (c != ')') |
| 826 { | |
| 827 fprintf (stderr, | |
| 828 "## unparsable quoted name in fset in %s\n", | |
| 829 filename); | |
| 830 continue; | |
| 831 } | |
| 24 | 832 } |
| 164 | 833 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
834 if (saved_string == 0) |
| 24 | 835 { |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
836 /* Skip until the first newline; remember the two previous chars. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
837 while (c != '\n' && c >= 0) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
838 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
839 c2 = c1; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
840 c1 = c; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
841 c = getc (infile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
842 } |
| 753 | 843 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
844 /* If two previous characters were " and \, |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
845 this is a doc string. Otherwise, there is none. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
846 if (c2 != '"' || c1 != '\\') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
847 { |
| 753 | 848 #ifdef DEBUG |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
849 fprintf (stderr, "## non-docstring in %s (%s)\n", |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
850 buffer, filename); |
| 753 | 851 #endif |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
852 continue; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
853 } |
| 24 | 854 } |
| 855 } | |
| 753 | 856 |
| 857 else if (! strcmp (buffer, "autoload")) | |
| 164 | 858 { |
| 753 | 859 type = 'F'; |
| 164 | 860 c = getc (infile); |
| 753 | 861 if (c == '\'') |
| 862 read_lisp_symbol (infile, buffer); | |
| 863 else | |
| 864 { | |
| 865 if (c != '(') | |
| 866 { | |
| 867 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
| 868 filename); | |
| 869 continue; | |
| 870 } | |
| 871 read_lisp_symbol (infile, buffer); | |
| 872 if (strcmp (buffer, "quote")) | |
| 873 { | |
| 874 fprintf (stderr, "## unparsable name in autoload in %s\n", | |
| 875 filename); | |
| 876 continue; | |
| 877 } | |
| 878 read_lisp_symbol (infile, buffer); | |
| 879 c = getc (infile); | |
| 880 if (c != ')') | |
| 881 { | |
| 882 fprintf (stderr, | |
| 883 "## unparsable quoted name in autoload in %s\n", | |
| 884 filename); | |
| 885 continue; | |
| 886 } | |
| 887 } | |
| 888 skip_white (infile); | |
| 889 if ((c = getc (infile)) != '\"') | |
| 890 { | |
| 891 fprintf (stderr, "## autoload of %s unparsable (%s)\n", | |
| 892 buffer, filename); | |
| 893 continue; | |
| 894 } | |
| 895 read_c_string (infile, 0); | |
| 896 skip_white (infile); | |
| 164 | 897 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
898 if (saved_string == 0) |
| 753 | 899 { |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
900 /* If the next three characters aren't `dquote bslash newline' |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
901 then we're not reading a docstring. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
902 if ((c = getc (infile)) != '"' || |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
903 (c = getc (infile)) != '\\' || |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
904 (c = getc (infile)) != '\n') |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
905 { |
| 753 | 906 #ifdef DEBUG |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
907 fprintf (stderr, "## non-docstring in %s (%s)\n", |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
908 buffer, filename); |
| 753 | 909 #endif |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
910 continue; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
911 } |
| 753 | 912 } |
| 164 | 913 } |
| 24 | 914 |
| 753 | 915 #ifdef DEBUG |
| 916 else if (! strcmp (buffer, "if") || | |
| 917 ! strcmp (buffer, "byte-code")) | |
| 918 ; | |
| 919 #endif | |
| 24 | 920 |
| 753 | 921 else |
| 922 { | |
| 923 #ifdef DEBUG | |
| 924 fprintf (stderr, "## unrecognised top-level form, %s (%s)\n", | |
| 925 buffer, filename); | |
| 926 #endif | |
| 927 continue; | |
| 928 } | |
| 24 | 929 |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
930 /* At this point, we should either use the previous |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
931 dynamic doc string in saved_string |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
932 or gobble a doc string from the input file. |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
933 |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
934 In the latter case, the opening quote (and leading |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
935 backslash-newline) have already been read. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
936 |
| 24 | 937 putc (037, outfile); |
| 753 | 938 putc (type, outfile); |
| 939 fprintf (outfile, "%s\n", buffer); | |
|
10199
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
940 if (saved_string) |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
941 { |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
942 fputs (saved_string, outfile); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
943 /* Don't use one dynamic doc string twice. */ |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
944 free (saved_string); |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
945 saved_string = 0; |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
946 } |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
947 else |
|
3e2571e22b61
(scan_lisp_file): Handle dynamic doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
9772
diff
changeset
|
948 read_c_string (infile, 1); |
| 24 | 949 } |
| 950 fclose (infile); | |
| 951 return 0; | |
| 952 } |
