/* Copyright (C) 2005-2016 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/>.  */

#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 (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 (wait,    common,	0,	 common)
IOPARM (wait,    id,		1 << 7,  pint4)
#ifndef IOPARM_dt_list_format
#define IOPARM_dt_list_format		(1 << 7)
#define IOPARM_dt_namelist_read_mode	(1 << 8)
#endif
IOPARM (dt,      common,	0,	 common)
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,      u,		0,	 pad)
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)
