/* Ｃ言語下位互換の文字列コード逆変換を行う（漢字対応）*/
/*	\xnn   １６進数２桁
	元より長くなるので上書きは不可。
*/

#include "deftype.h"
#include "acdata.h"
#include <jfctype.h>

int rjcstring2(unchar *src,int size,unchar *des)
/* size : srcのサイズ(\0も変換可能なので、EOSによらない）*/
/*        size=0のときはEOSまで */
{
unchar c;
int len=0,i;
	for (i=0;i<size;i++) {
		c=*src++;
		if (check_kanji1(c)) { /* 漢字 */
			if (!jiszen((c<<8)|*src)) { /* 漢字として不適格 */
				/* 2ﾊﾞｲﾄ目が無い時も含む */
				goto NODISP;
			}
			des[len++]=c;
			des[len++]=*src++;
			i++;
			continue;
		}
		if (c<' ') {
		    NODISP:;
			/* 表示出来ない文字 -> エスケープ文字で復元 */
			if (c==0 && i==size-1) goto END; /* 最後の0x00は出さない */
			des[len++]='\\';
			des[len++]='x';
			make_hex2(c,&des[len],1);
			len+=2;
			continue;
		}
		/* 表示出来る文字はそのまま表示 */
		if (c=='\\') { /* エスケープ文字 */
			/* ２回続ける */
			des[len++]=c;
		}
		des[len++]=c;
	}
    END:;
	des[len]=0; /* EOS */
	/* 変換後の文字列長を返す=strlen(des) */
	return(len);
}

#if 0
main()
{
int len;
unchar str[128];
unchar str2[128];
	printf("$a;$b$e[7m文字列ﾃﾞｽsp$e[m$t123\n");
	len=jcstring("$a;$b$e[7m文字列ﾃﾞｽsp$e[m$t123",str,'$');
	printf("(%d)=%s\n",len,str);
	len=rjcstring2(str,len,str2);
	printf("(%d)=%s\n",len,str2);
	
	printf("abcdefghijklmn^^0123456789^rABC\n");
	len=jcstring("abcdefghijklmn^^0123456789^rABC\x05",str,'^');
	printf("%s\n",str);
	len=rjcstring2(str,len,str2);
	printf("(%d)=%s\n",len,str2);
	
	printf("$xd0$xd1$xd2$xgh\+1\n");
	len=jcstring("$xd0$xd1$xd2$xgh$0人は捜し物を見つけると・・・\x81\x02",str,'$');
	printf("%s\n",str);
	len=rjcstring2(str,len,str2);
	printf("(%d)=%s\n",len,str2);
	
	strcpy(str,"普通の文字列\n");
	printf("%s\n",str);
	len=strlen(str)+1; /* +EOS */
	len=rjcstring2(str,len,str2);
	printf("(%d)=%s\n",len,str2);
}
#endif
