1: 2004-12-15 (水) 18:03:19 |
2: 2004-12-15 (水) 18:06:26 |
| | | |
| | | |
- | -ASKA版:"colora1.ask" [osa_dir2では 240バイト] | + | -ASKA版:"cntdwna1.ask" [osa_dir2では バイト] |
- | /* "colora1.ask":colorをASKAで記述した例 */ | + | /* "cntdwna1.ask":countdwnをASKAで記述した例 */ |
| /* stack:20k malloc:0k */ | | /* stack:20k malloc:0k */ |
- | segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'colora1.ask']"); | + | segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'cntdwna1.ask']"); |
| asmout("GLOBAL _OsaskMain"); | | asmout("GLOBAL _OsaskMain"); |
| | | |
- | void setdec2(); /* ALをDS:ESIに書き込む */ | + | void setdec3(); /* ALをDS:ESIに書き込む */ |
| | | |
| void _OsaskMain() | | void _OsaskMain() |
| { | | { |
| asmout("MOV EBX,data.init"); CALL(0xc7, 0); | | asmout("MOV EBX,data.init"); CALL(0xc7, 0); |
| + | // |
| unsigned char i == AL, x == CL, y == CH; | | unsigned char i == AL, x == CL, y == CH; |
| i = 0; | | i = 0; |
| wintitle: | | wintitle: |
| RESB(64); /* テキストボックス構造体 */ | | RESB(64); /* テキストボックス構造体 */ |
- | RESB(56); /* 7x1文字分 (7 * 1 * 8) */ | + | RESB(64); /* 8x1文字分 (8 * 1 * 8) */ |
| textbox: | | textbox: |
| RESB(64); /* テキストボックス構造体 */ | | RESB(64); /* テキストボックス構造体 */ |
| -これで、テキストボックスを使った表示は一通りできるようになったはずです。許される範囲であちこちを改造して、把握してください。この程度のことなら、決して難しくないと感じていただけるはずです。 | | -これで、テキストボックスを使った表示は一通りできるようになったはずです。許される範囲であちこちを改造して、把握してください。この程度のことなら、決して難しくないと感じていただけるはずです。 |
| -なお、C版でテキストボックスを広げる際には、malloc領域が不足する可能性があるので、malloc:オプションの値を大きくしてやってください。ASKA/naskでは、テキストボックス構造体のサイズを間違えなければ、mallocは0kのままでかまいません。 | | -なお、C版でテキストボックスを広げる際には、malloc領域が不足する可能性があるので、malloc:オプションの値を大きくしてやってください。ASKA/naskでは、テキストボックス構造体のサイズを間違えなければ、mallocは0kのままでかまいません。 |
| + | |
| + | -''以上未完成'' |
| | | |
| *** おまけ | | *** おまけ |
- | -次回(no.0002)は時間制御関係を少しやります。これで、変化のあるテキスト表示ができるようになるでしょう。 | + | -次回(no.0003)はキー入力を少しやります。これで、キー入力を反映できるようになるでしょう。 |
- | ~ | + | -読んでいる人が追いつけないほど先に進んでもしょうがないので、こめんと欄でリクエストきたら次回を書き始めます。 |
- | ~ | + | |
- | -''実際の開発をするにあたって'' | + | |
- | --このwintroシリーズを読んでいる人は、introシリーズを読んでいない可能性もあるので、大事な注意を書いておきます。 | + | |
- | --初心者がよくやることの一つに、プログラムをゼロから作り始めようとして失敗する、というのがあります。これは、いきなりプロジェクトを作って、まっさらなテキストファイルからプログラムを書いていく、ということを意味します。これはたいていうまくいきません。これはOSASKアプリ開発に限らず、他のOSのアプリ開発を最初にやろうとしたときもでも同じことです。 | + | |
- | --うまい方法は、まず、適当なサンプルアプリを見つけてきて(helloでもいいです)、それをコピーしたところから出発することです。これを少し改造し(たとえばウィンドウサイズとウィンドウタイトルを望みの大きさに変えて)、改造したらすぐに make run してみます。それでうまく動いたらバンザイです。さらに少し改造を加えて、自分の目的のアプリに近づけていきます。・・・もし make run してうまく動かなければ、どこが悪いのかをウンウンうなったりするのではなく、まずは動いていた段階に帰ります。そして少しずつ改造を戻していくことによって、どの変更で動かなくなったのかを突き止めるのです。 | + | |
- | --プログラムに経験があると過信している人ほど、この作業をやりません。まっさらなところから書き始めてつまづいて、それでそのプログラムを必至に眺めて、「おかしいところはないはずなんだけどなあ」とかいいます。もしくは、まめに make run するのをいやがって、一度にたくさん改造して、それでやっぱりバグを抱えて、何も分からなくなります。 | + | |
- | --この「こまめに make run 」「おかしくなったらつべこべ言わずに動いていた段階に一度戻る」を忠実に守った人が、一番速く上達します。初心者を脱した後でさえ、この方法で救われることを僕は何度も経験しています。 | + | |
- | --そんなわけで、僕としてはこの手法に沿った人からの質問にはできるだけ答えますが、そうでない人は自己努力不足ということで、十分な回答をしない場合があります。ご了承ください(これは具体的にどういうことかというと、問題あるソースだけではなく、問題なく動いていた段階のソースの提示を求めることがある、ということです)。 | + | |
| | | |
| * こめんと欄 | | * こめんと欄 |
| #comment | | #comment |