FC2ブログ
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--:-- | スポンサー広告  TOP

2016/11/10

GOHANMEM ふぉんとまとめ2



GBK_CHECKER
github

GOHANMEM内部の文字コード確認やフォントを入れ替える鶴です
てきとーなFONTX2のフォントをぱっちできます
翻訳はばいなりとらんすれーたーのEUC-JPパッチを当てて下さい

FONTX2から変換対応:
8x16  半角フォント ASCII.BIN
16x16 全角フォント FS.BIN,BMPみるでプレビュー

by (゚∀゚)


JSKANNが変なふうになってたのは半角部分まで書き換えていたからが原因だった
半角部分もFONTX2ファイルを直接ぱっちできるようにしたので,あとフリーのフォントをもうちょっと同梱しといた。BDFのものはPROJAPで使ったbdf2font2で変換できるかと
パッチ箇所は3C 42 A5 81 A5 99 42 3Cでサーチして0x610遡ると半角、あとは全角

東雲フォント
出水フォント
JISKAN
milkjfフォント(http://ijiro.daiwa-hotcom.com/data/bdf2font2x.htmlで変換)
http://openlab.ring.gr.jp/efont/shinonome/
https://ja.wikipedia.org/wiki/Jiskan
http://web.archive.org/web/20071009091949/http://members.at.infoseek.co.jp/yu_izumi/izumi-bf/index.html
https://github.com/uobikiemukot/yaft/tree/master/fonts
http://www.asahi-net.or.jp/~wq6k-yn/code/zyanru.html





---------------------------------------------
ふりーじゃないけどいちいおう使えるフォント
http://udumaki.s36.xrea.com/
http://web.archive.org/web/20160915164059/http://homepage3.nifty.com/silo/FONTV/








↓いつものくそーす↓


private void button3_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "FONTX2ファイル(*.FNT;*.TLF;)|*.FNT;*.TLF|すべてのファイル(*.*)|*.*";
ofd.Title = "開くファイルを選択してください";
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;

//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{



System.IO.FileStream fs = new System.IO.FileStream(ofd.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bs = new byte[18];
fs.Read(bs, 0, 18);

string fontx2 = Encoding.GetEncoding(932).GetString(bs).Substring(0, 6);
if (fontx2.Contains("FONTX2") == false)
{
MessageBox.Show("fontx2以外のフォントは変換できません");
return;
}
if ((bs[14] != 8 || bs[14] != 16) && bs[15] != 16)
{
MessageBox.Show("8x16,16x16以外のフォントは変換できません");
return;
}
if (bs[16] > 1)
{

MessageBox.Show("ASCII,SHIFT-JIS以外のフォントは変換できません");
return;
}

if (bs[14] == 8 && bs[16] == 0)
{
byte[] asciis = new byte[1520 * 2];
fs.Read(asciis, 0, 1520 * 2);

System.IO.FileStream afs = new System.IO.FileStream("ASCII.bin", System.IO.FileMode.Create, System.IO.FileAccess.Write);
//バイト型配列の内容をすべて書き込む
afs.Write(asciis, 32 * 16 - 1, 1520);
//閉じる
afs.Close();
fs.Close();
MessageBox.Show("半角フォントASCII.binが作成されました");

//3C 42 A5 81 A5 99 42 3C から - 0x610,

return;
}

int encode = bs[16];
int tablelen = bs[17];

byte[] tbl = new byte[tablelen * 4];
fs.Read(tbl, 0, tbl.Length);
byte[] font = new byte[fs.Length - 18 - tablelen * 4];
fs.Read(font, 0, font.Length);


fs.Close();

int[] cp = new int[font.Length / 32];

int big = 0;
int big2 = 0;
int ct = 0;
for (var i = 0; i < tbl.Length; i = i + 4)
{
big = tbl[i] + tbl[i + 1] * 256;
big2 = tbl[i + 2] + tbl[i + 3] * 256;
for (var k = 0; big + k <= big2; k++)
{
cp[ct] = big + k;
ct++;
}

}
int pos = 0;
byte[] sjis = new byte[2];
byte[] euc = new byte[2];
byte[] gohan = new byte[font.Length];
string s = "";

for (var i = 0; i < cp.Length; i++)
{
sjis[0] = Convert.ToByte(cp[i] / 256);
sjis[1] = Convert.ToByte(cp[i] & 255);
s = Encoding.GetEncoding(932).GetString(sjis);
euc = Encoding.GetEncoding(51932).GetBytes(s);
pos = (euc[0] - 0xa1) * 94 * 32 + (euc[1] - 0xa1) * 32;
if (pos > 0 && pos < font.Length - 32)
{
Array.ConstrainedCopy(font, i * 32, gohan, pos, 32);
}
}
byte[] n = new byte[8];

Array.Resize(ref gohan, 268736 - 0x5f0 - 8-8);//267,208 ばいと



System.IO.FileStream ffs = new System.IO.FileStream("FS.bin", System.IO.FileMode.Create, System.IO.FileAccess.Write);
//バイト型配列の内容をすべて書き込む
ffs.Write(gohan, 0, gohan.Length);
ffs.Write(n, 0, 8);
//閉じる
ffs.Close();
MessageBox.Show("全角EUC-JPフォント FS.bin が作成されました、 bmpみるでプレビューできます");
last_font = Encoding.GetEncoding(932).GetString(bs).Substring(6, 8).Trim();

return;
}

}

private void button4_Click(object sender, EventArgs e)
{

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "suprxファイル(*.suprx)|*.suprx|すべてのファイル(*.*)|*.*";
ofd.Title = "開くファイルを選択してください";
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;

//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{

System.IO.FileStream fs = new System.IO.FileStream(ofd.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, bs.Length);
fs.Close();
int patchpos = 0;
for (int i = 0; i < bs.Length; i++) {
if (bs[i] == 0x3C) {
//3C 42 A5 81 A5 99 42 3C から - 0x610,
if(bs[i+1]==0x42 && bs[i + 2] == 0xa5 && bs[i + 3] == 0x81 && bs[i + 4] == 0xa5 && bs[i + 5] == 0x99 && bs[i + 6] == 0x42 && bs[i + 7] == 0x3c)
{
patchpos = i;
break;


}
}
}
if (patchpos == 0) {
MessageBox.Show("パッチ箇所が見つかりませんでした");
}

string exe= System.Windows.Forms.Application.StartupPath;

if (File.Exists(CombinePaths(exe,"ASCII.bin"))==true) {

System.IO.FileStream afs = new System.IO.FileStream("ASCII.bin", System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] ascii = new byte[afs.Length];
afs.Read(ascii, 0, ascii.Length);
afs.Close();
Array.ConstrainedCopy(ascii, 0, bs, patchpos - 0x610, ascii.Length);
}

if (File.Exists(CombinePaths(exe, "FS.bin"))==true)
{
System.IO.FileStream zfs = new System.IO.FileStream("FS.bin", System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] zenkaku = new byte[zfs.Length];
zfs.Read(zenkaku, 0, zenkaku.Length);
zfs.Close();
Array.ConstrainedCopy( zenkaku, 0, bs, patchpos - 0x610 - 267216+8, zenkaku.Length);
}



System.IO.FileStream ffs = new System.IO.FileStream(last_font+".suprx", System.IO.FileMode.Create, System.IO.FileAccess.Write);
ffs.Write(bs, 0, bs.Length);
ffs.Close();
MessageBox.Show("全角EUC-JPフォントがぱっちされました");



}
}


public static string CombinePaths(string path1, string path2)
{
path1 = path1.TrimEnd(System.IO.Path.DirectorySeparatorChar);
path2 = path2.TrimStart(System.IO.Path.DirectorySeparatorChar);
return path1 + System.IO.Path.DirectorySeparatorChar + path2;
}
}
}

スポンサーサイト

08:08 | NETACOMMENT(0)TRACKBACK(0)  TOP

コメント

コメントの投稿



秘密にする

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。