#include "amacro.h"

#if 0
main()
{
int pr;
	pr=PrDecs("00001234",0);
	printf(" pr=%d\n",pr);
	pr=PrDecs("00001234",1);
	printf(" pr=%d\n",pr);
	pr=PrDecs("-00001234",2);
	printf(" pr=%d\n",pr);
	pr=PrDecs("-00001234",3);
	printf(" pr=%d\n",pr);
}
#endif

int PrDecs(unchar *dec,int shou)
/* １０進文字列変換＆表示 */
/* dec  : 数字文字列 */
/* shou : 小数点以下の桁数、小数点以下がないときは０とする */
/* 符号対応、整数桁３桁毎','対応 */
/* リターン値：整数桁数 */
{
int ks,keta,i,f,fmi=0,c,cc,sp=0,pr=0;
	/* 全桁数の取得 */
	keta=strlen(dec);
	ks=keta-shou; /* 整数桁数 */
	
	/* 符号判定 */
	if (*dec=='-') { /* 負号あり */
		fmi=1;
		dec++;
		ks--;
	}
	if (*dec==' ') { /* 正号あり */
		fmi=-1;
		dec++;
		ks--;
	}
	cc=ks%3;
	if (ks>3 && cc==0) cc=3;
	
	/* 全桁数から小数点以下を引いた桁数分を、
		数字の前にある'0'を' 'に変換しながら表示する */
	/* ただし最後の１桁の'0'は表示させる */
	for (f=i=0;i<ks;i++) {
		c=*dec++;
		if (!f) {
			if (c=='0' && i<ks-1) { /* まだ数字本体は出てこない */
			   BRSKIP:;
				B_PUTC(' ');
				if ((--cc)==0 && i<ks-1) {
					B_PUTC(' ');
					cc=3; /* 以後は３桁毎表示 */
				}
				continue;
			}
			/* 数字本体になった */
			f=1;
		}
		if (c=='-') { /* 負号以外の'-'はｽﾍﾟｰｽに変換される */
			sp++;
			goto BRSKIP;
		}
		if (fmi) { /* 負号は数字の直前に持ってくる */
			B_PUTC(fmi<0? ' ':'-');
			fmi=0;
		}
		B_PUTC(c);
		pr++;
		if ((--cc)==0 && i<ks-1) {
			B_PUTC(',');
			cc=3; /* 以後は３桁毎表示 */
		}
	}
	if (sp<ks) {
	    if (shou) {
		/* 小数点があるときはまず'.'を表示、その後小数点以下を表示 */
		B_PUTC('.');
		B_PRINT(dec);
	    }
	}
	return(pr);
}
