]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/libgfortran.h
gfortran.texi: Document environment variables which influence runtime behavior.
[thirdparty/gcc.git] / libgfortran / libgfortran.h
CommitLineData
4c4b3eb0
PB
1/* Common declarations for all of libgfortran.
2 Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
6de9cd9a
DN
3 Contributed by Paul Brook <paul@nowt.org>, and
4 Andy Vaught <andy@xena.eas.asu.edu>
5
57dea9f6 6This file is part of the GNU Fortran 95 runtime library (libgfortran).
6de9cd9a 7
57dea9f6 8Libgfortran is free software; you can redistribute it and/or
6de9cd9a
DN
9modify it under the terms of the GNU Lesser General Public
10License as published by the Free Software Foundation; either
11version 2.1 of the License, or (at your option) any later version.
12
57dea9f6 13Libgfortran is distributed in the hope that it will be useful,
6de9cd9a
DN
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU Lesser General Public License for more details.
17
18You should have received a copy of the GNU Lesser General Public
19License along with libgfor; see the file COPYING.LIB. If not,
fe2ae685
KC
20write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA. */
6de9cd9a 22
57dea9f6
TM
23/* As a special exception, if you link this library with other files,
24 some of which are compiled with GCC, to produce an executable,
25 this library does not by itself cause the resulting executable
26 to be covered by the GNU General Public License.
27 This exception does not however invalidate any other reasons why
28 the executable file might be covered by the GNU General Public License. */
29
6de9cd9a
DN
30
31#ifndef LIBGFOR_H
32#define LIBGFOR_H
33
34#include <math.h>
35#include <stddef.h>
36
37#ifndef M_PI
38#define M_PI 3.14159265358979323846264338327
39#endif
40
6de9cd9a
DN
41#if HAVE_COMPLEX_H
42# include <complex.h>
43#else
44#define complex __complex__
45#endif
46
1409cd0b
FXC
47#include "config.h"
48#include "c99_protos.h"
49
6e4d9244
EB
50#if HAVE_IEEEFP_H
51#include <ieeefp.h>
52#endif
53
4c4b3eb0 54#include "gstdint.h"
3969c39f 55
6de9cd9a
DN
56#if HAVE_SYS_TYPES_H
57#include <sys/types.h>
58#endif
81f4be3c 59typedef off_t gfc_offset;
6de9cd9a
DN
60
61#ifndef NULL
62#define NULL (void *) 0
63#endif
64
65#ifndef __GNUC__
66#define __attribute__(x)
67#endif
68
7d7b8bfe
RH
69/* For a library, a standard prefix is a requirement in order to partition
70 the namespace. IPREFIX is for symbols intended to be internal to the
71 library. */
72#define PREFIX(x) _gfortran_ ## x
73#define IPREFIX(x) _gfortrani_ ## x
74
75/* Magic to rename a symbol at the compiler level. You continue to refer
76 to the symbol as OLD in the source, but it'll be named NEW in the asm. */
77#define sym_rename(old, new) sym_rename1(old, __USER_LABEL_PREFIX__, new)
78#define sym_rename1(old, ulp, new) sym_rename2(old, ulp, new)
79#define sym_rename2(old, ulp, new) extern __typeof(old) old __asm__(#ulp #new)
80
81/* There are several classifications of routines:
82
83 (1) Symbols used only within the library,
84 (2) Symbols to be exported from the library,
85 (3) Symbols to be exported from the library, but
86 also used inside the library.
87
88 By telling the compiler about these different classifications we can
89 tightly control the interface seen by the user, and get better code
90 from the compiler at the same time.
91
92 One of the following should be used immediately after the declaration
93 of each symbol:
94
95 internal_proto Marks a symbol used only within the library,
96 and adds IPREFIX to the assembly-level symbol
97 name. The later is important for maintaining
98 the namespace partition for the static library.
99
100 export_proto Marks a symbol to be exported, and adds PREFIX
101 to the assembly-level symbol name.
102
103 export_proto_np Marks a symbol to be exported without adding PREFIX.
104
105 iexport_proto Marks a function to be exported, but with the
106 understanding that it can be used inside as well.
107
108 iexport_data_proto Similarly, marks a data symbol to be exported.
109 Unfortunately, some systems can't play the hidden
110 symbol renaming trick on data symbols, thanks to
111 the horribleness of COPY relocations.
112
113 If iexport_proto or iexport_data_proto is used, you must also use
114 iexport or iexport_data after the *definition* of the symbol. */
115
116#if defined(HAVE_ATTRIBUTE_VISIBILITY)
117# define internal_proto(x) \
118 sym_rename(x, IPREFIX (x)) __attribute__((__visibility__("hidden")))
119#else
120# define internal_proto(x) sym_rename(x, IPREFIX(x))
121#endif
122
123#if defined(HAVE_ATTRIBUTE_VISIBILITY) && defined(HAVE_ATTRIBUTE_ALIAS)
124# define export_proto(x) sym_rename(x, PREFIX(x))
125# define export_proto_np(x) extern char swallow_semicolon
126# define iexport_proto(x) internal_proto(x)
127# define iexport(x) iexport1(x, __USER_LABEL_PREFIX__, IPREFIX(x))
128# define iexport1(x,p,y) iexport2(x,p,y)
129# define iexport2(x,p,y) \
130 extern __typeof(x) PREFIX(x) __attribute__((__alias__(#p #y)))
131/* ??? We're not currently building a dll, and it's wrong to add dllexport
132 to objects going into a static library archive. */
133#elif 0 && defined(HAVE_ATTRIBUTE_DLLEXPORT)
134# define export_proto_np(x) extern __typeof(x) x __attribute__((dllexport))
135# define export_proto(x) sym_rename(x, PREFIX(x)) __attribute__((dllexport))
136# define iexport_proto(x) export_proto(x)
137# define iexport(x) extern char swallow_semicolon
138#else
139# define export_proto(x) sym_rename(x, PREFIX(x))
140# define export_proto_np(x) extern char swallow_semicolon
141# define iexport_proto(x) export_proto(x)
142# define iexport(x) extern char swallow_semicolon
143#endif
144
145/* TODO: detect the case when we *can* hide the symbol. */
146#define iexport_data_proto(x) export_proto(x)
147#define iexport_data(x) extern char swallow_semicolon
6de9cd9a
DN
148
149/* The only reliable way to get the offset of a field in a struct
150 in a system independent way is via this macro. */
151#ifndef offsetof
152#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
153#endif
154
69d3c9a4
SB
155/* The isfinite macro is only available with C99, but some non-C99
156 systems still provide fpclassify, and there is a `finite' function
e88334a6
PT
157 in BSD.
158
159 Also, isfinite is broken on Cygwin.
160
161 When isfinite is not available, try to use one of the
69d3c9a4 162 alternatives, or bail out. */
118ea208
SE
163
164#if defined(HAVE_BROKEN_ISFINITE) || defined(__CYGWIN__)
e88334a6 165#undef isfinite
118ea208
SE
166#endif
167
168#if defined(HAVE_BROKEN_ISNAN)
169#undef isnan
170#endif
171
172#if defined(HAVE_BROKEN_FPCLASSIFY)
173#undef fpclassify
174#endif
175
176#if !defined(isfinite)
177#if !defined(fpclassify)
178#define isfinite(x) ((x) - (x) == 0)
179#else
06b23b92 180#define isfinite(x) (fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE)
118ea208
SE
181#endif /* !defined(fpclassify) */
182#endif /* !defined(isfinite) */
183
184#if !defined(isnan)
185#if !defined(fpclassify)
186#define isnan(x) ((x) != (x))
69d3c9a4 187#else
118ea208
SE
188#define isnan(x) (fpclassify(x) == FP_NAN)
189#endif /* !defined(fpclassify) */
69d3c9a4
SB
190#endif /* !defined(isfinite) */
191
6de9cd9a
DN
192/* TODO: find the C99 version of these an move into above ifdef. */
193#define REALPART(z) (__real__(z))
194#define IMAGPART(z) (__imag__(z))
195#define COMPLEX_ASSIGN(z_, r_, i_) {__real__(z_) = (r_); __imag__(z_) = (i_);}
196
32aa3bff 197#include "kinds.h"
6de9cd9a 198
da17f559
PB
199/* The following two definitions must be consistent with the types used
200 by the compiler. */
201/* The type used of array indices, amongst other things. */
8e249b23 202typedef ssize_t index_type;
d7177ab2
TS
203/* The type used for the lengths of character variables. */
204typedef GFC_INTEGER_4 gfc_charlen_type;
6de9cd9a
DN
205
206/* This will be 0 on little-endian machines and one on big-endian machines. */
6de9cd9a 207extern int l8_to_l4_offset;
7d7b8bfe 208internal_proto(l8_to_l4_offset);
6de9cd9a
DN
209
210#define GFOR_POINTER_L8_TO_L4(p8) \
211 (l8_to_l4_offset + (GFC_LOGICAL_4 *)(p8))
212
213#define GFC_INTEGER_4_HUGE \
214 (GFC_INTEGER_4)((((GFC_UINTEGER_4)1) << 31) - 1)
215#define GFC_INTEGER_8_HUGE \
216 (GFC_INTEGER_8)((((GFC_UINTEGER_8)1) << 63) - 1)
644cb69f
FXC
217#ifdef HAVE_GFC_INTEGER_16
218#define GFC_INTEGER_16_HUGE \
219 (GFC_INTEGER_16)((((GFC_UINTEGER_16)1) << 127) - 1)
220#endif
221
6de9cd9a
DN
222#define GFC_REAL_4_HUGE FLT_MAX
223#define GFC_REAL_8_HUGE DBL_MAX
644cb69f
FXC
224#ifdef HAVE_GFC_REAL_10
225#define GFC_REAL_10_HUGE LDBL_MAX
226#endif
227#ifdef HAVE_GFC_REAL_16
228#define GFC_REAL_16_HUGE LDBL_MAX
229#endif
6de9cd9a
DN
230
231#ifndef GFC_MAX_DIMENSIONS
232#define GFC_MAX_DIMENSIONS 7
233#endif
234
235typedef struct descriptor_dimension
236{
237 index_type stride;
238 index_type lbound;
239 index_type ubound;
240}
241descriptor_dimension;
242
243#define GFC_ARRAY_DESCRIPTOR(r, type) \
244struct {\
245 type *data;\
efd4dc1a 246 size_t offset;\
6de9cd9a
DN
247 index_type dtype;\
248 descriptor_dimension dim[r];\
249}
250
251/* Commonly used array descriptor types. */
252typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) gfc_array_void;
253typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, char) gfc_array_char;
254typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_array_i4;
255typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_8) gfc_array_i8;
644cb69f
FXC
256#ifdef HAVE_GFC_INTEGER_16
257typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_16) gfc_array_i16;
258#endif
6de9cd9a
DN
259typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_4) gfc_array_r4;
260typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_8) gfc_array_r8;
644cb69f
FXC
261#ifdef HAVE_GFC_REAL_10
262typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_10) gfc_array_r10;
263#endif
264#ifdef HAVE_GFC_REAL_16
265typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_16) gfc_array_r16;
266#endif
6de9cd9a
DN
267typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_4) gfc_array_c4;
268typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_8) gfc_array_c8;
644cb69f
FXC
269#ifdef HAVE_GFC_COMPLEX_10
270typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_10) gfc_array_c10;
271#endif
272#ifdef HAVE_GFC_COMPLEX_16
273typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_16) gfc_array_c16;
274#endif
6de9cd9a
DN
275typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_4) gfc_array_l4;
276typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_8) gfc_array_l8;
644cb69f
FXC
277#ifdef HAVE_GFC_LOGICAL_16
278typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_16) gfc_array_l16;
279#endif
6de9cd9a
DN
280
281#define GFC_DTYPE_RANK_MASK 0x07
282#define GFC_DTYPE_TYPE_SHIFT 3
283#define GFC_DTYPE_TYPE_MASK 0x38
284#define GFC_DTYPE_SIZE_SHIFT 6
285
286enum
287{
288 GFC_DTYPE_UNKNOWN = 0,
289 GFC_DTYPE_INTEGER,
290 /* TODO: recognize logical types. */
291 GFC_DTYPE_LOGICAL,
292 GFC_DTYPE_REAL,
293 GFC_DTYPE_COMPLEX,
294 GFC_DTYPE_DERIVED,
295 GFC_DTYPE_CHARACTER
296};
297
298#define GFC_DESCRIPTOR_RANK(desc) ((desc)->dtype & GFC_DTYPE_RANK_MASK)
299#define GFC_DESCRIPTOR_TYPE(desc) (((desc)->dtype & GFC_DTYPE_TYPE_MASK) \
300 >> GFC_DTYPE_TYPE_SHIFT)
301#define GFC_DESCRIPTOR_SIZE(desc) ((desc)->dtype >> GFC_DTYPE_SIZE_SHIFT)
302#define GFC_DESCRIPTOR_DATA(desc) ((desc)->data)
303#define GFC_DESCRIPTOR_DTYPE(desc) ((desc)->dtype)
304
305/* Runtime library include. */
306#define stringize(x) expand_macro(x)
307#define expand_macro(x) # x
308
309/* Runtime options structure. */
310
311typedef struct
312{
fbac3363 313 int stdin_unit, stdout_unit, stderr_unit, optional_plus;
6de9cd9a
DN
314 int allocate_init_flag, allocate_init_value;
315 int locus;
316
317 int separator_len;
318 const char *separator;
319
320 int mem_check;
321 int use_stderr, all_unbuffered, default_recl;
322
944b8b35 323 int fpu_round, fpu_precision, fpe;
6de9cd9a
DN
324
325 int sighup, sigint;
326}
327options_t;
328
6de9cd9a 329extern options_t options;
7d7b8bfe 330internal_proto(options);
6de9cd9a
DN
331
332
8b67b708
FXC
333/* Compile-time options that will influence the library. */
334
335typedef struct
336{
337 int warn_std;
338 int allow_std;
5f8f5313 339 int pedantic;
eaa90d25 340 int convert;
8b67b708
FXC
341}
342compile_options_t;
343
344extern compile_options_t compile_options;
345internal_proto(compile_options);
346
e55a7487
AJ
347extern void init_compile_options (void);
348internal_proto(init_compile_options);
8b67b708
FXC
349
350
6de9cd9a
DN
351/* Structure for statement options. */
352
353typedef struct
354{
355 const char *name;
356 int value;
357}
358st_option;
359
360/* Runtime errors. The EOR and EOF errors are required to be negative. */
361
362typedef enum
363{
364 ERROR_FIRST = -3, /* Marker for the first error. */
365 ERROR_EOR = -2,
366 ERROR_END = -1,
367 ERROR_OK = 0, /* Indicates success, must be zero. */
368 ERROR_OS, /* Operating system error, more info in errno. */
369 ERROR_OPTION_CONFLICT,
370 ERROR_BAD_OPTION,
371 ERROR_MISSING_OPTION,
372 ERROR_ALREADY_OPEN,
373 ERROR_BAD_UNIT,
374 ERROR_FORMAT,
375 ERROR_BAD_ACTION,
376 ERROR_ENDFILE,
377 ERROR_BAD_US,
378 ERROR_READ_VALUE,
379 ERROR_READ_OVERFLOW,
844234fb
JD
380 ERROR_INTERNAL,
381 ERROR_INTERNAL_UNIT,
6de9cd9a
DN
382 ERROR_LAST /* Not a real error, the last error # + 1. */
383}
384error_codes;
385
386
8b67b708
FXC
387/* Flags to specify which standard/extension contains a feature.
388 Keep them in sync with their counterparts in gcc/fortran/gfortran.h. */
389#define GFC_STD_LEGACY (1<<6) /* Backward compatibility. */
390#define GFC_STD_GNU (1<<5) /* GNU Fortran extension. */
391#define GFC_STD_F2003 (1<<4) /* New in F2003. */
392/* Note that no features were obsoleted nor deleted in F2003. */
393#define GFC_STD_F95 (1<<3) /* New in F95. */
394#define GFC_STD_F95_DEL (1<<2) /* Deleted in F95. */
395#define GFC_STD_F95_OBS (1<<1) /* Obsoleted in F95. */
396#define GFC_STD_F77 (1<<0) /* Up to and including F77. */
397
944b8b35
FXC
398/* Bitmasks for the various FPE that can be enabled.
399 Keep them in sync with their counterparts in gcc/fortran/gfortran.h. */
400#define GFC_FPE_INVALID (1<<0)
401#define GFC_FPE_DENORMAL (1<<1)
402#define GFC_FPE_ZERO (1<<2)
403#define GFC_FPE_OVERFLOW (1<<3)
404#define GFC_FPE_UNDERFLOW (1<<4)
405#define GFC_FPE_PRECISION (1<<5)
8b67b708 406
6de9cd9a
DN
407/* The filename and line number don't go inside the globals structure.
408 They are set by the rest of the program and must be linked to. */
409
7d7b8bfe
RH
410/* Location of the current library call (optional). */
411extern unsigned line;
412iexport_data_proto(line);
6de9cd9a 413
6de9cd9a 414extern char *filename;
7d7b8bfe 415iexport_data_proto(filename);
6de9cd9a 416
c6847e25
SK
417/* Avoid conflicting prototypes of alloca() in system headers by using
418 GCC's builtin alloca(). */
c6847e25
SK
419#define gfc_alloca(x) __builtin_alloca(x)
420
6de9cd9a
DN
421
422/* main.c */
423
f2ae4b2b
FXC
424extern void stupid_function_name_for_static_linking (void);
425internal_proto(stupid_function_name_for_static_linking);
426
5e805e44
JJ
427struct st_parameter_common;
428extern void library_start (struct st_parameter_common *);
7d7b8bfe 429internal_proto(library_start);
6de9cd9a 430
5e805e44 431#define library_end()
6de9cd9a 432
7d7b8bfe
RH
433extern void set_args (int, char **);
434export_proto(set_args);
6de9cd9a 435
7d7b8bfe
RH
436extern void get_args (int *, char ***);
437internal_proto(get_args);
6de9cd9a
DN
438
439/* error.c */
6de9cd9a 440
1449b8cb
JJ
441#define GFC_ITOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 3 + 2)
442#define GFC_XTOA_BUF_SIZE (sizeof (GFC_UINTEGER_LARGEST) * 2 + 1)
443#define GFC_OTOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 3 + 1)
444#define GFC_BTOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 8 + 1)
445
446extern const char *gfc_itoa (GFC_INTEGER_LARGEST, char *, size_t);
9548f059 447internal_proto(gfc_itoa);
6de9cd9a 448
1449b8cb 449extern const char *xtoa (GFC_UINTEGER_LARGEST, char *, size_t);
7d7b8bfe 450internal_proto(xtoa);
6de9cd9a 451
7d7b8bfe
RH
452extern void os_error (const char *) __attribute__ ((noreturn));
453internal_proto(os_error);
6de9cd9a 454
5e805e44 455extern void show_locus (struct st_parameter_common *);
7d7b8bfe 456internal_proto(show_locus);
6de9cd9a 457
7d7b8bfe
RH
458extern void runtime_error (const char *) __attribute__ ((noreturn));
459iexport_proto(runtime_error);
6de9cd9a 460
5e805e44
JJ
461extern void internal_error (struct st_parameter_common *, const char *)
462 __attribute__ ((noreturn));
7d7b8bfe 463internal_proto(internal_error);
6de9cd9a 464
7d7b8bfe
RH
465extern const char *get_oserror (void);
466internal_proto(get_oserror);
6de9cd9a 467
7d7b8bfe
RH
468extern void sys_exit (int) __attribute__ ((noreturn));
469internal_proto(sys_exit);
6de9cd9a 470
7d7b8bfe
RH
471extern int st_printf (const char *, ...)
472 __attribute__ ((format (printf, 1, 2)));
473internal_proto(st_printf);
6de9cd9a 474
7d7b8bfe
RH
475extern void st_sprintf (char *, const char *, ...)
476 __attribute__ ((format (printf, 2, 3)));
477internal_proto(st_sprintf);
6de9cd9a 478
7d7b8bfe
RH
479extern const char *translate_error (int);
480internal_proto(translate_error);
6de9cd9a 481
5e805e44 482extern void generate_error (struct st_parameter_common *, int, const char *);
7d7b8bfe 483internal_proto(generate_error);
6de9cd9a 484
944b8b35
FXC
485/* fpu.c */
486
487extern void set_fpu (void);
488internal_proto(set_fpu);
489
6de9cd9a
DN
490/* memory.c */
491
7d7b8bfe
RH
492extern void *get_mem (size_t) __attribute__ ((malloc));
493internal_proto(get_mem);
6de9cd9a 494
7d7b8bfe
RH
495extern void free_mem (void *);
496internal_proto(free_mem);
6de9cd9a 497
7d7b8bfe
RH
498extern void *internal_malloc_size (size_t);
499internal_proto(internal_malloc_size);
6de9cd9a 500
7d7b8bfe
RH
501extern void internal_free (void *);
502iexport_proto(internal_free);
6de9cd9a
DN
503
504/* environ.c */
505
7d7b8bfe
RH
506extern int check_buffered (int);
507internal_proto(check_buffered);
6de9cd9a 508
7d7b8bfe
RH
509extern void init_variables (void);
510internal_proto(init_variables);
6de9cd9a 511
7d7b8bfe
RH
512extern void show_variables (void);
513internal_proto(show_variables);
6de9cd9a
DN
514
515/* string.c */
516
5e805e44
JJ
517extern int find_option (struct st_parameter_common *, const char *, int,
518 const st_option *, const char *);
7d7b8bfe 519internal_proto(find_option);
6de9cd9a 520
7d7b8bfe
RH
521extern int fstrlen (const char *, int);
522internal_proto(fstrlen);
6de9cd9a 523
7d7b8bfe
RH
524extern void fstrcpy (char *, int, const char *, int);
525internal_proto(fstrcpy);
6de9cd9a 526
7d7b8bfe
RH
527extern void cf_strcpy (char *, int, const char *);
528internal_proto(cf_strcpy);
6de9cd9a
DN
529
530/* io.c */
531
7d7b8bfe
RH
532extern void init_units (void);
533internal_proto(init_units);
6de9cd9a 534
7d7b8bfe
RH
535extern void close_units (void);
536internal_proto(close_units);
6de9cd9a
DN
537
538/* stop.c */
7d7b8bfe
RH
539
540extern void stop_numeric (GFC_INTEGER_4);
541iexport_proto(stop_numeric);
6de9cd9a
DN
542
543/* reshape_packed.c */
6de9cd9a 544
7d7b8bfe
RH
545extern void reshape_packed (char *, index_type, const char *, index_type,
546 const char *, index_type);
547internal_proto(reshape_packed);
6de9cd9a 548
7d7b8bfe 549/* Repacking functions. */
6de9cd9a 550
e82726f9 551/* ??? These aren't currently used by the compiler, though we
7d7b8bfe 552 certainly could do so. */
6de9cd9a 553GFC_INTEGER_4 *internal_pack_4 (gfc_array_i4 *);
7d7b8bfe 554internal_proto(internal_pack_4);
6de9cd9a 555
6de9cd9a 556GFC_INTEGER_8 *internal_pack_8 (gfc_array_i8 *);
7d7b8bfe 557internal_proto(internal_pack_8);
6de9cd9a 558
0618ee31 559#if defined HAVE_GFC_INTEGER_16
e82726f9
AJ
560GFC_INTEGER_16 *internal_pack_16 (gfc_array_i16 *);
561internal_proto(internal_pack_16);
0618ee31 562#endif
e82726f9 563
39328081
TK
564GFC_COMPLEX_4 *internal_pack_c4 (gfc_array_c4 *);
565internal_proto(internal_pack_c4);
566
567GFC_COMPLEX_8 *internal_pack_c8 (gfc_array_c8 *);
568internal_proto(internal_pack_c8);
569
0618ee31 570#if defined HAVE_GFC_COMPLEX_10
e82726f9
AJ
571GFC_COMPLEX_10 *internal_pack_c10 (gfc_array_c10 *);
572internal_proto(internal_pack_c10);
0618ee31 573#endif
e82726f9 574
7d7b8bfe
RH
575extern void internal_unpack_4 (gfc_array_i4 *, const GFC_INTEGER_4 *);
576internal_proto(internal_unpack_4);
6de9cd9a 577
7d7b8bfe
RH
578extern void internal_unpack_8 (gfc_array_i8 *, const GFC_INTEGER_8 *);
579internal_proto(internal_unpack_8);
f814193b 580
0618ee31 581#if defined HAVE_GFC_INTEGER_16
e82726f9
AJ
582extern void internal_unpack_16 (gfc_array_i16 *, const GFC_INTEGER_16 *);
583internal_proto(internal_unpack_16);
0618ee31 584#endif
e82726f9 585
39328081
TK
586extern void internal_unpack_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *);
587internal_proto(internal_unpack_c4);
588
589extern void internal_unpack_c8 (gfc_array_c8 *, const GFC_COMPLEX_8 *);
590internal_proto(internal_unpack_c8);
591
0618ee31 592#if defined HAVE_GFC_COMPLEX_10
e82726f9
AJ
593extern void internal_unpack_c10 (gfc_array_c10 *, const GFC_COMPLEX_10 *);
594internal_proto(internal_unpack_c10);
0618ee31 595#endif
e82726f9 596
6de9cd9a
DN
597/* string_intrinsics.c */
598
7d7b8bfe
RH
599extern GFC_INTEGER_4 compare_string (GFC_INTEGER_4, const char *,
600 GFC_INTEGER_4, const char *);
601iexport_proto(compare_string);
6de9cd9a 602
abdef811
BD
603/* random.c */
604
7d7b8bfe
RH
605extern void random_seed (GFC_INTEGER_4 * size, gfc_array_i4 * put,
606 gfc_array_i4 * get);
607iexport_proto(random_seed);
abdef811 608
a9e7b9d3
PB
609/* normalize.c */
610
7d7b8bfe
RH
611extern GFC_REAL_4 normalize_r4_i4 (GFC_UINTEGER_4, GFC_UINTEGER_4);
612internal_proto(normalize_r4_i4);
a9e7b9d3 613
7d7b8bfe
RH
614extern GFC_REAL_8 normalize_r8_i8 (GFC_UINTEGER_8, GFC_UINTEGER_8);
615internal_proto(normalize_r8_i8);
a9e7b9d3 616
6c167c45
VL
617/* size.c */
618
619typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) array_t;
620
7d7b8bfe
RH
621extern index_type size0 (const array_t * array);
622iexport_proto(size0);
6c167c45 623
69d3c9a4 624#endif /* LIBGFOR_H */