/* Copyright (C) 2005-2017 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,  int4)
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, pint4)
IOPARM (inquire, recl_out,	1 << 12, pint4)
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,	1 << 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_default_exp	      (1 << 27)
IOPARM (dt,      u,		0,	 pad)
