Commit | Line | Data |
---|---|---|
af2a502e C |
1 | // -*- C++ -*- |
2 | /* Copyright (C) 1989, 1990 Free Software Foundation, Inc. | |
3 | Written by James Clark (jjc@jclark.uucp) | |
4 | ||
5 | This file is part of groff. | |
6 | ||
7 | groff is free software; you can redistribute it and/or modify it under | |
8 | the terms of the GNU General Public License as published by the Free | |
9 | Software Foundation; either version 1, or (at your option) any later | |
10 | version. | |
11 | ||
12 | groff is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License along | |
18 | with groff; see the file LICENSE. If not, write to the Free Software | |
19 | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
20 | ||
21 | #include <string.h> | |
22 | #include <ctype.h> | |
23 | #include "cset.h" | |
24 | #include "stringclass.h" | |
25 | ||
26 | extern void change_filename(const char *); | |
27 | extern void change_lineno(int); | |
28 | ||
29 | int interpret_lf_args(const char *p) | |
30 | { | |
31 | while (*p == ' ') | |
32 | p++; | |
33 | if (!csdigit(*p)) | |
34 | return 0; | |
35 | int ln = 0; | |
36 | do { | |
37 | ln *= 10; | |
38 | ln += *p++ - '0'; | |
39 | } while (csdigit(*p)); | |
40 | if (*p != ' ' && *p != '\n' && *p != '\0') | |
41 | return 0; | |
42 | while (*p == ' ') | |
43 | p++; | |
44 | if (*p == '\0' || *p == '\n') { | |
45 | change_lineno(ln); | |
46 | return 1; | |
47 | } | |
48 | for (const char *q = p; | |
49 | *q != '\0' && *q != ' ' && *q != '\n' && *q != '\\'; | |
50 | q++) | |
51 | ; | |
52 | string tem(p, q - p); | |
53 | while (*q == ' ') | |
54 | q++; | |
55 | if (*q != '\n' && *q != '\0') | |
56 | return 0; | |
57 | tem += '\0'; | |
58 | change_filename(tem.contents()); | |
59 | change_lineno(ln); | |
60 | return 1; | |
61 | } |