Subversion Repositories tendra.SVN

Rev

Rev 5 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
6 7u83 2
 * Copyright (c) 2002-2005 The TenDRA Project <http://www.tendra.org/>.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 * 1. Redistributions of source code must retain the above copyright notice,
9
 *    this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
11
 *    this list of conditions and the following disclaimer in the documentation
12
 *    and/or other materials provided with the distribution.
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific, prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 * $Id$
30
 */
31
/*
2 7u83 32
    		 Crown Copyright (c) 1997
6 7u83 33
 
2 7u83 34
    This TenDRA(r) Computer Program is subject to Copyright
35
    owned by the United Kingdom Secretary of State for Defence
36
    acting through the Defence Evaluation and Research Agency
37
    (DERA).  It is made available to Recipients with a
38
    royalty-free licence for its use, reproduction, transfer
39
    to other parties and amendment for any purpose not excluding
40
    product development provided that any such use et cetera
41
    shall be deemed to be acceptance of the following conditions:-
6 7u83 42
 
2 7u83 43
        (1) Its Recipients shall ensure that this Notice is
44
        reproduced upon any copies or amended versions of it;
6 7u83 45
 
2 7u83 46
        (2) Any amended version of it shall be clearly marked to
47
        show both the nature of and the organisation responsible
48
        for the relevant amendment or amendments;
6 7u83 49
 
2 7u83 50
        (3) Its onward transfer from a recipient to another
51
        party shall be deemed to be that party's acceptance of
52
        these conditions;
6 7u83 53
 
2 7u83 54
        (4) DERA gives no warranty or assurance as to its
55
        quality or suitability for any purpose and DERA accepts
56
        no liability whatsoever in relation to any use to which
57
        it may be put.
58
*/
59
 
60
 
61
#ifndef FILENAME_INCLUDED
62
#define FILENAME_INCLUDED
63
 
64
 
65
/*
6 7u83 66
 * TYPE REPRESENTING A FILE NAME
67
 *
68
 * The filename structure is used to represent a tcc input or output file. It
69
 * has an associated name (the full pathname), a basename (with the directory
70
 * and file suffix removed), a file type (see below) and a file storage type
71
 * (see below). Filenames are formed into lists using the next field. The may
72
 * also be associated into groups which are passed around as if they were a
73
 * single file using the aux field.
74
 */
2 7u83 75
 
76
typedef struct filename_t {
6 7u83 77
	char *name;
78
	char *bname;
79
	int uniq;
80
	int type;
81
	int storage;
82
	boolean final;
83
	struct filename_t *aux;
84
	struct filename_t *next;
85
} filename;
2 7u83 86
 
6 7u83 87
#define no_filename	((filename *)null)
2 7u83 88
 
89
 
90
/*
6 7u83 91
 * FILE TYPES - Table 1
92
 *
93
 * Each of the file types handled by tcc is allocated an identifier. If this
94
 * table is changed then it may have knock-on effects in several places in the
95
 * program. Hopefully I have marked them all by suitable comments.
2 7u83 96
*/
97
 
6 7u83 98
#define C_SOURCE	0
99
#define PREPROC_C	1
100
#define CPP_SOURCE	2
101
#define PREPROC_CPP	3
102
#define INDEP_TDF	4
103
#define DEP_TDF		5
104
#define AS_SOURCE	6
105
#define BINARY_OBJ	7
106
#define EXECUTABLE	8
107
#define PRETTY_TDF	9
108
#define PL_TDF		10
109
#define TDF_ARCHIVE	11
110
#define MIPS_G_FILE	12
111
#define MIPS_T_FILE	13
112
#define C_SPEC		14
113
#define CPP_SPEC	15
114
#define STARTUP_FILE	16
115
#define UNKNOWN_TYPE	17
116
#define ALL_TYPES	31
117
#define DEFAULT_TYPE	BINARY_OBJ
2 7u83 118
 
119
 
120
/*
6 7u83 121
 * FILE STORAGE TYPES
122
 *
123
 * The files handled by tcc may be of three basic types, input files, permanent
124
 * output files and temporary output files. The first type may also contain
125
 * input options which are treated like input files (for example, system
126
 * libraries). The second type includes the preserved intermediate files. In
127
 * fact PRESERVED_FILE is only used as the input to make_filename.
128
 */
2 7u83 129
 
6 7u83 130
#define INPUT_FILE	0
131
#define INPUT_OPTION	1
132
#define OUTPUT_FILE	2
133
#define PRESERVED_FILE	3
134
#define TEMP_FILE	4
2 7u83 135
 
136
 
137
/*
6 7u83 138
 * SUFFIX OVERRIDES
139
 *
140
 * This table contains the strings which are used when the suffix overrides are
141
 * set from the command line. Initially, it is empty.
142
 */
2 7u83 143
 
6 7u83 144
extern char *suffixes[];
2 7u83 145
 
146
 
147
/*
6 7u83 148
 * FILE STORAGE LOCATIONS
149
 *
150
 * Output files may be stored either in the temporary directory or the work
151
 * directory.
152
 */
2 7u83 153
 
6 7u83 154
extern char *tempdir;
155
extern char *workdir;
2 7u83 156
 
157
 
158
/*
6 7u83 159
 * INPUT FILE VARIABLES
160
 *
161
 * These variables are used to pass information to and from find_filename.
162
 */
2 7u83 163
 
6 7u83 164
extern boolean case_insensitive;
165
extern boolean option_next;
166
extern int no_input_files;
2 7u83 167
 
168
 
169
/*
6 7u83 170
 * PROCEDURE DECLARATIONS
171
 *
172
 * These routines are concerned with creating and manipulating filenames.
173
 */
2 7u83 174
 
6 7u83 175
extern char *find_basename(char *);
176
extern char *find_fullname(char *);
177
extern filename *add_filename(filename *, filename *);
178
extern filename *find_filename(char *, int);
179
extern filename *make_filename(filename *, int, int);
180
extern int find_type(int, int);
181
extern int where(int);
2 7u83 182
 
183
 
184
#endif