#define skip(s) while(*s==' ') s++
/* special quote character for stu */
extern int f__cursor
,f__scale
;
extern flag f__cblank
,f__cplus
; /*blanks in I and compulsory plus*/
struct syl f__syl
[SYLMX
];
int f__parenlvl
,f__pc
,f__revloc
;
{ if(*s
!=quote
) continue;
if(*++s
!=quote
) return(s
);
f__fatal(100, "bad string");
op_gen(int a
, int b
, int c
, int d
)
{ struct syl
*p
= &f__syl
[f__pc
];
{ fprintf(stderr
,"format too complicated:\n");
char *gt_num(s
,n
) char *s
; int *n
;
char *gt_num(char *s
, int *n
)
if(c
>'9' || c
<'0') break;
char *f_s(s
,curloc
) char *s
;
char *f_s(char *s
, int curloc
)
if(f__parenlvl
++ ==1) f__revloc
=curloc
;
if(op_gen(RET1
,curloc
,0,0)<0 ||
case ':': (void) op_gen(COLON
,0,0,0); break;
(void) op_gen(NONL
, 0, 0, 0); break;
if(*++s
=='z' || *s
== 'Z') (void) op_gen(BZ
,0,0,0);
else (void) op_gen(BN
,0,0,0);
if(*(s
+1)=='s' || *(s
+1) == 'S')
else if(*(s
+1)=='p' || *(s
+1) == 'P')
case '/': (void) op_gen(SLASH
,0,0,0); break;
case '+': s
++; /*OUTRAGEOUS CODING TRICK*/
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case 'p': if(sign
) n
= -n
; (void) op_gen(P
,n
,0,0); break;
case 'x': (void) op_gen(X
,n
,0,0); break;
sp
= &f__syl
[op_gen(H
,n
,0,0)];
*(char **)&sp
->p2
= s
+ 1;
sp
= &f__syl
[op_gen(APOS
,0,0,0)];
if((*p
= ap_end(s
)) == NULL
)
if(*(s
+1)=='l' || *(s
+1) == 'L')
else if(*(s
+1)=='r'|| *(s
+1) == 'R')
case 'x': (void) op_gen(X
,1,0,0); break;
case 'p': (void) op_gen(P
,1,0,0); break;
{ int i
,im
,n
,w
,d
,e
,found
=0,x
=0;
(void) op_gen(STACK
,n
,0,0);
(void) op_gen(x
==1?E
:G
,w
,d
,0); /* default is Ew.dE2 */
(void) op_gen(x
==1?EE
:GE
,w
,d
,e
);
{ (void) op_gen(i
,w
,0,0);
if(ne_d(s
,&t
)) return(t
);
if((curloc
=op_gen(STACK
,n
,0,0))<0) return(NULL
);
if((s
=i_tem(s
))==NULL
) return(NULL
);
(void) op_gen(REVERT
,f__revloc
,0,0);
(void) op_gen(GOTO
,0,0,0);
f__parenlvl
=f__revloc
=f__pc
=0;
int f__cnt
[STKSZ
],f__ret
[STKSZ
],f__cp
,f__rp
;
flag f__workdone
, f__nonl
;
case REVERT
: return(REVERT
);
case STACK
: return(STACK
);
case T
: case TL
: case TR
:
integer
do_fio(number
,ptr
,len
) ftnint
*number
; ftnlen len
; char *ptr
;
integer
do_fio(ftnint
*number
, char *ptr
, ftnlen len
)
for(i
=0;i
<*number
;i
++,ptr
+=len
)
loop
: switch(type_f((p
= &f__syl
[f__pc
])->op
))
fprintf(stderr
,"unknown code in do_fio: %d\n%s\n",
err(f__elist
->cierr
,100,"do_fio");
if((n
=(*f__doed
)(p
,ptr
,len
))>0)
errfl(f__elist
->cierr
,errno
,"fmt");
err(f__elist
->ciend
,(EOF
),"fmt");
if(!f__workdone
) return(0);
if((n
=(*f__dorevert
)()) != 0) return(n
);
return(do_fio(&one
,(char *)NULL
,(ftnint
)0));
f__workdone
=f__cp
=f__rp
=f__pc
=f__cursor
=0;