]>
Commit | Line | Data |
---|---|---|
6de9cd9a DN |
1 | |
2 | /* Copyright (C) 2002-2003 Free Software Foundation, Inc. | |
3 | Contributed by Andy Vaught | |
4 | ||
5 | This file is part of the GNU Fortran 95 runtime library (libgfortran). | |
6 | ||
7 | Libgfortran is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 2, or (at your option) | |
10 | any later version. | |
11 | ||
12 | Libgfortran is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with Libgfortran; see the file COPYING. If not, write to | |
19 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
20 | Boston, MA 02111-1307, USA. */ | |
21 | ||
22 | #include "config.h" | |
23 | #include "libgfortran.h" | |
24 | #include "io.h" | |
25 | ||
26 | /* rewind.c-- Implement the rewind statement */ | |
27 | ||
28 | void | |
29 | st_rewind (void) | |
30 | { | |
909087e0 | 31 | gfc_unit *u; |
6de9cd9a DN |
32 | |
33 | library_start (); | |
34 | ||
35 | u = find_unit (ioparm.unit); | |
36 | if (u != NULL) | |
37 | { | |
38 | if (u->flags.access != ACCESS_SEQUENTIAL) | |
39 | generate_error (ERROR_BAD_OPTION, | |
40 | "Cannot REWIND a file opened for DIRECT access"); | |
41 | else | |
42 | { | |
c100eff1 PB |
43 | /* If we have been writing to the file, the last written record |
44 | is the last record in the file, so trincate the file now. | |
45 | Reset to read mode so two consecutive rewind statements | |
46 | don't delete the file contents. */ | |
55948b69 | 47 | if (u->mode==WRITING) |
6de9cd9a | 48 | struncate(u->s); |
c100eff1 | 49 | u->mode = READING; |
6de9cd9a DN |
50 | u->last_record = 0; |
51 | if (sseek (u->s, 0) == FAILURE) | |
52 | generate_error (ERROR_OS, NULL); | |
53 | ||
54 | u->endfile = NO_ENDFILE; | |
55 | u->current_record = 0; | |
56 | test_endfile (u); | |
57 | } | |
58 | } | |
59 | ||
60 | library_end (); | |
61 | } |