diff options
author | Francois-Xavier Coudert <coudert@clipper.ens.fr> | 2005-11-06 11:17:04 +0100 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-11-06 10:17:04 +0000 |
commit | 35059811529c8e32c37d0d38e5cbbec3feea4a0e (patch) | |
tree | 2bf68231c09bf20e0ef20f8acec4df3d8c11c85c /libgfortran | |
parent | 1f2a3c8f5e220138bfdb2eb724acedcbe6515d39 (diff) | |
download | gcc-35059811529c8e32c37d0d38e5cbbec3feea4a0e.zip gcc-35059811529c8e32c37d0d38e5cbbec3feea4a0e.tar.gz gcc-35059811529c8e32c37d0d38e5cbbec3feea4a0e.tar.bz2 |
intrinsic.c (add_functions): Add ctime and fdate intrinsics.
* intrinsic.c (add_functions): Add ctime and fdate intrinsics.
(add_subroutines): Likewise.
* intrinsic.h: Prototypes for gfc_check_ctime,
gfc_check_ctime_sub, gfc_check_fdate_sub, gfc_resolve_ctime,
gfc_resolve_fdate, gfc_resolve_ctime_sub, gfc_resolve_fdate_sub.
* gfortran.h: Add GFC_ISYM_CTIME and GFC_ISYM_FDATE.
* iresolve.c (gfc_resolve_ctime, gfc_resolve_fdate,
gfc_resolve_ctime_sub, gfc_resolve_fdate_sub): New functions.
* trans-decl.c (gfc_build_intrinsic_function_decls): Add
gfor_fndecl_fdate and gfor_fndecl_ctime.
* check.c (gfc_check_ctime, gfc_check_ctime_sub,
gfc_check_fdate_sub): New functions.
* trans-intrinsic.c (gfc_conv_intrinsic_ctime,
gfc_conv_intrinsic_fdate): New functions.
(gfc_conv_intrinsic_function): Add cases for GFC_ISYM_CTIME
and GFC_ISYM_FDATE.
* intrinsic.texi: Documentation for the new CTIME and FDATE
intrinsics.
* trans.h: Declarations for gfor_fndecl_ctime and gfor_fndecl_fdate.
* intrinsics/ctime.c: New file.
* configure.ac: Add check for ctime.
* Makefile.am: Add ctime.c
* configure: Regenerate.
* config.h.in: Regenerate.
* Makefile.in: Regenerate.
From-SVN: r106558
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 9 | ||||
-rw-r--r-- | libgfortran/Makefile.am | 1 | ||||
-rw-r--r-- | libgfortran/Makefile.in | 6 | ||||
-rw-r--r-- | libgfortran/config.h.in | 3 | ||||
-rwxr-xr-x | libgfortran/configure | 3 | ||||
-rw-r--r-- | libgfortran/configure.ac | 2 | ||||
-rw-r--r-- | libgfortran/intrinsics/ctime.c | 160 |
7 files changed, 181 insertions, 3 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 9905c4f..bfe60d3 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2005-11-06 Francois-Xavier Coudert <coudert@clipper.ens.fr> + + * intrinsics/ctime.c: New file. + * configure.ac: Add check for ctime. + * Makefile.am: Add ctime.c + * configure: Regenerate. + * config.h.in: Regenerate. + * Makefile.in: Regenerate. + 2005-11-05 Richard Guenther <rguenther@suse.de> * configure.ac: Use AM_FCFLAGS for extra flags, not FCFLAGS. diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am index a786a38..34c04fa 100644 --- a/libgfortran/Makefile.am +++ b/libgfortran/Makefile.am @@ -44,6 +44,7 @@ intrinsics/c99_functions.c \ intrinsics/chdir.c \ intrinsics/cpu_time.c \ intrinsics/cshift0.c \ +intrinsics/ctime.c \ intrinsics/date_and_time.c \ intrinsics/env.c \ intrinsics/erf.c \ diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in index b8f52d5..6370f26 100644 --- a/libgfortran/Makefile.in +++ b/libgfortran/Makefile.in @@ -165,7 +165,7 @@ am__objects_32 = close.lo file_pos.lo format.lo inquire.lo \ list_read.lo lock.lo open.lo read.lo transfer.lo unit.lo \ unix.lo write.lo am__objects_33 = associated.lo abort.lo args.lo bessel.lo \ - c99_functions.lo chdir.lo cpu_time.lo cshift0.lo \ + c99_functions.lo chdir.lo cpu_time.lo cshift0.lo ctime.lo \ date_and_time.lo env.lo erf.lo eoshift0.lo eoshift2.lo \ etime.lo exit.lo flush.lo fnum.lo gerror.lo getcwd.lo \ getlog.lo getXid.lo hyper.lo hostnm.lo kill.lo ierrno.lo \ @@ -385,6 +385,7 @@ intrinsics/c99_functions.c \ intrinsics/chdir.c \ intrinsics/cpu_time.c \ intrinsics/cshift0.c \ +intrinsics/ctime.c \ intrinsics/date_and_time.c \ intrinsics/env.c \ intrinsics/erf.c \ @@ -2235,6 +2236,9 @@ cpu_time.lo: intrinsics/cpu_time.c cshift0.lo: intrinsics/cshift0.c $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0.lo `test -f 'intrinsics/cshift0.c' || echo '$(srcdir)/'`intrinsics/cshift0.c +ctime.lo: intrinsics/ctime.c + $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ctime.lo `test -f 'intrinsics/ctime.c' || echo '$(srcdir)/'`intrinsics/ctime.c + date_and_time.lo: intrinsics/date_and_time.c $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o date_and_time.lo `test -f 'intrinsics/date_and_time.c' || echo '$(srcdir)/'`intrinsics/date_and_time.c diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in index 6dc11a1..04cda0c 100644 --- a/libgfortran/config.h.in +++ b/libgfortran/config.h.in @@ -252,6 +252,9 @@ /* libm includes ctanl */ #undef HAVE_CTANL +/* Define to 1 if you have the `ctime' function. */ +#undef HAVE_CTIME + /* libm includes erf */ #undef HAVE_ERF diff --git a/libgfortran/configure b/libgfortran/configure index a332726..d46d608 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -7519,7 +7519,8 @@ done -for ac_func in sleep time ttyname signal alarm + +for ac_func in sleep time ttyname signal alarm ctime do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index 6ca4565..bf2c25d 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -167,7 +167,7 @@ AC_CHECK_MEMBERS([struct stat.st_rdev]) # Check for library functions. AC_CHECK_FUNCS(getrusage times mkstemp strtof strtold snprintf ftruncate chsize) AC_CHECK_FUNCS(chdir strerror getlogin gethostname kill link symlink perror) -AC_CHECK_FUNCS(sleep time ttyname signal alarm) +AC_CHECK_FUNCS(sleep time ttyname signal alarm ctime) # Check libc for getgid, getpid, getuid AC_CHECK_LIB([c],[getgid],[AC_DEFINE([HAVE_GETGID],[1],[libc includes getgid])]) diff --git a/libgfortran/intrinsics/ctime.c b/libgfortran/intrinsics/ctime.c new file mode 100644 index 0000000..1499fd9 --- /dev/null +++ b/libgfortran/intrinsics/ctime.c @@ -0,0 +1,160 @@ +/* Implementation of the CTIME and FDATE g77 intrinsics. + Copyright (C) 2005 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert <coudert@clipper.ens.fr> + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 2 of the License, or (at your option) any later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +Libgfortran 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 libgfortran; see the file COPYING. If not, +write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ + +#include "config.h" +#include "libgfortran.h" + +#ifdef TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# else +# ifdef HAVE_TIME_H +# include <time.h> +# endif +# endif +#endif + +#include <string.h> + + +extern void fdate (char **, gfc_charlen_type *); +export_proto(fdate); + +void +fdate (char ** date, gfc_charlen_type * date_len) +{ +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + int i; + time_t now = time(NULL); + *date = ctime (&now); + if (*date != NULL) + { + *date = strdup (*date); + *date_len = strlen (*date); + + i = 0; + while ((*date)[i]) + { + if ((*date)[i] == '\n') + (*date)[i] = ' '; + i++; + } + return; + } +#endif + + *date = NULL; + *date_len = 0; +} + + +extern void fdate_sub (char *, gfc_charlen_type); +export_proto(fdate_sub); + +void +fdate_sub (char * date, gfc_charlen_type date_len) +{ +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + int i; + char *d; + time_t now = time(NULL); +#endif + + memset (date, ' ', date_len); +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + d = ctime (&now); + if (d != NULL) + { + i = 0; + while (*d && *d != '\n' && i < date_len) + date[i++] = *(d++); + } +#endif +} + + + +extern void PREFIX(ctime) (char **, gfc_charlen_type *, GFC_INTEGER_8); +export_proto_np(PREFIX(ctime)); + +void +PREFIX(ctime) (char ** date, gfc_charlen_type * date_len, GFC_INTEGER_8 t) +{ +#if defined(HAVE_CTIME) + time_t now = t; + int i; + *date = ctime (&now); + if (*date != NULL) + { + *date = strdup (*date); + *date_len = strlen (*date); + + i = 0; + while ((*date)[i]) + { + if ((*date)[i] == '\n') + (*date)[i] = ' '; + i++; + } + return; + } +#endif + + *date = NULL; + *date_len = 0; +} + + +extern void ctime_sub (GFC_INTEGER_8 *, char *, gfc_charlen_type); +export_proto(ctime_sub); + +void +ctime_sub (GFC_INTEGER_8 * t, char * date, gfc_charlen_type date_len) +{ +#if defined(HAVE_CTIME) + int i; + char *d; + time_t now = *t; +#endif + + memset (date, ' ', date_len); +#if defined(HAVE_CTIME) + d = ctime (&now); + if (d != NULL) + { + i = 0; + while (*d && *d != '\n' && i < date_len) + date[i++] = *(d++); + } +#endif +} |