7: 2009-11-17 (火) 12:08:15 |
現: 2024-01-08 (月) 12:58:56 k-tan |
- | * wiki版のintroシリーズ no.0000 | + | TITLE:x |
| + | * wiki版のintroシリーズ no.0000 [#da6ae250] |
| -(by [[K]], 2004.12.13) | | -(by [[K]], 2004.12.13) |
| -これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。 | | -これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。 |
| -質問とか感想とかはこめんと欄にレッツゴー(ページの一番下にあります)。 | | -質問とか感想とかはこめんと欄にレッツゴー(ページの一番下にあります)。 |
| | | |
- | *** hello, world | + | *** hello, world [#w4bfabe9] |
| //-C版:"helloc4.c" [osa_dir2では 509バイト] | | //-C版:"helloc4.c" [osa_dir2では 509バイト] |
| -C版:"helloc4.c" [tolset08では 449バイト] | | -C版:"helloc4.c" [tolset08では 449バイト] |
| /* "helloc4.c":helloをC言語で記述した例 */ | | /* "helloc4.c":helloをC言語で記述した例 */ |
| /* stack:4k malloc:1k */ | | /* stack:4k malloc:1k */ |
| + | |
| #include <guigui00.h> | | #include <guigui00.h> |
| + | |
| #define AUTO_MALLOC 0 | | #define AUTO_MALLOC 0 |
| + | |
| void OsaskMain() | | void OsaskMain() |
| { | | { |
| struct LIB_WINDOW *window; | | struct LIB_WINDOW *window; |
| struct LIB_TEXTBOX *wintitle, *textbox; | | struct LIB_TEXTBOX *wintitle, *textbox; |
| + | |
| /* ライブラリの初期化(必ず最初にやらなければならない) */ | | /* ライブラリの初期化(必ず最初にやらなければならない) */ |
| lib_init(AUTO_MALLOC); | | lib_init(AUTO_MALLOC); |
| + | |
| /* ウィンドウのオープン */ | | /* ウィンドウのオープン */ |
| window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48); | | window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48); |
| + | |
| /* ウィンドウタイトル用のテキストボックスをオープン */ | | /* ウィンドウタイトル用のテキストボックスをオープン */ |
| wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 7, 1, 0, 0, window, 0x00c0, 0); | | wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 7, 1, 0, 0, window, 0x00c0, 0); |
| + | |
| /* "hello, world"を表示するためのテキストボックスをオープン */ | | /* "hello, world"を表示するためのテキストボックスをオープン */ |
| textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 12, 1, 16, 16, window, 0x00c0, 0); | | textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 12, 1, 16, 16, window, 0x00c0, 0); |
| + | |
| /* ウィンドウタイトルを表示 */ | | /* ウィンドウタイトルを表示 */ |
| lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "helloc4"); | | lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "helloc4"); |
| + | |
| /* メッセージを表示 */ | | /* メッセージを表示 */ |
| lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "hello, world"); | | lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "hello, world"); |
| + | |
| /* 終了 */ | | /* 終了 */ |
| lib_waitsignal(0x0001, 0, 0); | | lib_waitsignal(0x0001, 0, 0); |
| } | | } |
| + | |
| //-ASKA版:"helloa4.ask" [osa_dir2では 171バイト] | | //-ASKA版:"helloa4.ask" [osa_dir2では 171バイト] |
| -ASKA版:"helloa4.ask" [tolset08では 136バイト] | | -ASKA版:"helloa4.ask" [tolset08では 136バイト] |
| segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'helloa4.ask']"); | | segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'helloa4.ask']"); |
| asmout("GLOBAL _OsaskMain"); | | asmout("GLOBAL _OsaskMain"); |
| + | |
| void _OsaskMain() | | void _OsaskMain() |
| { | | { |
| asmout("MOV EBX,data.funcs"); CALL(0xc7, 0); | | asmout("MOV EBX,data.funcs"); CALL(0xc7, 0); |
| } | | } |
| + | |
| asmout("[SECTION .data]"); | | asmout("[SECTION .data]"); |
| + | |
| void data() | | void data() |
| { | | { |
| DD(0x0018, 0x0001, 0, 0); /* lib_waitsignal */ | | DD(0x0018, 0x0001, 0, 0); /* lib_waitsignal */ |
| DD(0x0000); /* end of functions */ | | DD(0x0000); /* end of functions */ |
| + | |
| ALIGNB(8); | | ALIGNB(8); |
| work: | | work: |
| RESB(96); /* 12x1文字分 (12 * 1 * 8) */ | | RESB(96); /* 12x1文字分 (12 * 1 * 8) */ |
| } | | } |
| + | |
| | | |
| //-nask版:"hellon4.nas" [osa_dir2では 170バイト] | | //-nask版:"hellon4.nas" [osa_dir2では 170バイト] |
| ; "hellon4.nas":helloをnaskで記述した例 | | ; "hellon4.nas":helloをnaskで記述した例 |
| ; stack:4k malloc:0k | | ; stack:4k malloc:0k |
| + | |
| [FORMAT "WCOFF"] | | [FORMAT "WCOFF"] |
| [INSTRSET "i486p"] | | [INSTRSET "i486p"] |
| MOV EBX,funcs | | MOV EBX,funcs |
| CALL 0xc7:0 | | CALL 0xc7:0 |
| + | |
| [SECTION .data] | | [SECTION .data] |
| ALIGNB 4 | | ALIGNB 4 |
| DD 0x0018, 0x0001, 0, 0 ; lib_waitsignal | | DD 0x0018, 0x0001, 0, 0 ; lib_waitsignal |
| DD 0x0000 ; end of functions | | DD 0x0000 ; end of functions |
| + | |
| ALIGNB 8 | | ALIGNB 8 |
| work: | | work: |
| textbox: | | textbox: |
| RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1文字分) | | RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1文字分) |
| + | |
| | | |
- | | + | *** 説明 [#c1c5144f] |
- | *** 説明 | + | |
| -概要: | | -概要: |
| --このプログラムは、ウィンドウを一つ開き、そのウィンドウに"hello, world"と表示するだけのプログラムです。 | | --このプログラムは、ウィンドウを一つ開き、そのウィンドウに"hello, world"と表示するだけのプログラムです。 |
| | | |
| | | |
- | *** まとめ | + | *** まとめ [#g11cfc5e] |
| -これで好きな大きさのウィンドウを開き、ウィンドウにテキストボックスを貼り付けて、好きな色で文字をかけるようになったはずです。まだキー入力もタイマー制御もできないので、凝ったことはできませんが。 | | -これで好きな大きさのウィンドウを開き、ウィンドウにテキストボックスを貼り付けて、好きな色で文字をかけるようになったはずです。まだキー入力もタイマー制御もできないので、凝ったことはできませんが。 |
| -プログラムの終了のさせ方も分かったはずです。「面倒だから無限ループ」なんてしないで、ちゃんとlib_waitsignalしてください(見た目は同じようなものですが、負荷が大きく違いますから)。 | | -プログラムの終了のさせ方も分かったはずです。「面倒だから無限ループ」なんてしないで、ちゃんとlib_waitsignalしてください(見た目は同じようなものですが、負荷が大きく違いますから)。 |
| | | |
- | *** おまけ | + | *** おまけ [#ha341b52] |
| -ここまではどれもただ芸もなく固定的なパラメータでAPIを呼び出しているだけですが、次(no.0001)からはパラメータに変数を使ったり、サブルーチンを作ったりします。 | | -ここまではどれもただ芸もなく固定的なパラメータでAPIを呼び出しているだけですが、次(no.0001)からはパラメータに変数を使ったり、サブルーチンを作ったりします。 |
| -続編はこちら → [[guide/wintro0001]] | | -続編はこちら → [[guide/wintro0001]] |
| --http://k.osask.jp/wiki/index.php?nask/guide000 | | --http://k.osask.jp/wiki/index.php?nask/guide000 |
| | | |
- | * こめんと欄 | + | * こめんと欄 [#i3eab171] |
| -tolset08にあわせて修正。 -- [[K]] SIZE(10){2005-01-28 (金) 23:21:52} | | -tolset08にあわせて修正。 -- [[K]] SIZE(10){2005-01-28 (金) 23:21:52} |
| | | |
| #comment | | #comment |