home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Heaven Sunny 2 / APPARE2.BIN / oh_towns / install / instlib.c < prev    next >
Text File  |  1995-06-20  |  9KB  |  367 lines

  1. /*************************************************************************
  2. *    ライブラリ
  3. *************************************************************************/
  4.  
  5. int        _puts_bold(int x, int y, int col, char *s);
  6.  
  7. /*************************************************************************
  8. *    システム行クリア
  9. *************************************************************************/
  10.  
  11. int        syl_clear()
  12. {
  13.     char    *msg, tmp[80];
  14.  
  15.     SCN_wrtPage(1);
  16.     MOS_DEC();
  17.  
  18. #ifdef    __APPARE2__
  19.     sprintf(tmp,"PRESENTED by %c%c", Gaiji_ohFMTOWNS>>8, Gaiji_ohFMTOWNS&0xFF );
  20.     msg = "天晴CD Vol.2 鳳凰の巻";
  21.  
  22.     SCN_boxf(0,464,639,479,PSET,ColMesh);
  23.     _puts_bold(           232       ,464  ,     PltNoWhite,msg);
  24.     SCN_puts(Fnt16x16,tmp,232+23*8+1,464+1,PSET,C_MBLACK  ,0);
  25.     SCN_puts(Fnt16x16,tmp,232+23*8  ,464  ,PSET,PltNoWhite,0);
  26. #else
  27.     msg = "TaroPYON SoftWare collection installer";
  28.  
  29.     SCN_boxf(0,464,639,479,PSET,ColMesh);
  30. /*    _puts_bold(           232       ,464  ,     PltNoWhite,msg); */
  31.     SCN_puts(Fnt16x16,msg,272+1,464+1,PSET,C_MBLACK  ,0);
  32.     SCN_puts(Fnt16x16,msg,272  ,464  ,PSET,PltNoWhite,0);
  33. #endif
  34.  
  35.     MOS_INC();
  36. }
  37.  
  38. /*************************************************************************
  39. *    システム行に文字列表示
  40. *************************************************************************/
  41.  
  42. int        syl_putf(char *form)
  43. {
  44.     char        tmp[256];
  45.     char       *ap;
  46.     int            n, x;
  47.  
  48.     va_start(ap,form);
  49.     vsprintf(tmp+6,form,ap);
  50.     va_end(ap);
  51.  
  52.     SCN_wrtPage(1);
  53.     MOS_DEC();
  54.  
  55.     SCN_boxf(0,464,639,479,PSET,ColMesh);
  56.  
  57.     EGB_textDirection(EgbPtr,0);                /* 文字方向    */
  58.     EGB_textDisplayDirection(EgbPtr,0);            /* 表示方向    */
  59.     EGB_textSpace(EgbPtr,0);                    /* 字間        */
  60.     EGB_textZoom(EgbPtr,0,  8, 16 );            /* ANK        */
  61.     EGB_textZoom(EgbPtr,1, 16, 16 );            /* 漢字        */
  62.     EGB_fontStyle(EgbPtr,1+4);                    /* 字体        */
  63.     EGB_color(EgbPtr,0,C_HGREEN);
  64.     EGB_color(EgbPtr,1,C_MBLACK);
  65.     EGB_paintMode(EgbPtr,0x022);
  66.     EGB_writeMode(EgbPtr,PSET);
  67.  
  68.     n = strlen(tmp+6);
  69.     x = (640 - n * 8) / 2;
  70.     _setWord(tmp+0,   x   );
  71.     _setWord(tmp+2, 464+15);
  72.     _setWord(tmp+4,   n   );
  73.     EGB_sjisString( EgbPtr, tmp);
  74.  
  75.     MOS_INC();
  76. }
  77.  
  78. int        _puts_bold(int x, int y, int col, char *s)
  79. {
  80.     char    para[256];
  81.  
  82.     EGB_textDirection(EgbPtr,0);                /* 文字方向    */
  83.     EGB_textDisplayDirection(EgbPtr,0);            /* 表示方向    */
  84.     EGB_textSpace(EgbPtr,0);                    /* 字間        */
  85.     EGB_textZoom(EgbPtr,0,  8, 16 );            /* ANK        */
  86.     EGB_textZoom(EgbPtr,1, 16, 16 );            /* 漢字        */
  87.     EGB_fontStyle(EgbPtr,1+4);                    /* 字体        */
  88.     EGB_color(EgbPtr,0,col     );
  89.     EGB_color(EgbPtr,1,C_MBLACK);
  90.     EGB_paintMode(EgbPtr,0x022);
  91.     EGB_writeMode(EgbPtr,PSET);
  92.  
  93.     _setWord(para+0, x    );
  94.     _setWord(para+2, y+15 );
  95.     _setWord(para+4, strlen(s));
  96.     strcpy(para+6,s);
  97.     EGB_sjisString( EgbPtr, para);
  98. }
  99.  
  100. char    *add_path_fn(char *path, char *fn)
  101. {
  102.     int        len;
  103.  
  104.     len = strlen(path);
  105. /*    if ( len == 0 || FS_isDelim(path[len-1]) == FALSE ) */
  106.     if ( len == 0 || !(path[len-1] == '\\' || path[len-1] == '/') )
  107.         path[len++] = FsPathDelim;
  108.     strcpy( path + len, fn );
  109.     return (path);
  110. }
  111.  
  112. /*************************************************************************
  113. *    背景用TIFF表示
  114. *************************************************************************/
  115.  
  116. int        tif_load(char *fn)
  117. {
  118.     char    *img;
  119.     short    fr[4];
  120.     int        x, y;
  121.  
  122.     SCN_wrtPage(0);
  123.     if ( (img = IMG_open()) != NULL )
  124.     {
  125.         IMG_setPage(img,0);                /* 表示ページ指定        */
  126.         IMG_setAtt(img,IMG_ATT_PLTON);    /* パレット設定属性ON    */
  127.         IMG_setColor( img, C_MBLACK, C_MWHITE);
  128.         if ( IMG_load(img,fn) == NORMAL )
  129.         {
  130.             IMG_getFr(img,fr);
  131.             x =      (320 - (fr[2] - fr[0] + 1)) / 2;
  132.             y = 10 + (230 - (fr[3] - fr[1] + 1)) / 2;
  133.             IMG_setPos(img,x,y);            /* 表示位置補正            */
  134.             EGB_color(EgbPtr,1,C_MBLACK);    /* 背景色                */
  135.  
  136.             EGB_clearScreen(EgbPtr);
  137.             EGB_paintMode(EgbPtr,0x22);
  138.             IMG_dsp(img);
  139.         }
  140.         IMG_close(img);
  141.     }
  142.     SCN_wrtPage(1);
  143.     return (NORMAL);
  144. }
  145.  
  146. /*************************************************************************
  147. *    TIFF表示
  148. *************************************************************************/
  149.  
  150. int        tiflist_disp( char **list )
  151. {
  152.     int                i, x, y, ret, pixel, md, x0, y0;
  153.     char           *img;
  154.     short            fr[4];
  155.     char           *fn;
  156.  
  157.     SCN_wrtPage(1);
  158.     APL_save_desktop();
  159.     SCN_boxf(0,0,639,479,PSET,0);
  160.     SCN_wrtPage(0);
  161.  
  162.     for ( i = 0; list[i] != NULL; ++i )
  163.     {
  164.         fn = list[i];
  165.  
  166.         if ( (img = IMG_open()) != NULL )
  167.         {
  168.             IMG_setAtt(img,IMG_ATT_PLTON);    /* パレット設定属性ON    */
  169.             if ( IMG_load(img,fn) == NORMAL )
  170.             {
  171.                 IMG_getFr(img,fr);
  172.                 pixel = IMG_getPixel(img);
  173.                 switch ( pixel )
  174.                 {
  175.                     case  1:    /* モノクロ    */
  176.                     case  4:    /* 16色        */
  177.                         x0 = (640 - (fr[2] - fr[0] + 1)) / 2;
  178.                         y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
  179.                         md = 3;
  180.                         break;
  181.                     case  8:    /* 256 色    */
  182.                         x0 = (640 - (fr[2] - fr[0] + 1)) / 2;
  183.                         y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
  184.                         md = 12;
  185.                         break;
  186.                     case 16:    /* 32768 色    */
  187.                         if ( fr[2] - fr[0] + 1 <= 320 )
  188.                         {
  189.                             x0 = (320 - (fr[2] - fr[0] + 1)) / 2;
  190.                             y0 = (240 - (fr[3] - fr[1] + 1)) / 2;
  191.                             md = 10;
  192.                         } else
  193.                         {
  194.                             x0 = (512 - (fr[2] - fr[0] + 1)) / 2;
  195.                             y0 = (480 - (fr[3] - fr[1] + 1)) / 2;
  196.                             md = 17;
  197.                         }
  198.                         break;
  199.                     default:
  200.                         goto _TIF_ERR;
  201.                 }
  202.                 IMG_setPos(img,x0,y0);    /* 表示位置補正            */
  203.                 MOS_COFF();                /* マウスカーソル消去    */
  204.  
  205.                 EGB_displayPage(EgbPtr,0,0);
  206.                 EGB_writePage(EgbPtr,0);
  207.                 EGB_clearScreen(EgbPtr);
  208.                 EGB_resolution(EgbPtr,0,md);    /* 画面モード設定    */
  209.                 if ( md == 3 || md == 10 )
  210.                 {
  211.                     EGB_resolution(EgbPtr,1,3);    /* 画面モード設定    */
  212.                     EGB_writePage(EgbPtr,1);
  213.                     EGB_clearScreen(EgbPtr);
  214.                 }
  215.  
  216.                 EGB_writePage(EgbPtr,0);
  217.                 if ( md == 10 )
  218.                 {
  219.                     EGB_displayStart(EgbPtr,2,2,2);
  220.                     EGB_displayStart(EgbPtr,3,320,240);
  221.                 }
  222.                 EGB_color(EgbPtr,1,0);
  223.                 EGB_clearScreen(EgbPtr);
  224.                 IMG_dsp(img);
  225.                 if ( md == 3 || md == 10 )
  226.                     EGB_displayPage(EgbPtr,1,3);
  227.                 else
  228.                     EGB_displayPage(EgbPtr,0,1);
  229.  
  230.                 _apl_wait(CLOCKS_PER_SEC * 8);
  231.                 while ( PD_getp(&x,&y) )
  232.                     ;
  233.             }
  234.             IMG_close(img);
  235.         }
  236.     }
  237.  
  238.     EGB_writePage(EgbPtr,0);
  239.     EGB_clearScreen(EgbPtr);
  240.  
  241.     SCN_sysReinit();
  242.     disp_desktop();
  243.     SCN_wrtPage(1);
  244.     APL_load_desktop();
  245.     syl_clear();
  246.  
  247.     return (NORMAL);
  248. }
  249.  
  250. int        mveplay(char *fnmve, int loop)
  251. {
  252.     char    para[256];
  253.  
  254.     sprintf(para,"-loop %d %s", loop, fnmve );
  255.  
  256.     exprun("/OH_TOWNS/DEMOTOOL/mveplay.exp", para );
  257.     return (0);
  258. }
  259.  
  260. int        exprun(char *fn, char *para)
  261. {
  262.     unsigned int    siz;
  263.     int                md;
  264.     char            tmp[256];
  265.     char           *dlgTxm;
  266.     char           *dir;
  267.  
  268.     siz = APL_getFreeMem();
  269.     if ( siz < 2 * 1024 * 1024 )
  270.     {    /* メモリ不足    */
  271.         dlgTxm = DlgTxm_open(ColBoxError);
  272.         DlgTxm_setTitle(dlgTxm,Fnt16x16, "OUT OF MEMORY");
  273.  
  274.         DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,"");
  275.         DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,
  276.             "メモリ不足のため実行できません。" );
  277.         DlgTxm_putf( dlgTxm, Rom16x16, TXMDAT_ATT_CENTER,"");
  278.  
  279.         DlgTxm_setBtn( dlgTxm, Fnt16x16, 128, 20, C_MBLACK,
  280.             C_WHITE, C_HILIGHT, C_DARK, '\r', KA_EXEC, 0, "", 0, "OK : [実行]");
  281.         DlgTxm_setSize(dlgTxm,480,48);
  282.         DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
  283.  
  284.         DlgTxm_start(dlgTxm);
  285.         DlgTxm_close(dlgTxm);
  286.         return (-1);
  287.     }
  288.     dir = FS_pushDir();
  289.     FS_chdrv( toupper(DirStart[0]) - 'A' );
  290.     FS_getDnam(tmp,fn);
  291.     add_path_fn(tmp,".");
  292.     FS_chdir(tmp);
  293.  
  294.     /* 画面保存    */
  295.     SCN_wrtPage(1);
  296.     APL_save_desktop();
  297.  
  298.     /* ネイティブモード子プロセスプログラムの起動    */
  299.     md = APLPCL_SET_STARTPATH | APLPCL_SET_PCP;
  300.     AplDtaInit();
  301.     if ( para != NULL && *para != '\0' )
  302.     {
  303.         AplDtaSetStr("$MainArg","%s %s", fn, para);
  304.         if ( strlen(fn) + strlen(para) + 1 >= 128 )
  305.             md &= (~APLPCL_SET_PCP);
  306.     }
  307.     FS_popDir(dir);
  308.     PCL_exec(fn,md);
  309.  
  310.     /* 画面再設定    */
  311.     SCN_sysReinit();
  312.     disp_desktop();
  313.     SCN_wrtPage(1);
  314.     APL_load_desktop();
  315.     syl_clear();
  316.  
  317.     return (NORMAL);
  318. }
  319.  
  320. /*************************************************************************
  321. *    説明表示(イベント処理関数)
  322. *************************************************************************/
  323.  
  324. int        inst_help( int evNo, char *evDat, char *fn)
  325. {
  326.     char    tmp[256];
  327.  
  328.     FS_chdrv(toupper(DirStart[0]) - 'A');
  329.     sprintf(tmp,"%s.",DirStart);
  330.     FS_chdir(tmp);
  331.  
  332.     APL_textView(Rom16x16,608,391,17,fn,"HELP FILE : %s", fn);
  333.  
  334.     return (evNo);
  335. }
  336.  
  337. /*************************************************************************
  338. *    インストール終了メッセージ
  339. *************************************************************************/
  340.  
  341. int        install_end( char *soft_name, int err )
  342. {
  343.     char    *dlgTxm;
  344.     int        colbox;
  345.     char    *msg;
  346.  
  347.     msg = err == 0 ? "インストールが終わりました。"
  348.                    : "インストールに失敗しました。";
  349.  
  350.     colbox = 0;
  351.     colbox = SCN_tile_newMixCol(colbox,0x00,C_HGREEN,C_WHITE);
  352.     if ( (dlgTxm = DlgTxm_open(colbox)) != NULL )
  353.     {
  354.         DlgTxm_setTitle(dlgTxm,Fnt16x16,soft_name);
  355.         DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "");
  356.         DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, msg );
  357.         DlgTxm_putf( dlgTxm, Fnt16x16, TXMDAT_ATT_CENTER, "");
  358.         DlgTxm_setBtn( dlgTxm, Fnt16x16, 64, 20, C_MBLACK, C_WHITE, C_HILIGHT, C_DARK, '\r'  , KA_EXEC  , 1, "", 0, "OK : [実行]");
  359.         DlgTxm_setSize(dlgTxm,480,64);
  360.         DlgTxm_setPosition(dlgTxm,DLGPOS_CENTER_OF_SCREEN);
  361.         DlgTxm_start(dlgTxm);
  362.         DlgTxm_close(dlgTxm);
  363.     }
  364.     SCN_tile_free(colbox);
  365. }
  366.  
  367.