]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/io/format.h
Update copyright years.
[thirdparty/gcc.git] / libgfortran / io / format.h
CommitLineData
7adcbafe 1/* Copyright (C) 2009-2022 Free Software Foundation, Inc.
a2f560d0
JB
2 Contributed by Janne Blomqvist
3
4This file is part of the GNU Fortran runtime library (libgfortran).
5
6Libgfortran is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 3, or (at your option)
9any later version.
10
11Libgfortran is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16Under Section 7 of GPL version 3, you are granted additional
17permissions described in the GCC Runtime Library Exception, version
183.1, as published by the Free Software Foundation.
19
20You should have received a copy of the GNU General Public License and
21a copy of the GCC Runtime Library Exception along with this program;
22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23<http://www.gnu.org/licenses/>. */
24
a2f560d0
JB
25#ifndef GFOR_FORMAT_H
26#define GFOR_FORMAT_H
27
872d2094
JB
28#include "io.h"
29
a2f560d0
JB
30/* Format nodes. A format string is converted into a tree of these
31 structures, which is traversed as part of a data transfer statement. */
32
33struct fnode
34{
35 format_token format;
36 int repeat;
37 struct fnode *next;
38 char *source;
39
40 union
41 {
42 struct
43 {
44 int w, d, e;
45 }
46 real;
47
48 struct
49 {
50 int length;
51 char *p;
52 }
53 string;
54
55 struct
56 {
57 int w, m;
58 }
59 integer;
60
e73d3ca6
PT
61 struct
62 {
63 char *string;
64 int string_len;
636b78f0 65 gfc_full_array_i4 *vlist;
e73d3ca6
PT
66 }
67 udf; /* User Defined Format. */
68
a2f560d0
JB
69 int w;
70 int k;
71 int r;
72 int n;
73
74 struct fnode *child;
75 }
76 u;
77
78 /* Members for traversing the tree during data transfer. */
79
80 int count;
81 struct fnode *current;
82
83};
84
85
da0747b9
JD
86/* A storage structures for format node data. */
87
88#define FARRAY_SIZE 64
89
90typedef struct fnode_array
91{
92 struct fnode_array *next;
93 fnode array[FARRAY_SIZE];
94}
95fnode_array;
96
97
98typedef struct format_data
99{
100 char *format_string, *string;
101 const char *error;
102 char error_element;
103 format_token saved_token;
104 int value, format_string_len, reversion_ok;
105 fnode *avail;
106 const fnode *saved_format;
107 fnode_array *last;
108 fnode_array array;
109}
110format_data;
111
a2f560d0
JB
112extern void parse_format (st_parameter_dt *);
113internal_proto(parse_format);
114
115extern const fnode *next_format (st_parameter_dt *);
116internal_proto(next_format);
117
118extern void unget_format (st_parameter_dt *, const fnode *);
119internal_proto(unget_format);
120
121extern void format_error (st_parameter_dt *, const fnode *, const char *);
122internal_proto(format_error);
123
124extern void free_format_data (struct format_data *);
125internal_proto(free_format_data);
126
241cbc7a
JD
127extern void free_format (st_parameter_dt *);
128internal_proto(free_format);
129
a2f560d0
JB
130extern void free_format_hash_table (gfc_unit *);
131internal_proto(free_format_hash_table);
132
133extern void init_format_hash (st_parameter_dt *);
134internal_proto(init_format_hash);
135
136extern void free_format_hash (st_parameter_dt *);
137internal_proto(free_format_hash);
138
139#endif