lcc-win32 '99.Sep.09版 #追記:at 2000.Feb.13 #'00.Feb.05版が出てます。。。 # #追記:at 2000.Feb.04 #'00.Jan.07版が出てます。が、以下に書いたバグは全部残ってます(;_;) # lccwin32.exe 2,412,075 byte # #作者から「できる限り早くバグは修正する」とかいうメール(幸い、仏語でなく英語)を #もらってたんで期待したんだがなぁ(;_;) #exeの挙動が変なのはともかく、*.hの間違いなんて直ぐに訂正できるはずだけど。。。 # #10/11版サイズ #lccwin32.exe 2,407,322 byte #以下、全て09/09版の話です。直ってないことに気付いたんで、10/11版は上書きInstallして #放置。(何故Installする前にそんなことが分かるかって?鋭いね!メインマシン以外に #「どーなっても構わない」マシンがあるんで、そっちに先に入れただけです。実は) 新版が出てました。  lccwin32.exe 2,392,268 byte  lccdoc.exe 1,371,885 byte で、何も考えず旧版をアンインストールし、残ったファイルの対策にディレクトリをリネーム して新版をインストール。 (アンインストールしたって残るファイルは残る。で、新しくインストールするバージョンと 旧いバージョンでディレクトリ名を違えるってのは、自分のバッチに与える影響が大きい のでしたくない。だから旧いバージョンのディレクトリをリネームして、新しいバージョン を旧いバージョンと同じディレクトリと同じ名前でインストールするのだった) :で、う〜む。 include編:  MMRESULT _stdcall mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);  の定義がmmsystem.hで抜けているのが直ってない。追記する。  ありゃ?どーして(古い側のlccディレクトリで)windows.hが消えたか?アンインストール  時、タイムスタンプが違えば同じ名前でもファイルを消さないというのがInstallShieldの  大いなる迷惑^H^H仕様だったと思ってたが?  だけど、まぁその。新しい方のwindows.hを開き、  #include の下に、  #include を追加。  手抜きな追加ではあるが、この辺りは趣味の問題。  今度のもicm.hが何故かbuildlibの下にあるが……。ひょっとして?(glut.hのよーに  実はWin32標準ではないヘッダではないかと疑ったが)  …いや違う。mssdk\include下にもicm.hはあるから、これはlcc-win32のincludeの下に  あるべきもんのはずでは?(中身も見ずに移動)  gl\glut.hは古いlccのフォルダから移動。GLUTに付いては未だ遊ぶつもりなので。  んで、win.hがおかしい(;_;)  #define NMLDISPINFO NMLDISPINFOW #define NMLDISPINFO NMLDISPINFOA  というのは間違いで: #define NMLVDISPINFO NMLVDISPINFOA #define NMLVDISPINFO NMLVDISPINFOW  ってのが正しい。でもって、以下の行:  #define WC_IPADDRESSW L"SysIPAddress32" (中略) #define GetSystemWindowsDirectory GetSystemWindowsDirectoryA #endif  これが妙な場所に挿入されてるので#ifdef UNICODEのネスティングがおかしなことになって  いる。このブロックは移動させ、  #ifdef UNICODE typedef const unsigned short *LPCTSTR; という行の前にした(位置に意味はない。論理的に矛盾がなければそれで良いのだ)。  (ベストな変更ではない。が、暫定処置である)  この辺り、MSのコンパイラではそもそもインクルードファイル名が違うのだが、まぁその。  そんな細かいことに拘るのもナニなので無視(^^;;。 lib編:  7月版のlccで76個だったのが87に!7月版って、ちょっとだけいじったから、元々76では  なかったかもだけど、9月版で87ってのは?  う〜む。予想に反してhtmlhlp.libはないなぁ。glaux.libもないし、う〜む? #ちなみに10月版だとglut32.libを入れて93個 #で、今(10/13)気付いたが、どうして.libのタイムスタンプに古いのがある?lcc-win32は #Install時に.libを自動生成するから、タイムスタンプの日付が違うってのは変だぞ!? #…ま、いっか。追求中止。とらぶったら、その時に思い出すとしよう←いい加減な奴>私  ちなみにmssdkのlib (手持ちのはVC++ 5.0付属のlibより新しく、VC++ 6.0付属の  よりは古いかも。というバージョン。前に落としたMSのURLを最近見たら、何か違うんで  撤退してたりします[;_;])には115の.libがあります。  なお:   buildlib GLUT32.EXP glut32.lib   fc /b GLUT32.LIB C:\WINS\LCC.OLD\LIB\GLUT32.LIB   ってしたら滅茶苦茶違うんで、横着せずにglut32.libは前のをmoveしたりせず、   新たに生成した方が良いみたいだぞ。  さて。もう根性なしになっているので、同じ名前な.libは消すことにする。  C:\wins\lcc.old\lib> for %f in (*.lib) do If exist ...\lcc\lib\%f del %f  そして誰もいなくなった。だぁぁ!消したら何も分からんではないか!  阿呆、馬鹿、間抜け!!>俺  C:\wins\lcc\lib> for %f in (*.lib) do If not exist ...\lcc.old\lib\%f Echo %f  ってしてからやるべきだった。ちくしょ。透明なエチルアルコール水溶液と幾ばくかの  不純物が判断を誤らせたのだ!  #って、以前のバージョンのLCCのインストールファイルは消してないので、やろうと   思えばやり直しも可能なのだが、しない。あんまし意味あるとは思えないし……。 bin編:  新たにbrowsegen.exeってなのが追加。8.3名に納まっていないのが気に食わない。  (英語DOS互換のファイル名やディレクトリ名に拘らないような奴は地獄に落ちろ!ろくでもない   トラブルが襲う羽目になるぞ。Microsoftは英語圏のメーカだし、Windows9xってのは所詮はDOSの   拡張でしかないのだから)  もっと気に入らないのは、これが何なのか分からない。  (どうやらつまり名前の通り、ブラウズ情報を作成するような気がするけど。)  で、mkmf.bat - これは自作(しょうもない奴ですが、ここのサイトから落とせます)と、  cc.exe - これは昔のlccのパッケージにソース込みで付属していた奴をちょっとだけ  変更したlcc.exeドライバ(名前から分かる通りのもの。lcc.exeとlcclnk.exeを  順次起動するプログラムです)。を以前のlcc\binフォルダより移動。 doc編:  今回は「こいつを見てね。そうしてお互いに時間の無駄は止めようね」ってなコメントが付いて  ましたし。で、できたのがdocというフォルダ。  つまりはlccdoc.exeの展開結果です。  lccwin32.doc 2,938,889 ; 99/09/07 22:36 lcc-win32コンパイラシステムのリファレンス  manual.doc 2,525,696 ; 99/09/09 0:11 wedit、lccの統合環境のリファレンス  mmx.doc 72,075 ; 97/09/05 12:05 lccのCレベルによるmmxサポート関数リファレンス  stdlib.doc 406,528 ; 99/09/09 8:29 Cの標準ライブラリのリファレンス  weditres.doc 386,048 ; 99/09/07 11:32 lcc付属のリソースコンパイラのリファレンス  以前から時々公開されていたlcc関係の資料ですね。個人的には余り目新しい記述はなかった気が  しますが、各人で確認されたし。あ。未だこれらのドキュメントを読んだことがない人は一度は読む  べきです。lcc-win32を使う上で貴重で重要なことが満載です。  作者がフランス人である。という事実にも関わらず、彼は英語でこれら膨大なドキュメントを書いて  います。ですから英語は苦手。などと戯言を言うのは間違いです。  (言っておきますが、私も英語は苦手です。英語なマニュアルは60%程度しか読解できません。   そして、私が翻訳とか要約をこのサイトに載せないのは、単に私は英語を日本語に訳せないから   です。英語を理解することと、それを日本語にすることはまた別問題。過去に非常な苦労をして   英文マニュアルを日本語化し、それをniftyにアップした事実はあります。ただし、その方面の   意欲はもう枯渇しました。多分。人は不得意な領域であがくより、得意な領域で活動すべきです) test編:  最近気付いた問題(私にとっては最近)が解決しているかをテスト。 #include int main(int argc, char **argv) { int i; for (i=0; i hoge *.* C:\HOGE.EXE *.* C:\> …しくしく。 同じ.exeをWin95で動かすと:   C:\> hoge *.*   C:\HOGE.EXE   a long.long.filename.txt   TST   c1.txt   controlspy.zip   Drive (A).lnk   {省略}      C:\> ってなふうになるんですが。どうもIE 4以上が入っているとNGみたい(;_;) これまでの例に漏れず、そのうち直るとは思うのだが。 #某Win95 + IE4 SP1なマシンにlcc-win32でコンパイルしたテストプロを持ち込んで気付いた  のであった。まぁその。  C:\> for %f in (*.*) do テストプロ.exe %f  ってなコマンドラインを(もちろんだけど、「テストプロ.exe」などという名前のプログラムを  私が作る訳はない - GUIもなく、FEP、いやIMEが動かない状況で実行が殆どできない*1  よーな名前をテストプログラムに付けて自爆する趣味はあたしにはない - 念のため)  つまりこれは即座にでっち上げた名前であることは言うまでもない。  芸は身を助ける。という例である。(「芸?」) #ちなみにIE4 SP1で無事に動いていたマシンにIE4 SP2を入れたらマシンが起動する度に4つ程  「ページ違反を見つけたぞ」ってなダイアログが出るようになった。IE4とWin95ってばとことん  相性悪いんでやんの。もちろん再インストール。こんな場合、無駄にあがくのは時間の無駄。  しかしSP1で無事なのにSP2で壊滅状態になるとは思わなかった。おかしくなるならIE4を入れた時  だと思っていたのだが。  (ちなみにOutLook98をどうしても入れざるを得なかったため。あれはIE4を先にインストール   しないと自分のインストールを拒否するのだ。…で、Exchangeなメールは届くけど、通常のe-mailが   届かないってのはどーしてだ?>Outlook98   ちゃんとPOP3やSMTPの設定はしたぞ?まぁ、その程度のものですか所詮。別に良いけど。   e-mail関係はネスケのメーラで受けてるしぃ……)    ↑   ネスケ側がmailサーバからメッセージを先に取っているから。ではない。念のため。IE3付属の   メーラとか、Outlook Express、Lotus Notesとかを混在して使っていた実績があるのだから、   そこまで間抜けではない。…と、思うけどなぁ(弱気)。  …という訳であたしのWin95マシンはIE4のセキュリティホールがばっちり残ってます(苦笑)。  SP1用のパッチ当てて、その結果またもWin95が起動しなくなって再インストールってのはイヤ  なので、そのままです。クラックしないでね(^^;)  …IE5、ですか?Win98なマシンになら入れても良い気がしますが、Win95には遠慮しときます。  そーいえば、某マシンに入れたWin98SEは挙動不審だし……。  (いえね、Win98ならちゃんと電源落ちるんですが、Win98SEだと落ちない「場合がある」んです。   条件が特定できないんで、Windowsってーのはそーゆーもんだ。と理解してますけど[笑]) *1 alt + tenkeyという技をもちろん私は知っている。が、それでS-JISを英語なDOSコマンド   ラインに入力せにゃならんっちゅー事態を招くような馬鹿なことを覚悟するぐらいなら、   全てANKな伝統的8.3名を付けます。私は。はい(^^) %一度、英語DOSから「表計算.txt」をどうやってコピーできるか、チャレンジしてみよう。  ためらいもなく、debug起動してFATの直接書き換えで処理できたら尊敬してあげます。  …あたしはそこまでの根性はないので、Win9x(JP)な起動FDを作成するために自分の  マシンの所までいったん退散しましたし(^^A %まぁその。HKEY_DYN_DATAの定義がない。という指摘を私がメールしてから、この定義が  実際にlccのincludeファイルに含まれるまではlccも数世代を要したのだから、今回の更新で  これらのバグが直っていると考えるのは間違いだったかも。  もちろん、先方が私の指摘でlccを修正していると考えねばならない理由も何1つない。  だけど、まぁ。より正しい状況でlccを使うための情報をここに書くのは、たとえ誰も見て  いないとしても、やらないよりは良いことだと思う。 *いやその。だったら、誰にとっても殆ど手遅れというタイミングでWEBを更新するのではなくて、  もっとちゃんと更新すべきだ。という意見もあるだろうし、それは正しいと思う。  しかし、私は……。いや。言い訳は見苦しい。ここまで。 (EOF)