* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* fortran format executer
#define DO(x) if(n=x) err(n>0?errflag:endflag,n,dfio)
#define DO_F(x) if(n=x) err_f(n>0?errflag:endflag,n,dfio)
#define err_f(f,n,s) {if(f) return(dof_err(n)); else fatal(n,s);}
LOCAL
int cnt
[STKSZ
],ret
[STKSZ
],cp
,rp
;
LOCAL
char *dfio
= "dofio";
return(do_fio(&one
,NULL
,0L));
/* OP_TYPE_TAB is defined in format.h,
it is NED for X,SLASH,APOS,H,TL,TR,T
ED for I,IM,F,E,EE,D,DE,G,GE,L,A,AW
and returns op for other values
LOCAL
int optypes
[] = OP_TYPE_TAB
;
LOCAL
int rep_count
, in_mid
;
do_fio(number
,ptr
,len
) ftnint
*number
; ftnlen len
; char *ptr
;
if( (optype
= ((p
= &syl_ptr
[pc
])->op
)) > LAST_TERM
)
err_f(errflag
,F_ERFMT
,"impossible code");
fprintf(stderr
," pc=%d, cnt[%d]=%d, ret[%d]=%d, op=%d\n",
pc
,cp
,cnt
[cp
],rp
,ret
[rp
],optype
); /*for debug*/
if(in_mid
== NO
) rep_count
= p
->rpcnt
;
case STACK
: /* repeat count */
if(++cp
==STKSZ
) err_f(errflag
,F_ERFMT
,"too many nested ()")
case RET
: /* open paren */
if(++rp
==STKSZ
) err_f(errflag
,F_ERFMT
,"too many nested ()")
case GOTO
: /* close paren */
case REVERT
: /* end of format */
if( used_data
== NO
) err_f(errflag
,F_ERFMT
,"\nNo more editing terms in format");
case DOLAR
: /*** NOT STANDARD FORTRAN ***/
{ DO((*doend
)((char)p
->p1
))
case SU
: /*** NOT STANDARD FORTRAN ***/
case R
: /*** NOT STANDARD FORTRAN ***/
case B
: /*** NOT STANDARD FORTRAN ***/
if (external
) cblank
= curunit
->ublnk
;
else cblank
= 0; /* blank = 'NULL' */
err_f(errflag
,F_ERFMT
,"impossible code")
if( reading
==YES
&& external
==YES
&& sequential
==YES
) donewrec();