/* Copyright (C) 2005-2021 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* Make sure to keep in sync with libgfortran/io/io.h (st_parameter_*).  */
#ifndef IOPARM_common_libreturn_mask
#define IOPARM_common_libreturn_mask	3
#define IOPARM_common_libreturn_ok	0
#define IOPARM_common_libreturn_error	1
#define IOPARM_common_libreturn_end	2
#define IOPARM_common_libreturn_eor	3
#define IOPARM_common_err		(1 << 2)
#define IOPARM_common_end		(1 << 3)
#define IOPARM_common_eor		(1 << 4)
#endif
IOPARM (common,  flags,		0,	 int4)
IOPARM (common,  unit,		0,	 int4)
IOPARM (common,  filename,	0,	 pchar)
IOPARM (common,  line,		0,	 int4)
IOPARM (common,  iomsg,		1 << 6,  char2)
IOPARM (common,  iostat,	1 << 5,  pint4)
IOPARM (open,    common,	0,	 common)
IOPARM (open,    recl_in,	1 << 7,  intio)
IOPARM (open,    file,		1 << 8,  char2)
IOPARM (open,    status,	1 << 9,  char1)
IOPARM (open,    access,	1 << 10, char2)
IOPARM (open,    form,		1 << 11, char1)
IOPARM (open,    blank,		1 << 12, char2)
IOPARM (open,    position,	1 << 13, char1)
IOPARM (open,    action,	1 << 14, char2)
IOPARM (open,    delim,		1 << 15, char1)
IOPARM (open,    pad,		1 << 16, char2)
IOPARM (open,    convert,	1 << 17, char1)
IOPARM (open,    decimal,	1 << 18, char2)
IOPARM (open,    encoding,	1 << 19, char1)
IOPARM (open,    round,		1 << 20, char2)
IOPARM (open,    sign,		1 << 21, char1)
IOPARM (open,    asynchronous,	1 << 22, char2)
IOPARM (open,    newunit,	1 << 23, pint4)
IOPARM (open,    readonly,	1 << 24, int4)
IOPARM (open,    cc,		1 << 25, char2)
IOPARM (open,    share,		1 << 26, char1)
IOPARM (close,   common,	0,	 common)
IOPARM (close,   status,	1 << 7,  char1)
IOPARM (filepos, common,	0,	 common)
IOPARM (inquire, common,	0,	 common)
IOPARM (inquire, exist,		1 << 7,  pint4)
IOPARM (inquire, opened,	1 << 8,  pint4)
IOPARM (inquire, number,	1 << 9,  pint4)
IOPARM (inquire, named,		1 << 10, pint4)
IOPARM (inquire, nextrec,	1 << 11, pintio)
IOPARM (inquire, recl_out,	1 << 12, pintio)
IOPARM (inquire, strm_pos_out,	1 << 13, pintio)
IOPARM (inquire, file,		1 << 14, char1)
IOPARM (inquire, access,	1 << 15, char2)
IOPARM (inquire, form,		1 << 16, char1)
IOPARM (inquire, blank,		1 << 17, char2)
IOPARM (inquire, position,	1 << 18, char1)
IOPARM (inquire, action,	1 << 19, char2)
IOPARM (inquire, delim,		1 << 20, char1)
IOPARM (inquire, pad,		1 << 21, char2)
IOPARM (inquire, name,		1 << 22, char1)
IOPARM (inquire, sequential,	1 << 23, char2)
IOPARM (inquire, direct,	1 << 24, char1)
IOPARM (inquire, formatted,	1 << 25, char2)
IOPARM (inquire, unformatted,	1 << 26, char1)
IOPARM (inquire, read,		1 << 27, char2)
IOPARM (inquire, write,		1 << 28, char1)
IOPARM (inquire, readwrite,	1 << 29, char2)
IOPARM (inquire, convert,	1 << 30, char1)
IOPARM (inquire, flags2,	1U << 31, int4)
IOPARM (inquire, asynchronous,	1 << 0,  char1)
IOPARM (inquire, decimal,	1 << 1,  char2)
IOPARM (inquire, encoding,	1 << 2,  char1)
IOPARM (inquire, round,		1 << 3,  char2)
IOPARM (inquire, sign,		1 << 4,  char1)
IOPARM (inquire, pending,	1 << 5,  pint4)
IOPARM (inquire, size,		1 << 6,  pintio)
IOPARM (inquire, id,		1 << 7,  pint4)
IOPARM (inquire, iqstream,	1 << 8,  char1)
IOPARM (inquire, share,		1 << 9,  char2)
IOPARM (inquire, cc,		1 << 10, char1)
IOPARM (wait,    common,	0,	 common)
IOPARM (wait,    id,		1 << 7,  pint4)
IOPARM (dt,      common,	0,	 common)
#define IOPARM_dt_list_format		(1 << 7)
#define IOPARM_dt_namelist_read_mode	(1 << 8)
IOPARM (dt,      rec,		1 << 9,  intio)
IOPARM (dt,      size,		1 << 10, pintio)
IOPARM (dt,      iolength,	1 << 11, pintio)
IOPARM (dt,      internal_unit_desc, 0,  parray)
IOPARM (dt,      format,	1 << 12, char1)
IOPARM (dt,      advance,	1 << 13, char2)
IOPARM (dt,      internal_unit,	1 << 14, char1)
IOPARM (dt,      namelist_name,	1 << 15, char2)
IOPARM (dt,      id,		1 << 16, pint4)
IOPARM (dt,      pos,		1 << 17, intio)
IOPARM (dt,      asynchronous, 	1 << 18, char1)
IOPARM (dt,      blank,		1 << 19, char2)
IOPARM (dt,      decimal,	1 << 20, char1)
IOPARM (dt,      delim,		1 << 21, char2)
IOPARM (dt,      pad,		1 << 22, char1)
IOPARM (dt,      round,		1 << 23, char2)
IOPARM (dt,      sign,		1 << 24, char1)
#define IOPARM_dt_f2003		      (1 << 25)
#define IOPARM_dt_dtio		      (1 << 26)
#define IOPARM_dt_dec_ext	      (1 << 27)
IOPARM (dt,      u,		0,	 pad)
