ページへ戻る
印刷
guide/wintro0000
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:guide/wintro0000 をテンプレートにして作成
開始行:
TITLE:x
* wiki版のintroシリーズ no.0000
-(by [[K]], 2004.12.13)
-これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintro...
--これは[[guide/C]]や[[guide/ASKA]]や[[guide/nask]]の続き...
--C言語をやる人はintroaを読むといいでしょう。ここのプログ...
-質問とか感想とかはこめんと欄にレッツゴー(ページの一番下...
*** hello, world
//-C版:"helloc4.c" [osa_dir2では 509バイト]
-C版:"helloc4.c" [tolset08では 449バイト]
/* "helloc4.c":helloをC言語で記述した例 */
/* stack:4k malloc:1k */
#include <guigui00.h>
#define AUTO_MALLOC 0
void OsaskMain()
{
struct LIB_WINDOW *window;
struct LIB_TEXTBOX *wintitle, *textbox;
/* ライブラリの初期化(必ず最初にやらなければならない...
lib_init(AUTO_MALLOC);
/* ウィンドウのオープン */
window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48);
/* ウィンドウタイトル用のテキストボックスをオープン */
wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, ...
/* "hello, world"を表示するためのテキストボックスを...
textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 1...
/* ウィンドウタイトルを表示 */
lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "h...
/* メッセージを表示 */
lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "h...
/* 終了 */
lib_waitsignal(0x0001, 0, 0);
}
//-ASKA版:"helloa4.ask" [osa_dir2では 171バイト]
-ASKA版:"helloa4.ask" [tolset08では 136バイト]
/* "helloa4.ask":helloをASKAで記述した例 */
/* stack:4k malloc:0k */
segment CODE(USE32, PARA); default(code == CODE); asmout...
asmout("GLOBAL _OsaskMain");
void _OsaskMain()
{
asmout("MOV EBX,data.funcs"); CALL(0xc7, 0);
}
asmout("[SECTION .data]");
void data()
{
ALIGNB(4);
funcs:
asmout("DD 0x0004, data.work"); /* lib_init */
asmout("DD 0x0020, data.window, 0x0200, 136, 48"); /...
asmout("DD 0x0028, 0x1000, data.wintitle, 0, 7, 1, 0...
asmout("DD 0x0028, 0x0000, data.textbox, 0, 12, 1, 1...
asmout("DD 0x0040, 0x1000, 0, 0, data.wintitle, 0, 0...
asmout("DD 0x0040, 0x1000, 0, 0, data.textbox, 0, 0...
DD(0x0018, 0x0001, 0, 0); /* lib_waitsignal */
DD(0x0000); /* end of functions */
ALIGNB(8);
work:
RESB(256); /* func_initに必要な256バイトのワークエリ...
window:
RESB(128); /* ウィンドウ構造体 */
wintitle:
RESB(64); /* テキストボックス構造体 */
RESB(56); /* 7x1文字分 (7 * 1 * 8) */
textbox:
RESB(64); /* テキストボックス構造体 */
RESB(96); /* 12x1文字分 (12 * 1 * 8) */
}
//-nask版:"hellon4.nas" [osa_dir2では 170バイト]
-nask版:"hellon4.nas" [tolset08では 136バイト]
; "hellon4.nas":helloをnaskで記述した例
; stack:4k malloc:0k
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE "hellon4.nas"]
; 新出のOPTIONについて。定数計算をデフォルトでは符号付き...
; 指定しないとデフォルトは符号無し整数でおこなうことに...
[SECTION .text]
GLOBAL _OsaskMain
_OsaskMain:
MOV EBX,funcs
CALL 0xc7:0
[SECTION .data]
ALIGNB 4
funcs:
DD 0x0004, work ; lib_init
DD 0x0020, window, 0x0200, 18 * 8, 3 * 16 ; lib_open...
DD 0x0028, 0x1000, wintitle, 0, 7, 1, 0, 0, window, ...
DD 0x0028, 0x0000, textbox, 0, 12, 1, 16, 16, window...
DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 7, 'hel...
DD 0x0040, 0x1000, 0, 0, textbox, 0, 0, 0, 12, 'hel...
DD 0x0018, 0x0001, 0, 0 ; lib_waitsignal
DD 0x0000 ; end of functions
ALIGNB 8
work:
RESB 256 ; func_initに必要な256バイトのワークエリア
window:
RESB 128 ; ウィンドウ構造体
wintitle:
RESB 64 + 7 * 1 * 8; テキストボックス構造体(7x1文...
textbox:
RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1...
*** 説明
-概要:
--このプログラムは、ウィンドウを一つ開き、そのウィンドウ...
--このプログラムを通じて、OSASKアプリケーションの基本的な...
--OSASKアプリは基本的に、「ぐいぐい00ライブラリ」と呼ばれ...
ほとんどすべての入出力処理を行います。ですから、このライ...
--OSASKでは、「ウィンドウ」に「テキストボックス」を貼付け...
--また文字を書くために、C言語では標準的なprintf()などを使...
--なおプログラムを見ればすぐに分かっていただけると思いま...
--stackとmallocについて説明します。プロジェクトを作ってMa...
--C版とASKA版を見比べると、まあまあ似ていることが分かりま...
--なお、Cでの関数呼び出しはまさにスタック渡しですが、これ...
--C版では説明の簡便のためにAUTO_MALLOCを使っていますが、...
-APIの説明:
--lib_init(work) :
---APIを利用するために、かならず最初に行わなければならな...
---C版でlib_init関数を使う場合workに0を指定することもでき...
---この初期化作業やワークエリアは何だと思うかもしれません...
---APIでは、指定されたワークエリアやファンクション列はす...
--lib_openwindow(window, slot, x_size, y_size) :
---ウィンドウをオープンします。最初の引数windowは128バイ...
---x_sizeとy_sizeはウィンドウの大きさをドット単位で指定し...
---一つのタスクが複数のウィンドウを持つことが許されていま...
ウィンドウのslotは0x210、3つめは0x220という風に数を増や...
も全て自動的に閉じられてタスクは終了させられます。このデ...
--lib_opentextbox(opt, textbox, backcolor, x_size, y_size...
---ウィンドウにテキストボックスを貼ります。機能番号は0x00...
---opt == 0x1000 のとき
---ウィンドウタイトル専用のテキストボックスを作ります(''...
---ここで一つルールがあり、x_sizeは(ウィンドウのx_size / ...
---この関係式はもっと分かりやすくかけます。以下の不等式が...
決定してください。
タイトルのx_size * 8 + 80 <= ウィンドウのx_size
---opt == 0 のとき
---一般のテキストボックスを作ります。とりあえずbackcolor...
SKでは解消される制限です)。y_posにはそういう制限はありま...
--lib_putstring_ASCII(opt, x_pos, y_pos, textbox, color, ...
---テキストボックスに文字を出力します。optとbackcolorは0...
---strは表示したい文字列です。この関数は'\n'や'\t'を認識...
---なお、textboxがウィンドウタイトル専用のテキストボック...
---Cのlib_putstring_ASCIIは直接APIを呼ばずに、バンドルの...
---lib_putstring1(opt, x_pos, y_pos, textbox, color, back...
---optは0x1000を指定します。これは即値モード、8bitキャラ...
--lib_waitsignal(opt, signaldw, nest) :
---optを1にすれば、タスクはスリープし、事実上終了します。...
ください。機能番号は0x0018です。
*** まとめ
-これで好きな大きさのウィンドウを開き、ウィンドウにテキス...
-プログラムの終了のさせ方も分かったはずです。「面倒だから...
*** おまけ
-ここまではどれもただ芸もなく固定的なパラメータでAPIを呼...
-続編はこちら → [[guide/wintro0001]]
-ここに出てくるnaskの命令についての簡単な説明:
--http://k.osask.jp/wiki/index.php?nask/guide000
* こめんと欄
-tolset08にあわせて修正。 -- [[K]] SIZE(10){2005-01-28 (...
#comment
終了行:
TITLE:x
* wiki版のintroシリーズ no.0000
-(by [[K]], 2004.12.13)
-これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintro...
--これは[[guide/C]]や[[guide/ASKA]]や[[guide/nask]]の続き...
--C言語をやる人はintroaを読むといいでしょう。ここのプログ...
-質問とか感想とかはこめんと欄にレッツゴー(ページの一番下...
*** hello, world
//-C版:"helloc4.c" [osa_dir2では 509バイト]
-C版:"helloc4.c" [tolset08では 449バイト]
/* "helloc4.c":helloをC言語で記述した例 */
/* stack:4k malloc:1k */
#include <guigui00.h>
#define AUTO_MALLOC 0
void OsaskMain()
{
struct LIB_WINDOW *window;
struct LIB_TEXTBOX *wintitle, *textbox;
/* ライブラリの初期化(必ず最初にやらなければならない...
lib_init(AUTO_MALLOC);
/* ウィンドウのオープン */
window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48);
/* ウィンドウタイトル用のテキストボックスをオープン */
wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, ...
/* "hello, world"を表示するためのテキストボックスを...
textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 1...
/* ウィンドウタイトルを表示 */
lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "h...
/* メッセージを表示 */
lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "h...
/* 終了 */
lib_waitsignal(0x0001, 0, 0);
}
//-ASKA版:"helloa4.ask" [osa_dir2では 171バイト]
-ASKA版:"helloa4.ask" [tolset08では 136バイト]
/* "helloa4.ask":helloをASKAで記述した例 */
/* stack:4k malloc:0k */
segment CODE(USE32, PARA); default(code == CODE); asmout...
asmout("GLOBAL _OsaskMain");
void _OsaskMain()
{
asmout("MOV EBX,data.funcs"); CALL(0xc7, 0);
}
asmout("[SECTION .data]");
void data()
{
ALIGNB(4);
funcs:
asmout("DD 0x0004, data.work"); /* lib_init */
asmout("DD 0x0020, data.window, 0x0200, 136, 48"); /...
asmout("DD 0x0028, 0x1000, data.wintitle, 0, 7, 1, 0...
asmout("DD 0x0028, 0x0000, data.textbox, 0, 12, 1, 1...
asmout("DD 0x0040, 0x1000, 0, 0, data.wintitle, 0, 0...
asmout("DD 0x0040, 0x1000, 0, 0, data.textbox, 0, 0...
DD(0x0018, 0x0001, 0, 0); /* lib_waitsignal */
DD(0x0000); /* end of functions */
ALIGNB(8);
work:
RESB(256); /* func_initに必要な256バイトのワークエリ...
window:
RESB(128); /* ウィンドウ構造体 */
wintitle:
RESB(64); /* テキストボックス構造体 */
RESB(56); /* 7x1文字分 (7 * 1 * 8) */
textbox:
RESB(64); /* テキストボックス構造体 */
RESB(96); /* 12x1文字分 (12 * 1 * 8) */
}
//-nask版:"hellon4.nas" [osa_dir2では 170バイト]
-nask版:"hellon4.nas" [tolset08では 136バイト]
; "hellon4.nas":helloをnaskで記述した例
; stack:4k malloc:0k
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE "hellon4.nas"]
; 新出のOPTIONについて。定数計算をデフォルトでは符号付き...
; 指定しないとデフォルトは符号無し整数でおこなうことに...
[SECTION .text]
GLOBAL _OsaskMain
_OsaskMain:
MOV EBX,funcs
CALL 0xc7:0
[SECTION .data]
ALIGNB 4
funcs:
DD 0x0004, work ; lib_init
DD 0x0020, window, 0x0200, 18 * 8, 3 * 16 ; lib_open...
DD 0x0028, 0x1000, wintitle, 0, 7, 1, 0, 0, window, ...
DD 0x0028, 0x0000, textbox, 0, 12, 1, 16, 16, window...
DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 7, 'hel...
DD 0x0040, 0x1000, 0, 0, textbox, 0, 0, 0, 12, 'hel...
DD 0x0018, 0x0001, 0, 0 ; lib_waitsignal
DD 0x0000 ; end of functions
ALIGNB 8
work:
RESB 256 ; func_initに必要な256バイトのワークエリア
window:
RESB 128 ; ウィンドウ構造体
wintitle:
RESB 64 + 7 * 1 * 8; テキストボックス構造体(7x1文...
textbox:
RESB 64 + 12 * 1 * 8; テキストボックス構造体(12x1...
*** 説明
-概要:
--このプログラムは、ウィンドウを一つ開き、そのウィンドウ...
--このプログラムを通じて、OSASKアプリケーションの基本的な...
--OSASKアプリは基本的に、「ぐいぐい00ライブラリ」と呼ばれ...
ほとんどすべての入出力処理を行います。ですから、このライ...
--OSASKでは、「ウィンドウ」に「テキストボックス」を貼付け...
--また文字を書くために、C言語では標準的なprintf()などを使...
--なおプログラムを見ればすぐに分かっていただけると思いま...
--stackとmallocについて説明します。プロジェクトを作ってMa...
--C版とASKA版を見比べると、まあまあ似ていることが分かりま...
--なお、Cでの関数呼び出しはまさにスタック渡しですが、これ...
--C版では説明の簡便のためにAUTO_MALLOCを使っていますが、...
-APIの説明:
--lib_init(work) :
---APIを利用するために、かならず最初に行わなければならな...
---C版でlib_init関数を使う場合workに0を指定することもでき...
---この初期化作業やワークエリアは何だと思うかもしれません...
---APIでは、指定されたワークエリアやファンクション列はす...
--lib_openwindow(window, slot, x_size, y_size) :
---ウィンドウをオープンします。最初の引数windowは128バイ...
---x_sizeとy_sizeはウィンドウの大きさをドット単位で指定し...
---一つのタスクが複数のウィンドウを持つことが許されていま...
ウィンドウのslotは0x210、3つめは0x220という風に数を増や...
も全て自動的に閉じられてタスクは終了させられます。このデ...
--lib_opentextbox(opt, textbox, backcolor, x_size, y_size...
---ウィンドウにテキストボックスを貼ります。機能番号は0x00...
---opt == 0x1000 のとき
---ウィンドウタイトル専用のテキストボックスを作ります(''...
---ここで一つルールがあり、x_sizeは(ウィンドウのx_size / ...
---この関係式はもっと分かりやすくかけます。以下の不等式が...
決定してください。
タイトルのx_size * 8 + 80 <= ウィンドウのx_size
---opt == 0 のとき
---一般のテキストボックスを作ります。とりあえずbackcolor...
SKでは解消される制限です)。y_posにはそういう制限はありま...
--lib_putstring_ASCII(opt, x_pos, y_pos, textbox, color, ...
---テキストボックスに文字を出力します。optとbackcolorは0...
---strは表示したい文字列です。この関数は'\n'や'\t'を認識...
---なお、textboxがウィンドウタイトル専用のテキストボック...
---Cのlib_putstring_ASCIIは直接APIを呼ばずに、バンドルの...
---lib_putstring1(opt, x_pos, y_pos, textbox, color, back...
---optは0x1000を指定します。これは即値モード、8bitキャラ...
--lib_waitsignal(opt, signaldw, nest) :
---optを1にすれば、タスクはスリープし、事実上終了します。...
ください。機能番号は0x0018です。
*** まとめ
-これで好きな大きさのウィンドウを開き、ウィンドウにテキス...
-プログラムの終了のさせ方も分かったはずです。「面倒だから...
*** おまけ
-ここまではどれもただ芸もなく固定的なパラメータでAPIを呼...
-続編はこちら → [[guide/wintro0001]]
-ここに出てくるnaskの命令についての簡単な説明:
--http://k.osask.jp/wiki/index.php?nask/guide000
* こめんと欄
-tolset08にあわせて修正。 -- [[K]] SIZE(10){2005-01-28 (...
#comment
ページ名: