#include <string.h>
#include "defines.h"

int hexstr(str,code,max_len)
unchar *str,code[]; /* str -> code */
int max_len; /* コード最大長さ */
/* １６進文字列をコードに直す関数 */
{
int j=0,c,cc;
	while (c=*str++,c!=0) {
		if (c==SPC || c==TAB) continue; /* スペース・タブはスキップする */
		
		if (c=='\'' || c=='\"') { /* '文字列'または"文字列" */
			cc=c;
			while (c=*str++,c!=cc && c!=0) {
				if (check_kanji1(c)) {
					if ((j+1)>=max_len) goto HEXSTR_END;
					code[j++]=c;
					c=*str++;
					if (c==0) {j--; goto HEXSTR_END;} /* 漢字２バイト目がない：１バイト目も消す */
				}
				code[j++]=c;
				if (j>=max_len) goto HEXSTR_END;
			}
			if (c==0) break; /* 閉じの'"がないまま文字列が終わった */
			continue;
		}
		
		if (c==';') { /* ;１文字（漢字も可能）*/
			c=*str++;
			if (c==0) break; /* 文字がない */
			if (check_kanji1(c)) {
				if ((j+1)>=max_len) break;
				/*
				漢字２バイト目を入れるとオーバーする時は１バイト目も入れない
				*/
				code[j++]=c;
				c=*str++;
				if (c==0) {j--; break;} /* 漢字２文字目がない：１バイト目も消す */
			}
		} else { /* １６進２桁 */
			c=hex(--str);
			if (c<0) break; /* １６進文字でない */
			str+=2; /* ２桁分 */
		}
		code[j++]=c;
		if (j>=max_len) break;
	}
    HEXSTR_END:
	return(j); /* 0〜j-1までに入っている。ない場合は０ */
}
