■ 機種依存文字を検索する
/*
* kscan.c : 機種依存文字を検索する
*
* Copyright (c) 2003 AOK.
*
* 2003.05.14 - 初版
* 2003.05.15 - 2版
*
* KSCAN.EXE のあるフォルダ内の HTML ファイルをスキャン
*
*/
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <mbstring.h>
#include <mbctype.h>
FILE *fp = NULL;
FILE *fo = NULL;
char filename[512] = { 0 };
HANDLE hFind;
WIN32_FIND_DATA fd;
void kscan(void)
{
unsigned char c, k;
int type = _MBC_SINGLE, ch, n;
while ((ch = getc(fp)) != EOF) {
c = (unsigned char)ch;
type = _mbbtype(c ,type);
switch (type)
{
case _MBC_SINGLE:
/* 半角カナ文字 */
if (c >= 0xA0)
fprintf(fo, "%c", c);
break;
case _MBC_LEAD:
k = c;
break;
case _MBC_TRAIL:
n = (k << 8) | c;
/* 特殊文字 */
if (n >= 0x8540 && n <= 0x889E)
fprintf(fo, "%c%c", k, c);
/* 特殊外字 */
else if (n >= 0xEB40 && n <= 0xEFFC)
fprintf(fo, "%c%c", k, c);
/* 外字エリア */
else if (n >= 0xF040)
fprintf(fo, "%c%c", k, c);
break;
default:
break;
}
}
}
int main()
{
fo = fopen("kscan.log", "wt");
if (fo == NULL) {
fprintf(stderr, "エラー: ログが出力できません.");
return 1;
}
/* 最初のファイル検索 */
hFind = FindFirstFile("*.htm", &fd);
/* 検索失敗 */
if (hFind == INVALID_HANDLE_VALUE) {
fprintf(stderr, "エラー: 検索に失敗しました.");
return 1;
}
puts("KSCAN *** Copyright (c) 2003 AOK. ***");
puts("検索中");
do {
strcpy(filename, fd.cFileName);
fprintf(fo, "[%s] ", filename);
if ((fp = fopen(filename, "rt")) != NULL) {
putchar('.');
kscan();
fputc('\n', fo);
fclose(fp);
} else {
fputs("エラー: ファイルがオープン出来ません.", fo);
}
} while (FindNextFile(hFind, &fd));
/* 検索終了 */
FindClose(hFind);
fclose(fo);
puts("\n検索を終了しました.");
return 0;
}