bcc32 putty.c
patch -Np1 < puttykj.patch
patch -Np1 < puttyjp.patch
patch -Np1 < putty-imefix.patch # 行番号が変わってたので手動で。
make -f makefile.bor
# iso2022.c でなんだかエラー。不正な初期化とかなんとか。
<調査中>
「WCHAR a = { buf2, 0 };」が悪さをしていました。こんな初期化を認めていないのがBorlandだそうな。仕方が無いので、「WCHAR a = { 0, 0 }; a[0] = buf2;」とワンクッション入れます*1。これを3箇所(マクロ内とその後のCASE文に2箇所)訂正してもう一度困憊る。
わーにんぐが大量に出るが、使われないコード!って怒られるくらい。気になるならコメントアウトしてやんなー。と、追っていくと、「strncasecmp」って関数が見つからないそうな。なにそれ?…いや、無いって言われても。さてどうしましょうかね。strcmp改造して作るかな?
結局作ってしまった。まいっか。
その後、l10n.cでも似たコトが。今度はn無しの「strcasecmp」が無いって。えー。// こぴぺー
でもそれはエラーじゃなくて、鰐さんだった。エラーの原因は同一変数名の多重定義。C++じゃないんだから〜と思いつつ変数名をぺちぺち変えてあげる。けど、ダメダメちゃん。何も良い方法が思いつかなかったので「q = p_v->DUMMYUNIONNAME.item.pszText;」とかに変えてみる。unionを使ってたらしいので、仕方なし。しかし、何故?
やっとコンパイルは出来た、けど動作確認なんてしてもない。とりあえず改変記録をメモめもめも。
#ifdef __BORLANDC__
int strncasecmp(const char *s1, const char *s2, size_t n)
{
register size_t i;
register int a=0,b=0;
for(i=0;ib ) return +1;
else if( a < b ) return -1;
else return 0;
}
#endif
#ifdef __BORLANDC__
int strcasecmp(const char *s1, const char *s2)
{
register int a=0,b=0;
register int i=0;
while(1) {
a = s1[i];
b = s2[i];
if( a == 0 || b == 0 ) break;
if( 'a' <= a && a <= 'z' ) a = a + 'A' - 'a';
if( 'a' <= b && b <= 'z' ) b = b + 'A' - 'a';
if( a != b ) break;
i++;
}
if( a > b ) return +1;
else if( a < b ) return -1;
else return 0;
}
#endifと、static LRESULT CALLBACK wndproc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) 関数にて、
q = p->item.pszText;
if (getl10nstr (q, "", a, 256))
p->item.pszText = a;
r = CallWindowProc (proc, hwnd, msg, wparam, lparam);
p->item.pszText = q;を次に変更
#if (_WIN32_IE >= 0x0400) && (defined __BORLANDC__)
q = p_v->DUMMYUNIONNAME.item.pszText;
if (getl10nstr (q, "", a, 256))
p_v->DUMMYUNIONNAME.item.pszText = a;
r = CallWindowProc (proc, hwnd, msg, wparam, lparam);
p_v->DUMMYUNIONNAME.item.pszText = q;
#else
q = p_v->item.pszText;
if (getl10nstr (q, "", a, 256))
p_v->item.pszText = a;
r = CallWindowProc (proc, hwnd, msg, wparam, lparam);
p_v->item.pszText = q;
#endif以上。
見事に動作しました、拍手。 // そんな簡単なコトに拍手しなくても、ねぇ。
「MonitorFromWindow」って関数のリンカエラーが発生していたのが気になってたのでめも。
スマートじゃないけど、「MONITOR_DEFAULTTONEAREST」を#undefした方が早いと思うし、影響がどう出るかは知らない。