|
|
1.1 ! root 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: ! 22: /* Structure allocated for every string in a precompiled file */ ! 23: typedef struct stringdef STRINGDEF; ! 24: struct stringdef ! 25: { ! 26: U_CHAR *contents; /* String to include */ ! 27: int len; /* Its length */ ! 28: int writeflag; /* Whether we write this */ ! 29: int lineno; /* Linenumber of source file */ ! 30: U_CHAR *filename; /* Name of source file */ ! 31: STRINGDEF *chain; /* Global list of strings in natural order */ ! 32: int output_mark; /* Where in the output this goes */ ! 33: }; ! 34: ! 35: typedef struct keydef KEYDEF; ! 36: struct keydef ! 37: { ! 38: STRINGDEF *str; ! 39: KEYDEF *chain; ! 40: }; ! 41: ! 42: /* Format: */ ! 43: /* A precompiled file starts with a series of #define and #undef ! 44: statements: ! 45: #define MAC DEF --- Indicates MAC must be defined with defn DEF ! 46: #define MAC --- Indicates MAC must be defined with any defn ! 47: #undef MAC --- Indicates MAC cannot be defined ! 48: ! 49: These preconditions must be true for a precompiled file to be used. ! 50: The preconditions section is null terminated. */ ! 51: ! 52: /* Then, there is a four byte number (in network byte order) which */ ! 53: /* indicates the number of strings the file contains. */ ! 54: ! 55: /* Each string contains a STRINGDEF structure. The only component of */ ! 56: /* the STRINGDEF structure which is used is the lineno field, which */ ! 57: /* should hold the line number in the original header file. */ ! 58: /* Then follows the string, followed by a null. Then comes a four */ ! 59: /* byte number (again, in network byte order) indicating the number */ ! 60: /* of keys for this string. Each key is a KEYDEF structure, with */ ! 61: /* irrelevant contents, followed by the null-terminated string. */ ! 62: ! 63: /* If the number of keys is 0, then there are no keys for the string, */ ! 64: /* in other words, the string will never be included. If the number */ ! 65: /* of keys is -1, this is a special flag indicating there are no keys */ ! 66: /* in the file, and the string is mandatory (that is, it must be */ ! 67: /* included regardless in the included output). */ ! 68: ! 69: /* A file, then, looks like this: ! 70: ! 71: Precondition 1 ! 72: Precondition 2 ! 73: . ! 74: . ! 75: . ! 76: <NUL> ! 77: Number of strings ! 78: STRINGDEF ! 79: String . . . <NUL> ! 80: Number of keys ! 81: KEYDEF ! 82: Key . . . <NUL> ! 83: KEYDEF ! 84: Key . . . <NUL> ! 85: . ! 86: . ! 87: . ! 88: STRINGDEF ! 89: String . . . <NUL> ! 90: Number of keys ! 91: KEYDEF ! 92: Key . . . <NUL> ! 93: . ! 94: . ! 95: . ! 96: . ! 97: . ! 98: . ! 99: ! 100: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.