7: 2009-11-17 (火) 12:08:15 [4] | 現: 2024-01-08 (月) 12:58:56 k-tan[5] [6] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * 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してしまおうというこころみ。 | ||
Line 6: | Line 7: | ||
-質問とか感想とかはこめんと欄にレッツゴー(ページの一番下にあります)。 | -質問とか感想とかはこめんと欄にレッツゴー(ページの一番下にあります)。 | ||
- | *** 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バイト] | ||
Line 49: | Line 50: | ||
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() | ||
{ | { | ||
Line 69: | Line 70: | ||
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: | ||
Line 82: | Line 83: | ||
RESB(96); /* 12x1文字分 (12 * 1 * 8) */ | RESB(96); /* 12x1文字分 (12 * 1 * 8) */ | ||
} | } | ||
+ | |||
//-nask版:"hellon4.nas" [osa_dir2では 170バイト] | //-nask版:"hellon4.nas" [osa_dir2では 170バイト] | ||
Line 88: | Line 89: | ||
; "hellon4.nas":helloをnaskで記述した例 | ; "hellon4.nas":helloをnaskで記述した例 | ||
; stack:4k malloc:0k | ; stack:4k malloc:0k | ||
+ | |||
[FORMAT "WCOFF"] | [FORMAT "WCOFF"] | ||
[INSTRSET "i486p"] | [INSTRSET "i486p"] | ||
Line 102: | Line 103: | ||
MOV EBX,funcs | MOV EBX,funcs | ||
CALL 0xc7:0 | CALL 0xc7:0 | ||
+ | |||
[SECTION .data] | [SECTION .data] | ||
ALIGNB 4 | ALIGNB 4 | ||
Line 114: | Line 115: | ||
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: | ||
Line 124: | Line 125: | ||
textbox: | textbox: | ||
RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1文字分) | RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1文字分) | ||
+ | |||
- | + | *** 説明 [#c1c5144f] | |
- | *** 説明 | + | |
-概要: | -概要: | ||
--このプログラムは、ウィンドウを一つ開き、そのウィンドウに"hello, world"と表示するだけのプログラムです。 | --このプログラムは、ウィンドウを一つ開き、そのウィンドウに"hello, world"と表示するだけのプログラムです。 | ||
Line 180: | Line 181: | ||
- | *** まとめ | + | *** まとめ [#g11cfc5e] |
-これで好きな大きさのウィンドウを開き、ウィンドウにテキストボックスを貼り付けて、好きな色で文字をかけるようになったはずです。まだキー入力もタイマー制御もできないので、凝ったことはできませんが。 | -これで好きな大きさのウィンドウを開き、ウィンドウにテキストボックスを貼り付けて、好きな色で文字をかけるようになったはずです。まだキー入力もタイマー制御もできないので、凝ったことはできませんが。 | ||
-プログラムの終了のさせ方も分かったはずです。「面倒だから無限ループ」なんてしないで、ちゃんとlib_waitsignalしてください(見た目は同じようなものですが、負荷が大きく違いますから)。 | -プログラムの終了のさせ方も分かったはずです。「面倒だから無限ループ」なんてしないで、ちゃんとlib_waitsignalしてください(見た目は同じようなものですが、負荷が大きく違いますから)。 | ||
- | *** おまけ | + | *** おまけ [#ha341b52] |
-ここまではどれもただ芸もなく固定的なパラメータでAPIを呼び出しているだけですが、次(no.0001)からはパラメータに変数を使ったり、サブルーチンを作ったりします。 | -ここまではどれもただ芸もなく固定的なパラメータでAPIを呼び出しているだけですが、次(no.0001)からはパラメータに変数を使ったり、サブルーチンを作ったりします。 | ||
-続編はこちら → [[guide/wintro0001]] | -続編はこちら → [[guide/wintro0001]] | ||
Line 191: | Line 192: | ||
--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 |
(This host) = http://osask.net