サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
3: 2004-12-14 (火) 13:39:06 ソース 現: 2024-01-08 (月) 12:58:56 k-tan ソース
Line 1: Line 1:
-* wiki版のintroシリーズ no.0001+TITLE:x 
 +* wiki版のintroシリーズ no.0001 [#z51a3904]
-(by [[K]], 2004.12.13) -(by [[K]], 2004.12.13)
-これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。 -これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。
--これは[[guide/wintro0000]]の続きなので、それを読んでない人はそれを読んでね。 --これは[[guide/wintro0000]]の続きなので、それを読んでない人はそれを読んでね。
----最初から読みたい人は[[guide/ASKA]]や[[guide/nask]]からどうぞ。+---最初から読みたい人は[[guide/C]]や[[guide/ASKA]]や[[guide/nask]]からどうぞ。
--C言語をやる人はintroaを読むといいでしょう。ここのプログラムは、introaと同一内容です。 --C言語をやる人はintroaを読むといいでしょう。ここのプログラムは、introaと同一内容です。
-質問とか感想とかはこめんと欄にレッツゴー。 -質問とか感想とかはこめんと欄にレッツゴー。
-*** color +*** color [#q99770b1] 
--C版:"colorc1.c" [osa_dir2では 616バイト]+-C版:"colorc1.c" [tolset08では 546バイト] 
 +//-C版:"colorc1.c" [osa_dir2では 615バイト]
 /* "colorc1.c":colorをC言語で記述した例 */  /* "colorc1.c":colorをC言語で記述した例 */
- /*  stack:20k malloc:2k */ + /*  stack:4k malloc:2k */ 
 + 
 #include <guigui00.h>  #include <guigui00.h>
 #define AUTO_MALLOC    0  #define AUTO_MALLOC    0
 + 
 void setdec2(const int i, char *s);  void setdec2(const int i, char *s);
 + 
 void OsaskMain()  void OsaskMain()
 {  {
Line 23: Line 25:
     int i;      int i;
     static char msg[] = "color  0";      static char msg[] = "color  0";
 + 
     /* ライブラリ初期化 */      /* ライブラリ初期化 */
     lib_init(AUTO_MALLOC);      lib_init(AUTO_MALLOC);
 + 
     /* ウィンドウのオープン */      /* ウィンドウのオープン */
     window = lib_openwindow(AUTO_MALLOC, 0x0200, 20 * 8, 8 * 16);      window = lib_openwindow(AUTO_MALLOC, 0x0200, 20 * 8, 8 * 16);
Line 32: Line 34:
     textbox  = lib_opentextbox(0x0001, AUTO_MALLOC, 0, 20, 8, 0, 0, window, 0x00c0, 0);      textbox  = lib_opentextbox(0x0001, AUTO_MALLOC, 0, 20, 8, 0, 0, window, 0x00c0, 0);
     lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "colorc1");      lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "colorc1");
 + 
     /* メインルーチン */      /* メインルーチン */
     for (i = 0; i < 16; i += 2) {      for (i = 0; i < 16; i += 2) {
Line 40: Line 42:
         lib_putstring_ASCII(0x0000, 10, i / 2, textbox, i + 1, 0, msg);          lib_putstring_ASCII(0x0000, 10, i / 2, textbox, i + 1, 0, msg);
     }      }
 + 
     /* 終了 */      /* 終了 */
     lib_waitsignal(0x0001, 0, 0);      lib_waitsignal(0x0001, 0, 0);
 }  }
 + 
 void setdec2(const int i, char *s)  void setdec2(const int i, char *s)
 /* 注意:このルーチンでは、0~99までしか扱えない */  /* 注意:このルーチンでは、0~99までしか扱えない */
Line 54: Line 56:
     return;      return;
 }  }
- +  
--ASKA版:"colora1.ask" [osa_dir2では 240バイト]+-ASKA版:"colora1.ask" [tolset08では 210バイト] 
 +//-ASKA版:"colora1.ask" [osa_dir2では 239バイト]
 /* "colora1.ask":colorをASKAで記述した例 */  /* "colora1.ask":colorをASKAで記述した例 */
- /*  stack:20k malloc:0k */+ /*  stack:4k malloc:0k */
 segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'colora1.ask']");  segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'colora1.ask']");
 asmout("GLOBAL _OsaskMain");  asmout("GLOBAL _OsaskMain");
 + 
 void setdec2(); /* ALをDS:ESIに書き込む */  void setdec2(); /* 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;
Line 84: Line 87:
         i++;          i++;
     } while (i < 16);      } while (i < 16);
 + 
     asmout("MOV EBX,data.sleep"); CALL(0xc7, 0);      asmout("MOV EBX,data.sleep"); CALL(0xc7, 0);
 }  }
 + 
 void setdec2()  void setdec2()
 {  {
Line 105: Line 108:
     return;      return;
 }  }
 + 
 asmout("[SECTION .data]");  asmout("[SECTION .data]");
 + 
 void data()  void data()
 {  {
Line 124: Line 127:
     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 137: Line 140:
     RESB(1280);  /* 20x8文字分 (20 * 8 * 8) */      RESB(1280);  /* 20x8文字分 (20 * 8 * 8) */
 }  }
 + 
- +-nask版:"colorn1.nas" [tolset08では 209バイト] 
--nask版:"colorn1.nas" [osa_dir2では 238バイト]+//-nask版:"colorn1.nas" [osa_dir2では 237バイト]
 ; "colorn1.nas":colorをnaskで記述した例  ; "colorn1.nas":colorをnaskで記述した例
- ;  stack:20k malloc:0k + ;  stack:4k malloc:0k 
 + 
 [FORMAT "WCOFF"]  [FORMAT "WCOFF"]
 [INSTRSET "i486p"]  [INSTRSET "i486p"]
Line 149: Line 153:
 [BITS 32]  [BITS 32]
 [FILE "colorn1.nas"]  [FILE "colorn1.nas"]
 + 
 [SECTION .text]  [SECTION .text]
     GLOBAL _OsaskMain      GLOBAL _OsaskMain
 + 
 _OsaskMain:  _OsaskMain:
     MOV  EBX,init      MOV  EBX,init
Line 176: Line 180:
     MOV  EBX,sleep      MOV  EBX,sleep
     CALL 0xc7:0      CALL 0xc7:0
 + 
 setdec2:  setdec2:
     PUSH ECX      PUSH ECX
Line 193: Line 197:
     POP  ECX      POP  ECX
     RET      RET
 + 
 ; .で始まるラベルはローカルラベル。  ; .で始まるラベルはローカルラベル。
 ; ローカルラベルは、次のグローバルラベル宣言までが有効範囲。  ; ローカルラベルは、次のグローバルラベル宣言までが有効範囲。
 + 
 [SECTION .data]  [SECTION .data]
     ALIGNB 4      ALIGNB 4
Line 212: Line 216:
     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 222: Line 226:
 textbox:  textbox:
     RESB  64 + 20 * 8 * 8; テキストボックス構造体(20x8文字分)      RESB  64 + 20 * 8 * 8; テキストボックス構造体(20x8文字分)
 + 
- +*** 説明 [#n1fba734]
-*** 説明+
-概要: -概要:
--このプログラムは、ウィンドウを一つ開き、そのウィンドウに16色のメッセージを表示するだけのプログラムです。 --このプログラムは、ウィンドウを一つ開き、そのウィンドウに16色のメッセージを表示するだけのプログラムです。
--このプログラムを通じて、テキストに色を付ける方法と、数字表示の方法について説明します。 --このプログラムを通じて、テキストに色を付ける方法と、数字表示の方法について説明します。
---OSASKでは、printf()やitoa()などの便利な関数がまだ用意されていません。したがっ +--OSASKでは、printf()やitoa()などの便利な関数がまだ用意されていません。したがって、残念なことに数字を表示するのは少し面倒です。今回はitoaの代わりにsetdec2()という関数を作ってみました。
-て、残念なことに数字を表示するのは少し面倒です。今回はitoaの代わりにsetdec2()という関数を作ってみました。+
--これくらいの規模の例になると、CとASKAとnaskの文法の違いが出てきますので、見比べてみるのも面白いかもしれません。どれでもいいのですので、好きな言語を活用してください。 --これくらいの規模の例になると、CとASKAとnaskの文法の違いが出てきますので、見比べてみるのも面白いかもしれません。どれでもいいのですので、好きな言語を活用してください。
Line 241: Line 244:
---ASKA/naskのlib_putstring1も全く同様で、optの最下位ビットを1にすると、backcolorに0以外を指定できるようになります。 ---ASKA/naskのlib_putstring1も全く同様で、optの最下位ビットを1にすると、backcolorに0以外を指定できるようになります。
-*** まとめ+*** まとめ [#qffc9ebe]
-これで、テキストボックスを使った表示は一通りできるようになったはずです。許される範囲であちこちを改造して、把握してください。この程度のことなら、決して難しくないと感じていただけるはずです。 -これで、テキストボックスを使った表示は一通りできるようになったはずです。許される範囲であちこちを改造して、把握してください。この程度のことなら、決して難しくないと感じていただけるはずです。
-なお、C版でテキストボックスを広げる際には、malloc領域が不足する可能性があるので、malloc:オプションの値を大きくしてやってください。ASKA/naskでは、テキストボックス構造体のサイズを間違えなければ、mallocは0kのままでかまいません。 -なお、C版でテキストボックスを広げる際には、malloc領域が不足する可能性があるので、malloc:オプションの値を大きくしてやってください。ASKA/naskでは、テキストボックス構造体のサイズを間違えなければ、mallocは0kのままでかまいません。
-*** おまけ+*** おまけ [#w6e221c1]
-次回(no.0002)は時間制御関係を少しやります。これで、変化のあるテキスト表示ができるようになるでしょう。 -次回(no.0002)は時間制御関係を少しやります。これで、変化のあるテキスト表示ができるようになるでしょう。
 +-続編はこちら → [[guide/wintro0002]]
~ ~
~ ~
Line 257: Line 261:
--そんなわけで、僕としてはこの手法に沿った人からの質問にはできるだけ答えますが、そうでない人は自己努力不足ということで、十分な回答をしない場合があります。ご了承ください(これは具体的にどういうことかというと、問題あるソースだけではなく、問題なく動いていた段階のソースの提示を求めることがある、ということです)。 --そんなわけで、僕としてはこの手法に沿った人からの質問にはできるだけ答えますが、そうでない人は自己努力不足ということで、十分な回答をしない場合があります。ご了承ください(これは具体的にどういうことかというと、問題あるソースだけではなく、問題なく動いていた段階のソースの提示を求めることがある、ということです)。
-* こめんと欄 +* こめんと欄 [#s8db1e95] 
-#comment+-tolset08にあわせて修正。 -- [[K]] SIZE(10){2005-01-29 (土) 15:34:36} 
 + 
 +//#comment

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。