Пример #1
0
static void putstr(int mode, STR tp)
{
    if (mode == ESCOFF) {
        fprintf(cur_fpo, "%s", tp);
    } else if (*tp == '\0') {
        fprintf(cur_fpo, "||");		// ヌル文字列を表す
    } else {
        if (num(tp)) {	// read.h
			fputc('\\', cur_fpo);	// 数値ではなく数字の場合は見分けるために'\\'を接頭辞としてつける
        }
		do {
			if (iskanji(*tp) && iskanji2(*(tp+1)))
			{
				fputc(*tp++, cur_fpo);
				fputc(*tp++, cur_fpo);
			}
			else if (!isprkana(*tp))
			{
				fprintf(cur_fpo, "#\\%03d", *tp++);
			}
			else
			{
				if (isesc(*tp))
				{
					fputc('\\', cur_fpo);
				}
				fputc(*tp++, cur_fpo);
			}
		} while (*tp != '\0');
    }
}
Пример #2
0
/*	コマンドライン引数を分割する
	(レスポンスファイルは利用しない。)*/
void split_cmdline(const char *cmdline,std::vector<std::string> &files)
{
	const char *ptr=cmdline;
	int quote_mode=0;

	files.clear();
	while(isspace((unsigned char)*ptr)){ptr++;}
	while(*ptr){
		std::string file;
		while(((!isspace((unsigned char)*ptr)) || quote_mode) && *ptr!='\0'){
			if(*ptr=='"'){
				quote_mode = !quote_mode;
				ptr++;
			}else{
#ifdef KANJI
				/* if 2 byte charactor then copy on more byte */
				if(iskanji1(*ptr) && iskanji2(*(ptr+1))){
					file.push_back(*ptr);
					ptr++;
				}
#endif
				file.push_back(*ptr);
				ptr++;
			}
		}
		files.push_back(file);
		while(isspace((unsigned char)*ptr)){ptr++;}
	}
}
Пример #3
0
void main()
  {
    int   i;

    for( i = 0; i < SIZE; i++ ) {
      printf( "Char does %shave a valid second byte\n",
            ( iskanji2( chars[i] ) ) ? "" : "not " );
    }
  }
Пример #4
0
int main()
{
    int c, d;

    while ((c = getchar()) != EOF) {
        if (iskanji(c)) {
            d = getchar();
            if (iskanji2(d)) {
                jis(&c, &d);
                putchar(c | 0x80);  putchar(d | 0x80);
            } else {
                putchar(c);
                if (d != EOF) putchar(d);
            }
        } else putchar(c);
    }
    return EXIT_SUCCESS;
}
Пример #5
0
_WCRTLINK FJSTRING _WCI86FAR _fjstrrev( JCHAR _WCFAR *s )
{
    JCHAR _WCFAR *p, _WCFAR *q, _WCFAR *r;

    p = s;
    q = p + _fstrlen( p );
    while( p < q ) {
        if( iskanji( *p ) ) {
            if( iskanji2( *( r = p + 1 ) ) ) {
                *p ^= *r;
                *r ^= *p;
                *p++ ^= *r;
            }
        }
        p++;
    }
    p = s;
    while( p < --q ) {
        *p ^= *q;
        *q ^= *p;
        *p++ ^= *q;
    }
    return( s );
}
Пример #6
0
static void putstr(int mode, STR tp) {//N//
	if(mode == ESCOFF) {
		fprintf(cur_fpo, "%s", tp);
	} else if(*tp == '\0') {
		fprintf(cur_fpo, "||");
	} else {
		if(num(tp)) {
			fputc('\\', cur_fpo);
		} 
		do {
			if(iskanji(*tp) && iskanji2(*(tp+1))) {
				fputc(*tp++, cur_fpo);
				fputc(*tp++, cur_fpo);
			} else if(!isprkana(*tp)) {
				fprintf(cur_fpo, "#\\%03d", *tp++);
			} else {
				if(isesc(*tp)) {
					fputc('\\', cur_fpo);
				}
				fputc(*tp++, cur_fpo);
			}
		} while(*tp != '\0');
	}
}
Пример #7
0
char *jstrcnv(char *jstr1, char const* jstr2, unsigned opts)
{
    static UCHAR const tojkigo[] = {
    	0x49,0x68,0x94,0x90,0x93, /* !”#$% */
    	0x95,0x66,0x69,0x6a,0x96, /* &’()* */
    	0x7b,0x43,0x7c,0x44,0x5e, /* +,—./ */
    	0x46,0x47,0x83,0x81,0x84, /* :;<=> */
    	0x48,0x97,  	    	  /* ?@   	*/
    	    	  0x6d,0x8f,0x6e, /*	 [¥] */
    	0x4f,0x51,0x65,     	  /* ^_‘ 	*/
    	    	       0x6f,0x62, /*	   {| */
    	0x70,0x50,  	    	  /* } ̄   	*/
    	    	  0x42,0x75,0x76, /*	 。「」 */
    	0x41,	    	    	  /* 、     	*/
    	     0x45,  	    	  /*  ・    	*/
    	    	  0x4A,0x4B,	  /*	゛゜	*/
    	    	    	    0x5f  /*	     \ */
    };
    static UCHAR const jtokigo[] = {
    	      ' ', 0xA4/*'、'*/, 0xA1/*'。'*/, ',', '.', 0xA5/*'・'*/, ':',
    	 ';', '?', '!', 0xDE/*'゙'*/, 0xDF/*'゚'*/,0x00,0x00,0x00,
    	 '^', '~', '_',0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00, 0xB0/*'ー'*/,0x00,0x00, '/',
    	0x00,0x00,0x00, '|',0x00,0x00,0x60,'\'',
    	0x00,'\"', '(', ')',0x00,0x00, '[', ']',
    	'{' ,'}' ,0x00,0x00,0x00,0x00, 0xA2/*'「'*/, 0xA3/*'」'*/,
    	0x00,0x00,0x00,0x00, '+', '-',0x00,0x00,0x00,
    	0x00, '=',0x00, '<', '>',0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0/*'\\'*/,
    	 '$',0x00,0x00, '%', '#', '&', '*', '@'
    };
    static UCHAR const tojkana[] = {
    	0x51,0x00,0x02,0x04,0x06,0x08,	/* ヲ */
    	0x42,0x44,0x46,0x22,0x00,   	/* ャ */
    	0x01,0x03,0x85,0x07,0x09,   	/* ア */
    	0x8a,0x8c,0x8e,0x90,0x92,   	/* カ */
    	0x94,0x96,0x98,0x9a,0x9c,   	/* サ */
    	0x9e,0xA0,0xA3,0xA5,0xA7,   	/* タ */
    	0x29,0x2a,0x2b,0x2c,0x2d,   	/* ナ */
    	0xAe,0xB1,0xB4,0xB7,0xBa,   	/* ハ */
    	0x3d,0x3e,0x3f,0x40,0x41,   	/* マ */
    	0x43,0x45,0x47,     	    	/* ヤ */
    	0x48,0x49,0x4a,0x4b,0x4c,   	/* ラ */
    	0x4e,0x52,0x00	    	    	/* ワ */
    };
    static UCHAR const jtokana[] = {
    	0x01,0x0b,0x02,0x0c,0x03,0x0d,0x04,0x0e,0x05,0x0f,  	/* あ */
    	0x10,0x90,0x11,0x91,0x12,0x92,0x13,0x93,0x14,0x94,  	/* か */
    	0x15,0x95,0x16,0x96,0x17,0x97,0x18,0x98,0x19,0x99,  	/* さ */
    	0x1a,0x9a,0x1b,0x9b,0x09,0x1c,0x9c,0x1d,0x9d,0x1e,0x9e, /* た */
    	0x1f,0x20,0x21,0x22,0x23,   	    	    	    	/* な */
    	0x24,0xA4,0x64,0x25,0xA5,0x65,0x26,0xA6,0x66,	    	/* は */
    	0x27,0xA7,0x67,0x28,0xA8,0x68,
    	0x29,0x2a,0x2b,0x2c,0x2d,   	    	    	    	/* ま */
    	0x06,0x2e,0x07,0x2f,0x08,0x30,	    	    	    	/* や */
    	0x31,0x32,0x33,0x34,0x35,   	    	    	    	/* ら */
    	0xff,0x36,0xff,0xff,0x00,0x37,0x8d
    };
    UCHAR   	 f;
    UCHAR   	 err_f;
    UCHAR * 	 js1;
    UCHAR const* js2;
    UCHAR   	 d;
    UCHAR   	 c;
    unsigned	 jc;

    err_f = f = 0;
    js1 = (UCHAR*)jstr1;
    js2 = (UCHAR const*)jstr2;
    while ( (jc = *(js2++)) != '\0') {
    	if (jc <= 0x80) {   	    	/* 半角文字のとき */
    	    f = 0;
    	    if (jc <= 0x1f) {	    	/* コントロール・コード */
    	    	;
    	    } else if (jc == 0x20) {	/* スペース */
    	    	if (opts & TOJSPC)
    	    	    jc = 0x8140;
    	    } else if (jc <= 0x2f) {	/* 記号 */
    	    	c = '!';
    	    	goto KIGO;
    	    } else if (jc <= '9') { 	/* 数字 */
    	    	if (opts & TOJDGT)
    	    	    jc += 0x824f - '0';
    	    } else if (jc <= '@') { 	/* 記号 */
    	    	c  = ':' - 15;
    	    	goto KIGO;
    	    } else if (jc <= 'Z') { 	/* アルファベットの大文字 */
    	    	if (opts & TOJALPH)
    	    	    jc += 0x825f - '@';
    	    } else if (jc <= 0x60) {	/* 記号 */
    	    	c = '[' - 22;
    	    	if (jc == '\\' && (opts & YENOFF))
    	    	    c = '\\' - 39;
    	    	goto KIGO;
    	    } else if (jc <= 'z') { 	/* アルファベットの小文字 */
    	    	if (opts & TOJALPH)
    	    	    jc += 0x8280 - 0x60;
    	    } else if (jc <= 0x7e) {	/* 記号 */
    	    	c = '{' - 28;
KIGO:
    	    	if (opts & TOJPUN)
    	    	    jc = 0x8100 + tojkigo[jc - c];
    	    }
    	} else {
    	    if (jc <= 0x9f) {	    	/* シフトJIS1バイト目 */
    	    	goto SJIS;
    	    } else if (jc == 0xa0) {
    	    	;
    	    } else if (jc <= 0xa4) {	/* 半角仮名記号 */
    	    	if (opts & TOJKPUN)
    	    	    jc = 0x8100 + tojkigo[jc - 0xA1/*'。'*/ + 32];
    	    } else if (jc == 0xa5 || jc == 0xb0) {/* 半角なかてん||(ー) */
    	    	if (	(f == 1 && (opts & (TOJKATA|TOJHIRA)))
    	    	    || (f != 1 && (opts & TOJKPUN)) 	   )
    	    	{
    	    	    jc = (jc == 0xa5) ? 0x8145 : 0x815b;
    	    	}
    	    } else if (jc <= 0xdd) {	/* 半角カナ */
    	    	f = 1;
    	    	if (opts & (TOJKATA|TOJHIRA)) {
    	    	    c = tojkana[jc - 0xA6/*'ヲ'*/];
    	    	    d = c & 0x7f;
    	    	    if (*js2 == 0xDE/*'゙'*/ && (c & 0x80)) {
    	    	    	++js2;
    	    	    	if (jc == 0xB3/*'ウ'*/ && (opts & TOJKATA)
    	    	    	    && ((opts & DAKUOFF) == 0)	 ) {
    	    	    	    jc = 0x8394;
    	    	    	    goto KJ1;
    	    	    	} else
    	    	    	    ++d;
    	    	    } else if (*js2 == 0xDF/*'゚'*/
    	    	    	&& (jc >= 0xCA/*'ハ'*/ && jc <= 0xCE/*'ホ'*/)
    	    	    	&& ((opts & DAKUOFF) == 0)   ) {
    	    	    	++js2;
    	    	    	d += 2;
    	    	    }
    	    	    if (opts & TOJKATA) {
    	    	    	if (d > 0x3e)
    	    	    	    ++d;
    	    	    	jc = d + 0x8340;
    	    	    } else {
    	    	    	jc = d + 0x829f;
    	    	    }
    	    	}
    	    } else if (jc <= 0xdf) {	/* 半角濁音・半濁音 */
    	    	if ((f==1 && (opts&(TOJKATA|TOJHIRA))) || (opts&TOJKPUN) )
    	    	    jc = 0x8100 + tojkigo[jc - 0xDE/*'゙'*/ + 37];
    	    } else if (jc <= 0xfc) {	/* シフトJIS */
    	 SJIS:
    	    	if ((c = *(js2++)) == '\0') 	    /* 2バイト目が'\0' */
    	    	    break;/* exit while */
    	    	else if (iskanji2(c) == 0) {	    /* 2バイト目が不正のとき*/
    	    	    f = 2;
    	    	    err_f = 1;
    	    	    if (c < 0x08)
    	    	    	continue;

    	    	    else if (c == 0x09)
    	    	    	goto ERR1;
    	    	    else if (c <= 0x1f)
    	    	    	continue;
    	    	    else if (c <= 0x3f) {
    	    	 ERR1:
    	    	    	--js2;
    	    	    	continue;
    	    	    } else if (c == 0x7f || c >= 0xfd)
    	    	    	continue;
    	    	}
    	    	if (jc == 0x81) {   	/* 全角記号 */
    	    	    if (c == 0x40 && (opts & JSPC2SPC)) {
    	    	    	f = 2;
    	    	    	*(js1++) = ' ';
    	    	    	jc = ' ';
    	    	    } else if(c==0x5b||c==0x4a||c==0x4b||c==0x45) {
    	    	    	/*  	ー  	゛  	    ゜	    ・	 */
    	    	    	if ( (f == 3 && (opts & JTOHIRA))
    	    	    	    ||(f == 4 && (opts & JTOKATA))
    	    	    	    ||(f != 3 && f != 4 && (opts & JTOKPUN)) )
    	    	    	{
    	    	    	    goto JKIGO;
    	    	    	} else {
    	    	    	    goto JCC;
    	    	    	}
    	    	    } else if(c==0x41||c==0x42||c==0x75||c==0x76) {
    	    	    	/*  	、  	。  	    「	    」	*/
    	    	    	if (opts & JTOKPUN)
    	    	    	    goto JKIGO;
    	    	    	else
    	    	    	    goto JCC;
    	    	    } else if ( (c <= 0x97 && (opts & JTOPUNS)) ) {
    	    	    	f = 2;
    	    	    	if (opts & YENOFF) {
    	    	    	    if (c == 0x5f) { /*\*/
    	    	    	    	jc = '\\';
    	    	    	    	goto KJ1;
    	    	    	    }
    	    	    	} else {
    	    	    	    if (c == 0x8f) { /*¥*/
    	    	    	    	jc = '\\';
    	    	    	    	goto KJ1;
    	    	    	    }
    	    	    	}
    	    	 JKIGO:
    	    	    	if ((d = jtokigo[c - 0x40]) == 0x00)
    	    	    	    goto JCC;
    	    	    	jc = d;
    	    	    } else
    	    	    	goto JCC;
    	    	} else if (jc == 0x82) {
    	    	    if (c >= 0x4f && c <= 0x58) {    /* 全角数字 */
    	    	    	f = 2;
    	    	    	if (opts & JTODGT)
    	    	    	    jc = c - 0x4f + '0';
    	    	    	else
    	    	    	    goto JCC;
    	    	    } else if (c >= 0x60 && c <= 0x79) {/* 全角アルファベット */
    	    	    	f = 2;
    	    	    	if (opts & JTOALPH)
    	    	    	    jc = c - 0x60 + 'A';
    	    	    	else
    	    	    	    goto JCC;
    	    	    } else if (c >= 0x81 && c <= 0x9a) {/* 全角アルファベット */
    	    	    	f = 2;
    	    	    	if (opts & JTOALPH)
    	    	    	    jc = c - 0x81 + 'a';
    	    	    	else
    	    	    	    goto JCC;
    	    	    } else {
    	    	    	f = 3;
    	    	    	if (c >= 0x9f && c <= 0xf1) { /* ひらがな */
    	    	    	    if (opts & JTOHIRA) {
    	    	    	    	d = c - 0x9f;
    	    	    	    	goto JKANA;
    	    	    	    } else
    	    	    	    	goto JCC;
    	    	    	} else
    	    	    	    goto JCC;
    	    	    }
    	    	} else if (jc == 0x83) {
    	    	    f = 4;
    	    	    if (c >= 0x40 && c <= 0x94) {/*カタカナ*/
    	    	    	if (opts & JTOKATA) {
    	    	    	    d = c - 0x40;
    	    	    	    if (d > 0x3e)
    	    	    	    	--d;
JKANA:
    	    	    	    d = jtokana[d];
    	    	    	    if (d == 0xFF)
    	    	    	    	goto JCC;
    	    	    	    jc = (d & 0x3f) + 0xA6/*'ヲ'*/;
    	    	    	    if (d & 0x80) {
    	    	    	    	*(js1++) = (UCHAR)jc;
    	    	    	    	jc = 0xDE/*'゙'*/;
    	    	    	    } else if (d & 0x40) {
    	    	    	    	*(js1++) = (UCHAR)jc;
    	    	    	    	jc = 0xDF/*'゚'*/;
    	    	    	    }
    	    	    	} else
    	    	    	    goto JCC;
    	    	    } else
    	    	    	goto JCC;
    	    	} else {
    	    	    f = 2;
JCC:	    	    /* 変換しないとき */
    	    	    *js1++ = (UCHAR)jc;
    	    	    jc = c;
    	    	}
    	    } /* else {
    	    	;
    	    } */
    	}
KJ1:
    	if (jc > 0xff) {
    	    *(js1++) = (UCHAR)(jc / 0x100);
    	    jc &= 0xff;
    	}
    	*(js1++) = (UCHAR)jc;
    } /* end of while */

    *js1 = '\0';
    if (err_f)
    	return NULL;
    else
    	return jstr1;
}