/* second.f -- translated by f2c (version 19950314).
   You must link the resulting object file with the libraries:
	-lF77 -lI77 -lm   (in that order)
*/

#include "f2c.h"
#include "sys/time.h"
#include "sys/resource.h"

/* Table of constant values */

static integer c__1 = 1;

doublereal second_(void)
{
    /* Initialized data */

    static logical setok = TRUE_;
    static real shut = 0.f;

    /* System generated locals */
    integer i__1;
    doublereal ret_val;
    olist o__1;

    /* Builtin functions */
    integer f_open(olist *), s_rsfe(cilist *), do_fio(integer *, char *, 
	    ftnlen), e_rsfe(void), s_wsfe(cilist *), e_wsfe(void);

    /* Local variables */
    static char x[1];
    extern /* Subroutine */ int timclk_(real *);
    static real cpu;

    /* Fortran I/O blocks */
    static cilist io___4 = { 1, 4, 1, "(A)", 0 };
    static cilist io___6 = { 0, 6, 0, "(///10X,'****   JOB STOPPED BY OPERAT"
	    "OR   ****')", 0 };


/* ****************************************************** */

/*   SECOND, ON EXIT, CONTAINS THE NUMBER OF CPU SECONDS */
/*   SINCE THE START OF THE CALCULATION. */

/* ****************************************************** */
/* ********************************************************************** 
*/

/*   NOW TO SEE IF A FILE LOGICALLY CALLED SHUTDOWN EXISTS, IF IT DOES */
/*   THEN INCREMENT CPU TIME BY 1,000,000 SECONDS. */

/* ***********************************************************************
 */
    timclk_(&cpu);
    o__1.oerr = 0;
    o__1.ounit = 4;
    o__1.ofnmlen = 8;
    o__1.ofnm = "SHUTDOWN";
    o__1.orl = 0;
    o__1.osta = "UNKNOWN";
    o__1.oacc = 0;
    o__1.ofm = 0;
    o__1.oblnk = 0;
    f_open(&o__1);

/*          FILE EXISTS, THEREFORE INCREMENT TIME */

    i__1 = s_rsfe(&io___4);
    if (i__1 != 0) {
	goto L10;
    }
    i__1 = do_fio(&c__1, x, 1L);
    if (i__1 != 0) {
	goto L10;
    }
    i__1 = e_rsfe();
    if (i__1 != 0) {
	goto L10;
    }
    shut = 1e6f;
    if (setok) {
	s_wsfe(&io___6);
	e_wsfe();
	setok = FALSE_;
    }
L10:
    ret_val = cpu + shut;
    return ret_val;

/*   IF YOU ARE NOT USING A VAX COMPUTER, REMOVE THE FOLLOWING SECTION */

} /* second_ */

/* Subroutine */ int timbgn_(void)
{
    return 0;
} /* timbgn_ */

/* Subroutine */ int timclk_(real *cpusecs)
{
/*  Codice Originale:
    ~~~~~~~~~~~~~~~~~
    extern int etime_(real *);
    static real tarray[2];

    etime_(tarray);
    *cpusecs = tarray[0] + tarray[1];
*/

    struct rusage	Uso;

    getrusage(RUSAGE_SELF,&Uso);
    *cpusecs = Uso.ru_utime.tv_sec + Uso.ru_utime.tv_usec * 0.000001;

    return 0;
} /* timclk_ */

