[8833] | 1 | /* pcp.h -- Describes the format of a precompiled file |
---|
| 2 | Copyright (C) 1990 Free Software Foundation, Inc. |
---|
| 3 | |
---|
| 4 | This file is part of GNU CC. |
---|
| 5 | |
---|
| 6 | GNU CC is free software; you can redistribute it and/or modify |
---|
| 7 | it under the terms of the GNU General Public License as published by |
---|
| 8 | the Free Software Foundation; either version 2, or (at your option) |
---|
| 9 | any later version. |
---|
| 10 | |
---|
| 11 | GNU CC 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 CC; see the file COPYING. If not, write to |
---|
| 18 | the Free Software Foundation, 59 Temple Place - Suite 330, |
---|
| 19 | Boston, MA 02111-1307, USA. */ |
---|
| 20 | |
---|
| 21 | |
---|
| 22 | |
---|
| 23 | /* Structure allocated for every string in a precompiled file */ |
---|
| 24 | typedef struct stringdef STRINGDEF; |
---|
| 25 | struct stringdef |
---|
| 26 | { |
---|
| 27 | U_CHAR *contents; /* String to include */ |
---|
| 28 | int len; /* Its length */ |
---|
| 29 | int writeflag; /* Whether we write this */ |
---|
| 30 | int lineno; /* Linenumber of source file */ |
---|
| 31 | U_CHAR *filename; /* Name of source file */ |
---|
| 32 | STRINGDEF *chain; /* Global list of strings in natural order */ |
---|
| 33 | int output_mark; /* Where in the output this goes */ |
---|
| 34 | }; |
---|
| 35 | |
---|
| 36 | typedef struct keydef KEYDEF; |
---|
| 37 | struct keydef |
---|
| 38 | { |
---|
| 39 | STRINGDEF *str; |
---|
| 40 | KEYDEF *chain; |
---|
| 41 | }; |
---|
| 42 | |
---|
| 43 | /* Format: */ |
---|
| 44 | /* A precompiled file starts with a series of #define and #undef |
---|
| 45 | statements: |
---|
| 46 | #define MAC DEF --- Indicates MAC must be defined with defn DEF |
---|
| 47 | #define MAC --- Indicates MAC must be defined with any defn |
---|
| 48 | #undef MAC --- Indicates MAC cannot be defined |
---|
| 49 | |
---|
| 50 | These preconditions must be true for a precompiled file to be used. |
---|
| 51 | The preconditions section is null terminated. */ |
---|
| 52 | |
---|
| 53 | /* Then, there is a four byte number (in network byte order) which */ |
---|
| 54 | /* indicates the number of strings the file contains. */ |
---|
| 55 | |
---|
| 56 | /* Each string contains a STRINGDEF structure. The only component of */ |
---|
| 57 | /* the STRINGDEF structure which is used is the lineno field, which */ |
---|
| 58 | /* should hold the line number in the original header file. */ |
---|
| 59 | /* Then follows the string, followed by a null. Then comes a four */ |
---|
| 60 | /* byte number (again, in network byte order) indicating the number */ |
---|
| 61 | /* of keys for this string. Each key is a KEYDEF structure, with */ |
---|
| 62 | /* irrelevant contents, followed by the null-terminated string. */ |
---|
| 63 | |
---|
| 64 | /* If the number of keys is 0, then there are no keys for the string, */ |
---|
| 65 | /* in other words, the string will never be included. If the number */ |
---|
| 66 | /* of keys is -1, this is a special flag indicating there are no keys */ |
---|
| 67 | /* in the file, and the string is mandatory (that is, it must be */ |
---|
| 68 | /* included regardless in the included output). */ |
---|
| 69 | |
---|
| 70 | /* A file, then, looks like this: |
---|
| 71 | |
---|
| 72 | Precondition 1 |
---|
| 73 | Precondition 2 |
---|
| 74 | . |
---|
| 75 | . |
---|
| 76 | . |
---|
| 77 | <NUL> |
---|
| 78 | Number of strings |
---|
| 79 | STRINGDEF |
---|
| 80 | String . . . <NUL> |
---|
| 81 | Number of keys |
---|
| 82 | KEYDEF |
---|
| 83 | Key . . . <NUL> |
---|
| 84 | KEYDEF |
---|
| 85 | Key . . . <NUL> |
---|
| 86 | . |
---|
| 87 | . |
---|
| 88 | . |
---|
| 89 | STRINGDEF |
---|
| 90 | String . . . <NUL> |
---|
| 91 | Number of keys |
---|
| 92 | KEYDEF |
---|
| 93 | Key . . . <NUL> |
---|
| 94 | . |
---|
| 95 | . |
---|
| 96 | . |
---|
| 97 | . |
---|
| 98 | . |
---|
| 99 | . |
---|
| 100 | |
---|
| 101 | */ |
---|