Linux XFree-to-Xinside mini-HOWTO <author>by Marco Melgazzi, <tt/marco@techie.com/ <date>v1.3, September 1997 <trans>JF Project, <tt>JF@linux.or.jp</tt></trans> <tdate>v1.3j, September 1997</tdate> <abstract> <!-- How to convert an XFree86 modeline into an XInside/XiGraphics one --> XFree86 のモードラインを XInside/XiGraphics のモードラインに変換する方法。 </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <sect><!--Introduction-->はじめに <p> <!-- During the spring of 1996 I've seen a lot of posts in comp.os.linux.x asking how to convert video modes between XFree86 and one of its commercial alternatives: XInside ( now named XiGraphics, note anyway that in this document I'll use the old product name, since I will mainly refer to that version ) --> 1996年の春、ニュースグループ comp.os.linux.x には XFree86 と X の商用版である XInside との間でビデオモードをどのように変換すればいいかという質問が数多く 投稿されていました (XInside は現在 XiGraphics という名称に変更されて います。ただ、この文書では古い商品名の方を使っています。私が解説している のは主に XInside の方だからです)。 <!-- I had evaluated before the product and had this evaluation version still floating on my hard disk: since I like problem solving, I've decided to give it a try and, after a couple of hours of fiddling and calculating, I came up with a supposedly informative article that was promptly posted. --> XInside が製品として発表される前に私はモニターをやっていたので、その評価版が まだ私のハードディスク上に残っていました。問題を解決するのが好きな私は、 この問題に取り組んでみようと思い、2, 3 時間いろいろいじって計算をし、 ある程度の成果が出たことから、それをすぐにニュースグループに投稿しました。 <!-- The discussions about how to convert suddendly vanished and I received 1 (one) mail thanking me for the article so, since maybe somebody else could need this information in the future, I decided to transform that post in the mini-HOWTO you are reading. --> モードライン変換についての議論自体は間もなく消えてしましましたが、 それでも私は自分の投稿に対する一通の感謝のメールを受取りました。 それゆえ、おそらくこの先、また他の誰かがこの情報を必要とするかも しれないと思い、その時の投稿を mini-HOWTO にまとめようと決意しました。 それが、いまあなたの読んでいるこの文書です。 <!-- Let me state something first: I do NOT work for XInside and I only had access to the evaluation 1.2 version for Linux. I know that nowadays ( May 97 ) AccelX has reached revision 3.1, but I do think that the information included in this document, if not verbatim, is still applicable. --> まず最初にいくつか述べさせてください。私は、XInside の関係者ではありません。 私が使ったのは XInside の Linux 用評価版 v1.2 だけですが、最近では (1997年5月現在)、AccelX のバージョンは 3.1 になっています。ただ、この文書に記載 した情報は、たとえ最新版にそのまま当てはまるわけではなくても、今も有効だと 思っています。 <!-- Due to the fact that this HOWTO has been written with the help of a pretty old Xinside version, it may well happen that some of the information contained here is not completely accurate: as you will read later, thanks to the birth of XFree 3.2, I haven't bought this commercial server, so if you have, and if you notice any incorrect information here please take the time to email me. --> この HOWTO は非常に古い XInside のバージョンに基づいて解説しているので、 記載した情報の一部は現在では必ずしも正確でないかもしれません。後述する ように、XFree 3.2 が出たおかげで、私は商用の X サーバを購入しませんでした。 商用サーバを購入された方で、本書に不正確な情報があることに気づかれた方は、 是非私にメールで教えてください。 <!-- Notice anyway that fiddling with monitor timings can be hazardous and, for this reason, I absolutely make no guarantees. If it works for you , fine, if you blow up your computer I shall not be held responsible for it. --> 注意すべきなのは、モニタのタイミングをいじるというのは思わぬ事故や故障に つながるということです。それゆえ、私としては一切の保証はできません。 上手くいけば問題ないですが、コンピュータが火を噴いたとしても私はその 責任を負いません。 <!-- As you may have noticed from may name, I'm not a native speaker of English so you will probably find some errors here and there, I apologize for them and I ask you to please avoid flooding my mailbox with language-related flames. Thanks ! --> 私の名前から推測がつくかと思いますが、私の母国語は英語ではありません。 おそらく英語の誤りがあちことにあるはずです。それについてはお詫びすると 同時に、英語に関する叱責で私のメールボックスが溢れてしまうことがないよう 大目に見ていただければと思います。 <sect><!--Why should I need it ?-->モード変換がなぜ必要か? <p> <!-- I think that the Xinside policy of not giving you an utility to tweak your video modes ( like xvidtune ) and/or to import your existing XFree ones in the evaluation ( and AFAIK commercial ) version is incomprehensible. I've spent about three hours putting this together ( hint: I've compared the VESA 1024x768@70Hz entry in the two formats ( and I'm nearly an electronic engineer ;-)) while an Xinside programmer could have written a comparable article in a fraction of this time... --> 評価版 (および商用版 AFAIK) において、ビデオモードを自動で検出する (xvidtune のような) ユーティリティや、既存の XFree サーバのビデオモードを インポートするユーティリティを提供しない Xinside の方針は、理解に苦しみます。 その作業を(手動で)行うのに、私は 3 時間掛りました (作業のヒント: VESA 1024x768@70Hz のエントリに関する両者のフォーマットを比較します (電子工学のエンジニアみたい ;-) )。3 時間もあれば、Xinside のプログラマが きちんとした文書を書けるはずなのですが.... <!-- I haven't downloaded any evaluation version from 1.3 onwards and I really hope they have fixed this. Well, if they have, this mini-HOWTO could be considered useless but, alas, if you read it you will learn something more about how everything works... --> 私はバージョン 1.3 以降の評価版をダウンロードしていませんが、Xinside の 関係者には是非こうした文書の不備を改善してほしいと考えています。とはいえ、 そうした文書が出来たならばこの mini-HOWTO は無用になるとも思えますが、 それでも動作の仕組みに関して多少の理解を促進するものにはなるかと思われます。 <sect><!--Let's go-->やってみよう! <p> <!-- Let's suppose that you have your oh-so-tweaked XFree86 mode and you want to evaluate Xinside in the same conditions: follow the steps described below and you should be able to do it; we will use my default video mode as a real-life example and I will explain what you will have to do to convert it. --> 既にあれこれいじり回した XFree86 モードがあり、それを Xinside にそのまま 移したいという状況であるとします。その場合、以下の手順を踏めば、それを 実現することが出来ます。ここでは私のデフォルトのビデオモードを実例として、 そのモードの変換方法を解説します。 <!-- An Xfree86 entry looks like this: --> XFree86 のエントリは次のようになっています。 <tscreen><verb> Modeline "blahblah" DOTCLK A B C D a b c d </verb></tscreen> <!-- Every one of the A-D and a-d numbers has a meaning: if you want you can search for it in the 'The Hitchhiker's Guide to X386/XFree86 Video Timing' ( /usr/lib/X11/doc/VideoModes.doc ) but you don't need to know the theory behind all this to perform a succesful conversion... --> A から D および a から d にはそれぞれ個別の意味があります。詳しくは、 「The Hitchhiker's Guide to X386/XFree86 Video Timinig」 (<tt>/usr/lib/X11/doc/VideoModes.doc</tt>) を見て欲しいのですが、 基礎理論を知らなくても変換自体は問題なく行うことが出来ます。 <!-- My modeline in /usr/lib/X11/XF86Config is: --> 私の <tt>/usr/lib/X11/XF86Config</tt> のモードラインは次のようなものです。 <tscreen><verb> Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900 | | | | | | | | | DOT_CLK A B C D a b c d </verb></tscreen> <!-- In Xinside, you have to add an entry in the Xtimings file, which should be located in etc/ ( from now on we suppose you are in the top Xaccel directory that should be something like /usr/X11/lib/X11/AcceleratedX ) --> Xinside では、エントリを Xtimings ファイルに追加して、そのファイルを etc/ に置く必要があります (ここからは、/usr/X11/lib/X11/AcceleratedX と いった Xaccel のトップディレクトリを起点にして話を進めます)。 <tscreen><verb> ! Somewhere in the file, put here the name you want [PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz"; ! ! These four are obvious ! HorPixel = 1168; // pixels VerPixel = 876; // lines PixelWidthRatio = 4; PixelHeightRatio = 3; ! ! hsync: DOT_CLK / D * 1000 [KHz] ! ! hsync = 105 / 1640 * 1000 = 64.024 KHz ! ! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz] ! ! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000 ! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz ! HorFrequency = 64.180; // kHz VerFrequency = 71.138; // Hz ! Obvious ScanType = NONINTERLACED; ! ! Put here the +/-hsync +/-vsync XFree86 options ! HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; ! Shouldn't change CharacterWidth = 8; // pixels ! DOT_CLK here PixelClock = 105.000; // MHz ! ! ! horizontal timings section: [usec] ! HorTotalTime = D / DOT_CLK = 15.619; HorAddrTime = A / DOT_CLK = 11.124; HorBlankStart = A / DOT_CLK = 11.124; HorBlankTime = HorTotalTime - HorBlankStart = 4.495; HorSyncStart = B / DOT_CLK = 11.962; HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743; ! ! vertical timings section: [msec] ! VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057; VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682; VerBlankTime = VerTotalTime - VerBlankStart = 0.375; VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698; VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000 = 0.219 ! Finished ! </verb></tscreen> <!-- Now you have to put this newly created mode in the files shown below in the appropriate place. --> 。。。。 <sect>Fixing up things <p> <!-- In the excerpts shown below the -> sign tells you what was modified: do NOT include it in your files! --> 以下の記述の -> 記号は変更を施した個所を示しています。ファイルには 書き込まないでください。 <!-- Monitor entry ( mine is monitors/mfreq/mfreq64.vda) --> Monitor エントリ (私の場合、monitors/mfreq/mfreq64.vda です) <tscreen><verb> [ESTABLISHED_TIMINGS] "640x480 @ 60Hz", "640x480 @ 72Hz", "640x480 @ 75Hz", "800x600 @ 56Hz", "800x600 @ 60Hz", "800x600 @ 72Hz", "800x600 @ 75Hz", "1024x768 Interlaced", "1024x768 @ 60Hz", "1024x768 @ 70Hz", "1024x768 @ 75Hz", "1152x900 Interlaced", "1152x900 @ 60Hz", "1152x900 @ 67Hz", -> "1168x876 @ 72Hz", "1280x1024 Interlaced", "1280x1024 @ 60Hz", "1600x1200 Interlaced"; </verb></tscreen> <!-- Board info file ( mine is boards/s3/764-2.xqa , I wonder why they have nearly all the Hercules boards but not MINE: Terminator 64/Dram ) --> ビデオカード情報ファイル (私の場合は boards/s3/764-2.xqa ですが、 Hercules カードはほとんど全部を対応しているのに、どうして 私の Terminator 64/Dram だけが抜けているのか不思議です) <tscreen><verb> [VISUAL] BitsPerPixel = 8; MemoryModel = Packed; ColorModel = Indexed; BitsRGB = 6; NumberOfColors = 256; [RESOLUTIONS] 640x480, 800x600, 1024x768, -> 1168x876, 1152x900, 1280x1024 [DESKTOPS] 640x480, 800x600, 1024x768, 1152x900, -> 1168x876, 1280x1024, 1600x1200 </verb></tscreen> <!-- If the dot clock is low enough ( NOT in this case for my board ) you can put the entry even in the 16bpp and 32bpp sec- tions. --> もしドットクロックが充分低いなら (私のビデオカードはそれほど低くないの ですが)、エントリーを 16bpp と 32bpp sections に置くこともできます。 <!-- The /etc/Xaccel.ini will look something like this --> /etc/Xaccel.ini は以下のようになっているでしょう。 <tscreen><verb> -------------------------------------------------------------- Board = "s3/764-2.xqa"; Monitor = "mfreq/mfreq64.vda"; Depth = 8; -> Desktop = 1168x876; [RESOLUTIONS] -> 1168x876, 1024x768; </verb></tscreen> <!-- The actual Xinside mode entry in etc/Xtimings --> etc/Xtimings にある実際の Xinside モードエントリは 次のようなものです。 <tscreen><verb> -------------------------------------------------------------- [PREADJUSTED_TIMING] PreadjustedTimingName = "1168x876 @ 72Hz"; HorPixel = 1168; // pixels VerPixel = 876; // lines PixelWidthRatio = 4; PixelHeightRatio = 3; HorFrequency = 64.024; // kHz VerFrequency = 71.138; // Hz ScanType = NONINTERLACED; HorSyncPolarity = POSITIVE; VerSyncPolarity = POSITIVE; CharacterWidth = 8; // pixels PixelClock = 105.000; // MHz HorTotalTime = 15.619; // (usec) = 205 chars HorAddrTime = 11.124; // (usec) = 146 chars HorBlankStart = 11.124; // (usec) = 146 chars HorBlankTime = 4.495; // (usec) = 59 chars HorSyncStart = 11.962; // (usec) = 157 chars HorSyncTime = 2.743; // (usec) = 36 chars VerTotalTime = 14.057; // (msec) = 900 lines VerAddrTime = 13.682; // (msec) = 876 lines VerBlankStart = 13.682; // (msec) = 876 lines VerBlankTime = 0.375; // (msec) = 24 lines VerSyncStart = 13.698; // (msec) = 877 lines VerSyncTime = 0.219; // (msec) = 14 lines </verb></tscreen> <!-- You can check your conversion by running the vgaset program with no parameters while running the Xinside server: it will output an XFree-like line and, if everything went OK, this line will be equal to the line you started from ( except if b and c are equal, I haven't been able to reproduce this situation in Xinside: the best case was c=b+1 ). --> Xinside サーバが走っている間、パラメータ無しで vgaset プログラム を走らせて、あなたの変換をチェックすることができます:これで、XFree の時のようなラインを出力してくれるでしょうし、もし全てうまく行って いれば、このラインはあなたの最初のラインと等しいでしょう(ただし、も し b と c が等しければ、私は Xinside でこの状況を確認することができ ませんでした:最も良い場合は c=b+1 の時でした) <sect><!--The end...-->最後に... <p> <!-- That's all folks ! I hope this will be useful to you. I don't think I'll buy the XiGraphics server in the near future for one simple reason: the release of XFree86 3.2 solved all of the text speed problems I was having on my humble Trio 64 video board ;) --> これで全部です。この文書があなたの役に立つことを期待しています。 近い将来、私が XiGraphics サーバを買うことはないでしょう。というのも、 XFree86 3.2 がリリースされたことで、私が使っている Trio 64 ビデオカード でも充分なテキスト表示速度が出るようになったからです。 <!-- It seems anyway that the XiGraphics server supports a much wider array of chipsets and video boards than XFree, so it may well happen that the commercial 'alternative' is the only viable one for you. If this is the case, and you bought the XiGraphics server, I would really like to hear from you to know if the information presented here has been useful to you, or if you found it too complex or whatever. --> とはいえ、XiGraphics サーバがサポートするチップセットとビデオカードは XFree86 よりもずっと幅広いので、商用サーバを使うしか手がない場合も あるでしょう。そうした場合、XiGraphics サーバを購入したなら、この文書の 情報が役に立ったか、難しすぎたか等の感想を知らせていただけたらと思います。 <sect><!-- Automating the process-->手順の自動化 <p> <!-- This small script automates most of the work. Be very careful with the ScanType and with the two Polarity lines: the script do not set them and, if you are too lazy to correct them, the risks of blowing up your monitor increase quite a lot. --> 以下のスクリプトを使うと、手順の大半を自動化出来ます。ScanType と 2 つの Polarity line には充分注意してください。このスクリプトはそれらの設定は 行わないので、適切な訂正をしないとモニタが火を噴く可能性が高まります。 <!-- Notice that I don't know if the 'Doublescan' flag has meaning in XInside: if you try to convert a low-res doublescan mode BE CAREFUL, you can easily kill your monitor since the refresh rate that you get is doubled ( in fact my 400x300@72Hz became a 400x300@144Hz !). --> 私は Xinside において "Doublescan" フラグが意味を持っているかどうか知りません。 それゆえ、もし低解像度の doublescan モードに変換しようとする場合は、 注意してください。リフレッシュレートが二倍になってしまうので、モニタが すぐに壊れてしまいます (実際、私の場合 400x300@72Hz が 400x300@144Hz に なってしまいました!)。 <![IGNORE[ #!/bin/sh ########################################################################## # XF2XInside # # This script converts modelines from XF86Config format to XInside # format as needed for the etc/Xtiming file. # # This is a quick hack, so don't expect much error checking (not to # speak of anything like user friendlyness). # # If you call it without arguments it should tell you what to do. # # ( July 1996, hcz@tazlwurm.bb.bawue.de) # # Btw: New modes created as described in the HOWTO work, but don't # show up in Xsetup's menu. Anybody who knows why? # ########################################################################## #----------------------------------------------- Here we go: # Change this if your modeline file lives somewhere else: XF=/usr/X11/lib/X11/XF86Config if [ $# -ne 1 ] ; then echo "usage: ${0##*/} <mode>" echo " example: ${0##*/} 1024x764" echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout)" exit 1 fi egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config | gawk ' NF < 11 { print "! invalid Modeline:\n! " $0 "\n!"; next } { print "//", $0 ":" name = $2 DOT_CLK = $3; A = $4; B = $5; C = $6; D = $7; a = $8; b = $9; c = $10; d = $11; VerFrequency = 1000000 / ((D / DOT_CLK) * d) print "[PREADJUSTED_TIMING]" printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency print " HorPixel\t\t= " A ";" print " VerPixel\t\t= " a ";" print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;" print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz" print " VerFrequency\t\t= " VerFrequency ";\t// Hz" print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*" print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " CharacterWidth\t= 8;" print " PixelClock\t\t= " DOT_CLK ";" HorTotalTime = D / DOT_CLK print " HorTotalTime\t\t= " HorTotalTime ";" print " HorAddrTime \t\t= " A / DOT_CLK ";" print " HorBlankStart\t\t= " A / DOT_CLK ";" print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";" print " HorSyncStart\t\t= " B / DOT_CLK ";" print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";" VerTotalTime = ( HorTotalTime * d ) / 1000 print " VerTotalTime\t\t= " VerTotalTime ";" print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";" VerBlankStart = ( HorTotalTime * a ) / 1000 print " VerBlankStart\t\t= " VerBlankStart ";" print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";" print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";" print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000 print "" }' ]]> <tscreen><verb> #!/bin/sh ########################################################################## # XF2XInside # # このスクリプトは、XF86Config フォーマットの modeline を XInside の # フォーマットに変換するものです。これは etc/Xtiminig ファイルで必要 # とされるものです。 # # やっつけ仕事なので、エラーチェックはほとんどしません # (ユーザフレンドリでないなどと言わないでください)。 # # 引数なしで実行すると、使い方を表示します。 # # ( July 1996, hcz@tazlwurm.bb.bawue.de) # # Btw: この HOWTO の記載どおりに作成された新しいモードは、問題なく # 機能するのですが、Xsetup のメニューが表示されません。 # なぜだか知ってる人います? # ########################################################################## #----------------------------------------------- ここから: # 以下をあなたの modeline ファイルの置場所に応じて編集してください XF=/usr/X11/lib/X11/XF86Config if [ $# -ne 1 ] ; then echo "usage: ${0##*/} <mode>" echo " example: ${0##*/} 1024x764" echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout)" exit 1 fi egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config | gawk ' NF < 11 { print "! invalid Modeline:\n! " $0 "\n!"; next } { print "//", $0 ":" name = $2 DOT_CLK = $3; A = $4; B = $5; C = $6; D = $7; a = $8; b = $9; c = $10; d = $11; VerFrequency = 1000000 / ((D / DOT_CLK) * d) print "[PREADJUSTED_TIMING]" printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency print " HorPixel\t\t= " A ";" print " VerPixel\t\t= " a ";" print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;" print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz" print " VerFrequency\t\t= " VerFrequency ";\t// Hz" print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*" print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*" print " CharacterWidth\t= 8;" print " PixelClock\t\t= " DOT_CLK ";" HorTotalTime = D / DOT_CLK print " HorTotalTime\t\t= " HorTotalTime ";" print " HorAddrTime \t\t= " A / DOT_CLK ";" print " HorBlankStart\t\t= " A / DOT_CLK ";" print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";" print " HorSyncStart\t\t= " B / DOT_CLK ";" print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";" VerTotalTime = ( HorTotalTime * d ) / 1000 print " VerTotalTime\t\t= " VerTotalTime ";" print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";" VerBlankStart = ( HorTotalTime * a ) / 1000 print " VerBlankStart\t\t= " VerBlankStart ";" print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";" print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";" print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000 print "" }' </verb></tscreen> <sect><!-- Thanks to-->謝辞 <p> <itemize> <!-- <item>Heike Claudia Zimmerer <htmlurl url="mailto:hcz@tazlwurm.bb.bawue.de" name="hcz@tazlwurm.bb.bawue.de"> for pointing out a small inconsistency and for sending me a script that automates most of the work. --> <item>Heike Claudia Zimmerer, <hcz@tazlwurm.bb.bawue.de> は、 記述の矛盾を指摘すると同時に、作業の大半を自動化するスクリプトを 送ってくれました。 <!-- <item>Bartosz Maruszewski <htmlurl url="mailto:B.Maruszewski@zsmeie.torun.pl" name="B.Maruszewski@zsmeie.torun.pl"> for translating this mini HOWTO in Polish and for pointing out a small typo. --> <item>Bartosz Maruszewski, <B.Maruszewski@zsmeie.torun.pl> は、 この文書をポーランド語に翻訳するとともに、typo の指摘をしてくれました。 </itemize> <sect><!-- Copyright/legalese-->著作権について <p> (c)opyright 1996-7 by Marco Melgazzi (marco@techie.com) - <!-- the GPL (Gnu Public License) applies. To obtain a copy of the GPL write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. --> この文書には、GPL (GNU Public License) が適用されます。GPL のコピーを 入手するには、Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA に手紙を書いてください。 <!-- Trademarks are owned by their owners. There is no warranty on the accuracy and/or the usefulness of the information given in this document. --> 各商標は、その所有者が権利を有しています。この文書に記載した情報については、 その正確さ・有用性について如何なる保証もありません。 <sect1>日本語訳について <p> <verb> 日本語訳:はら <hara@access.co.jp> (1997/01/27) 校正 :千旦裕司 <ysenda@pop01.odn.ne.jp> (2001/10/06) </verb> </article>