[comp.lang.fortran] f2c problem.

oneel@heawk1.gsfc.nasa.gov ( Bruce Oneel ) (06/12/91)

I have a problem with f2c.

I compile the following program as follows....

% f2c f2cbug.f
% cc -o f2cbug f2cbug.c -L/home/heasfs/oneel/lib -lf2c
-I/home/heasfs/oneel/include -g

It hangs with the following output

(f20.4)
9.9990012E-03
<hang here>

System Sun Sparc 4/490, Sun OS 4.1.1, c compiler which came with.

Now, if I remove the err= clause from the write statment I get an
error about off the end of the record.  If I then make cval bigger
(50) I still get the same error message...

What's wrong?  Is it something in fortran I'm missing?  Is it f2c or
libf2c?  Thanks for any and all help.  I'll post a summary.

Thanks

bruce

program follows

      character*20 cval
      character*10 form
      real*4 val

      form='(f20.4)'
      val = 9.9999e-03 
      print *,cval
      print *,form
      print *,val
      write(cval,form,err=900)val
      print *,cval
      print *,form
      print *,val
      stop
 900  continue
      print *,'error'
      stop
      end



The c translation

/* f2cbug.f -- translated by f2c (version of 16 May 1991  13:06:06).
   You must link the resulting object file with the libraries:
	-lF77 -lI77 -lm -lc   (in that order)
*/

#include "f2c.h"

/* Table of constant values */

static integer c__9 = 9;
static integer c__1 = 1;
static integer c__4 = 4;

/* Main program */ MAIN__()
{
    /* System generated locals */
    integer i__1;

    /* Builtin functions */
    /* Subroutine */ int s_copy();
    integer s_wsle(), do_lio(), e_wsle(), s_wsfi(), do_fio(), e_wsfi();
    /* Subroutine */ int s_stop();

    /* Local variables */
    static char cval[20], form[10];
    static real val;

    /* Fortran I/O blocks */
    static cilist io___3 = { 0, 6, 0, 0, 0 };
    static cilist io___5 = { 0, 6, 0, 0, 0 };
    static cilist io___6 = { 0, 6, 0, 0, 0 };
    static icilist io___7 = { 1, cval, 0, form, 20, 1 };
    static cilist io___8 = { 0, 6, 0, 0, 0 };
    static cilist io___9 = { 0, 6, 0, 0, 0 };
    static cilist io___10 = { 0, 6, 0, 0, 0 };
    static cilist io___11 = { 0, 6, 0, 0, 0 };


    s_copy(form, "(f20.4)", 10L, 7L);
    val = (float).0099999;
    s_wsle(&io___3);
    do_lio(&c__9, &c__1, cval, 20L);
    e_wsle();
    s_wsle(&io___5);
    do_lio(&c__9, &c__1, form, 10L);
    e_wsle();
    s_wsle(&io___6);
    do_lio(&c__4, &c__1, (char *)&val, (ftnlen)sizeof(real));
    e_wsle();
    i__1 = s_wsfi(&io___7);
    if (i__1 != 0) {
	goto L900;
    }
    i__1 = do_fio(&c__1, (char *)&val, (ftnlen)sizeof(real));
    if (i__1 != 0) {
	goto L900;
    }
    i__1 = e_wsfi();
    if (i__1 != 0) {
	goto L900;
    }
    s_wsle(&io___8);
    do_lio(&c__9, &c__1, cval, 20L);
    e_wsle();
    s_wsle(&io___9);
    do_lio(&c__9, &c__1, form, 10L);
    e_wsle();
    s_wsle(&io___10);
    do_lio(&c__4, &c__1, (char *)&val, (ftnlen)sizeof(real));
    e_wsle();
    s_stop("", 0L);
L900:
    s_wsle(&io___11);
    do_lio(&c__9, &c__1, "error", 5L);
    e_wsle();
    s_stop("", 0L);
} /* MAIN__ */

--
Bruce O'Neel              oneel@heasfs.gsfc.nasa.gov
NASA/GSFC/STX/Code 664