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 |