SCCSID(@
(#)output.c 2.3);
CHAR
*printptr
= printbuf
;
DO IF
*s2
++ == 0 ORF s1
>=es1
THEN tabs
=0; posn
=0; q
=printbuf
;
FOR p
=0; p
<printptr
-printbuf
; p
++
ELSE WHILE tabs
>0 DO
*q
++=TB
; tabs
--; OD
WHILE posn
>0 DO
*q
++=SP
; posn
--; OD
printptr
=printbuf
; do putchar(*printptr
++); while (printptr
<q
);
write(outfile
,printbuf
,q
-printbuf
);
WHILE (printptr
-printbuf
)&7 DO
*printptr
++=SP
; OD
{ return(printptr
-printbuf
);
fptr
= fmat
; dptr
= vptr
= &a1
;
ELSE IF
*fptr
=='-' THEN adj
='l'; fptr
++; ELSE adj
='r'; FI
IF
*fptr
=='.' THEN fptr
++; prec
=convert(&fptr
); ELSE prec
= -1; FI
dptr
=rptr
=vptr
; lx
= *dptr
; x
= *vptr
++;
rptr
=dptr
; x
= shorten(lx
= *dptr
++);
printoct(itol(0,x
),0); break;
lx
=x
; printoct(lx
,-1); break;
printdbl(0,x
,c
,16); break;
printdbl(itol(0,x
),c
,16); break;
printdbl(lx
=x
,c
,radix
); break;
printdbl(lx
,c
,radix
); vptr
++; break;
printdate(lx
); vptr
++; break;
printdbl(lx
,c
,10); vptr
++; break;
printoct(lx
,0); vptr
++; break;
printoct(lx
,-1); vptr
++; break;
printdbl(lx
,'x',16); vptr
++; break;
sprintf(s
=digits
,"%+.16e",*rptr
,*(rptr
+4)); prec
= -1; break;
s
=ecvt(*rptr
, prec
, &decpt
, &n
);
*digitptr
++ = (decpt
<=0 ? '0' : *s
++);
IF decpt
>0 THEN decpt
--; FI
WHILE
*s ANDF prec
-- DO
*digitptr
++ = *s
++; OD
WHILE
*--digitptr
=='0' DONE
digitptr
+= (digitptr
-digits
>=3 ? 1 : 2);
THEN
*digitptr
++ = 'e'; printnum(decpt
,'d',10);
THEN width
-= charpos()%width
;
THEN
*digitptr
=0; s
=digits
;
n
=(prec
<n ANDF prec
>=0 ? prec
: n
);
WHILE n
-- DO
printc(*s
++); OD
WHILE width
-- > 0 DO
printc(SP
); OD
timeptr
="????????????????????????";
FOR i
=20; i
<24; i
++ DO
*digitptr
++ = *(timeptr
+i
); OD
FOR i
=3; i
<19; i
++ DO
*digitptr
++ = *(timeptr
+i
); OD
WHILE ((c
= *(*cp
)++)>='0') ANDF (c
<='9') DO n
=n
*10+c
-'0'; OD
IF n
<0 ANDF fmat
=='d' THEN n
= -n
; *digitptr
++ = '-'; FI
DO
*dptr
++ = ((POS
)n
)%base
;
IF dptr
==digs THEN
*dptr
++=0; FI
*digitptr
++ = (k
+(k
<=9 ? '0' : 'a'-10));
THEN po
= -po
; *digitptr
++='-';
ELSE IF s
>0 THEN
*digitptr
++='+'; FI
DO digs
[i
] = po
&7; po
>>= 3; OD
digs
[10] &= 03; digs
[11]=0;
DO IF digs
[i
] THEN
break; FI OD
DO
*digitptr
++=digs
[i
]+'0'; OD
printdbl(lx
,ly
,fmat
,base
)
INT lx
, ly
; char fmat
; int base
;
L_INT lxy
; char fmat
; int base
;
{ int digs
[20]; int *dptr
; char k
;
cp1
=digs
; if ((lxy
&0xFFFF0000L
)==0xFFFF0000L
) {*cp1
++='-'; lxy
= -lxy
;}
sprintf(cp1
,base
==16 ? "%X" : "%D",lxy
);
cp1
=digs
; while (*digitptr
++= *cp1
++); --digitptr
;
ly
=lxy
; lx
=(lxy
>>16)&0xFFFF;
IF fmat
=='D' ORF fmat
=='r'
IF f
<0 THEN
*digitptr
++='-'; f
= -f
; FI
THEN
*digitptr
++='-'; f
=leng(-ly
);
ELSE f
=leng(lx
); f
*= itol(1,0); f
+= leng(ly
);
IF fmat
=='x' THEN
*digitptr
++='#'; FI
IF dptr
==digs ORF dptr
[-1]>9 THEN
*dptr
++=0; FI
*digitptr
++ = (k
+(k
<=9 ? '0' : 'a'-10));
THEN
close(infile
); infile
=0;
THEN
flushbuf(); close(outfile
); outfile
=1;