aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2004-08-23 16:28:31 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2004-08-23 16:28:31 +0200
commit7fcb18047a53780b572b72c964d1df9cddec1660 (patch)
tree0f798efffa4545365420b55d47237058cfaa04c6 /libgfortran
parentb3d1f5b404c57db42824d112f3368d76e1711e11 (diff)
downloadgcc-7fcb18047a53780b572b72c964d1df9cddec1660.zip
gcc-7fcb18047a53780b572b72c964d1df9cddec1660.tar.gz
gcc-7fcb18047a53780b572b72c964d1df9cddec1660.tar.bz2
io.h, [...]: Fix formatting issues, update copyright years.
* io/io.h, io/list_read.c, io/open.c, io/transfer.c, io/write.c: Fix formatting issues, update copyright years. From-SVN: r86425
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/io/io.h2
-rw-r--r--libgfortran/io/list_read.c190
-rw-r--r--libgfortran/io/open.c70
-rw-r--r--libgfortran/io/transfer.c328
-rw-r--r--libgfortran/io/write.c105
5 files changed, 346 insertions, 349 deletions
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 87a70f8..796a624 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfortran).
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 92ef1e7..95b5b88 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfortran).
@@ -27,19 +27,19 @@ Boston, MA 02111-1307, USA. */
/* List directed input. Several parsing subroutines are practically
- * reimplemented from formatted input, the reason being that there are
- * all kinds of small differences between formatted and list directed
- * parsing. */
+ reimplemented from formatted input, the reason being that there are
+ all kinds of small differences between formatted and list directed
+ parsing. */
/* Subroutines for reading characters from the input. Because a
- * repeat count is ambiguous with an integer, we have to read the
- * whole digit string before seeing if there is a '*' which signals
- * the repeat count. Since we can have a lot of potential leading
- * zeros, we have to be able to back up by arbitrary amount. Because
- * the input might not be seekable, we have to buffer the data
- * ourselves. Data is buffered in scratch[] until it becomes too
- * large, after which we start allocating memory on the heap. */
+ repeat count is ambiguous with an integer, we have to read the
+ whole digit string before seeing if there is a '*' which signals
+ the repeat count. Since we can have a lot of potential leading
+ zeros, we have to be able to back up by arbitrary amount. Because
+ the input might not be seekable, we have to buffer the data
+ ourselves. Data is buffered in scratch[] until it becomes too
+ large, after which we start allocating memory on the heap. */
static int repeat_count, saved_length, saved_used, input_complete, at_eol;
static int comma_flag, namelist_mode;
@@ -50,7 +50,7 @@ static bt saved_type;
/* Storage area for values except for strings. Must be large enough
- * to hold a complex value (two reals) of the largest kind */
+ to hold a complex value (two reals) of the largest kind. */
static char value[20];
@@ -59,18 +59,17 @@ static char value[20];
#define CASE_SEPARATORS case ' ': case ',': case '/': case '\n': case '\t'
-/* This macro assumes that we're operating on a variable */
+/* This macro assumes that we're operating on a variable. */
#define is_separator(c) (c == '/' || c == ',' || c == '\n' || c == ' ' \
|| c == '\t')
-/* Maximum repeat count. Less than ten times the maximum signed int32. */
+/* Maximum repeat count. Less than ten times the maximum signed int32. */
#define MAX_REPEAT 200000000
-/* push_char()-- Save a character to a string buffer, enlarging it as
- * necessary. */
+/* Save a character to a string buffer, enlarging it as necessary. */
static void
push_char (char c)
@@ -103,7 +102,7 @@ push_char (char c)
}
-/* free_saved()-- Free the input buffer if necessary. */
+/* Free the input buffer if necessary. */
static void
free_saved (void)
@@ -152,7 +151,7 @@ done:
}
-/* unget_char()-- Push a character back onto the input */
+/* Push a character back onto the input. */
static void
unget_char (char c)
@@ -162,9 +161,8 @@ unget_char (char c)
}
-/* eat_spaces()-- Skip over spaces in the input. Returns the nonspace
- * character that terminated the eating and also places it back on the
- * input. */
+/* Skip over spaces in the input. Returns the nonspace character that
+ terminated the eating and also places it back on the input. */
static char
eat_spaces (void)
@@ -182,17 +180,16 @@ eat_spaces (void)
}
-/* eat_separator()-- Skip over a separator. Technically, we don't
- * always eat the whole separator. This is because if we've processed
- * the last input item, then a separator is unnecessary. Plus the
- * fact that operating systems usually deliver console input on a line
- * basis.
- *
- * The upshot is that if we see a newline as part of reading a
- * separator, we stop reading. If there are more input items, we
- * continue reading the separator with finish_separator() which takes
- * care of the fact that we may or may not have seen a comma as part
- * of the separator. */
+/* Skip over a separator. Technically, we don't always eat the whole
+ separator. This is because if we've processed the last input item,
+ then a separator is unnecessary. Plus the fact that operating
+ systems usually deliver console input on a line basis.
+
+ The upshot is that if we see a newline as part of reading a
+ separator, we stop reading. If there are more input items, we
+ continue reading the separator with finish_separator() which takes
+ care of the fact that we may or may not have seen a comma as part
+ of the separator. */
static void
eat_separator (void)
@@ -220,7 +217,7 @@ eat_separator (void)
case '!':
if (namelist_mode)
- { /* Eat a namelist comment */
+ { /* Eat a namelist comment. */
do
c = next_char ();
while (c != '\n');
@@ -228,7 +225,7 @@ eat_separator (void)
break;
}
- /* Fall Through */
+ /* Fall Through... */
default:
unget_char (c);
@@ -237,9 +234,9 @@ eat_separator (void)
}
-/* finish_separator()-- Finish processing a separator that was
- * interrupted by a newline. If we're here, then another data item is
- * present, so we finish what we started on the previous line. */
+/* Finish processing a separator that was interrupted by a newline.
+ If we're here, then another data item is present, so we finish what
+ we started on the previous line. */
static void
finish_separator (void)
@@ -289,10 +286,9 @@ restart:
}
-/* convert_integer()-- Convert an unsigned string to an integer. The
- * length value is -1 if we are working on a repeat count. Returns
- * nonzero if we have a range problem. As a side effect, frees the
- * saved_string. */
+/* Convert an unsigned string to an integer. The length value is -1
+ if we are working on a repeat count. Returns nonzero if we have a
+ range problem. As a side effect, frees the saved_string. */
static int
convert_integer (int length, int negative)
@@ -363,9 +359,9 @@ overflow:
}
-/* parse_repeat()-- Parse a repeat count for logical and complex
- * values which cannot begin with a digit. Returns nonzero if we are
- * done, zero if we should continue on. */
+/* Parse a repeat count for logical and complex values which cannot
+ begin with a digit. Returns nonzero if we are done, zero if we
+ should continue on. */
static int
parse_repeat (void)
@@ -441,7 +437,7 @@ bad_repeat:
}
-/* read_logical()-- Read a logical character on the input */
+/* Read a logical character on the input. */
static void
read_logical (int length)
@@ -485,7 +481,7 @@ read_logical (int length)
CASE_SEPARATORS:
unget_char (c);
eat_separator ();
- return; /* Null value */
+ return; /* Null value. */
default:
goto bad_logical;
@@ -494,8 +490,7 @@ read_logical (int length)
saved_type = BT_LOGICAL;
saved_length = length;
- /* Eat trailing garbage */
-
+ /* Eat trailing garbage. */
do
{
c = next_char ();
@@ -517,10 +512,10 @@ bad_logical:
}
-/* read_integer()-- Reading integers is tricky because we can actually
- * be reading a repeat count. We have to store the characters in a
- * buffer because we could be reading an integer that is larger than the
- * default int used for repeat counts. */
+/* Reading integers is tricky because we can actually be reading a
+ repeat count. We have to store the characters in a buffer because
+ we could be reading an integer that is larger than the default int
+ used for repeat counts. */
static void
read_integer (int length)
@@ -535,13 +530,13 @@ read_integer (int length)
{
case '-':
negative = 1;
- /* Fall through */
+ /* Fall through... */
case '+':
c = next_char ();
goto get_integer;
- CASE_SEPARATORS: /* Single null */
+ CASE_SEPARATORS: /* Single null. */
unget_char (c);
eat_separator ();
return;
@@ -554,7 +549,7 @@ read_integer (int length)
goto bad_integer;
}
- /* Take care of what may be a repeat count */
+ /* Take care of what may be a repeat count. */
for (;;)
{
@@ -569,7 +564,7 @@ read_integer (int length)
push_char ('\0');
goto repeat;
- CASE_SEPARATORS: /* Not a repeat count */
+ CASE_SEPARATORS: /* Not a repeat count. */
goto done;
default:
@@ -581,7 +576,7 @@ repeat:
if (convert_integer (-1, 0))
return;
-/* Get the real integer */
+ /* Get the real integer. */
c = next_char ();
switch (c)
@@ -596,7 +591,7 @@ repeat:
case '-':
negative = 1;
- /* Fall through */
+ /* Fall through... */
case '+':
c = next_char ();
@@ -649,14 +644,14 @@ done:
}
-/* read_character()-- Read a character variable */
+/* Read a character variable. */
static void
read_character (int length)
{
char c, quote, message[100];
- quote = ' '; /* Space means no quote character */
+ quote = ' '; /* Space means no quote character. */
c = next_char ();
switch (c)
@@ -666,7 +661,7 @@ read_character (int length)
break;
CASE_SEPARATORS:
- unget_char (c); /* NULL value */
+ unget_char (c); /* NULL value. */
eat_separator ();
return;
@@ -680,7 +675,7 @@ read_character (int length)
goto get_string;
}
-/* Deal with a possible repeat count */
+ /* Deal with a possible repeat count. */
for (;;)
{
@@ -693,7 +688,7 @@ read_character (int length)
CASE_SEPARATORS:
unget_char (c);
- goto done; /* String was only digits! */
+ goto done; /* String was only digits! */
case '*':
push_char ('\0');
@@ -701,7 +696,7 @@ read_character (int length)
default:
push_char (c);
- goto get_string; /* Not a repeat count after all */
+ goto get_string; /* Not a repeat count after all. */
}
}
@@ -709,13 +704,13 @@ got_repeat:
if (convert_integer (-1, 0))
return;
- /* Now get the real string */
+ /* Now get the real string. */
c = next_char ();
switch (c)
{
CASE_SEPARATORS:
- unget_char (c); /* repeated NULL values */
+ unget_char (c); /* Repeated NULL values. */
eat_separator ();
return;
@@ -743,7 +738,8 @@ get_string:
break;
}
- /* See if we have a doubled quote character or the end of the string */
+ /* See if we have a doubled quote character or the end of
+ the string. */
c = next_char ();
if (c == quote)
@@ -772,7 +768,8 @@ get_string:
}
}
-/* At this point, we have to have a separator, or else the string is invalid */
+/* At this point, we have to have a separator, or else the string is
+ invalid. */
done:
c = next_char ();
@@ -791,9 +788,8 @@ done:
}
-/* parse_real()-- Parse a component of a complex constant or a real
- * number that we are sure is already there. This is a straight real
- * number parser. */
+/* Parse a component of a complex constant or a real number that we
+ are sure is already there. This is a straight real number parser. */
static int
parse_real (void *buffer, int length)
@@ -906,8 +902,8 @@ bad:
}
-/* read_complex()-- Reading a complex number is straightforward
- * because we can tell what it is right away. */
+/* Reading a complex number is straightforward because we can tell
+ what it is right away. */
static void
read_complex (int length)
@@ -968,7 +964,7 @@ bad_complex:
}
-/* read_real()-- Parse a real number with a possible repeat count. */
+/* Parse a real number with a possible repeat count. */
static void
read_real (int length)
@@ -995,7 +991,7 @@ read_real (int length)
goto got_sign;
CASE_SEPARATORS:
- unget_char (c); /* Single null */
+ unget_char (c); /* Single null. */
eat_separator ();
return;
@@ -1003,7 +999,7 @@ read_real (int length)
goto bad_real;
}
- /* Get the digit string that might be a repeat count */
+ /* Get the digit string that might be a repeat count. */
for (;;)
{
@@ -1041,7 +1037,7 @@ read_real (int length)
CASE_SEPARATORS:
if (c != '\n')
- unget_char (c); /* Real number that is just a digit-string */
+ unget_char (c); /* Real number that is just a digit-string. */
goto done;
default:
@@ -1053,11 +1049,11 @@ got_repeat:
if (convert_integer (-1, 0))
return;
-/* Now get the number itself */
+ /* Now get the number itself. */
c = next_char ();
if (is_separator (c))
- { /* Repeated null value */
+ { /* Repeated null value. */
unget_char (c);
eat_separator ();
return;
@@ -1178,8 +1174,8 @@ bad_real:
}
-/* check_type()-- Check the current type against the saved type to
- * make sure they are compatible. Returns nonzero if incompatible. */
+/* Check the current type against the saved type to make sure they are
+ compatible. Returns nonzero if incompatible. */
static int
check_type (bt type, int len)
@@ -1211,11 +1207,10 @@ check_type (bt type, int len)
}
-/* list_formatted_read()-- Top level data transfer subroutine for list
- * reads. Because we have to deal with repeat counts, the data item
- * is always saved after reading, usually in the value[] array. If a
- * repeat count is greater than one, we copy the data item multiple
- * times. */
+/* Top level data transfer subroutine for list reads. Because we have
+ to deal with repeat counts, the data item is always saved after
+ reading, usually in the value[] array. If a repeat count is
+ greater than one, we copy the data item multiple times. */
void
list_formatted_read (bt type, void *p, int len)
@@ -1240,7 +1235,7 @@ list_formatted_read (bt type, void *p, int len)
c = eat_spaces ();
if (is_separator (c))
- { /* Found a null value */
+ { /* Found a null value. */
eat_separator ();
repeat_count = 0;
if (at_eol)
@@ -1304,7 +1299,7 @@ set_value:
{
case BT_COMPLEX:
len = 2 * len;
- /* Fall through */
+ /* Fall through. */
case BT_INTEGER:
case BT_REAL:
@@ -1318,7 +1313,8 @@ set_value:
m = (len < saved_used) ? len : saved_used;
memcpy (p, saved_string, m);
}
- else /* just delimiters encountered, nothing to copy but SPACE */
+ else
+ /* Just delimiters encountered, nothing to copy but SPACE. */
m = 0;
if (m < len)
@@ -1339,7 +1335,7 @@ init_at_eol()
at_eol = 0;
}
-/* finish_list_read()-- Finish a list read */
+/* Finish a list read. */
void
finish_list_read (void)
@@ -1386,7 +1382,7 @@ match_namelist_name (char *name, int len)
char * namelist_name = name;
name_len = 0;
- /* Match the name of the namelist */
+ /* Match the name of the namelist. */
if (tolower (next_char ()) != tolower (namelist_name[name_len++]))
{
@@ -1408,8 +1404,9 @@ match_namelist_name (char *name, int len)
Namelist reads
********************************************************************/
-/* namelist_read()-- Process a namelist read. This subroutine
- * initializes things, positions to the first element and */
+/* Process a namelist read. This subroutine initializes things,
+ positions to the first element and
+ FIXME: was this comment ever complete? */
void
namelist_read (void)
@@ -1449,10 +1446,10 @@ restart:
return;
}
- /* Match the name of the namelist */
+ /* Match the name of the namelist. */
match_namelist_name(ioparm.namelist_name, ioparm.namelist_name_len);
- /* Ready to read namelist elements */
+ /* Ready to read namelist elements. */
while (!input_complete)
{
c = next_char ();
@@ -1509,7 +1506,7 @@ restart:
{
case BT_COMPLEX:
len = 2 * len;
- /* Fall through */
+ /* Fall through... */
case BT_INTEGER:
case BT_REAL:
@@ -1537,4 +1534,3 @@ restart:
}
}
}
-
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index f88bdec..2d04537 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -1,5 +1,4 @@
-
-/* Copyright (C) 2002-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfortran).
@@ -134,10 +133,10 @@ static st_option access_opt[] = {
};
-/* test_endfile()-- Given a unit, test to see if the file is
- * positioned at the terminal point, and if so, change state from
- * NO_ENDFILE flag to AT_ENDFILE. This prevents us from changing the
- * state from AFTER_ENDFILE to AT_ENDFILE. */
+/* Given a unit, test to see if the file is positioned at the terminal
+ point, and if so, change state from NO_ENDFILE flag to AT_ENDFILE.
+ This prevents us from changing the state from AFTER_ENDFILE to
+ AT_ENDFILE. */
void
test_endfile (gfc_unit * u)
@@ -148,14 +147,14 @@ test_endfile (gfc_unit * u)
}
-/* edit_modes()-- Change the modes of a file, those that are allowed
- * to be changed. */
+/* Change the modes of a file, those that are allowed * to be
+ changed. */
static void
edit_modes (gfc_unit * u, unit_flags * flags)
{
- /* Complain about attempts to change the unchangeable */
+ /* Complain about attempts to change the unchangeable. */
if (flags->status != STATUS_UNSPECIFIED &&
u->flags.status != flags->position)
@@ -178,7 +177,7 @@ edit_modes (gfc_unit * u, unit_flags * flags)
generate_error (ERROR_BAD_OPTION,
"Cannot change ACTION parameter in OPEN statement");
- /* Status must be OLD if present */
+ /* Status must be OLD if present. */
if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD)
generate_error (ERROR_BAD_OPTION,
@@ -203,7 +202,8 @@ edit_modes (gfc_unit * u, unit_flags * flags)
}
if (ioparm.library_return == LIBRARY_OK)
- { /* Change the changeable */
+ {
+ /* Change the changeable: */
if (flags->blank != BLANK_UNSPECIFIED)
u->flags.blank = flags->blank;
if (flags->delim != DELIM_UNSPECIFIED)
@@ -212,7 +212,7 @@ edit_modes (gfc_unit * u, unit_flags * flags)
u->flags.pad = flags->pad;
}
- /* Reposition the file if necessary. */
+ /* Reposition the file if necessary. */
switch (flags->position)
{
@@ -227,7 +227,7 @@ edit_modes (gfc_unit * u, unit_flags * flags)
u->current_record = 0;
u->last_record = 0;
- test_endfile (u); /* We might be at the end */
+ test_endfile (u); /* We might be at the end. */
break;
case POSITION_APPEND:
@@ -235,7 +235,7 @@ edit_modes (gfc_unit * u, unit_flags * flags)
goto seek_error;
u->current_record = 0;
- u->endfile = AT_ENDFILE; /* We are at the end */
+ u->endfile = AT_ENDFILE; /* We are at the end. */
break;
seek_error:
@@ -245,7 +245,7 @@ edit_modes (gfc_unit * u, unit_flags * flags)
}
-/* new_unit()-- Open an unused unit */
+/* Open an unused unit. */
void
new_unit (unit_flags * flags)
@@ -254,13 +254,13 @@ new_unit (unit_flags * flags)
stream *s;
char tmpname[5 /* fort. */ + 10 /* digits of unit number */ + 1 /* 0 */];
- /* Change unspecifieds to defaults */
+ /* Change unspecifieds to defaults. */
if (flags->access == ACCESS_UNSPECIFIED)
flags->access = ACCESS_SEQUENTIAL;
if (flags->action == ACTION_UNSPECIFIED)
- flags->action = ACTION_READWRITE; /* Processor dependent */
+ flags->action = ACTION_READWRITE; /* Processor dependent. */
if (flags->form == FORM_UNSPECIFIED)
flags->form = (flags->access == ACCESS_SEQUENTIAL)
@@ -321,7 +321,7 @@ new_unit (unit_flags * flags)
if (flags->status == STATUS_UNSPECIFIED)
flags->status = STATUS_UNKNOWN;
- /* Checks */
+ /* Checks. */
if (flags->access == ACCESS_DIRECT && ioparm.recl_in == 0)
{
@@ -362,7 +362,7 @@ new_unit (unit_flags * flags)
internal_error ("new_unit(): Bad status");
}
- /* Make sure the file isn't already open someplace else */
+ /* Make sure the file isn't already open someplace else. */
if (find_file () != NULL)
{
@@ -370,7 +370,7 @@ new_unit (unit_flags * flags)
goto cleanup;
}
- /* Open file */
+ /* Open file. */
s = open_external (flags->action, flags->status);
if (s == NULL)
@@ -382,7 +382,7 @@ new_unit (unit_flags * flags)
if (flags->status == STATUS_NEW || flags->status == STATUS_REPLACE)
flags->status = STATUS_OLD;
- /* Create the unit structure */
+ /* Create the unit structure. */
u = get_mem (sizeof (gfc_unit) + ioparm.file_len);
@@ -390,15 +390,15 @@ new_unit (unit_flags * flags)
u->s = s;
u->flags = *flags;
- /* Unspecified recl ends up with a processor dependent value */
+ /* Unspecified recl ends up with a processor dependent value. */
u->recl = (ioparm.recl_in != 0) ? ioparm.recl_in : DEFAULT_RECL;
u->last_record = 0;
u->current_record = 0;
/* If the file is direct access, calculate the maximum record number
- * via a division now instead of letting the multiplication overflow
- * later. */
+ via a division now instead of letting the multiplication overflow
+ later. */
if (flags->access == ACCESS_DIRECT)
u->maxrec = g.max_offset / u->recl;
@@ -409,25 +409,24 @@ new_unit (unit_flags * flags)
insert_unit (u);
/* The file is now connected. Errors after this point leave the
- * file connected. Curiously, the standard requires that the
- * position specifier be ignored for new files so a newly connected
- * file starts out that the initial point. We still need to figure
- * out if the file is at the end or not. */
+ file connected. Curiously, the standard requires that the
+ position specifier be ignored for new files so a newly connected
+ file starts out that the initial point. We still need to figure
+ out if the file is at the end or not. */
test_endfile (u);
cleanup:
- /* Free memory associated with a temporary filename */
+ /* Free memory associated with a temporary filename. */
if (flags->status == STATUS_SCRATCH)
free_mem (ioparm.file);
}
-/* already_open()-- Open a unit which is already open. This involves
- * changing the modes or closing what is there now and opening the new
- * file. */
+/* Open a unit which is already open. This involves changing the
+ modes or closing what is there now and opening the new file. */
static void
already_open (gfc_unit * u, unit_flags * flags)
@@ -440,7 +439,7 @@ already_open (gfc_unit * u, unit_flags * flags)
}
/* If the file is connected to something else, close it and open a
- * new unit */
+ new unit. */
if (!compare_file_filename (u->s, ioparm.file, ioparm.file_len))
{
@@ -458,8 +457,7 @@ already_open (gfc_unit * u, unit_flags * flags)
}
-/*************/
-/* open file */
+/* Open file. */
void
st_open (void)
@@ -469,7 +467,7 @@ st_open (void)
library_start ();
- /* Decode options */
+ /* Decode options. */
flags.access = (ioparm.access == NULL) ? ACCESS_UNSPECIFIED :
find_option (ioparm.access, ioparm.access_len, access_opt,
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index dc12745..b6f7c0e 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1,5 +1,4 @@
-
-/* Copyright (C) 2002-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfortran).
@@ -20,7 +19,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-/* transfer.c -- Top level handling of data transfer statements. */
+/* transfer.c -- Top level handling of data transfer statements. */
#include "config.h"
#include <string.h>
@@ -30,30 +29,29 @@ Boston, MA 02111-1307, USA. */
/* Calling conventions: Data transfer statements are unlike other
- * library calls in that they extend over several calls.
-
- * The first call is always a call to st_read() or st_write(). These
- * subroutines return no status unless a namelist read or write is
- * being done, in which case there is the usual status. No further
- * calls are necessary in this case.
- *
- * For other sorts of data transfer, there are zero or more data
- * transfer statement that depend on the format of the data transfer
- * statement.
- *
- * transfer_integer
- * transfer_logical
- * transfer_character
- * transfer_real
- * transfer_complex
- *
- * These subroutines do not return status.
- *
- * The last call is a call to st_[read|write]_done(). While
- * something can easily go wrong with the initial st_read() or
- * st_write(), an error inhibits any data from actually being
- * transferred.
- */
+ library calls in that they extend over several calls.
+
+ The first call is always a call to st_read() or st_write(). These
+ subroutines return no status unless a namelist read or write is
+ being done, in which case there is the usual status. No further
+ calls are necessary in this case.
+
+ For other sorts of data transfer, there are zero or more data
+ transfer statement that depend on the format of the data transfer
+ statement.
+
+ transfer_integer
+ transfer_logical
+ transfer_character
+ transfer_real
+ transfer_complex
+
+ These subroutines do not return status.
+
+ The last call is a call to st_[read|write]_done(). While
+ something can easily go wrong with the initial st_read() or
+ st_write(), an error inhibits any data from actually being
+ transferred. */
gfc_unit *current_unit;
static int sf_seen_eor = 0;
@@ -101,20 +99,20 @@ current_mode (void)
/* Mid level data transfer statements. These subroutines do reading
- * and writing in the style of salloc_r()/salloc_w() within the
- * current record. */
-
-/* read_sf()-- When reading sequential formatted records we have a
- * problem. We don't know how long the line is until we read the
- * trailing newline, and we don't want to read too much. If we read
- * too much, we might have to do a physical seek backwards depending
- * on how much data is present, and devices like terminals aren't
- * seekable and would cause an I/O error.
- *
- * Given this, the solution is to read a byte at a time, stopping if
- * we hit the newline. For small locations, we use a static buffer.
- * For larger allocations, we are forced to allocate memory on the
- * heap. Hopefully this won't happen very often. */
+ and writing in the style of salloc_r()/salloc_w() within the
+ current record. */
+
+/* When reading sequential formatted records we have a problem. We
+ don't know how long the line is until we read the trailing newline,
+ and we don't want to read too much. If we read too much, we might
+ have to do a physical seek backwards depending on how much data is
+ present, and devices like terminals aren't seekable and would cause
+ an I/O error.
+
+ Given this, the solution is to read a byte at a time, stopping if
+ we hit the newline. For small locations, we use a static buffer.
+ For larger allocations, we are forced to allocate memory on the
+ heap. Hopefully this won't happen very often. */
static char *
read_sf (int *length)
@@ -138,7 +136,8 @@ read_sf (int *length)
{
if (is_internal_unit())
{
- /* unity may be modified inside salloc_r if is_internal_unit() is true */
+ /* unity may be modified inside salloc_r if
+ is_internal_unit() is true. */
unity = 1;
}
@@ -149,11 +148,11 @@ read_sf (int *length)
if (*q == '\n')
{
if (current_unit->unit_number == options.stdin_unit)
- {
+ {
if (n <= 0)
continue;
- }
- /* Unexpected end of line */
+ }
+ /* Unexpected end of line. */
if (current_unit->flags.pad == PAD_NO)
{
generate_error (ERROR_EOR, NULL);
@@ -176,15 +175,15 @@ read_sf (int *length)
}
-/* read_block()-- Function for reading the next couple of bytes from
- * the current file, advancing the current position. We return a
- * pointer to a buffer containing the bytes. We return NULL on end of
- * record or end of file.
- *
- * If the read is short, then it is because the current record does not
- * have enough data to satisfy the read request and the file was
- * opened with PAD=YES. The caller must assume tailing spaces for
- * short reads. */
+/* Function for reading the next couple of bytes from the current
+ file, advancing the current position. We return a pointer to a
+ buffer containing the bytes. We return NULL on end of record or
+ end of file.
+
+ If the read is short, then it is because the current record does not
+ have enough data to satisfy the read request and the file was
+ opened with PAD=YES. The caller must assume tailing spaces for
+ short reads. */
void *
read_block (int *length)
@@ -194,13 +193,13 @@ read_block (int *length)
if (current_unit->flags.form == FORM_FORMATTED &&
current_unit->flags.access == ACCESS_SEQUENTIAL)
- return read_sf (length); /* Special case */
+ return read_sf (length); /* Special case. */
if (current_unit->bytes_left < *length)
{
if (current_unit->flags.pad == PAD_NO)
{
- generate_error (ERROR_EOR, NULL); /* Not enough data left */
+ generate_error (ERROR_EOR, NULL); /* Not enough data left. */
return NULL;
}
@@ -216,7 +215,7 @@ read_block (int *length)
*ioparm.size += nread;
if (nread != *length)
- { /* Short read, this shouldn't happen */
+ { /* Short read, this shouldn't happen. */
if (current_unit->flags.pad == PAD_YES)
*length = nread;
else
@@ -230,10 +229,10 @@ read_block (int *length)
}
-/* write_block()-- Function for writing a block of bytes to the
- * current file at the current position, advancing the file pointer.
- * We are given a length and return a pointer to a buffer that the
- * caller must (completely) fill in. Returns NULL on error. */
+/* Function for writing a block of bytes to the current file at the
+ current position, advancing the file pointer. We are given a length
+ and return a pointer to a buffer that the caller must (completely)
+ fill in. Returns NULL on error. */
void *
write_block (int length)
@@ -256,7 +255,7 @@ write_block (int length)
}
-/* unformatted_read()-- Master function for unformatted reads. */
+/* Master function for unformatted reads. */
static void
unformatted_read (bt type, void *dest, int length)
@@ -274,6 +273,8 @@ unformatted_read (bt type, void *dest, int length)
}
}
+/* Master function for unformatted writes. */
+
static void
unformatted_write (bt type, void *source, int length)
{
@@ -284,7 +285,7 @@ unformatted_write (bt type, void *source, int length)
}
-/* type_name()-- Return a pointer to the name of a type. */
+/* Return a pointer to the name of a type. */
const char *
type_name (bt type)
@@ -316,9 +317,9 @@ type_name (bt type)
}
-/* write_constant_string()-- write a constant string to the output.
- * This is complicated because the string can have doubled delimiters
- * in it. The length in the format node is the true length. */
+/* Write a constant string to the output.
+ This is complicated because the string can have doubled delimiters
+ in it. The length in the format node is the true length. */
static void
write_constant_string (fnode * f)
@@ -341,14 +342,14 @@ write_constant_string (fnode * f)
{
c = *p++ = *q++;
if (c == delimiter && c != 'H')
- q++; /* Skip the doubled delimiter */
+ q++; /* Skip the doubled delimiter. */
}
}
-/* require_type()-- Given actual and expected types in a formatted
- * data transfer, make sure they agree. If not, an error message is
- * generated. Returns nonzero if something went wrong. */
+/* Given actual and expected types in a formatted data transfer, make
+ sure they agree. If not, an error message is generated. Returns
+ nonzero if something went wrong. */
static int
require_type (bt expected, bt actual, fnode * f)
@@ -366,14 +367,13 @@ require_type (bt expected, bt actual, fnode * f)
}
-/* formatted_transfer()-- This subroutine is the main loop for a
- * formatted data transfer statement. It would be natural to
- * implement this as a coroutine with the user program, but C makes
- * that awkward. We loop, processesing format elements. When we
- * actually have to transfer data instead of just setting flags, we
- * return control to the user program which calls a subroutine that
- * supplies the address and type of the next element, then comes back
- * here to process it. */
+/* This subroutine is the main loop for a formatted data transfer
+ statement. It would be natural to implement this as a coroutine
+ with the user program, but C makes that awkward. We loop,
+ processesing format elements. When we actually have to transfer
+ data instead of just setting flags, we return control to the user
+ program which calls a subroutine that supplies the address and type
+ of the next element, then comes back here to process it. */
static void
formatted_transfer (bt type, void *p, int len)
@@ -383,14 +383,14 @@ formatted_transfer (bt type, void *p, int len)
int i, n;
int consume_data_flag;
- /* Change a complex data item into a pair of reals */
+ /* Change a complex data item into a pair of reals. */
n = (p == NULL) ? 0 : ((type != BT_COMPLEX) ? 1 : 2);
if (type == BT_COMPLEX)
type = BT_REAL;
/* If reversion has occurred and there is another real data item,
- * then we have to move to the next record */
+ then we have to move to the next record. */
if (g.reversion_flag && n > 0)
{
@@ -405,7 +405,7 @@ formatted_transfer (bt type, void *p, int len)
f = next_format ();
if (f == NULL)
- return; /* No data descriptors left (already raised) */
+ return; /* No data descriptors left (already raised). */
switch (f->format)
{
@@ -598,7 +598,7 @@ formatted_transfer (bt type, void *p, int len)
write_constant_string (f);
break;
- /* Format codes that don't transfer data */
+ /* Format codes that don't transfer data. */
case FMT_X:
case FMT_TR:
consume_data_flag = 0 ;
@@ -690,9 +690,10 @@ formatted_transfer (bt type, void *p, int len)
break;
case FMT_COLON:
- /* A colon descriptor causes us to exit this loop (in particular
- * preventing another / descriptor from being processed) unless there
- * is another data item to be transferred. */
+ /* A colon descriptor causes us to exit this loop (in
+ particular preventing another / descriptor from being
+ processed) unless there is another data item to be
+ transferred. */
consume_data_flag = 0 ;
if (n == 0)
return;
@@ -703,8 +704,8 @@ formatted_transfer (bt type, void *p, int len)
}
/* Free a buffer that we had to allocate during a sequential
- * formatted read of a block that was larger than the static
- * buffer. */
+ formatted read of a block that was larger than the static
+ buffer. */
if (line_buffer != NULL)
{
@@ -712,7 +713,7 @@ formatted_transfer (bt type, void *p, int len)
line_buffer = NULL;
}
- /* Adjust the item count and data pointer */
+ /* Adjust the item count and data pointer. */
if ((consume_data_flag > 0) && (n > 0))
{
@@ -724,8 +725,8 @@ formatted_transfer (bt type, void *p, int len)
return;
/* Come here when we need a data descriptor but don't have one. We
- * push the current format node back onto the input, then return and
- * let the user program call us back with the data. */
+ push the current format node back onto the input, then return and
+ let the user program call us back with the data. */
need_data:
unget_format (f);
@@ -734,8 +735,8 @@ need_data:
/* Data transfer entry points. The type of the data entity is
- * implicit in the subroutine call. This prevents us from having to
- * share a common enum with the compiler. */
+ implicit in the subroutine call. This prevents us from having to
+ share a common enum with the compiler. */
void
transfer_integer (void *p, int kind)
@@ -792,7 +793,7 @@ transfer_complex (void *p, int kind)
}
-/* us_read()-- Preposition a sequential unformatted file while reading. */
+/* Preposition a sequential unformatted file while reading. */
static void
us_read (void)
@@ -813,9 +814,8 @@ us_read (void)
}
-/* us_write()-- Preposition a sequential unformatted file while
- * writing. This amount to writing a bogus length that will be filled
- * in later. */
+/* Preposition a sequential unformatted file while writing. This
+ amount to writing a bogus length that will be filled in later. */
static void
us_write (void)
@@ -832,29 +832,29 @@ us_write (void)
return;
}
- *p = 0; /* Bogus value for now */
+ *p = 0; /* Bogus value for now. */
if (sfree (current_unit->s) == FAILURE)
generate_error (ERROR_OS, NULL);
- /* for sequential unformatted, we write until we have more bytes than
- can fit in the record markers. if disk space runs out first it will
- error on the write */
+ /* For sequential unformatted, we write until we have more bytes than
+ can fit in the record markers. If disk space runs out first, it will
+ error on the write. */
current_unit->recl = g.max_offset;
current_unit->bytes_left = current_unit->recl;
}
-/* pre_position()-- position to the next record prior to transfer. We
- * are assumed to be before the next record. We also calculate the
- * bytes in the next record. */
+/* Position to the next record prior to transfer. We are assumed to
+ be before the next record. We also calculate the bytes in the next
+ record. */
static void
pre_position (void)
{
if (current_unit->current_record)
- return; /* Already positioned */
+ return; /* Already positioned. */
switch (current_mode ())
{
@@ -877,26 +877,26 @@ pre_position (void)
}
-/* data_transfer_init()-- Initialize things for a data transfer. This
- * code is common for both reading and writing. */
+/* Initialize things for a data transfer. This code is common for
+ both reading and writing. */
static void
data_transfer_init (int read_flag)
{
- unit_flags u_flags; /* used for creating a unit if needed */
+ unit_flags u_flags; /* Used for creating a unit if needed. */
g.mode = read_flag ? READING : WRITING;
if (ioparm.size != NULL)
- *ioparm.size = 0; /* Initialize the count */
+ *ioparm.size = 0; /* Initialize the count. */
current_unit = get_unit (read_flag);
if (current_unit == NULL)
- { /* open the unit with some default flags */
+ { /* Open the unit with some default flags. */
memset (&u_flags, '\0', sizeof (u_flags));
u_flags.access = ACCESS_SEQUENTIAL;
u_flags.action = ACTION_READWRITE;
- /* is it unformatted ?*/
+ /* Is it unformatted? */
if (ioparm.format == NULL && !ioparm.list_format)
u_flags.form = FORM_UNFORMATTED;
else
@@ -919,7 +919,7 @@ data_transfer_init (int read_flag)
empty_internal_buffer (current_unit->s);
}
- /* Check the action */
+ /* Check the action. */
if (read_flag && current_unit->flags.action == ACTION_WRITE)
generate_error (ERROR_BAD_ACTION,
@@ -931,7 +931,7 @@ data_transfer_init (int read_flag)
if (ioparm.library_return != LIBRARY_OK)
return;
- /* Check the format */
+ /* Check the format. */
if (ioparm.format)
parse_format ();
@@ -960,7 +960,7 @@ data_transfer_init (int read_flag)
generate_error (ERROR_OPTION_CONFLICT,
"Internal file cannot be accessed by UNFORMATTED data transfer");
- /* Check the record number */
+ /* Check the record number. */
if (current_unit->flags.access == ACCESS_DIRECT && ioparm.rec == 0)
{
@@ -976,7 +976,7 @@ data_transfer_init (int read_flag)
return;
}
- /* Process the ADVANCE option */
+ /* Process the ADVANCE option. */
advance_status = (ioparm.advance == NULL) ? ADVANCE_UNSPECIFIED :
find_option (ioparm.advance, ioparm.advance_len, advance_opt,
@@ -1009,8 +1009,7 @@ data_transfer_init (int read_flag)
}
else
- { /* Write constraints */
-
+ { /* Write constraints. */
if (ioparm.end != 0)
generate_error (ERROR_OPTION_CONFLICT,
"END specification cannot appear in a write statement");
@@ -1029,7 +1028,7 @@ data_transfer_init (int read_flag)
if (ioparm.library_return != LIBRARY_OK)
return;
- /* Sanity checks on the record number */
+ /* Sanity checks on the record number. */
if (ioparm.rec)
{
@@ -1045,14 +1044,14 @@ data_transfer_init (int read_flag)
return;
}
- /* Position the file */
+ /* Position the file. */
if (sseek (current_unit->s,
(ioparm.rec - 1) * current_unit->recl) == FAILURE)
generate_error (ERROR_OS, NULL);
}
- /* Set the initial value of flags */
+ /* Set the initial value of flags. */
g.blank_status = current_unit->flags.blank;
g.sign_status = SIGN_S;
@@ -1063,7 +1062,7 @@ data_transfer_init (int read_flag)
pre_position ();
- /* Set up the subroutine that will handle the transfers */
+ /* Set up the subroutine that will handle the transfers. */
if (read_flag)
{
@@ -1093,7 +1092,7 @@ data_transfer_init (int read_flag)
}
}
- /* Make sure that we don't do a read after a nonadvancing write */
+ /* Make sure that we don't do a read after a nonadvancing write. */
if (read_flag)
{
@@ -1110,7 +1109,7 @@ data_transfer_init (int read_flag)
current_unit->read_bad = 1;
}
- /* Start the data transfer if we are doing a formatted transfer */
+ /* Start the data transfer if we are doing a formatted transfer. */
if (current_unit->flags.form == FORM_FORMATTED && !ioparm.list_format
&& ioparm.namelist_name == NULL && ionml == NULL)
@@ -1119,9 +1118,9 @@ data_transfer_init (int read_flag)
}
-/* next_record_r()-- Space to the next record for read mode. If the
- * file is not seekable, we read MAX_READ chunks until we get to the
- * right position. */
+/* Space to the next record for read mode. If the file is not
+ seekable, we read MAX_READ chunks until we get to the right
+ position. */
#define MAX_READ 4096
@@ -1137,7 +1136,7 @@ next_record_r (int done)
case UNFORMATTED_SEQUENTIAL:
current_unit->bytes_left += sizeof (gfc_offset); /* Skip over tail */
- /* Fall through */
+ /* Fall through... */
case FORMATTED_DIRECT:
case UNFORMATTED_DIRECT:
@@ -1148,14 +1147,14 @@ next_record_r (int done)
{
new = file_position (current_unit->s) + current_unit->bytes_left;
- /* Direct access files do not generate END conditions, only I/O errors */
-
+ /* Direct access files do not generate END conditions,
+ only I/O errors. */
if (sseek (current_unit->s, new) == FAILURE)
generate_error (ERROR_OS, NULL);
}
else
- { /* Seek by reading data */
+ { /* Seek by reading data. */
while (current_unit->bytes_left > 0)
{
rlength = length = (MAX_READ > current_unit->bytes_left) ?
@@ -1183,7 +1182,7 @@ next_record_r (int done)
{
p = salloc_r (current_unit->s, &length);
- /*In case of internal file, there may not be any '\n'.*/
+ /* In case of internal file, there may not be any '\n'. */
if (is_internal_unit() && p == NULL)
{
break;
@@ -1211,7 +1210,7 @@ next_record_r (int done)
}
-/* next_record_w()-- Position to the next record in write mode */
+/* Position to the next record in write mode. */
static void
next_record_w (int done)
@@ -1243,12 +1242,12 @@ next_record_w (int done)
break;
case UNFORMATTED_SEQUENTIAL:
- m = current_unit->recl - current_unit->bytes_left; /* Bytes written */
+ m = current_unit->recl - current_unit->bytes_left; /* Bytes written. */
c = file_position (current_unit->s);
length = sizeof (gfc_offset);
- /* Write the length tail */
+ /* Write the length tail. */
p = salloc_w (current_unit->s, &length);
if (p == NULL)
@@ -1258,7 +1257,8 @@ next_record_w (int done)
if (sfree (current_unit->s) == FAILURE)
goto io_error;
- /* Seek to the head and overwrite the bogus length with the real length */
+ /* Seek to the head and overwrite the bogus length with the real
+ length. */
p = salloc_w_at (current_unit->s, &length, c - m - length);
if (p == NULL)
@@ -1268,7 +1268,7 @@ next_record_w (int done)
if (sfree (current_unit->s) == FAILURE)
goto io_error;
- /* Seek past the end of the current record */
+ /* Seek past the end of the current record. */
if (sseek (current_unit->s, c + sizeof (gfc_offset)) == FAILURE)
goto io_error;
@@ -1282,7 +1282,7 @@ next_record_w (int done)
if (!is_internal_unit())
{
if (p)
- *p = '\n'; /* no CR for internal writes */
+ *p = '\n'; /* No CR for internal writes. */
else
goto io_error;
}
@@ -1299,15 +1299,15 @@ next_record_w (int done)
}
-/* next_record()-- Position to the next record, which means moving to
- * the end of the current record. This can happen under several
- * different conditions. If the done flag is not set, we get ready to
- * process the next record. */
+/* Position to the next record, which means moving to the end of the
+ current record. This can happen under several different
+ conditions. If the done flag is not set, we get ready to process
+ the next record. */
void
next_record (int done)
{
- gfc_offset fp; /* file position */
+ gfc_offset fp; /* File position. */
current_unit->read_bad = 0;
@@ -1333,7 +1333,7 @@ next_record (int done)
/* Finalize the current data transfer. For a nonadvancing transfer,
- * this means advancing to the next record. */
+ this means advancing to the next record. */
static void
finalize_transfer (void)
@@ -1430,7 +1430,7 @@ st_iolength_done (void)
}
-/* The READ statement */
+/* The READ statement. */
void
st_read (void)
@@ -1441,9 +1441,9 @@ st_read (void)
data_transfer_init (1);
/* Handle complications dealing with the endfile record. It is
- * significant that this is the only place where ERROR_END is
- * generated. Reading an end of file elsewhere is either end of
- * record or an I/O error. */
+ significant that this is the only place where ERROR_END is
+ generated. Reading an end of file elsewhere is either end of
+ record or an I/O error. */
if (current_unit->flags.access == ACCESS_SEQUENTIAL)
switch (current_unit->endfile)
@@ -1490,19 +1490,19 @@ st_write_done (void)
finalize_transfer ();
- /* Deal with endfile conditions associated with sequential files */
+ /* Deal with endfile conditions associated with sequential files. */
if (current_unit != NULL && current_unit->flags.access == ACCESS_SEQUENTIAL)
switch (current_unit->endfile)
{
- case AT_ENDFILE: /* Remain at the endfile record */
+ case AT_ENDFILE: /* Remain at the endfile record. */
break;
case AFTER_ENDFILE:
- current_unit->endfile = AT_ENDFILE; /* Just at it now */
+ current_unit->endfile = AT_ENDFILE; /* Just at it now. */
break;
- case NO_ENDFILE: /* Get rid of whatever is after this record */
+ case NO_ENDFILE: /* Get rid of whatever is after this record. */
if (struncate (current_unit->s) == FAILURE)
generate_error (ERROR_OS, NULL);
@@ -1519,8 +1519,7 @@ st_set_nml_var (void * var_addr, char * var_name, int var_name_len,
int kind, bt type, int string_length)
{
namelist_info *t1 = NULL, *t2 = NULL;
- namelist_info *nml = (namelist_info *) get_mem (sizeof(
- namelist_info ));
+ namelist_info *nml = (namelist_info *) get_mem (sizeof (namelist_info));
nml->mem_pos = var_addr;
if (var_name)
{
@@ -1557,37 +1556,42 @@ st_set_nml_var (void * var_addr, char * var_name, int var_name_len,
void
st_set_nml_var_int (void * var_addr, char * var_name, int var_name_len,
- int kind)
+ int kind)
{
- st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_INTEGER, 0);
+
+ st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_INTEGER, 0);
}
void
st_set_nml_var_float (void * var_addr, char * var_name, int var_name_len,
- int kind)
+ int kind)
{
- st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_REAL, 0);
+
+ st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_REAL, 0);
}
void
st_set_nml_var_char (void * var_addr, char * var_name, int var_name_len,
- int kind, gfc_strlen_type string_length)
+ int kind, gfc_strlen_type string_length)
{
- st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_CHARACTER,
- string_length);
+
+ st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_CHARACTER,
+ string_length);
}
void
st_set_nml_var_complex (void * var_addr, char * var_name, int var_name_len,
- int kind)
+ int kind)
{
- st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_COMPLEX, 0);
+
+ st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_COMPLEX, 0);
}
void
st_set_nml_var_log (void * var_addr, char * var_name, int var_name_len,
- int kind)
+ int kind)
{
+
st_set_nml_var (var_addr, var_name, var_name_len, kind, BT_LOGICAL, 0);
}
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 67c769a..551e686 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfortran).
@@ -104,9 +104,8 @@ extract_real (const void *p, int len)
}
-/* calculate sign()-- Given a flag that indicate if a value is
- * negative or not, return a sign_t that gives the sign that we need
- * to produce. */
+/* Given a flag that indicate if a value is negative or not, return a
+ sign_t that gives the sign that we need to produce. */
static sign_t
calculate_sign (int negative_flag)
@@ -133,7 +132,7 @@ calculate_sign (int negative_flag)
}
-/* calculate_exp()-- returns the value of 10**d. */
+/* Returns the value of 10**d. */
static double
calculate_exp (int d)
@@ -150,8 +149,7 @@ calculate_exp (int d)
}
-/* calculate_G_format()-- geneate corresponding I/O format for
- FMT_G output.
+/* Generate corresponding I/O format for FMT_G output.
The rules to translate FMT_G to FMT_E or FNT_F from DEC fortran
LRM (table 11-2, Chapter 11, "I/O Formatting", P11-25) is:
@@ -252,8 +250,7 @@ calculate_G_format (fnode *f, double value, int len, int *num_blank)
}
-/* output_float() -- output a real number according to its format
- which is FMT_G free */
+/* Output a real number according to its format which is FMT_G free. */
static void
output_float (fnode *f, double value, int len)
@@ -275,17 +272,17 @@ output_float (fnode *f, double value, int len)
int intval = 0, intlen = 0;
int j;
- /* EXP value for this number */
+ /* EXP value for this number. */
neval = 0;
- /* Width of EXP and it's sign*/
+ /* Width of EXP and it's sign. */
nesign = 0;
ft = f->format;
w = f->u.real.w;
d = f->u.real.d + 1;
- /* Width of the EXP */
+ /* Width of the EXP. */
e = 0;
sca = g.scale_factor;
@@ -295,7 +292,7 @@ output_float (fnode *f, double value, int len)
if (n < 0)
n = -n;
- /* Width of the sign for the whole number */
+ /* Width of the sign for the whole number. */
nsign = (sign == SIGN_NONE ? 0 : 1);
digits = 0;
@@ -312,8 +309,8 @@ output_float (fnode *f, double value, int len)
minv = 0.1;
maxv = 1.0;
- /* Here calculate the new val of the number with consideration
- of Globle Scale value */
+ /* Calculate the new val of the number with consideration
+ of global scale value. */
while (sca > 0)
{
minv *= 10.0;
@@ -323,7 +320,7 @@ output_float (fnode *f, double value, int len)
neval --;
}
- /* Now calculate the new Exp value for this number */
+ /* Now calculate the new Exp value for this number. */
sca = g.scale_factor;
while(sca >= 1)
{
@@ -343,7 +340,7 @@ output_float (fnode *f, double value, int len)
maxv = 10.0;
}
- /* OK, let's scale the number to appropriate range */
+ /* OK, let's scale the number to appropriate range. */
while (scale_flag && n > 0.0 && n < minv)
{
if (n < minv)
@@ -361,12 +358,11 @@ output_float (fnode *f, double value, int len)
}
}
- /* It is time to process the EXP part of the number.
- Value of 'nesign' is 0 unless following codes is executed.
- */
+ /* It is time to process the EXP part of the number.
+ Value of 'nesign' is 0 unless following codes is executed. */
if (ft != FMT_F)
{
- /* Sign of the EXP value */
+ /* Sign of the EXP value. */
if (neval >= 0)
esign = SIGN_PLUS;
else
@@ -375,7 +371,7 @@ output_float (fnode *f, double value, int len)
neval = - neval ;
}
- /* Width of the EXP*/
+ /* Width of the EXP. */
e_new = 0;
j = neval;
while (j > 0)
@@ -386,15 +382,15 @@ output_float (fnode *f, double value, int len)
if (e <= e_new)
e = e_new;
- /* Got the width of EXP */
+ /* Got the width of EXP. */
if (e < digits)
e = digits ;
- /* Minimum value of the width would be 2 */
+ /* Minimum value of the width would be 2. */
if (e < 2)
e = 2;
- nesign = 1 ; /* We must give a position for the 'exp_char' */
+ nesign = 1 ; /* We must give a position for the 'exp_char' */
if (e > 0)
nesign = e + nesign + (esign != SIGN_NONE ? 1 : 0);
}
@@ -424,7 +420,7 @@ output_float (fnode *f, double value, int len)
nesign -= 1;
nblank = w - (nsign + intlen + d + nesign);
}
- /* don't let a leading '0' cause field overflow */
+ /* Don't let a leading '0' cause field overflow. */
if (nblank == -1 && ft == FMT_F && q[0] == '0')
{
q++;
@@ -487,7 +483,7 @@ write_l (fnode * f, char *source, int len)
{
char *p;
int64_t n;
-
+
p = write_block (f->u.w);
if (p == NULL)
return;
@@ -497,7 +493,7 @@ write_l (fnode * f, char *source, int len)
p[f->u.w - 1] = (n) ? 'T' : 'F';
}
-/* write_float() -- output a real number according to its format */
+/* Output a real number according to its format. */
static void
write_float (fnode *f, const char *source, int len)
@@ -562,7 +558,7 @@ write_float (fnode *f, const char *source, int len)
p = write_block (nb);
memset (p, ' ', nb);
}
- }
+ }
}
@@ -579,7 +575,7 @@ write_int (fnode *f, const char *source, int len, char *(*conv) (uint64_t))
n = extract_int (source, len);
- /* Special case */
+ /* Special case: */
if (m == 0 && n == 0)
{
@@ -606,7 +602,7 @@ write_int (fnode *f, const char *source, int len, char *(*conv) (uint64_t))
digits = strlen (q);
/* Select a width if none was specified. The idea here is to always
- * print something. */
+ print something. */
if (w == 0)
w = ((digits < m) ? m : digits);
@@ -619,7 +615,7 @@ write_int (fnode *f, const char *source, int len, char *(*conv) (uint64_t))
if (digits < m)
nzero = m - digits;
- /* See if things will work */
+ /* See if things will work. */
nblank = w - (nzero + digits);
@@ -654,7 +650,7 @@ write_decimal (fnode *f, const char *source, int len, char *(*conv) (int64_t))
n = extract_int (source, len);
- /* Special case */
+ /* Special case: */
if (m == 0 && n == 0)
{
@@ -679,7 +675,7 @@ write_decimal (fnode *f, const char *source, int len, char *(*conv) (int64_t))
digits = strlen (q);
/* Select a width if none was specified. The idea here is to always
- * print something. */
+ print something. */
if (w == 0)
w = ((digits < m) ? m : digits) + nsign;
@@ -692,7 +688,7 @@ write_decimal (fnode *f, const char *source, int len, char *(*conv) (int64_t))
if (digits < m)
nzero = m - digits;
- /* See if things will work */
+ /* See if things will work. */
nblank = w - (nsign + nzero + digits);
@@ -727,7 +723,7 @@ done:
}
-/* otoa()-- Convert unsigned octal to ascii */
+/* Convert unsigned octal to ascii. */
static char *
otoa (uint64_t n)
@@ -755,7 +751,7 @@ otoa (uint64_t n)
}
-/* btoa()-- Convert unsigned binary to ascii */
+/* Convert unsigned binary to ascii. */
static char *
btoa (uint64_t n)
@@ -816,6 +812,7 @@ write_z (fnode * f, const char *p, int len)
void
write_d (fnode *f, const char *p, int len)
{
+
write_float (f, p, len);
}
@@ -823,6 +820,7 @@ write_d (fnode *f, const char *p, int len)
void
write_e (fnode *f, const char *p, int len)
{
+
write_float (f, p, len);
}
@@ -830,6 +828,7 @@ write_e (fnode *f, const char *p, int len)
void
write_f (fnode *f, const char *p, int len)
{
+
write_float (f, p, len);
}
@@ -837,6 +836,7 @@ write_f (fnode *f, const char *p, int len)
void
write_en (fnode *f, const char *p, int len)
{
+
write_float (f, p, len);
}
@@ -844,11 +844,12 @@ write_en (fnode *f, const char *p, int len)
void
write_es (fnode *f, const char *p, int len)
{
+
write_float (f, p, len);
}
-/* write_x()-- Take care of the X/TR descriptor */
+/* Take care of the X/TR descriptor. */
void
write_x (fnode * f)
@@ -863,11 +864,11 @@ write_x (fnode * f)
}
-/* List-directed writing */
+/* List-directed writing. */
-/* write_char()-- Write a single character to the output. Returns
- * nonzero if something goes wrong. */
+/* Write a single character to the output. Returns nonzero if
+ something goes wrong. */
static int
write_char (char c)
@@ -884,7 +885,7 @@ write_char (char c)
}
-/* write_logical()-- Write a list-directed logical value */
+/* Write a list-directed logical value. */
static void
write_logical (const char *source, int length)
@@ -893,7 +894,7 @@ write_logical (const char *source, int length)
}
-/* write_integer()-- Write a list-directed integer value. */
+/* Write a list-directed integer value. */
static void
write_integer (const char *source, int length)
@@ -939,9 +940,8 @@ write_integer (const char *source, int length)
}
-/* write_character()-- Write a list-directed string. We have to worry
- * about delimiting the strings if the file has been opened in that
- * mode. */
+/* Write a list-directed string. We have to worry about delimiting
+ the strings if the file has been opened in that mode. */
static void
write_character (const char *source, int length)
@@ -995,8 +995,8 @@ write_character (const char *source, int length)
}
-/* Output the Real number with default format.
- REAL(4) is 1PG14.7E2, and REAL(8) is 1PG23.15E3 */
+/* Output a real number with default format.
+ This is 1PG14.7E2 for REAL(4) and 1PG23.15E3 for REAL(8). */
static void
write_real (const char *source, int length)
@@ -1038,7 +1038,7 @@ write_complex (const char *source, int len)
}
-/* write_separator()-- Write the separator between items. */
+/* Write the separator between items. */
static void
write_separator (void)
@@ -1053,9 +1053,9 @@ write_separator (void)
}
-/* list_formatted_write()-- Write an item with list formatting.
- * TODO: handle skipping to the next record correctly, particularly
- * with strings. */
+/* Write an item with list formatting.
+ TODO: handle skipping to the next record correctly, particularly
+ with strings. */
void
list_formatted_write (bt type, void *p, int len)
@@ -1160,4 +1160,3 @@ namelist_write (void)
write_character("/",1);
}
-