/* Copyright (C) 2005, 2006, 2008, 2010
   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 (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)
