ENTER  








 
============== (3) パソコン教室 バビバ == BaBiBa == http://xaiax.at.infoseek.co.jp/scribble.html since 2009-02-21 ==============
  magic.png
パソコン教室 バビバ == BaBiBa == duck.gif
・・・・・・
  Welcome, Sorry this page is japanese only.
  niko.png   資料    目次    過去のページ
 

いらっしゃいませ。この教室は無料です。資格も取れませんし書かれていることに責任も持てません。皆様の判断でお楽しみください。
パソコン学習の指導が出来るような立場にはない私ですが、私自身のパソコン学習の場として、このページを維持します。
文章に誤解があることも考えられますので参考の程度でご覧ください。独断的と思われる記述がありましたら、お許しください。
不愉快を感じた場合は、このページの存在を忘れてください。善し悪しは別として、何かを感じて頂ければ成功と考えています。
学習中の人間が教室とは、だいそれた試みですが、このページが共通の目的を持つ方々の役に立てば幸いとの気持ちで公開しています。

ご意見、ご感想は、こちらへ gradi256.gif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

資料    ●漢字コード表 第一水準漢字・第二水準漢字・第三水準漢字・第四水準漢字  ●第一水準漢字 コード表 (教育漢字と常用漢字および、その他の漢字を色違いで分別します)  ◆JIS X 0208-1990 第一水準漢字と第二水準漢字で表現可能な異体字リスト  ●JIS X 0212-1990 字形・字姿のページ JIS補助漢字 異体字リスト  ●JIS X 0213-2004 字形・字姿のページ JIS拡張漢字 (第三第四水準)  ●GT書体一覧表 ( GT2000 フォント ) TRONで採用された東大明朝フォント (漢字数 約六万 全ての漢字を閲覧出来ます) GTコ−ド  ◆-- ASCII -- コード表  ◆DoCoMo 絵文字コード表  ◆Windows絵文字コード表 (Webdings.ttf) 巨大で美しい Windowsの絵文字のデモはこちら  ◆Windows絵文字コード表 (Wingdings.ttf) Q33MNY  ◆Windows絵文字コード表 (Symbol.ttf) 数学用フォントが豊富に存在しています。  ◆HTML色見本 一覧表 (モニターの輝度と配色の関係)  ◆HTMLテーブルコレクション  ◆色定数 検査表 (xyzzy, doja, java)  ◆平均12音階表 音階の仕組み  ●日本語プログラミング言語『なでしこ』命令一覧表 Ver.1.516-2009-01-22  ◆マウスキー キーボードでマウス操作を行ないます。  ◆Windows トラブルシューティング  ◆Windows95の制限  ◆Windows95で使用可能なアプリケーションの紹介 (祝)PPx Ver.1.00 、(祝)あふ Ver.1.00  ◆諸々  ◆区点コード一覧表  ◆平均12音階一覧表  ◆DoCoMo絵文字一覧表  ◆新常用漢字表(仮称)  ◆ダメ文字一覧表   諸橋・大漢和辞典 諸橋コード 字形・字姿のページ (漢字数 50,305 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/   京大・康煕辞典 康煕コード 字形・字姿のページ (漢字数 49,188 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/KOUKI/   JIS X 0221-1995 ユニコード 字形・字姿のページ (漢字数 23,000 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/JISX0221/  ●このページ(scribble.html)への検索キーワード 正しく渡っているか?確認してみましょう。  ●画像インデックス 画像から記事を見つけることが出来ます。  ■一言一行  ■自己紹介
青色文字で書かれたリンクは、全て、このページ内での移動です。クリックすると該当項目へジャンプするだけです。他のサイトへ移動することはありません。
私の過去のページへ移動します。  ●私が新規に作成したページへ移動します。  ▲目次へ移動します。  ■このページ内だけでの移動です。
w3m対応用 ( w3mでは文字色付けは無視される為。強調する場合はアンダーラインタグを使用すると良い)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

目次
このページの仕様 CGIはカウンタ取得に使用しています。JavaScriptは referrer取得に使用しています。java appletは未使用です。plug-inは未使用です。 当方、Windows95_OSR2 ie5.5sp2(2001-08-01) Display XGA 1024x768 256色の環境で問題無く閲覧出来ています。 SeaMonkey Ver.1.1.13(2008-10-31) & Firefox Ver.1.5.0.12(2007-05-08) & w3m でもテスト済みです。
 
 2009-11-07 DOS-MODEで走るemacs(Mule-2.2.2)
 2009-11-07 Change Keyboard
 2009-08-09 FDclone (DJGPP) DOS
 2009-06-22 (;_;) 右手子指を脱臼してしまいました。 痛い ・・・
 2009-05-08 Allegro OpenGL (Allegro Version 4.3.10)
 2009-04-09 Allegro (MinGW) Windows
 2009-03-29 Allegro (DJGPP) DOS
 2009-03-11 DOS窓フォントAPP932.FONを改造する
 2009-03-01 FreeBasic コンパイルと実行
 2009-02-25 DMonkey VxEditor
 2009-02-24 文章題をパール(Perl)で解く
 2009-02-22 MikoScript Apsaly
 2009-02-21 DOSバッチファイルの記述作法
 2009-02-21 Start scribble(3)




このページで、探している情報が見つからない場合は、私の過去のページscribble(2) scribble(1)も見てください。




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DOSバッチファイルの記述作法 下記、DOSバッチファイルの内容は、HTMLファイルを DOSの環境で手軽に閲覧しようというものです。 @echo off d:\VxEditor\xdoc2txt %1 > % %%TMP%% %\%1 TS % %%TMP%% %\%1 del % %%TMP%% %\%1 %空白%% や %%空白% は誤記ではありません。空白は必須です。Windows95_OSR2のDOS窓(DOSプロンプト)では、これで上手く動作します。 Windows95_OSR2のDOS窓(DOSプロンプト)で、環境変数 CONFIG の内容を画面へエコーするには、echo % %%CONFIG%% % とします。 注意したいのは、DOSプロンプトとDOSモードでは、echoコマンドの解釈が異なるということです。Windows95_OSR2のDOSモードでは、上記内容は通用しません。 処理の流れは、まず、引数として受取ったHTMLファイルを xdoc2txt.exeでテキストへ変換します。 この変換結果は、出力リダイレクトによって DOS環境変数 TMP が指示す場所へストアされます。 ストアされた、このテキストファイルを TS.com で閲覧します。 そして、閲覧終了後に、このテキストファイルを削除しています。 この DOSバッチファイルの名前を HTMLVIEW.BAT とした場合、index.html を閲覧するならば、次の様に、コマンドラインに入力します。 C:\>HTMLVIEW.BAT index.html DOSファイラー(KLなど)の拡張子連動機能を利用すると、キー入力の手間を省けます。 KL(K-Launcher) は http://homepage1.nifty.com/toro/ からダウンロードできます。 xdoc2txt.exe は、書式付きドキュメント(Adobe PDFなど)をプレーンなテキストに変換する為のプログラムです。 暗号化されたPDFの場合は、別途暗号化モジュール cryptlib.dll http://www31.ocn.ne.jp/~h_ishida/KWIC.html を用意する必要が有ります。 注意 : ドキュメントの書式内容がチェックされます。ドキュメントが規定の書式にない場合は無視されます。何も処理されません。 例えば、変換対象が HTMLドキュメントの場合、タグ <html> の存在をチェックしますので、タグ <html> が存在しない時は、正しく処理されません。 xdoc2txt.exe http://www31.ocn.ne.jp/~h_ishida/ は VxEditor に附属しています。 VxEditor Ver.0.6.0.0(2008-05-22) http://dr-x.hp.infoseek.co.jp/ スクリプト言語 DMonkeyを搭載したテキストエディタです。 TS (TurboShow) 最速のテキストファイル表示プログラム (巨大なファイルも、なんのその、本当に速いです。が・・・ Shift-JISにしか対応していません) IBM社のPC/AT互換機(i80286以上 DOS/V機およびAX機を含む)で動作可能です。また、日本語Vテキスト環境にも対応しています。 TS.COM は DD131.ZIP に附属しています。 DD131.ZIP 1995-07-13 137,655byte DoDiary: 高速処理を追求したPIM http://www.vector.co.jp/ バッチファイルのデバッグ方法 まず、安全な方法で試してみる。先程の不思議な文字列をテストしてみましょう。コマンドラインへ C:\>echo % %%TMP%% % と入力してみる。次に、これをバッチファイルにして実行してみる。結果が望むものと異なる場合は、あきらめてください。・・・ ・・・ TMP を TEMP に変更して、再度トライ! コマンドラインへの直入力と、その他の環境(KLのシェルなど)で実行した場合は、動作(解釈のされ方)が異なるということを覚えておいてください。 ちなみに、TMP や TEMP は、DOSの環境変数と呼ばれているもので autoexec.bat で定義されています。  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

MikoScript MikoScript Ver.1.42(2008-11-22) http://www.venus.dti.ne.jp/mw31/ 下記は、Windowsプログラムです。小さなウィンドウに『 こんにちは !』と表示します。 // // miniWindow.mc // #include "GkLib\GkLibrary.s" Main(); return; function Main(){ class ^WelcomeWindow : ::GK.Window {} window = ^WelcomeWindow( "Welcome to GK Library", , , 100, 50 ); window.Open(); ::GK.WindowMsgLoop(); } function ^WelcomeWindow.Construct( Title, Xo, Yo, Xd, Yd ){ .[ ::GK.Window.Construct ]( Title, Xo, Yo, Xd, Yd ); } function ^WelcomeWindow.Destruct(){ .[ ::GK.Window.Destruct ](); } function ^WelcomeWindow.OnCreate(){ .TextFont = ::GK.Font( "MS UI Gothic", 20, #SHIFTJIS_CHARSET, #VARIABLE_PITCH, ::GK.Font.BOLD ); .gc.SetFont( .TextFont ); } function ^WelcomeWindow.OnPaint(){ .GetHotRect( R'STRUCT ); .gc.ClearRect( R, #RGB(192,192,192) ); .gc.SetBackMode( #TRANSPARENT ); .gc.DrawText( ::GK.Rect( 0, 0, .gc.Xd, .gc.Yd ), " こんにちは !", #DT_TOP | #DT_LEFT | #DT_SINGLELINE); }
MikoScript 素数算出でベンチマークの例 次のソースはコンソールで動きます。早く終わり過ぎる場合は、1000という値を適当に変更します。 // MikoScript (miko PRIME.MC) // PRIME.MC // http://www.venus.dti.ne.jp/mw31/miko/Tutorial.html //-------------------------------------- 計時開始 Prime[0] = 2; N = 1; for(v = 3 ; v <= 1000 ; v += 2){ for(i = 0 ; i < N ; i++){ if(v % Prime[i] == 0) goto NEXT; } Prime[N++] = v; NEXT: ; } for(i = 0 ; i < N ; i++) print Prime[i] : " " : -; print ; print ; //-------------------------------------- 計時停止 print 'ticks : "ミリ秒"; DMonkey 素数算出でベンチマークの例は、こちら miko コマンドライン・ワンライナーの制限 以下に4つのワンライナーの例を示しています。 3番目の例は、コマンドラインでは実行不能です。これは、DOSバッチファイルにすることで実行可能に成ります。 これは、mikoの制限ではなく、Windows95_OSR2の command.comの制限です。128文字以上はコマンドラインに入力できないのです。 (0) Hello, World!         C:\>miko /! "print \"Hello, World!\";" (1) mikoのバージョンを知る         C:\>miko /! "print ::GetVersion();" (2) 今の時刻を知る         C:\>miko /! "::GetTime(,,,,HH'new!,MM'new!,SS'new!);print \"%%02d\"'fmt(HH):\":\":\"%%02d\"'fmt(MM):\":\":\"%%02d\"'fmt(SS);"
(3) 本日の日付を知る (一行の内容が長いので、折返して表示しています)

        C:\>miko /! "::GetTime(Y'new!,M'new!,D'new!,W'new!);print Y:\"-\":\"%%02d\"'fmt(M):\"-\":\"%%02d\"'fmt(D):\"(\": \"SunMonTueWedThuFriSat\"'part(W*3,3):\")\";"

3番目の例をワンライナーとして実行するのではなく、拡張子 MC で作成する場合は、次の様に書く必要が有ります。

    ::GetTime(Y'new!,M'new!,D'new!,W'new!);print Y:"-":"%02d"'fmt(M):"-":"%02d"'fmt(D):"(":"SunMonTueWedThuFriSat"'part(W*3,3):")";

なんかスッキリしてますよね。円マーク(\)が無くなり、パーセント記号(%)が1つに減っています。
円マーク(\)は、MikoScriptワンライナーでのスクリプト記述制限、パーセント記号(%)は、DOSバッチファイルでのスクリプト記述制限です。
この、拡張子 MC で作成したファイルを mcDate.MC とすると、これを実行するには次の様にコマンドラインで実行します。

C:\>miko mcDate.MC

実は、もっとスッキリと記述することもできるのです。以下に、それを示します。

    ::GetTime(Y'new!,M'new!,D'new!,W'new!);print Y:"-":M:"-":D:"(":"SunMonTueWedThuFriSat"'part(W*3,3):")";

これは、本日の日付を 2009-2-22(Sun) のように出力します。1つ前の例では、2009-02-22(Sun) のように出力します。違いが解かりますか?








DMonkey ワンライナーの例は、こちら

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

文章題をパールで解く     x日前は何曜日? 思考の流れとしては、今日は何曜日? ・・・ と成る。そして、引いたり、足したりと、数え上げの演算に進む。 二日前や三日前の曜日ならば、簡単に予想が立つが、週を跨いだ八日前の曜日を知りたいとすると、やや難しく成る。 月を跨いだ或る日の曜日を知りたいとすると、さらに難しく成る。 年を跨いだ或る日の曜日を知りたいとすると、お手上げと成る。 紀元前の或る年の或る月の或る日の曜日を知りたいとすると、嫌われる。 # ----------------------------------------------------------- # DatePartWeek.pl # ----------------------------------------------------------- $date_pre = '2009/02/22'; # この日の曜日を調べるとする ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time()); $mday_pre = 0 + substr($date_pre,8,2); $wday_pre = $wday - ($mday-$mday_pre); while ($wday_pre<0){$wday_pre+=7;} $wday_pre = substr('SunMonTueWedThuFriSat',$wday_pre*3,3); print $date_pre.'('.$wday_pre.')'; # ----------------------------------------------------------- 月内ならば、このスクリプトは正しく処理されます。 ただし、月を跨いだり、年を跨いだりしてしまうと、上手く行きません。日数計算は難しいですね。 つまり、貴方の誕生日を $date_pre にセットしてスクリプトを実行しても、貴方の誕生日の曜日を知ることはできないのです。 この問題を解決するには、まず、年間の通算日を知る必要が有ります。閏年とかも考慮する必要が有ります。 数年の短い期間ではなく、長いスパンで考えるとすると、グレゴリオ暦法やユリウス暦法などについても考慮する必要が出てきます。 日本語プログラミング言語『なでしこ』ならば、次の様に実行することで、日数差を簡単に求めることができます。 『2009/02/22』と今日の日数差を言う。 本年度の残り日数を知るには、『なでしこ』では次の様に実行します。 今日と「{今年+1}/01/01」の日数差を言う。 VBScriptも日数計算は得意なようです。 ------------------------------------ msgbox "今日は、" & Now & "です。" msgbox "年が明けてから " & DatePart("y", Now) & "日たちました。" 改良版 (知っていれば、答える。知らなければ、知らないと応答する) # ----------------------------------------------------------- # DatePartWeek.pl # ----------------------------------------------------------- # ---- 変数 $date_pre に対象日を日付形式の文字列でセットする。 $date_pre = '2009/02/24'; # ---- 今日の日付を localtime(time()) で求める。 ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time()); # ---- 文字列抽出によって、対象日の年の部分のみ得る。数値ゼロと文字列の加算によって、数値型への暗黙の型変換を望む。 $year_pre = 0 + substr($date_pre,0,4); # ---- 文字列抽出によって、対象日の月の部分のみ得る。 $mon_pre = 0 + substr($date_pre,5,2); # ---- 回答可能な範囲にあるかチェックする。+1900と++はlocaltimeの仕様です。 if ($year_pre == $year+1900 && $mon_pre == ++$mon) { # ---- 文字列抽出によって、対象日の日にちの部分のみ得る。 $mday_pre = 0 + substr($date_pre,8,2); # ---- 今日の曜日(mod 7)から、今日と対象日の日数隔たりを減算する。 $wday_pre = $wday - ($mday-$mday_pre); # ---- もし、$wday_pre がマイナス値ならば、ゼロ以上、プラス値になるまで、7を加算する。 while ($wday_pre<0){$wday_pre+=7;} # ---- 文字列抽出によって、曜日文字列(文字型)を得る。インデックス(数値型)はゼロから始ることに注意。変数 $wday_pre は数値型、文字型と自在である。 $wday_pre = substr('SunMonTueWedThuFriSat',$wday_pre*3,3); } # ---- 知らなければ、知らないと応答する。 else {$wday_pre = 'カウンタが不正です';} # ---- ドットによる文字列連結を用いて、結果を画面へ出力する。 print $date_pre.'('.$wday_pre.')'; # ----------------------------------------------------------- perlは面倒ですね。 しかし、『なでしこ』も VBScriptも内部では、同じ様な演算を、一生懸命に行なっているのです。だから『なでしこ』は重いのか、と納得したりして ・・・ #-------------------------------------------------- # テスト $date = &date; ($yy, $mm, $dd) = @yymmdd = split(/\//, $date); print "$yy, $mm, $dd\n"; $date = &year_month_day(54,2009); ($yy, $mm, $dd) = @yymmdd = split(/\//, $date); print "$yy, $mm, $dd\n"; $date = &day_of_year($yy, $mm, $dd); print "$date\n"; exit; #-------------------------------------------------- sub date { my @time = localtime time; $yday_s = $time[7]; $time[5] += 1900; $year_s = $time[5]; $time[5] %= 100; $time[4]++; my $date = sprintf("%02d/%02d/%02d", @time[5,4,3]); return $date; } # 日数セット(平年、閏年、大の月、小の月)の情報を準備します。 sub init_day_table { @day_tab = ([0,31,28,31,30,31,30,31,31,30,31,30,31], [0,31,29,31,30,31,30,31,31,30,31,30,31]); return; } # 年度($year)を渡すと、うるう年判定を行います。 sub leap_year { my $year = @_[0]; my $leap = ((($year%4 == 0) && ($year%100 != 0)) || $year%400 == 0) ? 1: 0; return "$leap"; } # 現在の日付($year, $month, $day)を渡すと、年間通算日($yday)を返します。 sub day_of_year { my ($year, $month, $day) = @_; $leap = &leap_year($year); &init_day_table; for (my $mon = 1; $mon < $month; $mon++) { $day += $day_tab[$leap][$mon]; } return $day; } # 年間通算日($yday)と年度($year)を渡すと、現在の日付を返します。 sub year_month_day { my($yday, $year) = @_; my $extf; my $year_day = &day_of_year($year, 12, 31); do { my $leap = &leap_year($year); my $yearday = $year_day + $leap; if ($yday > $yearday) {$yday -= $yearday; $year++; $extf = 0;} else {$extf = 1;} } until ($extf); my $day = $yday; my $month = 1; while ($day > $day_tab[$leap][$month]) { $day -= $day_tab[$leap][$month]; $month++; } my $date = sprintf("%02d/%02d/%02d", $year, $month, $day); return $date; }  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DMonkey DMonkeyは Delphiで作られたアプリケーションへの組込みを目的としたインタプリタ・スクリプトエンジンです。 言語仕様は ECMAScript(JavaScript)のサブセットになっています。 DMonkeyには、コンソールのみで有効な dm.exe と VCLが有効な dmscript.exe の2種類があります。 DMonkey Script Host ver.0.3.9.1(2005-08-07)のダウンロードは、こちら http://sourceforge.jp/projects/dmonkey/ DMonkey を搭載したテキストエディタ VxEditor Ver.0.6.0.0(2008-05-22)のダウンロードは、こちら http://dr-x.hp.infoseek.co.jp/ DMonkey Script Host ver.0.3.9.1 ------------------------------- dm.exe ... コンソール使用版(VCLなし) dmscript.exe ... 通常版(VCLあり) 仕様 拡張子は、なんでも可。ただしインポートできるのは*.dmsのみなので*.dmsを推奨。 print(write),println(writeln)メソッドでの出力(標準出力)は、実行終了(中断)後、 ソースファイル名.log というファイル名でスクリプトと同じ場所に上書きで保存されます。 拡張子 dmf はフォームリソース用として推奨。 起動オプション dmscript.exe -c ... 標準出力をコンソールに出力する (ログファイル(拡張子.log)を使用しない) -t ... 標準出力の最後に実行にかかった時間を出力する -b ... コンパイル済みバイナリ(拡張子.dmc)を使用しない dm.exe -l ... 1行スクリプトモード ---- 第2引数以降の文字列をスクリプトとして実行します。(二重引用符 " は使用できません) DMonkey ワンライナの例 C:\>dm -l print('Hello, World!'); C:\>dm -l println(Date); C:\>dm -l msgBox(Date, 0, 'たいとる'); Dateはインスタンス生成を必要としません。つまり、Date は Date=new Date(); に同じです。 DMonkey スクリプトの例 //------------------- // TEST_ESC.DMS //------------------- a = 'あいうえお'; b = escape(a); println(b); println(unescape(b)); //------------------- dm TEST_ESC.DMS 実行結果 ------------------------------ %82%A0%82%A2%82%A4%82%A6%82%A8 あいうえお Press any key to continue. //------------------- // TESTUTF8.DMS //------------------- a = 'あいうえお'; b = a.toUTF8(); println(b); println(b.fromUTF8toSJIS()); //------------------- dm TESTUTF8.DMS 実行結果 ------------------------------ 縺ゅ>縺縺医 あいうえお Press any key to continue. DMSとVXTの関係 DMonkey Script(DMS) D:\VXEDITOR\CALC.DMS ---------------------------------------- e = new Editor; str = prompt("計算式を入力して下さい.", e.SelText); if(str != null) { e.SelText += "\n=" + eval(str); } VxEditor Macro(VXT) D:\VXEDITOR\CALC.VXT ---------------------------------------- object TToolData Title = 'Calc' ExeFile = 'MyMacro\Calc.dms' ShortCut = 0 InitFlg = True end DMonkey 素数算出でベンチマークの例 次のソースはコンソールで動きます。早く終わり過ぎる場合は、1000という値を適当に変更します。 // DMonkey (dmscript -c -t prime.dms) // dms0_3_9_1\source\test\prime.dms //------------------------------------- function searchPrime (max) { var Composit = new Array(); var primeArray = [2]; for (var n=3; n<=max; n+=2) { if (Composit[n]) continue; primeArray.push(n); for (var i=n; i*n<=max; i+=2) Composit[i*n] = true; } return primeArray; } //------------------------------------- 計時開始 start=Win32.getTickCount(); println(searchPrime(1000)); end=Win32.getTickCount(); //------------------------------------- 計時停止 println("\n" + (end-start) + 'ミリ秒'); MikoScript 素数算出でベンチマークの例は、こちら DMonkey 日付と時刻の書式を自分の好みに変更するには? 標準 2009-02-25(水) 20:03:45 拡張 2009-02-25(Wed)20:06:39 曜日の日本語表示が気に入らない。半角フォントと全角フォントの混在は、美しくない。・・・ と思われる方は、次の様にスクリプトを自作すると解決します。 //---------------------------------------------------------------------------------------------------------- // dateTime.dms // s=new Date(); e=new Date(); s.format='yyyy-mm-dd('; e.format=')hh:nn:ss '; print(s); print('SunMonTueWedThuFriSat'.substr('日月火水木金土'.indexOf(Date.toString().substr(11,1))*3,3)); print(e); //---------------------------------------------------------------------------------------------------------- // substr(整数A[,整数B]) ... 文字列内の A の位置から B 文字分の文字列を返します。 // indexOf(文字列[,整数]) ... 文字列を指定位置から右に探して、その位置を返します。 // print(Date); // 2009-02-25(水) 20:03:45 // dm dateTime.dms // 2009-02-25(Wed)20:06:39 // print(Date.toString().indexOf('水')); // 11 // print(Date.toString().substr(11,1)); // 水 // print('日月火水木金土'.indexOf(Date.toString().substr(11,1))); // 3 DMonkey dateTime.dms を VxEditorで利用するには? VxEditor Ver.0.6.0.0(2008-05-22) http://dr-x.hp.infoseek.co.jp/ //------------------------------------------------------------------------------------------------------------------ // Vx_dateTime.dms // s=new Date(); e=new Date(); s.format='yyyy-mm-dd('; e.format=')hh:nn:ss '; Editor.SelText = s + 'SunMonTueWedThuFriSat'.substr('日月火水木金土'.indexOf(Date.toString().substr(11,1))*3,3) + e; //------------------------------------------------------------------------------------------------------------------ VxEditor に Vx_dateTime.dms を登録するには? ツール → ツールの設定 → 追加 ツールバーに追加するアイコンを用意するとよい (BMP 16*16 color 4bit 左下の色を透過色とする)  VCLメモ帳は、スクリプト言語 DMonkey で作成されたアプリケーションです。 VxEditor ToolProperty --------------------- $FILEPATH $FILENAME $NAMEONLY $EXTNAME $DIRPATH $SELTEXT --------------------- VxEditor 選択テキストファイル名を関連付けに従って実行する。 ツール → ツールの設定 → 追加 実行ファイル       rundll32 コマンドラインパラメータ url.dll,FileProtocolHandler $SELTEXT // VxEditor 編集中ファイル名の取り込み // insert_file_name.dms Editor.SelText=Window.FileName; //--------------------- DMonkeyの数学関数について 逆サイン関数 asin()は DMonkeyにはありますが、MikoScriptにはありません。 DMonkeyの逆サイン関数 asin()が正しく実行されるか?テストするには次の様にします。 デグリー表現での 30度をラディアン表現に改めると 0.5235987755983 ≒ 3.14/6 ≒ Math.PI/6             30度             +            /│           /+│       2  /++│         /+++│√3        /++++│       /+++++│ 60度 +───┘90度          1 上記の図から、明らかに、デグリー表現でのサイン30度は 1/2 = 0.5 です。 三角関数への引数は、コンピュータ上ではラディアン表現が一般的ですから次の様になります。 dm -l print(Math.sin(Math.PI/6)); 0.5 Press any key to continue. 検算は次の様にします。円周率の値が正しく出力されます。 dm -l print(Math.asin(0.5)*6); 3.14159265358979 Press any key to continue. 逆サイン関数は、『なでしこ』でも利用できます。『なでしこ』でのワンライナでは次の様に実行します。 cnako -e "「ARCSIN(SIN(PI/6))*6 ≒ {ARCSIN(SIN(PI/6))*6}」を表示" ARCSIN(SIN(PI/6))*6 ≒ 3.14159265358979 Press any key to continue.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

FreeBasic コンパイルと実行 FreeBASIC DOWNLOAD http://www.freebasic.net/ (統合開発環境 FBIDEなどもここでダウンロード出来ます) 統合開発環境 FbEdit ver.1.0.6.1b(2008-05-16) http://www.radasm.com/fbedit/index.html GUIフォームエディタ FBIDE や FbEdit を利用すれば、コンパイルやコンパイルした実行ファイルの実行などが簡単に行なえます。 しかし、ここでは、ハンドメイドの開発環境として、独自の開発手順を紹介しています。 ハンドメイドの開発環境の利点は、自分が何を行なっているのかを把握しやすいという所にあります。 道具としては、KL(DOSファイラ http://homepage1.nifty.com/toro/) と DOSバッチファイル と FBC.exe を使用します。 現状、制限として、単一のソースファイルをコンパイルすることしかできません。 リソースファイルなどを必要とする場合は、上記の統合開発環境を使用するようにします。 KL(DOSファイラ)の拡張子関連付け実行の機能を利用して、DOSバッチファイルを起動して、ソースファイルをコンパイルします。 または、コンパイルのち実行するようにします。KL(K-Launcher)の使用方法は説明を省略します。実際に使用して動作を確認してください。 下記の KL.CFG は一部を抽出したものです。KL.CFG の全てでは無いので注意してください。 拡張子 .bas で、このエントリに分岐してくるようにします。 KL(K-Launcher)が上手く動かない場合は、コマンドラインに次の様に直書きで実行すればよい。 fileNameは、拡張子を除いたフルパスファイル名で指定します。 C:\>FBWMAKE1.BAT fileName 0 gui KL.CFG KL(K-Launcher)の制限により、長過ぎるパスは渡せません。 拡張子を除いたフルパスファイル名を渡すようにします。 ;FreeBasic 0,20.0 DOS Quick RUN,, FB_MAKE.BAT %1%\%X 1 1,20.0 DOS Compile only,,FB_MAKE.BAT %1%\%X 0 2,18.5 WINDOWS CONSOLE Quick RUN,, FBWMAKE1.BAT %1%\%X 1 console 3,18.5 WINDOWS CONSOLE Compile only,,FBWMAKE1.BAT %1%\%X 0 console 4,18.5 WINDOWS GUI Quick RUN,, FBWMAKE1.BAT %1%\%X 1 gui 5,18.5 WINDOWS GUI Compile only,,FBWMAKE1.BAT %1%\%X 0 gui ,,, FBWMAKE1.BAT ESCは即値0x1bです。d:\FreeBASIC\ に ver.0.18.5bがインストールされていることを前提にしています。 BEEP.BATはコンパイル完了の報告(ビープ音)として使用しています。無くても、かまいません。DOSバッチファイルの実行に影響は有りません。 @echo off REM FBWMAKE1.BAT call us echo ---- COMPILE 0.18.5b ---- d: cd d:\FreeBASIC FBC.EXE %1.bas -v -r -s %3 if "%2"=="0" goto PASS_RUN echo. echo ---- RUN 0.18.5b ---- call c:\appli\ubasic\BEEP.BAT 400 1 del %1.asm echo % %%1.bas to echo % %%1.exe made [ESC[s if exist %1.exe echo ESC[uESC[1;33mOKESC[m] if not exist %1.exe echo ESC[uESC[1;41mNGESC[m] CHOICE /c:yn /N Yes or No ? if errorlevel 2 goto PASS %1.exe :PASS_RUN pause :PASS if not "%2"=="0" del %1.exe call jp exit FBWMAKE1.BAT 実行結果 ---- COMPILE 0.18.5b ---- FreeBASIC Compiler - Version 0.18.5 (04-17-2008) for win32 (target:win32) Copyright (C) 2004-2008 The FreeBASIC development team. Configured as standalone compiling: D:\FB\GUI\WINDOW.bas -o D:\FB\GUI\WINDOW.asm assembling: D:\FREEBASIC\bin\win32\as.exe --strip-local-absolute "D:\FB\GUI\WINDOW.asm" -o "D:\FB\GUI\WINDOW.o" linking: -T "D:\FREEBASIC\lib\win32\i386pe.x" -subsystem windows -s --stack 1048576,1048576 -L "D:\FREEBASIC\lib\win32" -L "./" "D:\FREEBASIC\lib\win32\crt2.o" "D:\FREEBASIC\lib\win32\crtbegin.o" "D:\FB\GUI\WINDOW.o" -o "D:\FB\GUI\WINDOW.exe" -( -lkernel32 -lgdi32 -luser32 -lversion -ladvapi32 -lfb -lgcc -lmsvcrt -lmingw32 -lmingwex -lmoldname -lsupc++ "D:\FREEBASIC\lib\win32\fbrt0.o" -) "D:\FREEBASIC\lib\win32\crtend.o" Press any key to continue . . . ビープ音について バッチファイル内でBEEPを利用するには、コントロールコード 7 を直書きするのが簡単ですが、これだと決った音しか出ません。 そこで、音長と音程を指定してBEEP音を出力するのが、下記で示されている内容です。 BEEP.BAT と BEEP.UB と SOUND_UB.UBB を ubv32 と同じディレクトリに配置する必要が有ります。 SOUND_UB.UBBはマシン語で記述された、ビープ音発声プログラムです。音長と音程(周波数)を指定してビープ音を出力できます。 SOUND_UB.UBBの詳細は、こちらを参考してください。 rem --------------- rem BEEP.BAT C: cd C:\APPLI\UBASIC ubv32 BEEP.UB %1 %2 rem ---------------  拡張子 .UBのソースはUBASICで記述されているプログラムソースです。 UBASIC http://www.rkmath.rikkyo.ac.jp/~kida/ コピーする時は、改行のみの行が混入しないようにしてください。 改行のみの行が混入するとプログラム実行時にエラーに成ってしまいます。 10 'asave"BEEP.UB":'音長、音程を指定してBEEPを出力します。 20 dim A%(65534):bload "SOUND_UB.UBB",A%():cls 30 Cmd=getenv("CMDLINE=") '------------------ ubv32 BEEP.UB m1 m2 40 Cmdp=instr(Cmd,spc(1)) '------------------ ubv32 50 Cmdp=instr(Cmdp+1,Cmd,spc(1)) '----------------- BEEP.UB 60 Env=mid(Cmd,Cmdp+1,*) '--------------------------------- m1 m2 70 m1=val(member(Env,1)):m2=val(member(Env,2)):if or{m1=0,m2=0} then m1=8192:m2=1 80 A%(0)=m1:A%(1)=m2:call A%():system:' 周波数m1と音調m2をセットしてサウンドルーチンを呼ぶ。 90 end Pythonライブラリ winsoundモジュールは Windowsプラットフォーム上で提供されている基本的な音声再生機構へのアクセス手段を提供します。 Beep(frequency, duration) PCのシステムスピーカを鳴らします。スピーカを鳴らすことができない場合、例外 RuntimeErrorが送出されます。 引数 frequencyは鳴らす音の周波数を指定します。(単位は Hzです。値は 37から 32767でなくてはなりません) 引数 durationは音を何ミリ秒鳴らすかの指定です。 注意 : Windows95/98 では、WindowsのAPI関数 Beep()は存在しますが役に立ちません (この関数は引数を無視します)。 これらのケースでは、Pythonはポートを直接操作して Beep()をシミュレートします (バージョン 2.1 で追加されました)。 C:\>python -c "import winsound; winsound.Beep(880,3000);"
FreeBASIC ウィンドウ雛形 ''' window.bas ''' ''' http://www.freebasic.net/ #include once "windows.bi" declare function WinMain ( byval hInstance as HINSTANCE, _ byval hPrevInstance as HINSTANCE, _ byval szCmdLine as string, _ byval iCmdShow as integer ) as integer end WinMain( GetModuleHandle( null ), null, Command( ), SW_NORMAL ) function WndProc ( byval hWnd as HWND, _ byval wMsg as UINT, _ byval wParam as WPARAM, _ byval lParam as LPARAM ) as LRESULT function = 0 select case( wMsg ) case WM_CREATE exit function case WM_PAINT dim rct as RECT dim pnt as PAINTSTRUCT dim hDC as HDC hDC = BeginPaint( hWnd, @pnt ) GetClientRect( hWnd, @rct ) DrawText( hDC, "Hello, World!", -1, @rct, DT_SINGLELINE or DT_CENTER or DT_VCENTER ) EndPaint( hWnd, @pnt ) exit function case WM_KEYDOWN if( lobyte( wParam ) = 27 ) then PostMessage( hWnd, WM_CLOSE, 0, 0 ) end if case WM_DESTROY PostQuitMessage( 0 ) exit function end select function = DefWindowProc( hWnd, wMsg, wParam, lParam ) end function function WinMain ( byval hInstance as HINSTANCE, _ byval hPrevInstance as HINSTANCE, _ byval szCmdLine as string, _ byval iCmdShow as integer ) as integer dim wMsg as MSG dim wcls as WNDCLASS dim hWnd as HWND function = 0 with wcls .style = CS_HREDRAW or CS_VREDRAW .lpfnWndProc = @WndProc .cbClsExtra = 0 .cbWndExtra = 0 .hInstance = hInstance .hIcon = LoadIcon( NULL, IDI_APPLICATION ) .hCursor = LoadCursor( NULL, IDC_ARROW ) .hbrBackground = GetStockObject( WHITE_BRUSH ) .lpszMenuName = NULL .lpszClassName = @"HelloWin" end with if( RegisterClass( @wcls ) = FALSE ) then MessageBox( null, "Failed to register wcls", "Error", MB_ICONERROR ) exit function end if hWnd = CreateWindowEx( 0, _ @"HelloWin", _ "The Hello Program", _ WS_OVERLAPPEDWINDOW, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ NULL, _ NULL, _ hInstance, _ NULL ) ShowWindow( hWnd, iCmdShow ) UpdateWindow( hWnd ) while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE ) TranslateMessage( @wMsg ) DispatchMessage( @wMsg ) wend function = wMsg.wParam end function  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DOS窓フォントAPP932.FONを改造する APP932.FON 改造前 (罫線などが半角カナで表現されている) APP932.FON 改造後 (白背景色) APP932.FON 改造後 (黒背景色) EDIT.COM(DRDOS)の特徴 利点 ---------------- 巨大なファイルも編集可能。一行が64KBを越えるファイルも編集できます。(DOSテキストエディタ Vz ではハングアップする) 日本語の入出力に対応している。(日本語モードで起動する必要が有ります) 軽快である。 問題点 ---------------- 英語用フォントの想定で罫線を表現しているので、日本語環境では、罫線が半角カナに成ってしまう。 Undoの機能が無い。 シングルウィンドウである。 フォントについて ---------------- Windows95DOS窓の日本語モードでは、フォントとして APP932.FON が使用されます。 APP932.FONの改造では、APP932.FON の半角カナの部分を、罫線に変更しています。 APP932.FON は複数のサイズのフォントを内蔵しています。 そこで、APP932.FON の改造では、一部のサイズのフォントデータのみを変更するようにします。 体裁(罫線)は壊れますが、別サイズのフォントを選択することで、半角カナを利用することも可能です。 ちなみに、DOSフルスクリーンでは、fontName.FNT が使用されます。8x19dot or 8x16dot ■ カーソル移動コマンド HOME 行頭へ END 行末へ CTRL+HOME ファイルトップへ CTRL+END ファイルエンドへ CTRL+ダイヤモンドカーソル w e r a s d f z x c ■ 編集コマンド CTRL+T word 削除 CTRL+Y 一行 削除 CTRL+N 空行 挿入 CTRL+P コントロールコード入力 CTRL+QN キャラクタコード入力 (0〜255) CTRL+QF 検索 CTRL+QA 置換 F3 次検索 CTRL+KB ブロックの開始位置をセットします CTRL+KK ブロックの終了位置をセットします CTRL+KC ブロックを貼り付けします CTRL+KV ブロックを移動します CTRL+KY ブロックを削除します CTRL+KW ブロックをファイルへ保存します CTRL+KH ブロックの有効/無効 ■ アクションコマンド ALT+V ファイルの現状保存 ALT+D DOS SHELL 起動 ALT+R ファイルの挿入 ALT+O 新規ファイルの編集 ALT+X 編集終了 ■ マーカーコマンド マーカー(栞)をセットするには? CTRL+F1 から CTRL+F10 まで 10種類のマーカーを利用できます。 マーカー(栞)へ移動するには? ALT+F1 から ALT+F10 まで 10種類のジャンパを利用できます。  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Allegro DOS (DJGPP) game programming library. INDEX DOS Allegro に附属のデモプログラムの実行画面を下記に示します。 Demo Dialog_1 (画面モード GFX_VGA mode 13h) Demo Dialog_2 (画面モード GFX_VGA mode 13h) Demo Main (画面モード GFX_VGA mode 13h) Allegroはアプリケーションではありません。単体では無能です。AllegroはC言語やC++から利用されるグラフィックスライブラリです。 Allegroはマルチプラットフォーム対応です。Windows用のAllegroやLinux用のAllegroなども有ります。 ここでは、このグラフィックスライブラリの使い方として、幾つかの例を記述してます。 アレグロおよびコンパイラのダウンロードはDJGPPのサイトから出来ます。http://www.delorie.com/djgpp/getting.html DJGPPは MS-DOSにおける C/C++ の 32bitプロテクトモードソフトウェアのフリーの開発環境です。 プロテクトモードを利用できるということは、コンベンショナルを越えた、巨大なプログラムでも DOSで実行出来るということです。 描画の基礎として line関数と putpixel関数の使用例を下記に示します。複雑な描画手法も。ここから発展して行きます。 例えば、円を描くには、circle関数が使えますが、circle関数は、内部処理的には、line関数や putpixel関数に等価な下請け処理で達成されています。 なんでも描けるようになる為の基本として line関数と putpixel関数などを理解することが重要です。 Allegro DOS (DJGPP) 目次  ■ line関数で同心円を描画する  ■ circle関数で同心円を描画する  ■ putpixel関数で3Dグラフを描画する  ■ fix関連関数で同心円を描画する  ■ VESA画面ハードコーピーの方法  ■ DJGPP(DOS)開発環境の構築
line関数で同心円を描画する (画面モード GFX_VGA mode 13h) /* * circle_1.c: A test program for the Allegro library graphics routines. * Make DJGPP gcc -O2 -s -o circle_1.exe circle_1.c -lalleg * Make Linux gcc -O2 -s -o circle_1 circle_1.c `allegro-config --libs` */ #include <math.h> #include "allegro.h" void _round(int r, int orgx, int orgy, int c) { int x1, y1, x2, y2, i; double d; x1 = r * cos(0) + orgx; y1 = r * sin(0) + orgy; for (i=1; i<=360; i++) { d = 3.141592 * i / 180.0; x2 = r * cos(d) + orgx; y2 = r * sin(d) + orgy; line(screen, x1, y1, x2, y2, c); x1 = x2; y1 = y2; } } int main() { short i; allegro_init(); install_keyboard(); if (set_gfx_mode(GFX_VESA1, 640, 480, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } set_palette(default_palette); clear_to_color(screen, makecol(0, 0, 0)); acquire_screen(); for (i=1; i<16; i++) { _round(16*(i-1)+15,SCREEN_W/2,SCREEN_H/2,i); } release_screen(); readkey(); return 0; } END_OF_MAIN() コンパイラ依存の定数(円周率など)はリテラルとする。 ちなみに、円周率としては PI とか M_PI が通るコンパイラが普通です。 #include "allegro.h" さえ、記述しておけば、殆ど通ります。 #include <math.h> はAllegroでは不要です。
circle関数で同心円を描画する /* * circle_2.c: A test program for the Allegro library graphics routines. * Make DJGPP gcc -O2 -s -o circle_2.exe circle_2.c -lalleg * Make Linux gcc -O2 -s -o circle_2 circle_2.c `allegro-config --libs` */ #include "allegro.h" int main() { int i; allegro_init(); install_keyboard(); if (set_gfx_mode(GFX_SAFE, 640, 400, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } set_palette(default_palette); clear_to_color(screen, makecol(0, 0, 0)); acquire_screen(); for (i=0; i<16; i++) { circle(screen, SCREEN_W/2,SCREEN_H/2, i*4, i); } release_screen(); readkey(); return 0; } END_OF_MAIN()
putpixel関数で3Dグラフを描画する /* * 3d.c: A test program for the Allegro library graphics routines. * Make DJGPP gcc -O2 -s -o 3d.exe 3d.c -lalleg * Make Linux gcc -O2 -s -o 3d 3d.c `allegro-config --libs` */ #include <math.h> #include <allegro.h> void draw3d(int AX, int WS) { double RD, CX, CY, SX, SY, Sq1, Y; int YMIN[639], YMAX[639], i, Z, X, PX, PY; for (i=0; i<640; i++) { YMIN[i] = 399; YMAX[i] = 0; } RD=3.141592/180.0; CX=cos(AX*RD); CY=cos(-AX*RD); SX=sin(AX*RD); SY=sin(-AX*RD); for (Z=-200; Z<200; Z+=WS) for (X=-200; X<200; X++) { Sq1 = sqrt(X*X+Z*Z)*RD; Y = -AX*(cos(Sq1)+cos(Sq1*3)); PX=(int)(X*CY+Z*SY+320); PY=(int)(Y*CX+(X*SY-Z*CY)*SX+200); if (PY < YMIN[PX]) { YMIN[PX]=PY; putpixel(screen, PX, PY, 14); } if (PY > YMAX[PX]) { YMAX[PX]=PY; putpixel(screen, PX, PY, 15); } release_screen(); rest(10); // 描画状況を見えるように acquire_screen(); } } int main() { short i; allegro_init(); install_keyboard(); install_timer(); if (set_gfx_mode(GFX_VESA1, 640, 480, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } set_palette(default_palette); for (i=0; i<4; i++) { clear_to_color(screen, makecol(0, 0, 0)); acquire_screen(); draw3d(i*5+30,10); release_screen(); if ((readkey() & 0xFF) == 27) break; } return 0; } END_OF_MAIN()
FIX関連関数で同心円を描画する /* * fixround.c: A test program for the Allegro library graphics routines. * Make DJGPP gcc -O2 -s -o fixround.exe fixround.c -lalleg * Make Linux gcc -O2 -s -o fixround fixround.c `allegro-config --libs` */ #include <allegro.h> void _round(int r, int orgx, int orgy, int c) { int x1, y1, x2, y2, i; fixed fd, n; double d; fd = fixcos(0); d = fixtof(fd); d *= r; d += orgx; x1 = (int)d; fd = fixsin(0); d = fixtof(fd); d *= r; d += orgy; y1 = (int)d; for (i=1; i<=360; i++) { n =itofix(i * 256 / 360); fd = fixcos(n); d = fixtof(fd); d *= r; d += orgx; x2 = (int)d; fd = fixsin(n); d = fixtof(fd); d *= r; d += orgy; y2 = (int)d; line(screen, x1, y1, x2, y2, c); x1 = x2; y1 = y2; } } int main() { int i; allegro_init(); install_keyboard(); if (set_gfx_mode(GFX_VESA1, 640, 480, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } set_palette(default_palette); clear_to_color(screen, makecol(0, 0, 0)); acquire_screen(); for (i=1; i<16; i++) { _round(16*(i-1)+15,SCREEN_W/2,SCREEN_H/2,i); } release_screen(); readkey(); return 0; } END_OF_MAIN() fixed itofix(int x); 整数を固定小数点に変換します。これは、サイズ的には、x * 65536 と同一です。 引数 int x の値域は -32768(0x8000) 〜 32767(0x7fff) です。 Examples using this: ex12bit, ex3buf, ex3d, exblend, excustom, exfixed, exlights, exspline, exsprite, exstars. exstars 固定小数点演算利用のサンプルプログラム (画面モード GFX_VGA mode 13h) Allegro VESA画面ハードコーピー (画面モード GFX_VESA1) Allegro VESA画面ハードコーピーの方法 ------------------------------------ BITMAP *bmp; PALETTE pal; get_palette(pal); bmp = create_sub_bitmap(screen, 0, 0, SCREEN_W, SCREEN_H); save_bitmap("dump.bmp", bmp, pal); destroy_bitmap(bmp); ------------------------------------
DJGPP(DOS)開発環境の構築 DJGPPは WindowsからDOS窓として使えますが、基本的には MS-DOS(+プロテクトモードメモリ)用のものです。 プロテクトモードを利用できるということは、コンベンショナルを越えた、巨大なプログラムでも DOSで実行出来るということです。 最低限、以下のファイルが必要です。(全て、コンパイル済みのバイナリです http://www.delorie.com/djgpp/getting.html) セットアップするには、これら全てを、同じディレクトリに解凍します。後は、AUTOEXEC.BATを編集して、マシンを再起動するだけです。 1,530,778 djdev203.zip DJGPP is 32-bit protected mode software in C/C++ under MS-DOS. 4,146,944 bnu219b.zip Bin utils 2.19 binaries for DJGPP (as ld ar など) 1,738,170 fil41b.zip GNU file utils 4.1 for DJGPP V2 (cp mv ls など) 5,667,116 gcc432b.zip GNU GCC 4.3.2 for DJGPP V2 - compiler C 6,056,760 gpp432b.zip GNU GCC 4.3.2 for DJGPP V2 - compiler C++ 272,798 mak3791b.zip GNU Make 3.79.1 for DJGPP V2 909,136 txi411b.zip GNU Texinfo 4.11 for DJGPP V2 491,270 bsh204br2.zip GNU Bash 2.04r2 for DJGPP V2 AUTOEXEC.BATに DJGPP.ENVの存在する絶対パスを次の様に記述します。 ------------------------------------------------------ SET DJGPP=d:\DJGPP\DJGPP.ENV DJGPPは MS-DOS(+プロテクトモードメモリ)用の開発環境です。ゆえに、WindowsのDLLにアクセスすることは無いので、 生成されるバイナリはスタティックな物になりますので、生成されるバイナリのサイズは巨大です。 しかし、DLL不要の単体で動作可能なプログラムに成ります。 DJGPPから利用可能な Allegroライブラリの最新版は Version 4.2.2 です。 all422a.zip(2,507,264byte) ftp://ftp.delorie.com/pub/djgpp/current/v2tk/allegro/all422a.zip C DJGPP DOS -------------- COMPILER = gcc LINKER = gcc C++ DJGPP DOS -------------- COMPILER = gcc LINKER = gxx  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Allegro Windows (MinGW) game programming library. INDEX Windows Allegroに附属のデモプログラムの実行画面を下記に示します。
DirectX 描画モードなどの選択画面 Prologue プロローグ 前口上、序幕、序言、序章 ゲームの説明画面 (BGM:Midi) シューティングゲーム (BGM:Midi 効果音:Wav) ギフトウェア説明画面 Epilogue エピローグ 納め口上、結びの言葉          英文和訳 (参考 : http://www.ayu.ics.keio.ac.jp/~osawa/allegro/reference.html)                アレグロはギフトウェアです。                                                                                                たくさんの人が協力して作り上げたものです。自由に使うことが出来ます。                     好きな方法で使用・改良・配布・ハックを行って構いません。                           私達に何か見返りを渡す必要もありません。                                                                                          ですが、もしあなたがアレグロを好ましく思ったなら、                              アレグロのコミュニティに対して何か贈物をすることで、私達にお礼を言うことは出来ます。             追加パッケージを書いたり、有用なバグレポートを送ってくれたり、ライブラリの改良をしてくれたりとか。      あるいは、他の人が学べるように、あなたのソースを公開してくれるだけでも十分です。                                                                      もしアレグロのコードの一部を再配布したり、ゲーム作成に使ってくれた場合には、クレジットのどこかで、      アレグロについて述べてくれると素晴らしいです(そうしなきゃダメ、というわけではありません)          この気前の良さを、あなたが台無しにしてしまうことは無いだろうと、私達は信じています。                                                                    宣言:                                                                                                           このソフトは商業的な保証や特定用途への目的・資格・遵守など明示的・暗黙的なものを含めて、           いかなる保証もせず「現状のまま」提供される。                                 著作権保持者または配布者は、このソフトウェアの使用、またはこのソフトウェアを扱ったこと、           それ以外のことによって発生した損害・義務や不法行為に対して一切の責任を負わない。         








上記、デモのメイクファイル (ソースはdemoディレクトリに有ります)
## ---------------------------------------------------
## Allegro_4.2.2 MinGW make file for Demo
## ---------------------------------------------------
COMPILER = gcc
LINKER   = gcc
CFLAGS   = -mno-cygwin -O2 -Wall -I/usr/include/mingw
LFLAGS   = -mno-cygwin  -s -Wall -mwindows -L/lib/mingw
LIBS     = -lalleg
OBJ      = demo.o animsel.o bullet.o dirty.o expl.o star.o aster.o display.o game.o title.o

demo.exe: $(OBJ)
	$(LINKER) $(LFLAGS) $(OBJ) -o $@ $(LIBS)
%.o: %.c
	$(COMPILER) $(CFLAGS) -o $@ -c $<
##----------------------------------------------------
	 タブコード必須

/etc/profile に下記内容を追記する。パスにロングファイル名は使用しないようにします。 i686-pc-mingw32 → I686-P~2
export ALLEGRO_USE_CYGWIN=1
export MINGDIR=/usr/I686-P~2
export CPATH=/usr/include/mingw
export LIBRARY_PATH=/lib/mingw

上記、/etc/profile の設定によって -I/usr/include/mingw と -L/lib/mingw の Makefileへの記述は不要に成ります。
また、Windows関連のライブラリは、指定する必要はありません。自動的に必要なものをリンクしてくれます。
注意 : 上記、/etc/profile の設定によって、MinGWに対応していないアプリケーション(FDcloneなど)のインストールは出来なく成ります。

















Allegro Windows (MinGW) Cygwin上の MinGWを使って、Windowsバージョンの Allegroアプリケーションを作成する手順を解説します。 If you are compiling with Cygwin, the compiler option '-mno-cygwin' must be added, both at compile-time and at link-time. MinGW (Minimalistic GNU for Windows)は Windows用のコンパイラ環境です。http://ja.wikipedia.org/wiki/MinGW Cygwinの UNIXエミュレーションサポートを外して Windows標準の msvcrt.dllで動くようにしたものです。 GNU GCC 及び binutilsプロジェクトに基づくコンパイラシステムです。この拡張は現在の Cygwinに取り込まれています。 このコンパイラシステムは Win32プラットフォーム上で実行可能なように、コードをコンパイル及びリンクします。 Allegroはアプリケーションではありません。単体では無能です。C言語やC++から利用されるライブラリです。 Allegroはマルチメディアライブラリです。音と映像を操作できます。Windows用の Allegroは DirectXを必要とします。 Apple Quicktime アニメーションファイル(拡張子 FLI, FLC)を再生できます。 Allegroはマルチプラットフォーム対応です。DOS用のAllegroや Linux用のAllegroなども有ります。 http://www.talula.demon.co.uk/allegro/wip.html ドメイン名 uk ですから、Allegroはイギリス製ですね。 Allegro Windows (MinGW) 目次
Cygwin(MinGW)開発環境の構築 
Cygwin(MinGW) Allegro コンパイルテスト最小サンプルプログラム
WinMainでメッセージボックスを記述する例 (コンパイラLCC32) 
C言語復習日付と時刻をメッセージボックスで出力する
トラブルの原因 MSVCRT.DLLのバージョン違い 
ビデオモード 
FAQサウンド出力の問題、日本語フォントの使用、日本語ファイル名の使用
C++ サンプルソース 
Wait描画状況を見えるように
日本語フォントの使用例ipam.TTF
Alfontライブラリの使用方法 
Javaの場合の文字コード変換例 
Allegroでの日本語の利用を簡単にするMy sjis_code to uni_code(utf16LE)
Allegro本体のコンパイル手順Allegro for FreeBASIC.
FIX電卓システムアイコンを変更する方法
GrabberAllegroのリソースエディタ
LZSS-CompressorAllegroのリソースは圧縮アルゴリズム LZSSで圧縮されています
メニュー付きウィンドウを作成する例Windows API (SDK)プログラミング、システムアイコンを変更する方法
Allegroでスクリーンセーバーを作成するWindows API (SDK)プログラミング、日本語フォントを利用する方法
タイマー割り込みの使用例日本語フォントの使用、ファイル操作の例
Allegroバージョン情報 
Allegroで OpenGLを利用する例 (Allegro Version 4.3.10) 

















Cygwin(MinGW)開発環境の構築 Windowsバイナリを生成するには、Cygwin(MinGW gcc-3.4.4)などの環境が必要になります。 ちなみに、私のコンパイル環境は、Cygwin 1.5.18(2005-07-02) + mingw-runtime-3.8(2005-08-13) です。 http://cygwin.com/ http://ja.wikipedia.org/wiki/MinGW さらに、下記の 2つのパッケージが必要です。これらは、コンパイル済みのバイナリです。 (1) allegro-mingw-4.2.2.zip (2) dx70_mgw.zip または dx80_mgw.zip (1) http://jaist.dl.sourceforge.net/sourceforge/alleg/allegro-mingw-4.2.2.zip The allegro-bin package at SourceForge contains several binary distributions of Allegro for Windows. You only need it if you have a compiler unable to produce the Allegro DLL (like Borland). (2) http://alleg.sourceforge.net/files/dx70_mgw.zip This file contains the minimal version of the DirectX 7 SDK for MinGW. Only for Windows. allegro-mingw-4.2.2/lib ----------------------------------------- 1,031,278 07-07-22 18:51 liballeg.a 1,205,254 07-07-22 18:44 liballeg_s.a ---- Statically linked Allegro libraries. 1,030,908 07-07-22 18:50 liballp.a 1,228,616 07-07-22 18:42 liballp_s.a 1,030,908 07-07-22 18:49 liballd.a 13,572,594 07-07-22 18:40 liballd_s.a 121,928 07-07-22 18:51 libaldat.a allegro-mingw-4.2.2/bin ----------------------------------------- 1,043,258 07-07-22 18:50 allp42.dll ---- プロファイル 568,198 07-07-22 18:51 alleg42.dll ---- リリース (意外にコンパクト) 2,388,304 07-07-22 18:49 alld42.dll ---- デバッグ allegro-mingw-4.2.2/include ----------------------------------------- 1,989 05-04-25 8:26 allegro.h 3,826 02-09-14 8:18 winalleg.h allegro-mingw-4.2.2/include/allegro ----------------------------------------- 省略 dx70_mgw/lib ----------------------------------------- 7,306 00-07-29 10:52 libd3dim.a 19,178 00-07-29 10:52 libd3drm.a 2,322 00-07-29 10:52 libd3dxof.a 24,572 00-07-29 10:52 libddraw.a 4,024 00-07-29 10:52 libdinput.a 6,588 00-07-29 10:52 libdplayx.a 14,396 00-07-29 10:52 libdsetup.a 6,714 00-07-29 10:52 libdsound.a 41,340 00-07-29 10:52 libdxguid.a dx70_mgw/include ----------------------------------------- 省略 Allegroヘッダーファイルの配置 /usr/include/mingw Allegroライブラリの配置 /lib/mingw /etc/profile に下記内容を追記する。パスにロングファイル名は使用しないようにします。 i686-pc-mingw32 → I686-P~2 export ALLEGRO_USE_CYGWIN=1 export MINGDIR=/usr/I686-P~2 export CPATH=/usr/include/mingw export LIBRARY_PATH=/lib/mingw 注意 : 上記、/etc/profile の設定によって、MinGWに対応していないアプリケーション(FDcloneなど)のインストールは出来なく成ります。 CygWin版のアプリケーション(FDcloneなど)をコンパイルする場合は、一時的に /etc/profile を無効にする必要があります。
Cygwin(MinGW) Allegro コンパイルテスト 下記、Windows Allegro 最小プログラムソースにて、コンパイルと実行ファイルの起動が可能か?チェックしてください。 コンパイル環境 Cygwin(MinGW)が正しく構築されているならば、hello.cmakefile から、実行可能ファイルが生成されます。 hello.c と makefile を準備したら、シェルに makeと入力するとコンパイルが開始されます。 // Allegro_4.2.2 MinGW MessageBox hello.c #include <allegro.h> int main() //------------------------------ メイン関数の返り値はint 引数は無し { allegro_init(); //---------------------- アレグロ利用開始 allegro_message("Hello, World!"); //---- Windowsメッセージボックスを画面に表示する return 0; //---------------------------- メイン関数の返り値として、正常終了ゼロを返すようにする } END_OF_MAIN() //--------------------------- マルチプラットフォームOS識別用 makefile ## --------------------------------------------------- ## Allegro_4.2.2 MinGW make file for MessageBox Hello ## --------------------------------------------------- NAME = hello COMPILER = gcc LINKER = gcc CFLAGS = -mno-cygwin -O2 -Wall LFLAGS = -mno-cygwin -s -Wall -mwindows -L/lib/mingw LIBS = -lalleg OUT = $(NAME).exe OBJ = $(NAME).o $(OUT): $(OBJ) $(LINKER) $(LFLAGS) -o $@ $(OBJ) $(LIBS) %.o: %.c $(COMPILER) $(CFLAGS) -o $@ -c $< ##---------------------------------------------------- これでもOK ## --------------------------------------------------- ## Allegro_4.2.2 MinGW make file for MessageBox Hello ## --------------------------------------------------- dummy: gcc -mno-cygwin -O2 -s -Wall -mwindows -L/lib/mingw -o hello.exe hello.c ## --------------------------------------------------- 上記、『 Windowsメッセージボックスを画面に表示する 』を LCC32コンパイラ WinMainで記述する例を参考として示しておきます。 // LCC32 Hello msg_box.c #include <windows.h> int WINAPI WinMain(HINSTANCE ghInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello, World!", "Windows MessageBox", MB_OK); return 0; } MAKEFILE ## --------------------------------------------------- ## LCC32 make file for Hello MessageBox ## --------------------------------------------------- NAME = msg_box COMPILER = d:\lcc\bin\lcc LINKER = d:\lcc\bin\lcclnk CFLAGS = -Id:\lcc\include LFLAGS = -s -subsystem windows LIBS = TARGET = $(NAME).exe OBJS = $(NAME).obj $(TARGET) : $(OBJS) $(LINKER) $(LFLAGS) -o $@ $(OBJS) $(LIBS) %.obj: %.c $(COMPILER) $(CFLAGS) -o $@ -c $< ##---------------------------------------------------- d:\lcc\bin\make -fMAKEFILE
C言語復習 日付と時刻をメッセージボックスで出力する (短い形式の英語曜名 Sun, Mon, Tue, Wed, Thu, Fri, Sat) // Allegro Hello datetime.c #include <allegro.h> char strBF[] = "****-**-**(*********) **:**:**"; int getTimeStr(void) { time_t longtime; struct tm *nowtime; time(&longtime); nowtime = localtime(&longtime); strftime(strBF, strlen(strBF), "%Y-%m-%d(%a) %H:%M:%S", nowtime); return 0; } int main() { allegro_init(); set_window_title("Allegro Hello, World!"); getTimeStr(); allegro_message("%s", strBF); return 0; } END_OF_MAIN() strftimeでの書式指定は規定のものに限定されます。 %a は、短い形式の英語曜名 Sun, Mon, Tue, Wed, Thu, Fri, Sat を返します。 %A は、長い形式の英語曜名 Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday を返します。 後述してありますが、sprintfには、time系の書式指定はありませんが、出力表現の自由度は高く、 Sun-day, Mon-day, Tues-day, Wednes-day, Thurs-day, Fri-day, Satur-day などと出力することも可能です。 参考:Microsoft Foundation Classes 4.1 help 次の表では,strftime の書式文字列の,ANSI で定義された書式指定子を説明します。 書式指定子 置き換え後 -------------------------- %% 文字 % %a 曜日の省略形 %A 正式の曜日名 (長い形式) %b 月の省略形 %B 正式な月名 (長い形式) %c 日付と時刻 %d 2 桁で表すその月内の日付(01〜31) %H 2 桁で表す時(00〜23) %I 2 桁で表す時(01〜12) %j 3 桁で表すその年内の通し日数(001〜366) %m 10 進数 2 桁の月(01〜12) %M 2 桁の分(00〜59) %p AM または PM %S 2 桁の秒(00〜59) %U 日曜を週の 1 日目として年初から数えた 2 桁の週番号(00〜53) %w 0 を日曜日とした曜日(0〜6) %W 月曜を週の 1 日目として年初から数えた 2 桁の週番号(00〜53) %x 日付 %X 時刻 %y 世紀を表す最初の 2 桁を除いた 2 桁の西暦年(00〜99) %Y 世紀を表す最初の 2 桁を付けた西暦年 %Z 時間帯名(時間帯がなければ文字は入らない) -------------------------- 日付と時刻をメッセージボックスで出力する (長い形式の英語曜名 Sun-day, Mon-day, Tues-day, Wednes-day, Thurs-day, Fri-day, Satur-day) // Allegro Hello datetime2.c #include <allegro.h> #include <stdio.h> //sprintf char strBF[256]; int getTimeStr(void) { static char *weekday[] ={ "Sun-day", "Mon-day", "Tues-day", "Wednes-day", "Thurs-day", "Fri-day", "Satur-day" }; char *strFORM = "%4d-%02d-%02d(%s) %02d:%02d:%2d"; time_t longtime; struct tm *nowtime; time(&longtime); nowtime = localtime(&longtime); sprintf(strBF, strFORM, nowtime->tm_year + 1900, nowtime->tm_mon + 1, nowtime->tm_mday, weekday[nowtime->tm_wday], nowtime->tm_hour, nowtime->tm_min, nowtime->tm_sec); return 0; } int main() { allegro_init(); set_window_title("Allegro Hello, World!"); getTimeStr(); allegro_message("%s", strBF); return 0; } END_OF_MAIN() 記憶クラス static 静的変数 コンパイル過程においてのみ解釈され、不定長文字列をポイター配列に保持しています。 // test_quicksort.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int sort_function( const void *a, const void *b) { return( strcmp((char *)a,(char *)b) ); } int main(void) { int x[256], left=0, right=255, i; srand((unsigned)(time(NULL)/2)); for (i=0; i<256; i++) x[i]=rand()%256; qsort((void *)x, right-left+1, sizeof(int), sort_function); for (i=0; i<256; i++) printf("%d ", x[i]); return 0; }
msvcrtのバージョン違いは、トラブルの原因に成り易い。 266,293 98-00-00 18:17 msvcrt.dll 6.0.8337.0 ---- jdk1.2.2 266,293 99-11-11 0:00 msvcrt.dll 6.0.8397.0 ---- ie5.5 278,581 00-07-14 23:00 msvcrt.dll 6.0.8797.0 ---- python23 290,869 02-07-23 4:05 msvcrt.dll 6.1.9359.0 Windows95sp2+ie5.5 msvcrtのダンプ D:\LCC\BIN\pedump c\window\system\msvcrt.dll > mavcrt.dmp
abort abs acos asctime asin atan atan2 atexit atof atoi atol bsearch calloc ceil clearerr clock cos cosh ctime difftime div exit exp fabs fclose feof ferror fflush fgetc fgetpos fgets fgetwc fgetws floor fmod fopen fprintf fputc fputs fputwc fputws fread free freopen frexp fscanf fseek fsetpos ftell fwprintf fwrite fwscanf getc getchar getenv gets getwc getwchar gmtime is_wctype isalnum isalpha iscntrl isdigit isgraph isleadbyte islower isprint ispunct isspace isupper iswalnum iswalpha iswascii iswcntrl iswctype iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper iswxdigit isxdigit labs ldexp ldiv localeconv localtime log log10 longjmp malloc mblen mbstowcs mbtowc memchr memcmp memcpy memmove memset mktime modf perror pow printf putc putchar puts putwc putwchar qsort raise rand realloc remove rename rewind scanf setbuf setlocale setvbuf signal sin sinh sprintf sqrt srand sscanf strcat strchr strcmp strcoll strcpy strcspn strerror strftime strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtod strtok strtol strtoul strxfrm swprintf swscanf system tan tanh time tmpfile tmpnam tolower toupper towlower towupper ungetc ungetwc vfprintf vfwprintf vprintf vsprintf vswprintf vwprintf wcscat wcschr wcscmp wcscoll wcscpy wcscspn wcsftime wcslen wcsncat wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcsstr wcstod wcstok wcstol wcstombs wcstoul wcsxfrm wctomb wprintf wscanf









ビデオモード set_gfx_mode(int card, int w, int h, int v_w, int v_h); The Windows library supports the following card parameters for the set_gfx_mode() function. ------------------------------------------------------------------------------------------- GFX_TEXT GFX_AUTODETECT GFX_AUTODETECT_FULLSCREEN GFX_AUTODETECT_WINDOWED GFX_SAFE ------------------------- 以降 WINDOWS専用 GFX_DIRECTX GFX_DIRECTX_ACCEL フルスクリーンモード GFX_DIRECTX_SOFT フルスクリーンモード GFX_DIRECTX_SAFE フルスクリーンモード GFX_DIRECTX_WIN ------------------------- 以降 addon AllegroGL専用 (Allegro version 4.3.10以降) GFX_OPENGL GFX_OPENGL_FULLSCREEN GFX_OPENGL_WINDOWED The DOS library supports the following card parameters for the set_gfx_mode() function. --------------------------------------------------------------------------------------- GFX_TEXT GFX_AUTODETECT GFX_AUTODETECT_FULLSCREEN GFX_AUTODETECT_WINDOWED 存在するが、DOSでは利用不可 GFX_SAFE ------------------------- 以降 DOS専用 GFX_VGA GFX_MODEX GFX_VESA1 GFX_VESA2B GFX_VESA2L GFX_VESA3 GFX_VBEAF GFX_XTENDED
FAQ サウンド出力の問題は Windowsバージョンの Allegroで解決します。 DOSバージョンでの Allegroのサウンド出力には問題がありました。 私の環境では、Midiは問題無く再生されましたが Wavの再生音が変でした。 Windowsバージョンの Allegroでは、サウンド関連に問題は有りませんでした。 日本語フォントの使用は alfont で解決します。 alfont_1.9.1.zip (1.3MB) ただし、表示可能なのはクライアント領域のみです。タイトルバーに漢字を表示させることなどは出来ません。 http://www.helixsoft.nl/project_page.php?file_name=alfont.proj 日本語を含むファイル名は、Allegro-4.2.2(2007-07-22) では、上手く取り扱えません。最新版 Allegro-4.9.8(2009-02-09)ならば上手く行くかもしれません? 例えば、C:\WINDOWS\花見.bmp     C:\\WINDOWS\\花見.bmp ---- NG     C:\\WINDOWS\\\xE8\x8A\xB1\xE8\xA6\x8B.bmp ---- NG UTF8
C++ サンプルソース 注意 : コンパイル完了後、実行ファイルの起動には、画像ファイル mysha.pcx が必要です。 (画像のサイズは 1024x768 より小さい物であることを想定しています) /* * /usr/local/src/allegro422/tests/cpptest.cpp * * Allegro * A simple C++ test. * By Henrik Stokseth. * See readme.txt for copyright information. */ #include <stdlib.h> #include <time.h> #include "allegro.h" #define RODENTS 4 //------------------------ #define PICT "./mysha.pcx" //------------------------ // NG ---- C:\\WINDOWS\\花見.bmp // NG ---- C:\\WINDOWS\\\xE8\x8A\xB1\xE8\xA6\x8B.bmp void *operator new(size_t size) { return malloc(size); } void operator delete(void *ptr) { if (ptr) free (ptr); } class rodent { public: rodent(BITMAP *bmp); void move(); void draw(BITMAP *bmp); private: int x, y; int delta_x, delta_y; BITMAP *sprite; }; rodent::rodent(BITMAP *bmp) { x = rand() % (SCREEN_W-bmp->w); y = rand() % (SCREEN_H-bmp->h); do { delta_x = (rand() % 11) - 5; } while(!delta_x); do { delta_y = (rand() % 11) - 5; } while(!delta_y); sprite = bmp; } void rodent::move() { if((x+sprite->w+delta_x >= SCREEN_W) || (x+delta_x < 0)) delta_x = -delta_x; if((y+sprite->h+delta_y >= SCREEN_H) || (y+delta_y < 0)) delta_y = -delta_y; x += delta_x; y += delta_y; } void rodent::draw(BITMAP *bmp) { draw_sprite(bmp, sprite, x, y); } volatile int counter = 0; void my_timer_handler() { counter++; } END_OF_FUNCTION(my_timer_handler) class world { public: world(); ~world(); void draw(); void logic(); void loop(); private: BITMAP *dbuffer; BITMAP *mouse_sprite; int active; rodent *mouse[RODENTS]; }; world::world() { PALETTE pal; active = TRUE; dbuffer = create_bitmap(SCREEN_W, SCREEN_H); set_uformat(U_UTF8); // xaiax // mouse_sprite = load_bitmap("C:\\WINDOWS\\\xE8\x8A\xB1\xE8\xA6\x8B.bmp", pal); // NG mouse_sprite = load_bitmap(PICT, pal); if (!mouse_sprite) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error loading bitmap\n%s\n", allegro_error); exit(1); } set_palette(pal); for(int what_mouse=0; what_mouse < RODENTS; what_mouse++) mouse[what_mouse] = new rodent(mouse_sprite); } world::~world() { destroy_bitmap(dbuffer); destroy_bitmap(mouse_sprite); for(int what_mouse=0; what_mouse < RODENTS; what_mouse++) delete mouse[what_mouse]; } void world::draw() { clear_bitmap(dbuffer); for(int what_mouse=0; what_mouse < RODENTS; what_mouse++) mouse[what_mouse]->draw(dbuffer); blit(dbuffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); } void world::logic() { if(key[KEY_ESC]) active = FALSE; for(int what_mouse=0; what_mouse < RODENTS; what_mouse++) mouse[what_mouse]->move(); } void world::loop() { install_int_ex(my_timer_handler, BPS_TO_TIMER(10)); while(active) { while(counter > 0) { counter--; logic(); } draw(); } remove_int(my_timer_handler); } int main() { allegro_init(); install_keyboard(); install_timer(); srand(time(NULL)); LOCK_VARIABLE(counter); LOCK_FUNCTION(my_timer_handler); if (set_gfx_mode(GFX_AUTODETECT, 1024, 768, 0, 0) != 0) { // WIN // if (set_gfx_mode(GFX_VESA1, 1024, 768, 0, 0) != 0) { // DOS set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error setting graphics mode\n%s\n", allegro_error); return 1; } world *game = new world(); game->loop(); delete game; return 0; } END_OF_MAIN() C MinGW WIN -------------- COMPILER = gcc LINKER = gcc C++ MinGW WIN -------------- COMPILER = g++ または gcc どちらでも通ります。 LINKER = g++ または gcc どちらでも通ります。
My test program default_palette == IBM BIOS palette set_palette(default_palette) == IBM BIOS palette








/*
 *  3d.c: A test program for the Allegro library graphics routines.
 */

#include <math.h>
#include <allegro.h>

void draw3d(int AX, int WS, int DM) {
  double RD, CX, CY, SX, SY, Sq1, Y;
  int YMIN[639], YMAX[639], i, Z, X, PX, PY;

  for (i=0; i<640; i++) {
     YMIN[i] = 399;
     YMAX[i] = 0;
  }
  RD=3.141592/180.0;
  CX=cos(AX*RD);
  CY=cos(-AX*RD);
  SX=sin(AX*RD);
  SY=sin(-AX*RD);

  for (Z=-200; Z<200; Z+=WS)
     for (X=-200; X<200; X++) {
        Sq1 = sqrt(X*X+Z*Z)*RD;
        Y = -AX*(cos(Sq1)+cos(Sq1*3));
        PX=(int)(X*CY+Z*SY+320);
        PY=(int)(Y*CX+(X*SY-Z*CY)*SX+200);

        if (PY < YMIN[PX]) {
           YMIN[PX]=PY;
           putpixel(screen, PX, PY, 14);
        }

        if (PY > YMAX[PX]) {
           YMAX[PX]=PY;
           putpixel(screen, PX, PY, 15);
        }

        if (DM > 2) {
           release_screen(); // 重要 タイマー処理を行う前に、スクリーン処理は開放する事
           rest(0);
           acquire_screen();
        }
     }
}


int main() {
   short i=0, j;
   allegro_init();
   install_keyboard();
   install_timer();

   if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) {
      set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
      allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
      return 1;
   }
   set_palette(default_palette); // IBM BIOS palette

   do {
      poll_keyboard();
      clear_to_color(screen, makecol(0, 0, 0));
      acquire_screen();
      for (j=0; j<16; j++) circlefill(screen, j*20+180, 440, 8, j);
      for (j=0; j<16; j++)     circle(screen, j*20+180, 440, 8, 7);
      textprintf_ex(screen, font, 8, SCREEN_H/32, makecol(255,0,0), 0, "parameter:%-4d", i*5+30);
      draw3d(i*5+30,10,i);
      textprintf_ex(screen, font, 128, SCREEN_H/32, makecol(255,255,0), 0, "Hit! Any Key.");
      i++;
      release_screen(); // 重要 キー入力処理を行う前に、スクリーン処理は開放する事
      readkey();
   } while ((!key[KEY_ESC]) && (!(i>3)));
   return 0;
}
END_OF_MAIN()

















日本語フォントの使用例 (ipam.TTF) 上側2段は標準表示。下側2段はアンチエイリアス表示です。違いが解かりますか? 表示させる文字列は、UTF8文字セットで指定しています。(UTF16なども利用可能です) JIS X 0213-2004準拠 IPAfont TTF (約16MB) http://ossipedia.ipa.go.jp/ipafont/








/*
 *  examples.c: A test program for the Allegro library alfont.
 */

#include <allegro.h>
#include <alfont.h>

// フォント指定
#define TTF_FONTNAME    "C:\\WINDOWS\\FONTS\\ipam.TTF"

// UTF8 文字列指定 (標準表示モードとアンチエイリアス表示モード)
// 文字列 「春夏秋冬」と「JISX0213絵文字」の定義
#define SAMPLE_TEXT     "\xE6\x98\xA5\xE5\xA4\x8F\xE7\xA7\x8B\xE5\x86\xAC\x00"
#define SAMPLE_TEXT2    "\xe2\x98\x82\xe2\x98\x80\xe2\x98\x81\xe2\x98\x83\x00"
#define SAMPLE_TEXT_AA  "\xE6\x98\xA5\xE5\xA4\x8F\xE7\xA7\x8B\xE5\x86\xAC\x00"
#define SAMPLE_TEXT2_AA "\xe2\x98\x82\xe2\x98\x80\xe2\x98\x81\xe2\x98\x83\x00"

int main(int argc, char *argv[]) {
  ALFONT_FONT *user_font;

  allegro_init();
  set_window_title("AllegroFont - example");

  set_color_depth(8);
  if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) {
    set_color_depth(15);
    if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0) {
      set_color_depth(16);
      if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0) {
        set_color_depth(24);
        if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0) {
          allegro_message("Impossible to set up the gfx mode");
          allegro_exit();
          return 1;
        }
      }
    }
  }
  install_keyboard();

  if (alfont_init() != ALFONT_OK) {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("Error while initializing alfont");
    allegro_exit();
    return 1;
  }
  user_font = alfont_load_font(TTF_FONTNAME);

  if (user_font == NULL) {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("Cannot load the font");
    alfont_exit();
    allegro_exit();
    return 1;
  }
  alfont_set_font_size(user_font, 64);
     alfont_textout_centre(screen, user_font,     SAMPLE_TEXT, SCREEN_W/2, SCREEN_H*1/6, makecol(255,255,255));
     alfont_textout_centre(screen, user_font,    SAMPLE_TEXT2, SCREEN_W/2, SCREEN_H*2/6, makecol(255,255,255));
  alfont_textout_centre_aa(screen, user_font,  SAMPLE_TEXT_AA, SCREEN_W/2, SCREEN_H*3/6, makecol(255,255,255));
  alfont_textout_centre_aa(screen, user_font, SAMPLE_TEXT2_AA, SCREEN_W/2, SCREEN_H*4/6, makecol(255,255,255));

  readkey();

  alfont_destroy_font(user_font);
  alfont_exit();
  allegro_exit();
  return 0;
}
END_OF_MAIN()


## ---------------------------------------------------
## AllegroFont_1.9.1 MinGW Make file for examples.c
## ---------------------------------------------------
CC     = gcc
CFLAGS = -mno-cygwin -O2 -Wall -fomit-frame-pointer -finline-functions -ffast-math
LFLAGS = -mno-cygwin  -s -Wall -mwindows -L/lib/mingw
LIBS   = -lalfont -lalleg

OBJDIR = .
OBJ    = $(OBJDIR)/example.o
OUT    = $(OBJDIR)/example.exe

$(OUT): $(OBJ)
	$(CC) $(LFLAGS) $(OBJ) -o $@ $(LIBS)
%.o: %.c
	$(CC) $(CFLAGS) -o $(OBJDIR)/$@ -c $<
clean:
	rm -f $(OBJ) $(OUT)
##----------------------------------------------------









Alfontの使用方法 Allegroで日本語を利用するには、Alfont(http://www.helixsoft.nl/project_page.php?file_name=alfont.proj)が必要に成ります。 Alfontの制限 Alfontで表示可能なのはクライアント領域のみです。タイトルバーに漢字を表示させることなどは出来ません。 日本語はユニコードで記述する必要が有ります。Windowsの場合、普通は、シフトJISからユニコードに変換することに成ります。 文字コード変換のヒントとしてJavaでの文字コード変換ソースを、後述してあります。 シフトJIS ---- 春 夏 秋 冬 ユニコード  ---- 2566 0F59 CB79 AC51 (UTF16LE) 1バイト単位にする ----------------- 25 66 0F 59 CB 79 AC 51 エスケープ文字列にする ---------------------- \x25\x66\x0F\x59\xCB\x79\xAC\x51 文字列終端サインを追記する -------------------------- \x25\x66\x0F\x59\xCB\x79\xAC\x51\x00\x00 実際の利用例 ------------ ALFONT_FONT *user_font; user_font = alfont_load_font("C:\\WINDOWS\\FONTS\\ipam.TTF"); set_uformat(U_UNICODE); alfont_textout_centre(screen, user_font, "\x25\x66\x0F\x59\xCB\x79\xAC\x51\x00\x00", SCREEN_W/2, SCREEN_H/2, makecol(255,255,255)); Allegroでの文字コードのエンコーディングはデフォルトでUTF8です。 その他の文字コードを使用する場合は、set_uformat() を呼ぶ必要が有ります。 WindowsバージョンのAllegroでは、次の様に記述すると、UTF16LE が有効に成ります。 set_uformat(U_UNICODE); 日本語を表現するには、UTF8は非効率です。漢字1文字を表現するのに3バイト必要です。UTF16ならば、2バイトで済みます。 UTF8は日英混在の文字列には有利です。例えば、C:\WINDOWS\花見.bmp など漢字を含むファイル名などには、UTF8は有利です。 set_uformat ----------- void set_uformat(int type); Sets the current text encoding format. This will affect all parts of Allegro, wherever you see a function that returns a char *, or takes a char * as a parameter. `type' should be one of these values: U_ASCII - fixed size, 8-bit ASCII characters U_ASCII_CP - alternative 8-bit codepage (see set_ucodepage()) U_UNICODE - fixed size, 16-bit Unicode characters U_UTF8 - variable size, UTF-8 format Unicode characters Although you can change the text format on the fly, this is not a good idea. Many strings, for example the names of your hardware drivers and any language translations, are loaded when you call allegro_init(), so if you change the encoding format after this, they will be in the wrong format, and things will not work properly. Generally you should only call set_uformat() once, before allegro_init(), and then leave it on the same setting for the duration of your program.
JAVA 文字コード変換 ConvertUnicode.java の呼出し方法 シフトJISで記述されたファイル test.sjs をユニコード(UTF16LE)に変換して test.uni.res に出力する例 // ======================================================================================== // Sjis2uni_TestConvertUnicode.java // public class Sjis2uni_TestConvertUnicode { static public void main(String s[]) { ConvertUnicode cu = new ConvertUnicode(); cu.sj2uni("test.sjs", "test.uni.res", false); // true == ビッグエンディアン } } // ======================================================================================== ユニコード(UTF16LE)で記述されたファイル test.uni をシフトJISに変換して test.sjs.res に出力する例 // ======================================================================================== // Uni2sjis_TestConvertUnicode.java // public class Uni2sjis_TestConvertUnicode { static public void main(String s[]) { ConvertUnicode cu = new ConvertUnicode(); cu.uni2sj("test.uni", "test.sjs.res", false); // true == ビッグエンディアン } } // ======================================================================================== 一文字単位で参照する例 // ======================================================================================== // Test_CnvUni.java // public class Test_CnvUni { static public void main(String s[]) { ConvertUnicode cu = new ConvertUnicode(); System.out.println(Integer.toString(cu.k2sj(16, 1), 16)); System.out.println(Integer.toString(cu.k2sj(1602), 16)); System.out.println(Integer.toString(cu.sj2k(0x88, 0x9f), 10)); System.out.println(Integer.toString(cu.sj2k(0x88a0), 10)); System.out.print(cu.getUniKtnOf(16,1) + " KTN=1601 UNI=\\u"); System.out.println(Integer.toString((int)cu.getUniKtnOf(16,1), 16)); System.out.print(cu.getUniKtnOf(1602) + " KTN=1602 UNI=\\u"); System.out.println(Integer.toString((int)cu.getUniKtnOf(1602), 16)); System.out.println(cu.getUniKtnOf(cu.getKtnUniOf(0x4e9c))); System.out.println(cu.getUniKtnOf(cu.getKtnUniOf(0x5516))); } } // ======================================================================================== 以上
 Allegroでの日本語の利用を簡単にする。 MAKEFILE 545 09-05-15 19:42 makefile SJIS2UNI C 3,935 09-05-16 1:14 sjis2uni.c UNI DAT 22,560 09-05-15 7:35 UNI.DAT ---------区点コード全領域 120*94==11280文字, 2*11280==22560バイト過不足なし。 DEFAULT TTF 4,940,912 08-01-18 17:35 default.ttf SJIS2UNI O 4,566 09-05-16 1:15 sjis2uni.o SJIS2UNI EXE 329,216 09-05-16 1:15 sjis2uni.exe 処理の流れを簡単に説明すると、次の様に成ります。 // ワーク char *us, strBF[STRSIZE*2+2]; // UNI.DATを参照して、ユニコード(UTF16LE)とシフトJISの対応表を生成する make_sjis2uni_tbl(); // 表示させたい日本語文字列 (半角文字混在不可 ) us = "春夏秋冬"; // シフトJISコードをユニコード(UTF16LE)に変換した結果を配列 strBF に返します。 sjis2uni(us, strBF); // 文字セットの解釈をユニコード(UTF16LE)にする set_uformat(U_UNICODE); // alFont フォントのロード user_font = alfont_load_font("default.ttf"); // alFont フォントのサイズをセットする alfont_set_font_size(user_font, TTF_FONTSIZE); // alFont 表示 alfont_textout_ex(screen, user_font, strBF, 0, 0, 1, -1); /* * Allegro sjis2uni(c)xaiax */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <allegro.h> #include <alfont.h> #define DAT_FILENAME "UNI.DAT" #define TTF_FONTNAME "default.ttf" #define TTF_FONTSIZE 48 #define KU_MAX 120 #define TEN_MAX 94 #define STRSIZE 1024 unsigned short uni_tbl[KU_MAX*TEN_MAX+1]; struct { char * m_moji; int s_size; } k_kandata[]={{"",6},{"",5},{"",4},{"",3}}; int make_sjis2uni_tbl(void) { FILE *stream; unsigned char buf[3]; int i, j; if ((stream = fopen(DAT_FILENAME, "rb")) == NULL) { fprintf(stderr, "%sを開けません。\n", DAT_FILENAME); return 1; } for(i=0; i<KU_MAX; i++) for(j=0; j<TEN_MAX; j++) { fread(buf, 2, 1, stream); uni_tbl[i*TEN_MAX+j+1] = buf[1] * 256 + buf[0]; } fclose(stream); return 0; } unsigned short conv_sjis2uni(char *us) { unsigned short a, b, c; a = *us++; b = a &= 255; a = *us; c = a &= 255; b -= (b>159)?64:0; b -= 129; c -= (c>126)?1:0; c -= 64; b *= 2; b += (c>93)?1:0; c = c % 94; if (b < KU_MAX) return uni_tbl[b * TEN_MAX + c + 1]; else return uni_tbl[0]; } int sjis2uni(char *us, char *p) { char resBuffer[5], uss[3]; unsigned short a, b, c; int i, j = strlen(us); if (j > STRSIZE*2) return 1; for(i=1; i<j; i += 2) { a = *us++; a %= 256; uss[0] = (char)a; a = *us++; a %= 256; uss[1] = (char)a; uss[2] = '\0'; a = conv_sjis2uni(uss); b = a % 256; c = a / 256; sprintf(resBuffer, "%c", (char)b); strcpy(p, resBuffer); p++; sprintf(resBuffer, "%c", (char)c); strcpy(p, resBuffer); p++; } *(p+0)='\0'; *(p+1)='\0'; return 0; } int main(void) { char *us, strBF[STRSIZE*2+2]; ALFONT_FONT *user_font; unsigned short a, bgc; if (alfont_init() != ALFONT_OK) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Error while initializing alfont"); allegro_exit(); return 1; } user_font = alfont_load_font(TTF_FONTNAME); if (user_font == NULL) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Cannot load the font"); alfont_exit(); allegro_exit(); return 1; } if (allegro_init() != 0) return 1; if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) { if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n", allegro_error); return 1; } } if (make_sjis2uni_tbl() != 0) return 1; install_keyboard(); install_timer(); set_palette(default_palette); bgc = makecol(0,128,128); clear_to_color(screen, bgc); set_window_title("sjis2uni(c)xaiax"); us = "春夏秋冬"; sjis2uni(us, strBF); set_uformat(U_UNICODE); alfont_set_font_size(user_font, TTF_FONTSIZE); alfont_textout_centre_ex(screen,user_font,strBF,SCREEN_W/2,SCREEN_H/2-TTF_FONTSIZE/2,makecol(255,255,255),bgc); rest(3000); //----------------------------------------------------------------------------- while (!keypressed()) { a = AL_RAND() % 11280; if (a<1000) { alfont_set_font_size(user_font, 16*((AL_RAND()%(k_kandata[a%4].s_size))+1)); us = k_kandata[a%4].m_moji; sjis2uni(us, strBF); alfont_textout_ex(screen,user_font,strBF,AL_RAND()%SCREEN_W,AL_RAND()%SCREEN_H,palette_color[AL_RAND()%16],bgc); } else { alfont_set_font_size(user_font, 16); us = ""; sjis2uni(us, strBF); alfont_textout_ex(screen,user_font,strBF,AL_RAND()%SCREEN_W,AL_RAND()%SCREEN_H,palette_color[14],bgc); } } //----------------------------------------------------------------------------- return 0; } END_OF_MAIN() UNI.DATの構造 UNI.DATは、shift_jis と unicode(utf16LE) の 1対1 対応表です。 区点コード全領域 120*94=11280文字で構成されます。 utf16LEで漢字1文字を表現するには 2バイト必要ですから、全体で 11280*2=22560バイトに成ります。 つまり、UNI.DATのファイルサイズは22560バイトであること。 具体的には、全角空白から始り、リトルエンディアンの配置で線形データと成ります。00 30 01 30 ・・・ No. sjis utf16BE ---------------------- 1 8140   U+3000 2 8141 、 U+3001 3 8142 。 U+3002 4 8143 , U+FF0C 5 8144 . U+FF0E 6 8145 ・ U+30FB 7 8146 : U+FF1A 8 8147 ; U+FF1B 9 8148 ? U+FF1F 10 8149 ! U+FF01 11 814A ゛ U+309B 12 814B ゜ U+309C 13 814C ´ U+00B4 14 814D ` U+FF40 15 814E ¨ U+00A8 16 814F ^ U+FF3E -- 1411 889F 亜 U+4E9C 1412 88A0 唖 U+5516 1413 88A1 娃 U+5A03 1414 88A2 阿 U+963F 1415 88A3 哀 U+54C0 1416 88A4 愛 U+611B 1417 88A5 挨 U+6328 1418 88A6 姶 U+59F6 1419 88A7 逢 U+9022 1420 88A8 葵 U+8475 1421 88A9 茜 U+831C 1422 88AA 穐 U+7A50 1423 88AB 悪 U+60AA 1424 88AC 握 U+63E1 1425 88AD 渥 U+6E25 1426 88AE 旭 U+65ED 1427 88AF 葦 U+8466 1428 88B0 芦 U+82A6 1429 88B1 鯵 U+9BF5 -- 11093 FC40 @ U+9ADC 11094 FC41 A U+9B75 11095 FC42 B U+9B72 11096 FC43 C U+9B8F 11097 FC44 D U+9BB1 11098 FC45 E U+9BBB 11099 FC46 F U+9C00 11100 FC47 G U+9D70 11101 FC48 H U+9D6B 11102 FC49 I U+FA2D 11103 FC4A J U+9E19 11104 FC4B K U+9ED1 11105 FC4C L U+003F 11106 FC4D M U+003F 11107 FC4E N U+003F 11108 FC4F O U+003F -- 11268 FCF0 U+003F 11269 FCF1 U+003F 11270 FCF2 U+003F 11271 FCF3 U+003F 11272 FCF4 U+003F 11273 FCF5 U+003F 11274 FCF6 U+003F 11275 FCF7 U+003F 11276 FCF8 U+003F 11277 FCF9 U+003F 11278 FCFA U+003F 11279 FCFB U+003F 11280 FCFC U+003F
Allegro本体のコンパイル手順 Allegroには、コンパイル済みのバージョン(バイナリ)と、自らがコンパイルしてバイナリを生成する必要があるバージョンが存在します。 例えば、DJGPP版の Allegroライブラリの all422a.zip はコンパイル済みのバイナリで配布されています。 ただし、DJGPP版ですから Windowsバイナリは生成できません。また、MinGW版などは Windowsバイナリを生成しますが、DOSバイナリは生成できません。 バイナリ DJGPP版 Allegroライブラリのコンパイル済みバイナリ all422a.zip (2,507,264byte) ftp://ftp.delorie.com/pub/djgpp/current/v2tk/allegro/all422a.zip バイナリ MinGW版 Allegroライブラリのコンパイル済みバイナリ allegro-mingw-4.2.2.zip (6,531,961byte) http://jaist.dl.sourceforge.net/sourceforge/alleg/allegro-mingw-4.2.2.zip ソース all422.zip (3,879,665byte) Source code for all platforms in DOS/Windows friendly format. http://www.talula.demon.co.uk/allegro/wip.html ここでは、Allegro(all422.zip)自体を、自らでコンパイルして生成する手順を説明します。 コンパイル環境は、Cygwin 1.5.18(2005-07-02) + mingw-runtime-3.8(2005-08-13) とします。 (1) configureを実行する必要は無い。 (2) /etc/profile に下記内容を追記する。パスにロングファイル名は使用しないようにします。 i686-pc-mingw32 → I686-P~2 export ALLEGRO_USE_CYGWIN=1 export MINGDIR=/usr/I686-P~2 export CPATH=/usr/include/mingw export LIBRARY_PATH=/lib/mingw (3) /usr/local/src/allegro422/makefile.mgw の不都合な部分を修正します。 具体的には、-mno-cygwin を追記することになります。 makefile.mgw の次の箇所 ------------------------------------------------ obj/mingw32/runner.exe: src/misc/runnergw.c $(CC) -O -Wall -Werror -o obj/mingw32/runner.exe src/misc/runnergw.c ------------------------------------------------ を次の様に書換えます。 ------------------------------------------------ obj/mingw32/runner.exe: src/misc/runnergw.c $(CC) -mno-cygwin -O -Wall -Werror -o obj/mingw32/runner.exe src/misc/runnergw.c ------------------------------------------------ (4) Cygwin を起動して、./fix.sh mingw を実行します。 (5) Cygwin で make を実行します。 (6) Cygwin で make install を実行します。 以上 alleg42.dll 1781286 ---- 生成された DLL はかなり大きい。 strip --strip-all alleg42.dll alleg42.dll 781312 ---- stripを使用してデバッグ情報などを削除すると、ファイルサイズは半分以下に成ります。 注意 : stripは、必要な情報でさえも削除してしまう場合あります。ゆえに、不安定に成る場合が有ります。 次に、Linux用に調整されているソース allegro-4.0.0.tar.gz を、自らでコンパイルして生成する手順を説明します。 allegro-4.0.0.tar.gz (2001-12-10) Source code for all platforms in Unix friendly format. (2,387,480byte) Allegro 過去バージョンのページ http://www.talula.demon.co.uk/allegro/old.html allegro-4.0.0 (2001-12-10) Windows版 FreeBASIC ver.0.20.0b(2008-08-11)で採用されています。 allegro-4.2.2 (2007-07-22) DJGPP V2 で有効なのは、ここまで。 allegro-4.3.10(2008-01-20) Windows95でもコンパイル出来ました。マウスの挙動が変。 allegro-4.9.8 (2009-02-09) Windows95では利用不可です。KERNEL32.DLLの問題により cmake ver.2.6を起動出来ない。http://ja.wikipedia.org/wiki/CMake コンパイル環境は、前述した all422.zipのコンパイル環境と同じで Cygwin 1.5.18(2005-07-02) + mingw-runtime-3.8(2005-08-13) とします。 手順は同じですが、やはり、ソースに不具合が有ります。マルチプラットフォーム対応は大変なのです。 (1) all422.zipのコンパイルに同じ (2) all422.zipのコンパイルに同じ (3) /usr/local/src/allegro-4.0.0/makefile.mgw の不都合な部分を修正します。 具体的には、-mno-cygwin を追記することになります。$(PFLAGS)でもOKかもしれません。 makefile.mgw の次の箇所 ------------------------------------------------ define LINK_WITH_PLUGINS gcc $(LFLAGS) -Wl,--subsystem,windows -o $@ $< $(strip $(PLUGIN_LIB) $(addprefix @,$(PLUGIN_SCRIPTS)) $(IMPLIB_NAME) $(LIBRARIES)) endef define LINK_CONSOLE_WITH_PLUGINS gcc $(LFLAGS) -Wl,--subsystem,console -o $@ $< $(strip $(PLUGIN_LIB) $(addprefix @,$(PLUGIN_SCRIPTS)) $(IMPLIB_NAME) $(LIBRARIES)) endef ------------------------------------------------ を次の様に書換えます。 ------------------------------------------------ define LINK_WITH_PLUGINS
   gcc $(LFLAGS) $(PFLAGS) -Wl,--subsystem,windows -o $@ $< $(strip $(PLUGIN_LIB) $(addprefix @,$(PLUGIN_SCRIPTS)) $(IMPLIB_NAME) $(LIBRARIES))
endef

define LINK_CONSOLE_WITH_PLUGINS
   gcc $(LFLAGS) $(PFLAGS) -Wl,--subsystem,console -o $@ $< $(strip $(PLUGIN_LIB) $(addprefix @,$(PLUGIN_SCRIPTS)) $(IMPLIB_NAME) $(LIBRARIES))
endef
------------------------------------------------

(4) Cygwin を起動して、./fix.sh mingw32 を実行します。

(5) all422.zipのコンパイルに同じ

(6) all422.zipのコンパイルに同じ

以上




alleg40.dll は Windows FreeBASIC ver.0.20.0b(2008-08-11)で利用しています。
つまり、Windows版のFreeBASICからAllegroを利用には、alleg40.dllが必要になります。
Windows FreeBASIC ver.0.20.0b(2008-08-11) http://www.freebasic.net/









タイトルバーに存在するシステムアイコンを変更する方法  AllegroマスコットAlex 鰐(さかなへん) Alexanderの別称(男子の名) == Alex 'Alex the Allegator' icon.   この電卓は、正確な計算が出来ない様に成っています。わざとです。 360度を256分解能で表現します。依って誤差が生じます。これの原因は歴史です。 sin関数用のためには、256種類のデータからなるテーブルを持つだけで済みます。 cos関数用のデータはsin関数を pai/2 だけ進角することで取得出来ます。 ソフトウェア的には単純に成ります。また、整数演算で済みますから処理が高速に成ります。 fixが接頭しない通常の三角関数などは、msvcrt.dll にリンクしますから、sin(円周率 / 6)は、正確に 0.5を返します。 リンクする環境が無いスタティックな場合は、どうしましょう? つまり、自前で数学関数を持つ必要が生じます。 このような理由から、単純な数学関数として fixを接頭して fixsin などとして現在も存続しているのです。 Allegroの固定小数点は32bitで表現されます。 FIX関連関数は整数と固定小数点の相互変換に成りますから、固定小数点演算が実行されることに成ります。 固定小数点へ変換出来るのは、16bit補数表現の値域 -32768(0x8000) 〜 32767(0x7fff) です。 この電卓では、sin(円周率 / 6) は fixsin(30 * 256 / 360) で計算しますが、正確な値 0.5 には成りません。0.50354を返します。 ちなみに、Windowsの電卓では次の様に成ります。 sin(3.141592653589 / 6) == 0.49... sin(3.141592653590 / 6) == 0.5 fix関連関数の使い方。同心円を描画する例は、こちら 電卓ソースセット -------------------- 677 makefile 10,929 mathtest.c 9,099 mathtest.o 13,312 mathtest.exe 2,102 alex.bmp -------- 256色アイコン画像 32x32 2,525 alex.dat -------- /usr/local/src/allegro422/tools/grabber.exe で作成したデータファイル 2,526 alex.res -------- /usr/local/src/allegro422/tools/win/wfixicon.exe が生成したアイコンリソース(バイナリ) alex.bmp を元にして、あらかじめ grabber.exealex.datを作成しておく。その後、make です。 alex.res は、make の過程で wfixicon.exe により自動的に生成されます。 grabber.exeとは? 野球のグラブを想像してください。Grabberはリソースを掴み取る道具です。 ## --------------------------------------------------- ## Allegro_4.2.2 MinGW make file for Calculator ## --------------------------------------------------- COMPILER = gcc LINKER = gcc CFLAGS = -mno-cygwin -O2 -Wall LFLAGS = -mno-cygwin -s -Wall -mwindows -L/lib/mingw LIBS = -lalleg OBJ = mathtest.o mathtest.exe: $(OBJ) alex.res $(LINKER) $(LFLAGS) -Wl,--subsystem,windows -o $@ $(OBJ) alex.res $(LIBS) %.o: %.c $(COMPILER) $(CFLAGS) -o $@ -c $< alex.res: alex.dat /usr/local/bin/wfixicon.exe /usr/local/bin/wfixicon.exe alex.ico -ro -d alex.dat ALEXBMP ALEXPAL ##---------------------------------------------------- -Wl,<options> は、カンマ区切りの <options> をリンカに渡す為のオプションです。 -Wl,--subsystem,windows -Wl,--subsystem,console Allegroのリソースエディタ grabber.exealex.datを作成中の画面 アイコンは形状と色情報(パレット)で構成されます。ALEXBMPALEXPAL これらは、alex.datの要素として alex.datに含まれます。 Allegroのリソースエディタ grabber.exeで demo.datを編集中の画面 アレグロ・デモは自前のアルファベット・フォントデータを持ちます。 漢字フォントなどの巨大なデータは、この手法では無理があります。 しかし、一部の漢字のみの保持ならば実用かもしれません。 Allegroのリソースは圧縮アルゴリズム LZSSで圧縮されています。 Allegroのリソースエディタ grabber.exeの実行画面には、LZSS圧縮利用の可否項目が現われます。 create_lzss_pack_data(void); create_lzss_unpack_data(void); lzss_read(PACKFILE *file, LZSS_UNPACK_DATA *dat, int s, unsigned char *buf); lzss_write(PACKFILE *file, LZSS_PACK_DATA *dat, int size, unsigned char *buf, int last); free_lzss_pack_data(LZSS_PACK_DATA *dat); free_lzss_unpack_data(LZSS_UNPACK_DATA *dat);
These functions support the reading and writing of compressed files, using a ring buffer algorithm based on the LZSS compressor by Haruhiko Okumura. 英文和訳:これらの関数は、奥村晴彦によるリングバッファアルゴリズムに基礎を置いた圧縮機能 LZSSを使うとき、圧縮ファイルの読み書きを支える。









Windows API (SDK)プログラミング 前述した、電卓の例では、wfixicon.exe でアイコンリソースをコンパイルして、システムアイコンとして取込んでいます。 Windows API (SDK)仕様のソースでは、この手法は使用出来ません。 Cygwin(MinGW)の場合、Windows API (SDK)仕様のソースは、リソースコンパイラとして windres が使用されます。 以降では、メニュー付きウィンドウを作成する例とスクリーンセーバーを作成する例を示します。  システムアイコンにアレックス(アリゲータ)を使用。   DirectX Windows (Alex-ICON) /usr/local/src/allegro422/tests/win/dxwindow.c dxwindow.rh //--------------------------------------- /xaiax #define IDI_DXW 9999 //--------------------------------------- xaiax/ dxwindow.rc //--------------------------------------- /xaiax IDI_DXW ICON DISCARDABLE "alex.ico" //--------------------------------------- xaiax/ dxwindow.c //--------------------------------------- /xaiax if (!hPrevInstance) { wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInst; wndClass.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_DXW)); /* xaiax */ wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = CreateSolidBrush(0); wndClass.lpszMenuName = "MYMENU"; wndClass.lpszClassName = szAppName; RegisterClass(&wndClass); } //--------------------------------------- xaiax/ LoadIcon(NULL, MAKEINTRESOURCE(IDI_DXW)); //NULLの場合はメインウィンドウにWindowsの標準アイコンが使用されます。 LoadIcon(hInst, MAKEINTRESOURCE(IDI_DXW)); //hInstの場合はメインウィンドウにユーザー定義のアイコンが使用されます。 ## --------------------------------------------------- ## Allegro_4.2.2 MinGW make file for dxwindow ## --------------------------------------------------- NAME = dxwindow COMPILER = gcc LINKER = gcc RC = windres CFLAGS = -mno-cygwin -DALLEGRO_LIB_BUILD -Wall -Wno-unused -mtune=i586 -O2 -funroll-loops -ffast-math -fomit-frame-pointer LFLAGS = -mno-cygwin -s -Wl,--subsystem,windows -L/lib/mingw/ LIBS = -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound -lmoldname -lmsvcrt LIB = -lalleg OUT = $(NAME).exe RES = $(NAME).res OBJ = $(NAME).obj $(OUT): $(OBJ) $(RES) $(LINKER) $(LFLAGS) -o $@ $(OBJ) $(RES) $(LIB) $(LIBS) %.obj: %.c $(COMPILER) $(CFLAGS) -o $@ -c $< %.res: %.rc $(RC) -O coff -o $@ -i $< ## --------------------------------------------------- Windows API (SDK)プログラミングでは、winalleg.h を include する必要が有ります。
 DirectX Windows Allegroを利用して作成したスクリーンセーバーの例 Allegroでスクリーンセーバーを作成する為のヒント (1) Allegroに附属のスクリーンセーバーのサンプルソースを改造してみましょう。 (2) Allegroで日本語を利用するには、Alfont(http://www.helixsoft.nl/project_page.php?file_name=alfont.proj)が必要に成ります。 (3) タイマーイベントの間隔として、理不尽な値を与えないこと。 (4) 使用可能なフォントであるか見極める。例えば、"MS Shell Dlg" などは、"MS UI Gothic" などに変更するようにします。 Allegroに附属のスクリーンセーバーのサンプルソースセット ------------------------------------------------------- /usr/local/src/allegro422/tests/win/scrsave.rh /usr/local/src/allegro422/tests/win/scrsave.rc /usr/local/src/allegro422/tests/win/scrsave.c ------------------------------------------------------- ## --------------------------------------------------- ## Allegro_4.2.2 MinGW make file for Screensaver ## --------------------------------------------------- NAME = scrsave COMPILER = gcc LINKER = gcc RC = windres CFLAGS = -mno-cygwin -O2 -Wall LFLAGS = -mno-cygwin -s -Wall -mwindows -L/lib/mingw LIBS = -lalfont -lalleg OBJ = $(NAME).o OUT = $(NAME).scr RES = $(NAME).res $(OUT): $(OBJ) $(RES) $(LINKER) $(LFLAGS) -Wl,--subsystem,windows -o $@ $(OBJ) $(RES) $(LIBS) %.o: %.c $(COMPILER) $(CFLAGS) -o $@ -c $< %.res: %.rc $(RC) -O coff -o $@ -i $< ##---------------------------------------------------- Windows API (SDK)プログラミングでは、winalleg.h を include する必要が有ります。 スクリーンセーバーの効能 画面の色気が変に成った時など、このスクリーンセーバーを起動すると、パレットの正常化が行われます。 日本語を利用する為の改造ポイントを下記に列挙します。 これらを /usr/local/src/allegro422/tests/win/scrsave.c の適切な場所に挿入して完成です。 //---------------------------------------------------- (1) #include "alfont.h" // 使用するTTFフォント名とフォントサイズの定義 #define TTF_FONTNAME "C:\\WINDOWS\\FONTS\\ipam.TTF" #define TTF_FONTSIZE 24 // UTF8N 文字列 「春夏秋冬」と「JISX0213絵文字」の定義 #define SAMPLE_TEXT "\xE6\x98\xA5\xE5\xA4\x8F\xE7\xA7\x8B\xE5\x86\xAC\x00" #define SAMPLE_TEXT2 "\xe2\x98\x82\xe2\x98\x80\xe2\x98\x81\xe2\x98\x83\x00" ALFONT_FONT *user_font; int alfont_on; //---------------------------------------------------- //---------------------------------------------------- (2) if (alfont_on == TRUE) { alfont_textout_centre_ex(buf, user_font, SAMPLE_TEXT, bouncer[0].x, bouncer[0].y, makecol(255,255,255), -1); alfont_textout_centre_ex(buf, user_font, SAMPLE_TEXT2, bouncer[1].x, bouncer[1].y, makecol(255,255, 0), -1); } //---------------------------------------------------- //---------------------------------------------------- (3) // SetTimer(hwnd, 1, 15, NULL); // UINT SetTimer(hwnd, idTimer, uTimeout, tmprc) SetTimer(hwnd, 1, 300, NULL); // 50msec以下にはセットしないこと //---------------------------------------------------- //---------------------------------------------------- (4) if (user_font != NULL) { alfont_destroy_font(user_font); alfont_exit(); } //---------------------------------------------------- //---------------------------------------------------- (5) if (alfont_init() == ALFONT_OK) { user_font = alfont_load_font(TTF_FONTNAME); if (user_font == NULL) { alfont_on = FALSE; } else { alfont_on = TRUE; alfont_set_font_size(user_font, TTF_FONTSIZE); } } else { alfont_on = FALSE; } //---------------------------------------------------- 以上
 Allegro タイマー割り込みの使用例
 クライアント領域サイズ 320x200     クライアント領域サイズ 320x240
    




rest関数とタイマー割り込みの違いを知ることが重要です。
rest関数は設定した時間が経過するまで、そのスレッドは走らないことに成ります。
タイマー割り込みは、設定した時間が経過するとハンドラーへ分岐します。

或る関数の内部において、rest関数を利用してのWaitは好ましくありません。簡易ならば良しとしても、その関数の汎用性は失われます。
3d.cの関数 draw3d()内部で、描画状況を見えるようにする為にrest()を使用しています。

rest関数とタイマー割り込みの違いは、例えば、 時報を出力するために、常に時計を注視している状態と、
『時間ですよ。時報を出力してください』の報告待ちをしている状態との違いに等しいものがあります。




このプログラムは、実行後、直ちに、キー入力待ちに成ります。
その後、66秒666でプログラムが自動終了します。

4つのタイマーを生成しています。
1/1000秒タイマー 1/1000秒間隔でタイマー割り込みハンドラーへ分岐します。
 1/100秒タイマー  1/100秒間隔でタイマー割り込みハンドラーへ分岐します。
   1秒毎タイマー 1秒間隔でタイマー割り込みハンドラーへ分岐します。
   1分毎タイマー 1分間隔でタイマー割り込みハンドラーへ分岐します。

また、このプログラムでは、Alfontで日本語を表示するようにしています。

さらに、リポート機能も付加えています。元ソースの容量よりも付加えたソースの容量のほうが大きく成ってしまいました。
ここで言うリポート機能とは? DEBUGに類する内容のもので、変数の内容を外部テキストとして出力するというものです。
現状では、Driverの種類 timer_driver->name の内容を report.txtへ出力します。

report.txt
----------------------------
Win32 high performance timer








// Shutdown 66.666 DEBUG extimer.c
// 元ソース /usr/local/src/allegro422/examples/extimer.c

//----------------------------------- /DEBUG プレイバック (列挙済み)
#include <stdio.h>
#include <string.h>
//----------------------------------- DEBUG/

#include <allegro.h>

//--------------------- /alfont
#include <alfont.h>
#define TTF_FONTNAME    "C:\\WINDOWS\\FONTS\\ipam.TTF"
#define TTF_FONTSIZE    32
#define SAMPLE_TEXT     "\xE6\x98\xA5\xE5\xA4\x8F\xE7\xA7\x8B\xE5\x86\xAC\x00"
//--------------------- alfont/

//----------------------------------- /DEBUG プレイバック (列挙済み)
#define REPORT_FILE "report.txt"
char report_filename[1024] = "";
//----------------------------------- DEBUG/

//------------------------------- /timer interrupt handler
volatile double elapsed_time = 0;
volatile int x = 0;
volatile int y = 0;
volatile int z = 0;

void elapsed_time_inc() {elapsed_time += .001;}
END_OF_FUNCTION(elapsed_time_inc);

void inc_x(void) {x++;}
END_OF_FUNCTION(inc_x)

void inc_y(void) {y++;}
END_OF_FUNCTION(inc_y)

void inc_z(void) {z++;}
END_OF_FUNCTION(inc_z)
//------------------------------- timer interrupt handler/

//----------------------------------- /DEBUG プレイバック (列挙済み)
void put_report_file(char * fmt, ...)
{
	va_list vp;
	FILE *f;
	char buf[1024];

	va_start(vp, fmt);
	vsprintf(buf, fmt, vp);
	va_end(vp);

	f = fopen(report_filename, "at");
	if (f == 0) return;
	fputs(buf, f);
	fclose(f);
}
//----------------------------------- DEBUG/

int main(void)
{
//--------------------- /alfont
   ALFONT_FONT *user_font;
//--------------------- alfont/
   int c;

//----------------------------------- /DEBUG プレイバック (列挙済み)
   char buf[512], buf2[512];
//----------------------------------- DEBUG/

   if (allegro_init() != 0) return 1;
   install_keyboard();
   install_timer();

   if (set_gfx_mode(GFX_AUTODETECT, 320, 240, 0, 0) != 0) {
      if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) {
         set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
         allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
         return 1;
      }
   }

//--------------------- /alfont
  if (alfont_init() != ALFONT_OK) {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("Error while initializing alfont");
    allegro_exit();
    return 1;
  }
  user_font = alfont_load_font(TTF_FONTNAME);

  if (user_font == NULL) {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("Cannot load the font");
    alfont_exit();
    allegro_exit();
    return 1;
  }
//--------------------- alfont/

   set_window_title("Shutdown 66.666 DEBUG");
   set_palette(default_palette);
   clear_to_color(screen, makecol(0,128,128));

   textprintf_centre_ex(screen,font,SCREEN_W/2,SCREEN_H*1/10,makecol(255,255,255),makecol(0,128,128),"Driver: %s",timer_driver->name);
   textprintf_centre_ex(screen,font,SCREEN_W/2,SCREEN_H*2/10,makecol(255,255,255),makecol(0,128,128),"Timing five seconds:");

   for (c=0; c<5; c++) {
      textprintf_centre_ex(screen,font,SCREEN_W/2,SCREEN_H*3/10+c*10,makecol(255,255,255),makecol(0,128,128),"%d",c+1);
      rest(1000);
   }

//--------------------- /alfont
   alfont_set_font_size(user_font, TTF_FONTSIZE);
   alfont_textout_centre_ex(screen, user_font, SAMPLE_TEXT, SCREEN_W/2, SCREEN_H*6/10, makecol(255,0,0),makecol(0,128,128));
//--------------------- alfont/

   textprintf_centre_ex(screen,font,SCREEN_W/2,SCREEN_H*8/10,makecol(255,255,255),makecol(0,128,128), "Press a key to Exit.");

//------------------------------- /timer interrupt handler
   LOCK_VARIABLE(elapsed_time);
   LOCK_VARIABLE(x);
   LOCK_VARIABLE(y);
   LOCK_VARIABLE(z);
   LOCK_FUNCTION(elapsed_time_inc);
   LOCK_FUNCTION(inc_x);
   LOCK_FUNCTION(inc_y);
   LOCK_FUNCTION(inc_z);

   install_int_ex(elapsed_time_inc, BPS_TO_TIMER(1000));
   install_int_ex(inc_y, BPS_TO_TIMER(100));
   install_int(inc_x, 1000);
   install_int_ex(inc_z, SECS_TO_TIMER(60));
//------------------------------- timer interrupt handler/

   while (!keypressed() && elapsed_time<66.666)
      textprintf_centre_ex(screen,font,SCREEN_W/2,SCREEN_H*9/10,makecol(255,255,0),makecol(0,128,128),
                           "%.3f, x=%02d, y=%02d, z=%d",elapsed_time,y%100,x%60,z);

//------------------------------- /timer interrupt handler
   remove_int(elapsed_time_inc);
   remove_int(inc_y);
   remove_int(inc_x);
   remove_int(inc_z);
//------------------------------- timer interrupt handler/

//----------------------------------- /DEBUG プレイバック (列挙済み)
   get_executable_name(buf, sizeof(buf));
   replace_filename(buf2, buf, REPORT_FILE, sizeof(buf2));
   strcpy(report_filename, buf2);
   put_report_file("%s\n", timer_driver->name);
//----------------------------------- DEBUG/

   return 0;
}
END_OF_MAIN()




## ---------------------------------------------------
## Allegro_4.2.2 MinGW make file for extimer
## ---------------------------------------------------
NAME     = extimer
COMPILER = gcc
LINKER   = gcc
CFLAGS   = -mno-cygwin -O2 -Wall
LFLAGS   = -mno-cygwin  -s -Wall -mwindows -L/lib/mingw/
LIBS     = -lalfont -lalleg
OBJ      = $(NAME).o

$(NAME).exe: $(OBJ)
	$(LINKER) $(LFLAGS) -o $@ $(OBJ) $(LIBS)
%.o: %.c
	$(COMPILER) $(CFLAGS) -o $@ -c $<
## ---------------------------------------------------









最新のバージョン Allegro - Download - Latest version http://www.talula.demon.co.uk/allegro/wip.html 注釈色付きの物は、私が実証済みの物です。 Stable branch 4.2.2 source releases 2007-07-22 安定版 ----------------------------------------------------- Filename Size Description ----------------------------------------------------- all422.zip 3784k Source code for all platforms in DOS/Windows friendly format. ok Cygwin + MinGW gcc-3.4.4 allegro-4.2.2.tar.gz 3104k Source code for all platforms in Unix friendly format. ok Linux(Knoppix3.3_2004-02-20JP) gcc-3.3.3 Developmental branch source releases ------------------------------------ Download 4.3.10 from SourceFourge Download 4.9.xx from Sourceforge Allegro 4.9.10.1(2009-05-03) 最新テスト版  Allegro Version 4.3.10 Skater Demo Game (NG 8bit-color) スケートボードに乗ったマリオ? Miscellaneous files ------------------------------- Filename Size Description ------------------------------- dx70_mgw.zip 243k This file contains the minimal version of the DirectX 7 SDK for MinGW. Only for Windows. ok Cygwin + MinGW gcc-3.4.4 dx80_mgw.zip 442k This file contains the minimal version of the DirectX 8 SDK for MinGW. Only for Windows. ok Cygwin + MinGW gcc-3.4.4 dx70_dmc.zip 234k This file contains the minimal version of the DirectX 7 SDK for Digital Mars C/C++. Only for Windows. dx70_min.zip 440k You may have problems compiling the Allegro DLL if you don't have the correct version of the DirectX SDK library and header files. This file contains the minimal version of the DirectX 7 SDK needed to compile the DLL yourself. Only for Windows. alldata.zip 360k This file contains the data needed by the Allegro demo game. It's only needed if you got an old WIP version of the library, or if you updated to the current version via diffs, as these didn't include the demo data to save space. Binary version (only for Windows) ----------------------------------- Site Description ----------------------------------- Allegro binary package The allegro-bin package at SourceForge contains several binary distributions of Allegro for Windows. You only need it if you have a compiler unable to produce the Allegro DLL (like Borland). To use, unzip a package inside a temporary directory and follow the instructions found inside. http://jaist.dl.sourceforge.net/sourceforge/alleg/allegro-mingw-4.2.2.zip ok Cygwin + MinGW gcc-3.4.4 MinGW Binaries Installation Instructions ---------------------------------------- 1) Copy DLL files from bin to your Windows/System32 folder. 2) Copy the contents of the include folder to your MinGW/include folder. 3) Copy the contents of the lib folder to your MinGW/lib folder. devpaks.org Michal Molhanec mantains a Devpak repository, where you can get a package of the precompiled library for MinGW and Dev-C++. Note that the Allegro Devpaks are also mirrored through SourceForge's allegro-bin package. If the Devpak site is down, check the previous entry's link. www.allegro.cc/files Matthew Leverton has built binary packages for many different Windows compilers and offers them in several download formats. Retrospec binaries The guys from the Retrospec community have built their own versions of Allegro binary packages and many more useful libraries like FBlend or OpenLayer, offering versions for several Windows compilers. 過去のバージョン Allegro - Download - Older versions http://www.talula.demon.co.uk/allegro/old.html Stable branch 4.0.0 source releases 2001-12-10 安定版 ----------------------------------------------------- Filename Size Description ----------------------------------------------------- allegro-4.0.0.tar.gz 2332k Source code for all platforms in Unix friendly format. ok Windows FreeBASIC ver.0.20.0b(2008-08-11)
Allegro-4310 OpenGL /usr/local/src/allegro4310/addons/allegrogl/examp/exmasked.c パックマンの絵がマウスカーソルに成っています。マウスの動きに連動してパックマンの絵が動きます。しかし、マウスの動きが重い。これでは使えない。 マウス関連に不備が有る証しとして、実際、Allegro Version 4.3.10 のデモ Skaterはマウスを使用しないように作成されています。 デモ Skaterでの操作はキーボードのみで行なうことに成ります。Allegro Version 4.3.10 は現状では実用には無いと考えられます。  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

FDclone (DJGPP) DOS  FDclone(DJGPP版 US 32bit実行ファイル) FDclone(DJGPP)us  FDclone(DJGPP版 JP 32bit実行ファイル) FDclone(DJGPP)jp FDclone(FDc.exe)のファイルサイズ   MSDOS版 481,991byte ---- version 3.00c 2008-07-27   DJGPP版 527,872byte ---- version 3.00d 2008-11-30   LINUX版 597,932byte ---- version 3.00d 2008-11-30  CygWin版 697,588byte ---- version 3.00d 2008-11-30 -------- 以下 README.DOC より抜粋 FDcloneは、1989年に A.Idei氏の手によって MS-DOS用に作成された『FD』を模した、UNIXベースの OS汎用のファイル & ディレクトリ管理ツールです。 仕様部分に関しては、できるだけオリジナルの『FD』に近付けるようにしましたが、インプリメントに関しては全くのオリジナル作品です。 クローンと称している理由は、 『FD』が余りに普及したため、MS-DOSユーザにとってはこの "FD" という呼称がファイル管理ツールの代名詞として定着してしまっていることに起因します。 -------- ここまで。 FDcloneは『FD』(MS-DOS)をUNIXベースのOSでも稼動するように移植したものが始りと考えて宜しいかと思われます。 現在(2009-08-09)では、CygWin版(WINDOWS)や DJGPP版(MS-DOS)なども存在しています。 CygWin版(WINDOWS)や LINUX版(UNIX)では、fd-dict.tbl を利用して日本語の入力が可能に成ります。 さらに、LINUX版(UNIX)では、疑似端末の機能が利用可能に成ります。詳細はこちら 『FD』(MS-DOS) の作者 出射厚氏(A.Idei氏)は 2004-11-07 20:41 に享年56歳?で逝去されました。 『FD』(MS-DOS) Ver.3.13a(1997-05-17) http://www.vector.co.jp/soft/dos/util/se020040.html -------- 以下 http://hp.vector.co.jp/authors/VA012337/soft/fd/index.html より抜粋 MS-DOS版の実行ファイルは real mode 実行ファイルであるために利用可能なメモリが限られています。 FDcloneから起動する外部コマンドによっては、メモリ不足で起動出来ないこともあるでしょう。 ハイメモリ環境用にそういう制限を取り払った実行ファイルが欲しい場合は、 protected mode 実行ファイルとして compile したものを各自で用意する必要があります。 現状の support では DJGPP を用いて protected mode 実行ファイルに compile 出来ます。 -------- ここまで。 DJGPPは MS-DOSにおける C/C++ の 32bitプロテクトモードソフトウェアのフリーの開発環境です。 FDclone(DJGPP版 32bit実行ファイル)を作成する手順 文字セット変換 euc2sjis.bat すべてのソースは EUC文字セットで記述されています。予め、これをシフトJISに変換しておくと良い。 F:\DJGPP\USR\FD-3.00d>make -fmakefile.dpc copy /y config.hin config.h make: \bin\sh: コマンドが見つかりませんでした make: *** [config.h] エラー 127 DJGPPの makeは \bin\sh を起動して copyコマンドを実行しようとしますが、\bin\sh が存在しない環境ではエラーに成ってしまいます。 これを解決するには、予め MS-DOSの command.comの copyコマンドを利用してファイルをコピーすればよい。 (\bin\shをインストールすれば不要) copy /y config.hin config.h F:\DJGPP\USR\FD-3.00d>make -f makefile.dpc .\mkkanji.exe kanji.hin | \ .\kanjicnv.exe -s -c - kanji.h d:/djgpp/tmp/dj100000: line 1: .mkkanji.exe: command not found make.exe: *** [kanji.h] Error 127anjicnv.exe: command not found DJGPPの makeは \bin\sh を起動して copyコマンドを実行しようとしますが、\bin\sh が存在しない環境ではエラーに成ってしまいます。 これを解決するには、予め MS-DOSの command.comの copyコマンドを利用してファイルをコピーすればよい。 (\bin\shをインストールすれば不要) copy /y kanji.hin kanji.h F:\DJGPP\USR\FD-3.00d>make -f makefile.dpc gcc -o fd.exe @object.arg gcc.exe: no input files make.exe: *** [fd.exe] Error 1 DJGPPの makeは \bin\sh を起動して copyコマンドを実行しようとしますが、\bin\sh が存在しない環境ではエラーに成ってしまいます。 これを解決するには、予め MS-DOSの command.comの copyコマンドを利用してファイルをコピーすればよい。 (\bin\shをインストールすれば不要) -------------------- object.argを自作する --------------------
main.o printf.o termio.o term.o stream.o string.o malloc.o time.o pathname.o system.o posixsh.o doscom.o log.o sysemu.o dosdisk.o unixdisk.o realpath.o encode.o libc.o file.o apply.o pty.o termemu.o frontend.o backend.o parse.o builtin.o shell.o catalog.o kconv.o input.o info.o rockridg.o tree.o lsparse.o archive.o custom.o command.o browse.o




bsh204br2.zip 491,270 2008-05-12 GNU Bash shell 2.04 (release 2) for DJGPP V2
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bsh204br2.zip




DJGPP版のコンパイルで生成されるバイナリ群

   346 object.arg <---- 自作した object.arg (\bin\shをインストールすれば自作する必要は無い)
22,620 apply.o
24,975 archive.o
   384 backend.o
32,446 browse.o
23,040 builtin.o
 3,520 catalog.o
32,682 command.o
57,347 custom.o
25,005 doscom.o
43,304 dosdisk.o
 2,898 encode.o
18,686 file.o
   384 frontend.o
 6,956 info.o
47,256 input.o
 3,705 kanjicnv.o
 7,045 kconv.o
 7,028 libc.o
 2,615 log.o
20,731 lsparse.o
13,911 main.o
 1,506 malloc.o
 8,108 mkcat.o
 4,028 mkfuncno.o
 2,048 mkkanji.o
49,983 mkunitbl.o
 9,911 parse.o
27,056 pathname.o
13,760 posixsh.o
 5,120 printf.o
   384 pty.o
 2,171 realpath.o
 6,036 rockridg.o
16,431 shell.o
53,358 stream.o
 1,501 string.o
10,089 sysemu.o
92,784 system.o
12,418 term.o
   384 termemu.o
 3,053 termio.o
 1,193 time.o
15,011 tree.o
22,642 unixdisk.o








 DJGPP版の場合、環境ファイルは  FD2.RC にする必要があります。
MS-DOS版の場合、環境ファイルは  FD2RC  にする必要があります。
CygWin版の場合、環境ファイルは .FD2RC  にする必要があります。

パス区切り文字の相異
 NG SET HOME=e:/cygwin/home/xaiax/fd2.rc
 OK SET HOME=e:\cygwin\home\xaiax\fd2.rc

FDcloneは MinGWではコンパイル出来ません。CygWinにおいて MinGWをコンパイル環境としている場合において、
CygWin版の FDcloneをコンパイルする場合は、一時的に /etc/profile を無効にする必要があります。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

キーボード配置変更プログラムの紹介 キーボード配置変更プログラム Windows and DOS-PROMPT ---- VKMAP12.LZH キーボード配置変更プログラム DOS-MODE ---- KEYC410.LZH プログラムの所在は、VKMAP12.LZH または KEYC410.LZH でネット検索してください。 下記の例は、左CTRL と CAPS の入れ換えを示しています。右CTRLは不変です。 キーボード配置変更プログラム Windows and DOS-PROMPT ---- VKMAP12.LZH system.ini ---------- device=VKEYMAPD.386 [VKEYMAPD] Enable=1 Key=003AH,001DH Key=001DH,003AH キーボード配置変更プログラム DOS-MODE ---- KEYC410.LZH DOSSTART.BAT ------------ @echo off C:\DOS\MOUSE.COM KEYC4.COM KEYC4U.COM KEYTABLE.DAT echo. KEYTABLE.DAT (TAB キーボード TAB 機能) ------------ ; 現在のキー変換の様子 ; キーボード 機能 init CTRL <=> CAPS  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DOS-MODEで走るemacs(Mule-2.2.2) DOS版 Mule-2.2.2 は WINDOWS/DOS 双方で使用可能です。非常に軽快に動作します。 日本語入力は、WINDOWS(go32win) および DOS-MODE で有効です。DOSプロンプトでは正常に機能しません。 DOS-FEP WX2 などを必要とします。FEPのON/OFFは CTRL+\ です。 Windows管理下の仮想DOSのことを DOS-PROMPTと呼びます。 プレーンなDOSのことを DOS-MODEと呼びます。 jvim ---- OK WINDOWS, DOS-PROMPT / NG DOS-MODE ---- jvimは DOS-MODEでは日本語入力が出来ません。 mule-2.2.2 ---- OK WINDOWS, DOS-MODE / NG DOS-PROMPT ---- mule-2.2.2は DOS-PROMPTでは日本語入力が出来ません。 GO32.EXE と go32win.exe go32win.exe (and go32win.dll) を利用するとWindowsで DOS版 Muleが使えます。 DOS窓(DOSプロンプト)の画面仕様には 80桁、25行程度の、狭い画面と言う制約がありました。 「 Windows上の広い画面で何とか emacsを使いたい 」との思いから作成されたのが go32win.exe です。 画面サイズの変更 ESC O Y または、 M-x go32win-screen-size フォントの変更は C:\MULE-2.2\lisp\term\go32win.el を書き換えることで行います。 バイトコンパイルは、dired(C-x d)を起動して dired-do-byte-compile(B)を実行するようにします。 Windows Mule の起動例を下記に示します。 C:\>go32win.exe -f -hc:/MULU-2.2 "C:\MULE-2.2\bin\mule.exe" -@~ GO32.EXE go32win.exeを利用しない DOS-MODE Mule-2.2.2は GO32.EXEを必要とします。 _emacs _emacsの場所は 環境変数 $HOME によって指定してます。 termcap termcapの場所は 環境変数 $TERMCAP によって指定してます。 _pickfil.pic プロファイル機能を利用出来ます。これは VZ エディタのそれとほぼ同等のもので、 mule を終了する時点での編集していたファイル名、ポイント行の行番号をファイルに保存しておき、 再起動したときに前回終了したときの状態から編集を再開出来ると言うものです。 $HOMEに _pickfil.pic を置く場合のオプションは -@~ です。 $HOMEは go32win.exeの起動オプション -hDirectory で変更出来ます。 terminal-face キーワードとなる単語などの表示にアンダーライン、ハイライト、反転表示が出来ます。 M-x list-faces-display とすることにより、どの様になるのかを見ることが出来ます。 編集 (キーボード操作) --------------------- M-SPC 領域開始マークセット M-w コピー C-w カット C-y ペースト C-x u undo 編集 (マウス操作) ----------------- S-mouse-2 mouse-save-then-kill -------------- システムバッファへコピー mouse-2 mouse-yank-at-click --------------- システムバッファから貼り付け C-mouse-2 mouse-secondary-save-then-kill ---- Windowsクリップボードへコピー C-S-mouse-2 mouse-yank-secondary -------------- Windowsクリップボードから貼り付け クライアント・ウインドウ内でのマウス操作 ---------------------------------------- Alt+左・ダブルクリック 表示フォントの拡大 Alt+右・ダブルクリック 表示フォントの縮小 Alt+Ctrl+左・ダブルクリック テキストカラーの変更 Alt+Ctrl+右・ダブルクリック バックグランド・カラーの変更 Alt+Shift+左/右・ダブルクリック フォント変更 ウインドウ枠でのマウス操作 -------------------------- 左・ダブルクリック フレームサイズに合わせてemacsのスクリーンサイズを調整 右・ダブルクリック クリックされたフレーム枠をデスクトップに位置合せ History ---------------------------------------------------------- 1993.08.01: Mule Ver.1.0 (桐壷) based on GNU Emacs 18.59 1994.02.08: Mule Ver.1.1 (帚木) based on GNU Emacs 18.59 1994.08.06: Mule Ver.2.0 (空蝉) based on GNU Emacs 19.25 1994.11.02: Mule Ver.2.1 (夕顔) based on GNU Emacs 19.27 1994.12.28: Mule Ver.2.2 (若紫) based on GNU Emacs 19.28 1995.07.24: Mule Ver.2.3 (末摘花) based on GNU Emacs 19.28 1997.09.19: Mule Ver.3.0 (紅葉賀) based on GNU Emacs 20.2 2000.06.14: Mule Ver.4.0 (花宴) based on GNU Emacs 20.7 2001.10.22: Mule Ver.5.0 (賢木) based on GNU Emacs 21.1 2007.06.xx: Emacs 22.x 下記、3つのプログラムが必要です。ベクターなどに存在すると思います。 mule-2.2.2 GO32.EXE go32win.exe ---- version 1.3(Beta)1995-07-22 ---- 右Ctrl + Break で非同期ブレークが掛かります。 Display table of all key bindings. ---------------------------------- C-h C-h b --------- Major Mode Bindings: key binding --- ------- TAB tab-to-tab-stop ESC Prefix Command ESC S center-paragraph ESC s center-line ESC TAB ispell-complete-word Global Bindings: key binding --- ------- C-@ set-mark-command C-a beginning-of-line C-b backward-char C-c mode-specific-command-prefix C-d delete-char C-e end-of-line C-f forward-char C-g keyboard-quit C-h help-command LFD newline-and-indent C-k kill-line C-l hilit-recenter RET newline C-n next-line C-o open-line C-p previous-line C-q quoted-insert C-r isearch-backward C-s isearch-forward C-t transpose-chars C-u universal-argument C-v scroll-up C-w kill-region C-x Control-X-prefix C-y hilit-yank C-z suspend-emacs C-\ toggle-fep-mode C-] quail-mode C-_ undo SPC .. ~ self-insert-command DEL backward-delete-char-untabify .. self-insert-sjis-japanese .. self-insert-sjis-kana .. self-insert-sjis-japanese S-mouse-2 mouse-save-then-kill C-S-mouse-2 mouse-yank-secondary C-mouse-2 mouse-secondary-save-then-kill C-drag-mouse-1 mouse-set-secondary C-mouse-1 mouse-start-secondary S-home end-of-buffer C-right end-of-line S-right forward-word C-left beginning-of-line S-left backward-word S-f10 mark-defun S-f9 set-mark-command S-f8 query-replace S-f7 isearch-backward S-f6 isearch-backward-regexp S-f5 buffer-menu S-f4 untabify S-f3 split-window-horizontally S-f2 split-window-vertically S-f1 find-file-other-window f10 sshell f9 query-replace-regexp f8 query-replace f7 isearch-forward f6 isearch-forward-regexp f5 dired f4 tabify f3 undo f2 other-window f1 find-file S-C-l hilit-repaint-command M- mark-command vertical-line Prefix Command vertical-scroll-bar Prefix Command mode-line Prefix Command C-down-mouse-1 mouse-drag-secondary mouse-2 mouse-yank-at-click triple-mouse-1 mouse-set-point double-mouse-1 mouse-set-point drag-mouse-1 mouse-set-region mouse-1 mouse-set-point down-mouse-1 mouse-drag-region C-M-delete backward-kill-sexp M-left backward-word M-right forward-word mouse-movement ignore deletechar delete-char deleteline kill-line insertline open-line redo repeat-complex-command undo undo insert overwrite-mode execute execute-extended-command begin beginning-of-buffer M-end end-of-buffer-other-window end end-of-buffer M-prior scroll-other-window-down M-next scroll-other-window next scroll-up prior scroll-down down next-line right forward-char up previous-line left backward-char M-home beginning-of-buffer-other-window home beginning-of-buffer find search-forward menu execute-extended-command C-SPC set-mark-command C-- negative-argument C-9 digit-argument C-8 digit-argument C-7 digit-argument C-6 digit-argument C-5 digit-argument C-4 digit-argument C-3 digit-argument C-2 digit-argument C-1 digit-argument C-0 digit-argument C-/ undo C-h T help-with-tutorial-for-mule C-h q help-quit C-h v describe-variable C-h w where-is C-h t help-with-tutorial C-h s describe-syntax C-h p finder-by-keyword C-h n view-emacs-news C-h C-n view-emacs-news C-h m describe-mode C-h l view-lossage C-h C-k Info-goto-emacs-key-command-node C-h C-f Info-goto-emacs-command-node C-h i info C-h f describe-function C-h d describe-function C-h k describe-key C-h c describe-key-briefly C-h b describe-bindings C-h a command-apropos C-h C-p describe-project C-h C-w describe-no-warranty C-h C-d describe-distribution C-h C-c describe-copying C-h ? help-for-help C-h C-h help-for-help C-x C-@ pop-global-mark C-x C-b list-buffers C-x C-c save-buffers-kill-emacs C-x C-d list-directory C-x C-e eval-last-sexp C-x C-f find-file C-x TAB indent-rigidly C-x C-k mule-prefix C-x C-l downcase-region C-x C-n set-goal-column C-x C-o delete-blank-lines C-x C-p mark-page C-x C-q vc-toggle-read-only C-x C-r find-file-read-only C-x C-s save-buffer C-x C-t transpose-lines C-x C-u upcase-region C-x C-v find-alternate-file C-x C-w write-file C-x C-x exchange-point-and-mark C-x C-z suspend-emacs C-x ESC Prefix Command C-x $ set-selective-display C-x ' expand-abbrev C-x ( start-kbd-macro C-x ) end-kbd-macro C-x + balance-windows C-x - shrink-window-if-larger-than-buffer C-x . set-fill-prefix C-x / point-to-register-compatibility-binding C-x 0 delete-window C-x 1 delete-other-windows C-x 2 split-window-vertically C-x 3 split-window-horizontally C-x 4 ctl-x-4-prefix C-x 5 ctl-x-5-prefix C-x 6 Prefix Command C-x ; set-comment-column C-x < scroll-left C-x = what-cursor-position C-x > scroll-right C-x [ backward-page C-x ] forward-page C-x ^ enlarge-window C-x ` next-error C-x a Prefix Command C-x b switch-to-buffer C-x d dired C-x e call-last-kbd-macro C-x f set-fill-column C-x g insert-register-compatibility-binding C-x h mark-whole-buffer C-x i insert-file C-x j jump-to-register-compatibility-binding C-x k kill-buffer C-x l count-lines-page C-x m mail C-x n Prefix Command C-x o other-window C-x q kbd-macro-query C-x r Prefix Command C-x s save-some-buffers C-x u advertised-undo C-x v Prefix Command C-x x copy-to-register-compatibility-binding C-x { shrink-window-horizontally C-x } enlarge-window-horizontally C-x DEL backward-kill-sentence C-x C-SPC pop-global-mark ESC C-@ mark-sexp ESC C-a beginning-of-defun ESC C-b backward-sexp ESC C-c exit-recursive-edit ESC C-d down-list ESC C-e end-of-defun ESC C-f forward-sexp ESC C-h mark-defun ESC LFD indent-new-comment-line ESC C-k kill-sexp ESC C-l reposition-window ESC C-n forward-list ESC C-o split-line ESC C-p backward-list ESC C-r isearch-backward-regexp ESC C-s isearch-forward-regexp ESC C-t transpose-sexps ESC C-u backward-up-list ESC C-v scroll-other-window ESC C-w append-next-kill ESC ESC eval-expression ESC C-\ indent-region ESC SPC set-mark-command ESC ! shell-command ESC # .. ESC $ ispell-word ESC % query-replace ESC ' abbrev-prefix-mark ESC ( insert-parentheses ESC ) move-past-close-and-reindent ESC , tags-loop-continue ESC - negative-argument ESC . find-tag ESC / dabbrev-expand ESC 0 .. ESC 9 digit-argument ESC ; indent-for-comment ESC < beginning-of-buffer ESC = count-lines-region ESC > end-of-buffer ESC @ mark-word ESC L glog ESC O Prefix Command ESC R glog-resume ESC \ delete-horizontal-space ESC ^ delete-indentation ESC a backward-sentence ESC b backward-word ESC c capitalize-word ESC d kill-word ESC e forward-sentence ESC f forward-word ESC g goto-line ESC h mark-paragraph ESC i tab-to-tab-stop ESC j indent-new-comment-line ESC k kill-sentence ESC l downcase-word ESC m back-to-indentation ESC p Prefix Command ESC q fill-paragraph ESC r move-to-window-line ESC t transpose-words ESC u upcase-word ESC v scroll-down ESC w kill-ring-save ESC x execute-extended-command ESC y hilit-yank-pop ESC z zap-to-char ESC { insert-parentheses ESC | shell-command-on-region ESC } forward-paragraph ESC ~ not-modified ESC DEL backward-kill-word ESC C-SPC mark-sexp ESC C-- negative-argument ESC C-9 digit-argument ESC C-8 digit-argument ESC C-7 digit-argument ESC C-6 digit-argument ESC C-5 digit-argument ESC C-4 digit-argument ESC C-3 digit-argument ESC C-2 digit-argument ESC C-1 digit-argument ESC C-0 digit-argument M-p r pdic-region M-p i pdic-input M-p w pdic-word M-O C Prefix Command M-O Y go32win-screen-size vertical-line C-mouse-2 mouse-split-window-vertically vertical-scroll-bar C-mouse-2 mouse-split-window-vertically mode-line S-double-mouse-1 mouse-split-window-horizontally mode-line double-mouse-1 mouse-split-window-vertically mode-line S-double-mouse-2 mouse-delete-other-windows mode-line double-mouse-2 mouse-delete-window mode-line S-mouse-2 mouse-select-window mode-line S-mouse-1 mouse-select-window mode-line mouse-2 mouse-select-window mode-line down-mouse-1 mouse-drag-mode-line mode-line drag-mouse-1 mouse-select-window mode-line mouse-1 mouse-select-window C-x C-k r toggle-display-direction C-x C-k C list-coding-system C-x C-k c list-coding-system-briefly C-x C-k P set-default-process-coding-system C-x C-k F set-default-file-coding-system C-x C-k T toggle-default-mc-flag C-x C-k p set-current-process-coding-system C-x C-k d set-display-coding-system C-x C-k i set-keyboard-coding-system C-x C-k f set-file-coding-system C-x C-k t toggle-mc-flag C-x ESC ESC repeat-complex-command C-x 4 C-o display-buffer C-x 4 b switch-to-buffer-other-window C-x 4 C-f find-file-other-window C-x 4 r find-file-read-only-other-window C-x 4 f find-file-other-window C-x 4 m mail-other-window C-x 4 . find-tag-other-window C-x 4 d dired-other-window C-x 4 a add-change-log-entry-other-window C-x 5 r find-file-read-only-other-frame C-x 5 C-f find-file-other-frame C-x 5 f find-file-other-frame C-x 5 b switch-to-buffer-other-frame C-x 5 m mail-other-frame C-x 5 . find-tag-other-frame C-x 5 d dired-other-frame C-x 6 RET tc-scroll-line C-x 6 DEL tc-scroll-down C-x 6 SPC tc-scroll-up C-x 6 } enlarge-window-horizontally C-x 6 { shrink-window-horizontally C-x 6 s tc-split C-x 6 o tc-associated-buffer C-x 6 C-l tc-recenter C-x 6 d tc-dissociate C-x 6 b tc-associate-buffer C-x 6 2 tc-two-columns C-x 6 1 tc-merge C-x a ' expand-abbrev C-x a e expand-abbrev C-x a - inverse-add-global-abbrev C-x a i Prefix Command C-x a + add-mode-abbrev C-x a g add-global-abbrev C-x a C-a add-mode-abbrev C-x a l add-mode-abbrev C-x n p narrow-to-page C-x n w widen C-x n n narrow-to-region C-x r l list-bookmarks C-x r m bookmark-set C-x r b bookmark-jump C-x r f frame-configuration-to-register C-x r w window-configuration-to-register C-x r t string-rectangle C-x r o open-rectangle C-x r y yank-rectangle C-x r d delete-rectangle C-x r k kill-rectangle C-x r c clear-rectangle C-x r r copy-rectangle-to-register C-x r g insert-register C-x r i insert-register C-x r x copy-to-register C-x r s copy-to-register C-x r j jump-to-register C-x r SPC point-to-register C-x r C-SPC point-to-register C-x r C-@ point-to-register C-x v ~ vc-version-other-window C-x v = vc-diff C-x v v vc-next-action C-x v u vc-revert-buffer C-x v s vc-create-snapshot C-x v r vc-retrieve-snapshot C-x v l vc-print-log C-x v i vc-register C-x v h vc-insert-headers C-x v d vc-directory C-x v c vc-cancel-version C-x v a vc-update-change-log M-O C = undo C-x a i l inverse-add-mode-abbrev C-x a i g inverse-add-global-abbrev  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

一言一行   $ 世界同時不況 : 株式という方法の脆さの現われか? 2009年は経済の混乱で幕開けすることになりました。 $ 雇用調整 : 勿体無いほどに、一部の国民は遊ばされてます。その上で保障やら助成金やら手当やら、これでは国体は弱体化しますよね。 $ CDS : (クレジット・デフォルト・スワップ) 債券破綻保険。支払が破綻しても保障します。恐いですね。 $ PBR : (株価純資産倍率) 割安感を判断する目安らしい。 $ シニョリッジ : 通貨の額面と発行費用との差額を独占できる基軸通貨発行権は、中世欧州の領主の呼び名のシニョールにちなんで「シニョリッジ」と呼ばれます。 $ 雇用保険法 : 2009/01/20 雇用保険法改正案を閣議決定。非正社員に適用拡大。 $ 定額給付金 : 2009/03/04 可決。効果の程は解らないが、趣旨を踏まえて消費すること。寄付するしないは自由であるが、口外しないほうが良いと思う。 $ 石田晴久 : 『プログラミング言語C』の翻訳者。2009/03/09 享年72歳、心筋梗塞で他界。ご冥福をお祈り致します。 $ 奥村晴彦 : 『C言語による最新アルゴリズム事典』の著者。LZSS compressor by Haruhiko Okumura, used Allegro. $ ホームレス : 2009/03/13 炊き出しが邪魔だという理由で中止。場所を提供するという考えは無いのか? 手を差し伸べるという心は無いのか? $ 雇用安全網 : 2009/03/14 失業手当てゼロの求職者に新給付制度。与野党が調整 http://www.asahi.com/job/news/TKY200903130332.html $ 政府広報オンライン : http://www.gov-online.go.jp/info/index.html $ テキスト起こし : 2009/03/15 NHK番組「総理にきく」全文 http://www.yomiuri.co.jp/politics/news/20090315-OYT1T00666.htm $ 北朝鮮 : 2009/04/04 朝鮮労働党関係筋「人工衛星を4日に打ち上げる」と明言。正午過ぎ、日本政府はテポドンが発射されたと誤報(誤探知)する。日本の恥。 $ 英語の方言 : 英語と米語。日本語ならば 〜です。〜だす。例えば、centre と center など。Allegroは centreを使用しています。pallete & palette $ 豚インフルエンザ : 2009/06/11 フェーズ6警戒レベル ==== 2009/04/30 フェーズ5警戒レベル ==== 2009/04/28 フェーズ4警戒レベル $ クオータニオン : (Quaternion, 四元数) オイラー角にみられる欠点はなく複雑な回転を自由自在に制御することができる。Allegro/examples/exquat.c $ SDL : (Simple DirectMedia Layer) C/C++ マルチメディアライブラリ http://www.libsdl.org/download-1.2.php $ VP6 : SDLアプリケーション FLVの再生を行います。 FLash Video player http://www.rarewares.org/others.php#flash-video-dec $ Allegro : C/C++ マルチメディアライブラリ http://www.talula.demon.co.uk/allegro/wip.html $ 国内発生早期 : 2009/05/16 新型インフルエンザ、国内での発症が認められたと厚生労働省からのアナウンスが有りました。 $ 青空文庫アクセスランキング : 2009年5月度 ドグラ・マグラ(夢野久作) 蟹工船(小林多喜二) 源氏物語(紫式部) http://www.aozora.gr.jp/access_ranking/ $ 金融資本主義の崩壊 : 金融工学の穴 2009/07/20 NHK番組「マネー資本主義」 公益資本主義、絆の資本主義、ものつくり資本主義、あたため資本主義。 $ 皆既日食 : 2009/07/22 日本から観測できる次回の皆既日食は26年後。ちなみに、前回の皆既日食は46年前。 $ 雇用情勢 : 2009年6月度の正社員の有効求人倍率は0.24倍で、前月と並び過去最低。http://www.mhlw.go.jp/houdou/2009/07/index.html $ モノリス(石版) : 火星の衛星「フォボス」と火星に、明らかに人工的な造形物。http://www.technobahn.com/news/200908070811 $ DTD : (Document Type Definition) XML や HTML などの書き方を定義する定義ファイル。 $ RSS : (RDF Site Summary) Webサイトの概要を表すための規格。 $ 9.58 : 19.19 ウサイン・ボルト(ジャマイカ) 100m 200m 世界新記録 $ 政権選択選挙 : 2009/08/30 衆院選挙 民主圧勝 $ 塗れる : [まみれる] /(v1) to be smeared/to be covered/ 汗に塗れる $ 塗す : [まぶす] /(v5s) to cover (smear, sprinkle) (with)/ $ 血塗 : [ちみどろ] /(n) blood-stained/desperate struggle/ $ H2B : 大型物資を国際宇宙ステーション(ISS)へ運べる補給機となる「HTV」を運ぶため開発された日本製大型ロケット。2009-09-11 打上げ成功 $ 合成ゴム : 天然ゴムは自動車のタイヤなど主に耐摩耗性を要求される製品に使用されます。日本で生産されるゴム製品の70%は合成ゴム(化学製品)が占めます。 $ 文節の伸縮 : kokodehakimonowonugu 一般的には SHIFT+カーソル によって文節長を操作します。「ここで履き物を脱ぐ」 『ここでは着物を脱ぐ』 $ 森鴎外 : 『区』の鴎で自署した書き入れが残されている(JISX0208:1997 日本規格協会 p.272) 区鳥(区点1810)第一水準漢字。 區鳥(区点9469)第三水準漢字。 $ ?! and !? : どちらが一般的か? 『 ?! JISX0213 区点0877 』 『 !? JISX0213 区点0878 』 docomo絵文字には「 !? 」が存在します。  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

自己紹介
住所神奈川県川崎市
氏名xaiax = = x akira x
性別
年齢
職業
環境Linux(Knoppix3.3_2004-02-20JP) + Windows95_OSR2 + ie5.5sp2 + 56Kダイヤルアップ接続
近況携帯電話? 持ってません。 2009/05/09
顔写真
 
 
################################################################ ################################ ############################## ################################################################ ################################################################ ###### ###### #### ###### #### #### ###### ###### ######## ## ############ #### ########## #### ## ######## ########## ######## #### #### ###### ########## ######## ## #### ###### #### ## ###### #### ## ######## ###### ###### #### #### #### ## ###### ###### ################################################################ ##########################$$&&&&&&&&$$$$))&&))))))))))))))))))&& ################$$##############&&))&&&&))))&&))))&&$$$$$$###### ##############$$$$################))))))))&&&&))&&&&&&$$$$###### ####$$######&&######################$$)))))))))))))))))))))))))) ##########$$############))))))))&&##$$$$)))))))))))))))))))))))) ######################$$(((((((((())####&&)))))))))))))))))))))) ####################&&(((( ))(()))))))))))))))))))))))))))) ##################$$))(( ))(())(( )))))))))))))))))))))) ######))$$######$$&&(((( (((($$(( (( (()))))))))))))))))) ))$$##))$$&&##$$&&))(( (( (((()))))))))))))))) ######$$####$$$$$$(( (( (( (( (()))))))))))))))) ########))##&&$$$$(( (((( ))(( (())))))))))&&)) ################$$(( (((((()) (((( (((()))))))))))) ################$$)) (((())(( (( (())(((()))))))))) ##################))(((( (( (((((((((()))))) ####################))(((( (( (( (()) ######################(( (( (((( (())(( ######################$$ (( (((((((( ####################$$$$&&(( (())(( (( ####################(((((((((((( (())(((( ####################&&(((((( ((&&(( (((((( ####################$$$$(())(($$&&##(((( ((  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
=============== (3) パソコン教室 バビバ == BaBiBa == http://xaiax.at.infoseek.co.jp/scribble.html since 2009-02-21 ============== ご意見、ご感想は、こちらへ gold_silver.gif

[PR]DoCoMoご利用の方必見!:無料の運命鑑定≪スピリチュアルの館≫