home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / rom / sample.c < prev    next >
Text File  |  1990-06-14  |  10KB  |  434 lines

  1. /********************************************************************/
  2. /*                                                                  */
  3. /*               sample.c -- sample program for rom.c               */
  4. /*                                                                  */
  5. /*                   written by  タケ (NAA01070)                    */
  6. /*                                                                  */
  7. /********************************************************************/
  8.  
  9. #include <string.h>
  10. #include <egb.h>
  11. #include <mos.h>
  12. #include <rom.h>
  13.  
  14. #define BLACK        0
  15. #define LOW_BLUE     1
  16. #define LOW_RED      2
  17. #define LOW_MAGENTA  3
  18. #define LOW_GREEN    4
  19. #define LOW_CYAN     5
  20. #define LOW_YELLOW   6
  21. #define LOW_WHITE    7
  22. #define GRAY         8
  23. #define BLUE         9
  24. #define RED         10
  25. #define MAGENTA     11
  26. #define GREEN       12
  27. #define CYAN        13
  28. #define YELLOW      14
  29. #define WHITE       15
  30.  
  31. #define EgbParaSize 64
  32.  
  33. char EGB_work[EgbWorkSize];
  34. char EGB_para[EgbParaSize];
  35. char MOS_work[MosWorkSize];
  36.  
  37. /********************** EGB and mouse functions *********************/
  38.  
  39. void clear_screen()
  40. {
  41.     EGB_clearScreen(EGB_work);
  42. }
  43.  
  44. void color(int color)
  45. {
  46.     EGB_color(EGB_work, 0, color);
  47. }
  48.  
  49. void background(int color)
  50. {
  51.     EGB_color(EGB_work, 1, color);
  52.     EGB_clearScreen(EGB_work);
  53. }
  54.  
  55. void paint_color(int color)
  56. {
  57.     EGB_color(EGB_work, 2, color);
  58. }
  59.  
  60. void paint_mode(int border, int paint, int background)
  61. {
  62.     EGB_paintMode(EGB_work, background << 8 | paint << 4 | border);
  63. }
  64.  
  65. void rectangle(int x1, int y1, int x2, int y2)
  66. {
  67.     WORD(EGB_para + 0) = x1;
  68.     WORD(EGB_para + 2) = y1;
  69.     WORD(EGB_para + 4) = x2;
  70.     WORD(EGB_para + 6) = y2;
  71.     EGB_rectangle(EGB_work, EGB_para);
  72. }
  73.  
  74. void symbol_sub(char *s)
  75. {
  76.     int limit;
  77.  
  78.     limit = sizeof(EGB_work) - 2;
  79.     if (strlen(s) <= limit) {
  80.         WORD(EGB_para + 0) = strlen(s);
  81.         strcpy(EGB_para + 2 , s);
  82.         EGB_connectSjisString(EGB_work, EGB_para);
  83.     }
  84.     else {
  85.         WORD(EGB_para + 0) = limit;        
  86.         strncpy(EGB_para + 2, s, limit);
  87.         EGB_connectSjisString(EGB_work, EGB_para);
  88.         symbol_sub(s + limit);
  89.     }
  90. }
  91.  
  92. void symbol(int x, int y, char *s, int xsize, int ysize)
  93. {
  94.     int limit;
  95.  
  96.     EGB_textZoom(EGB_work, 0, xsize, ysize);
  97.     EGB_textZoom(EGB_work, 1, xsize, ysize);
  98.     WORD(EGB_para + 0) = x;
  99.     WORD(EGB_para + 2) = y + ysize;
  100.     limit = sizeof(EGB_work) - 6;
  101.     if (strlen(s) <= limit) {
  102.         WORD(EGB_para + 4) = strlen(s);
  103.         strcpy(EGB_para + 6 , s);
  104.         EGB_sjisString(EGB_work, EGB_para);
  105.     }
  106.     else {
  107.         WORD(EGB_para + 4) = limit;        
  108.         strncpy(EGB_para + 6, s, limit);
  109.         EGB_sjisString(EGB_work, EGB_para);
  110.         symbol_sub(s + limit);
  111.     }
  112. }
  113.  
  114. void wait()
  115. {
  116.     int button, x, y;
  117.  
  118.     MOS_disp(1);
  119.     button = 0;
  120.     while (button == 0)
  121.         MOS_rdpos(&button, &x, &y);
  122.     MOS_disp(0);
  123. }
  124.  
  125. void delay(int n)
  126. {
  127.     for (n = n * 10000; n > 0; --n) 
  128.         ;
  129. }
  130.  
  131. /************************** opening sample **************************/
  132.  
  133. void opening_sample()
  134. {
  135.     ROM_putOpening(EGB_work, EGB_para,
  136.         (640 - W_OPENING) / 2, (480 - L_OPENING) / 2);
  137.     delay(50);
  138. }
  139.  
  140. /************************ system icon sample ************************/
  141.  
  142. struct SCENARIO {
  143.     int drive;
  144.     int num;
  145.     int read;
  146.     int set;
  147. };
  148.  
  149. #define X_SYS_MSG 0
  150. #define Y_SYS_MSG 450
  151. #define X_SYS_ICON 570
  152. #define Y_SYS_ICON 440
  153.  
  154. void sys_icon_sample()
  155. {
  156.     struct SCENARIO scenario[] = {
  157.         {3, 0, 0, 1},
  158.         {1, 0, 1, 1},
  159.         {1, 1, 1, 1},
  160.         {7, 2, 0, 0},
  161.         {7, 3, 0, 0},
  162.         {8, 0, 1, 0}
  163.     };
  164.     int i;
  165.  
  166.     paint_mode(2, 2, 0);
  167.     paint_color(BLACK);
  168.  
  169.     color(WHITE);
  170.     symbol(X_SYS_MSG, Y_SYS_MSG, "メモリ サイズ=4GB", 16, 16);
  171.     delay(50);
  172.  
  173.     for (i = 0; i < 6; ++i) {
  174.         color(BLACK);
  175.         rectangle(X_SYS_ICON, Y_SYS_ICON,
  176.             X_SYS_ICON + W_SYS_ICON, Y_SYS_ICON + L_SYS_ICON);
  177.         color(WHITE);
  178.         ROM_putSysIcon(EGB_work, EGB_para, 0, 10 + scenario[i].num,
  179.             X_SYS_ICON, Y_SYS_ICON);
  180.  
  181.         color(BLACK);
  182.         rectangle(X_SYS_ICON + W_SYS_ICON, Y_SYS_ICON,
  183.             X_SYS_ICON + W_SYS_ICON * 2, Y_SYS_ICON + L_SYS_ICON);
  184.         color(WHITE);
  185.         ROM_putSysIcon(EGB_work, EGB_para, 0, scenario[i].drive,
  186.             X_SYS_ICON + W_SYS_ICON, Y_SYS_ICON);
  187.         delay(100);
  188.  
  189.         if (scenario[i].read != 0) {
  190.             color(BLACK);
  191.             rectangle(X_SYS_MSG, Y_SYS_MSG,
  192.                 X_SYS_MSG + 16 * 14, Y_SYS_MSG + 16);
  193.             color(WHITE);
  194.             symbol(X_SYS_MSG, Y_SYS_MSG, "システム読み込み中です",
  195.                 16, 16);
  196.             color(BLACK);
  197.             rectangle(X_SYS_ICON, Y_SYS_ICON,
  198.                 X_SYS_ICON + W_SYS_ICON * 2, Y_SYS_ICON + L_SYS_ICON);
  199.             color(WHITE);
  200.             ROM_putSysIcon(EGB_work, EGB_para, 0, 9,  /* 時計 */
  201.                 X_SYS_ICON + W_SYS_ICON, Y_SYS_ICON);
  202.             delay(300);
  203.         }
  204.  
  205.         if (scenario[i].set != 0) {
  206.             color(BLACK);
  207.             rectangle(X_SYS_MSG, Y_SYS_MSG,
  208.                 X_SYS_MSG + 16 * 15, Y_SYS_MSG + 16);
  209.             color(WHITE);
  210.             symbol(X_SYS_MSG, Y_SYS_MSG,
  211.                  "システムをセットしてください", 16, 16);
  212.         }
  213.     }    
  214.     delay(100);
  215.     
  216.     /* すべてのアイコンの表示 */
  217.     clear_screen();
  218.     for (i = 1; i <= 15; ++i) {
  219.         ROM_putSysIcon(EGB_work, EGB_para, 0, i, /* アイコン */
  220.             65 + (W_SYS_ICON + 2) *(i - 1), 200);
  221.         ROM_putSysIcon(EGB_work, EGB_para, 1, i, /* 背景 */
  222.             65 + (W_SYS_ICON + 2) *(i - 1), 200 + L_SYS_ICON + 2);
  223.     }
  224. }
  225.  
  226. /********************* software keyboard sample *********************/
  227.  
  228. #define X_SIZE_BUTTON 5
  229. #define Y_SIZE_BUTTON 27
  230. #define X_KANJI_BUTTON 48
  231. #define Y_KANJI_BUTTON 116
  232.  
  233. #define X_KEYBOARD 100
  234. #define Y_KEYBOARD 100
  235.  
  236. void disp_keyboard(int x, int y)
  237. {
  238.     ROM_putTopLine(EGB_work, EGB_para, x, y);
  239.     ROM_putWindow(EGB_work, EGB_para, x, y + L_TOP_LINE);
  240.     ROM_putKeyboard(EGB_work, EGB_para, 1,
  241.         x, y + L_TOP_LINE + L_WINDOW);
  242.     ROM_putShadowV(EGB_work, EGB_para, x + W_TOP_LINE, y + 7);
  243.     ROM_putShadowH(EGB_work, EGB_para,
  244.         x + 6, y + L_TOP_LINE + L_WINDOW + L_KEYBOARD);
  245.     ROM_putSizeButton(EGB_work, EGB_para, 1,
  246.         x + X_SIZE_BUTTON, y + Y_SIZE_BUTTON);
  247.     ROM_putKanjiButton(EGB_work, EGB_para, 1,
  248.         x + X_KANJI_BUTTON, y + Y_KANJI_BUTTON);
  249. }
  250.  
  251. void software_keyboard_sample()
  252. {
  253.     int i;
  254.  
  255.     paint_mode(2, 2, 0);
  256.     paint_color(WHITE);
  257.  
  258.     /* かなの表示 */
  259.     disp_keyboard(X_KEYBOARD, Y_KEYBOARD);
  260.     MOS_setpos(450, 350);
  261.     MOS_disp(1);
  262.     delay(200);
  263.  
  264.     /* →カナ→英字→記号→かな */
  265.     for (i = 0; i < 4; ++i) {
  266.         if (i != 3)
  267.             MOS_setpos(X_KEYBOARD + 20, Y_KEYBOARD + 60 + 20 * i);
  268.         else
  269.             MOS_setpos(X_KEYBOARD + 20, Y_KEYBOARD + 60);
  270.         delay(50);
  271.  
  272.         MOS_disp(0);
  273.         color(WHITE);
  274.         rectangle(X_KEYBOARD, Y_KEYBOARD + L_TOP_LINE + L_WINDOW,
  275.             X_KEYBOARD + W_KEYBOARD - 1,
  276.             Y_KEYBOARD + L_TOP_LINE + L_WINDOW + L_KEYBOARD - 1);
  277.  
  278.         color(BLACK);
  279.         if (i != 3) {
  280.             ROM_putKeyboard(EGB_work, EGB_para, 2 + i,
  281.                 X_KEYBOARD, Y_KEYBOARD + L_TOP_LINE + L_WINDOW);
  282.             ROM_putSizeButton(EGB_work, EGB_para, 1,
  283.                 X_KEYBOARD + X_SIZE_BUTTON,
  284.                 Y_KEYBOARD + Y_SIZE_BUTTON);
  285.         }
  286.         else
  287.             disp_keyboard(X_KEYBOARD, Y_KEYBOARD);
  288.         MOS_disp(1);
  289.         delay(200);
  290.     }
  291.  
  292.     /* →半角→全角 */
  293.     for (i = 2; i >= 1; --i) {
  294.         MOS_setpos(X_KEYBOARD + 20, Y_KEYBOARD + 40);
  295.         delay(50);
  296.         MOS_disp(0);
  297.         color(WHITE);
  298.         rectangle(X_KEYBOARD + X_SIZE_BUTTON,
  299.             Y_KEYBOARD + Y_SIZE_BUTTON,
  300.             X_KEYBOARD + X_SIZE_BUTTON + W_SIZE_BUTTON - 1,
  301.             Y_KEYBOARD + Y_SIZE_BUTTON + L_SIZE_BUTTON - 1);
  302.         color(BLACK);
  303.         ROM_putSizeButton(EGB_work, EGB_para, i,
  304.             X_KEYBOARD + X_SIZE_BUTTON, Y_KEYBOARD + Y_SIZE_BUTTON);
  305.         MOS_disp(1);
  306.         delay(200);
  307.     }
  308.  
  309.     /* →単語登録→漢字変換 */
  310.     for (i = 2; i >= 1; --i) {
  311.         MOS_setpos(X_KEYBOARD + 224, Y_KEYBOARD + 38);
  312.         delay(50);
  313.         MOS_disp(0);
  314.         color(WHITE);
  315.         rectangle(X_KEYBOARD + X_KANJI_BUTTON,
  316.             Y_KEYBOARD + Y_KANJI_BUTTON,
  317.             X_KEYBOARD + X_KANJI_BUTTON + W_KANJI_BUTTON - 1,
  318.             Y_KEYBOARD + Y_KANJI_BUTTON + L_KANJI_BUTTON - 1);
  319.         color(BLACK);
  320.         ROM_putKanjiButton(EGB_work, EGB_para, i,
  321.             X_KEYBOARD + X_KANJI_BUTTON, Y_KEYBOARD + Y_KANJI_BUTTON);
  322.         MOS_disp(1);
  323.         delay(200);
  324.     }
  325.  
  326.     /* パーツの表示 */
  327.     MOS_disp(0);
  328.     clear_screen();
  329.     ROM_putTopLine(EGB_work, EGB_para, 60, 50);
  330.     ROM_putWindow(EGB_work, EGB_para, 60, 50 + L_TOP_LINE + 16);
  331.     ROM_putKeyboard(EGB_work, EGB_para, 1,
  332.         60, 50 + L_TOP_LINE + L_WINDOW + 16 * 2);
  333.     ROM_putShadowV(EGB_work, EGB_para,
  334.         60 + W_TOP_LINE + 16, 50 + L_TOP_LINE + L_WINDOW + 16 * 2);
  335.     ROM_putShadowH(EGB_work, EGB_para,
  336.         60 + 6, 50 + L_TOP_LINE + L_WINDOW + L_KEYBOARD + 16 * 3);
  337.     ROM_putSizeButton(EGB_work, EGB_para, 1, 6, 110);
  338.     ROM_putSizeButton(EGB_work, EGB_para, 2, 30, 110);
  339.     ROM_putKanjiButton(EGB_work, EGB_para, 1,
  340.         60 + X_KANJI_BUTTON,
  341.         50 + L_TOP_LINE + L_WINDOW + L_KEYBOARD + L_SHADOW_H
  342.             + 16 * 4);
  343.     ROM_putKanjiButton(EGB_work, EGB_para, 2,
  344.         60 + X_KANJI_BUTTON,
  345.         50 + L_TOP_LINE + L_WINDOW + L_KEYBOARD + L_SHADOW_H
  346.             + L_KANJI_BUTTON + 16 * 5);
  347.     for (i = 0; i < 3; ++i)
  348.         ROM_putKeyboard(EGB_work, EGB_para, i + 2,
  349.             370, 50 + 135 * i);
  350.     MOS_disp(1);
  351. }
  352.  
  353. /************************ calculator sample *************************/
  354.  
  355. void calculator_sample()
  356. {
  357.     MOS_disp(0);
  358.     clear_screen();
  359.     ROM_putCalculator(EGB_work, EGB_para,
  360.         (640 - W_CALCULATOR) / 2, (480 - L_CALCULATOR) / 2);
  361.     MOS_disp(1);
  362.     delay(50);
  363. }
  364.  
  365. /*************************** button sample **************************/
  366.  
  367. void button_sample()
  368. {
  369.     int i;
  370.  
  371.     MOS_disp(0);
  372.     clear_screen();
  373.     for (i = 1; i <= 8; ++i) 
  374.         ROM_putButton(EGB_work, EGB_para, i,
  375.             200 + 30 *(i - 1), 200);
  376.     MOS_disp(1);
  377.     delay(50);
  378. }
  379.     
  380. /************************* GEAR-icon sample *************************/
  381.  
  382. void GEAR_icon_sample()
  383. {
  384.     int i, j, k;
  385.  
  386.     for (i = 0; i < 2; ++i) {
  387.         MOS_disp(0);
  388.         clear_screen();
  389.         for (j = 0; j < 4; ++j) {
  390.             for (k = 0; k < 16; ++k) {
  391.                 ROM_putGearIcon(EGB_work, EGB_para, 0, /* アイコン */
  392.                     64 * i + j * 16 + k + 1,
  393.                     48 + (W_SYS_ICON + 2) * k, 50 + 100 * j);
  394.                 ROM_putGearIcon(EGB_work, EGB_para, 1, /* 背景 */
  395.                     64 * i + j * 16 + k + 1,
  396.                     48 + (W_SYS_ICON + 2) * k,
  397.                     50 + L_SYS_ICON + 2 + 100 * j);
  398.             }
  399.         }
  400.         MOS_disp(1);
  401.         delay(50);
  402.         wait();
  403.     }
  404. }
  405.  
  406. /*************************** sample: main ***************************/
  407.  
  408. void main()
  409. {
  410.     EGB_init(EGB_work, EgbWorkSize);
  411.     MOS_start(MOS_work, MosWorkSize);
  412.  
  413.     opening_sample();
  414.     sys_icon_sample();
  415.     wait();
  416.  
  417.     background(WHITE);
  418.     color(BLACK);
  419.  
  420.     software_keyboard_sample();
  421.     wait();
  422.  
  423.     calculator_sample();    
  424.     wait();
  425.     
  426.     button_sample();
  427.     wait();
  428.     
  429.     GEAR_icon_sample();
  430.     wait();
  431.  
  432.     MOS_end();
  433. }
  434.