home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / tvi / tvi_src.lzh / REC / REC_MOS.C < prev    next >
C/C++ Source or Header  |  1990-11-13  |  8KB  |  265 lines

  1. /*
  2. $Header: rec_mos.cv  1.9  90/11/13 20:12:04  Nam  Exp $
  3. */
  4.  
  5. #include    <stdio.h>
  6. #include     <stdlib.h>
  7. #include     <string.h>
  8. #include    <egb.h>        /* グラフィック関連のヘッダファイル */
  9. #include    <mos.h>        /* マウス関連のヘッダファイル         */
  10. #include    <fif.h>        /* キーボードインターフェースのヘッダ*/
  11. #include    <fmc.h>        /* FMC関数ライブラリヘッダ */
  12. #include    <n_win.h>    /* 自前のウィンドゥ関数ヘッダ        */
  13.  
  14. pragma    Include    ("rec_st.h");            /* 標準ヘッダ */
  15.  
  16. extern N_WIN_WORK        WIN_work;        /*** ウィンドゥライブラリ用ワーク(n_win_1.obj)***/
  17. extern char             *VideoBufAdd;    /*** 画像データバッファ ***/
  18. extern unsigned long    imgsize;        /*** 画像データ1枚のサイズ ***/
  19. extern unsigned short    NowPage;        /*** 画像データ現在ページ ***/
  20. extern unsigned short    LastPage;        /*** 画像データ最終ページ ***/
  21. extern unsigned short    sldstep;        /*** 画像スライダ刻み幅 ***/
  22.  
  23. extern unsigned short    win_cd,win_info,btn_myface;
  24. extern unsigned short    txt_edit_now;
  25. extern unsigned short    sld_edit_page;
  26. extern char        myface;    /*** info用似顔絵 ***/
  27.  
  28. extern char    icn_pat[(2+((2*16)*2))*2];
  29.  
  30. extern char *itoa();                /*** 整数>char変換(rec_disp.obj) ***/
  31. extern void tvi_put();                /*TVIファイルを表示(rec_play.obj)*/
  32. extern void    disp_rev();                /*TVIファイルを1枚再生(rec_play.obj)*/
  33. extern void    disp_cue();                /*TVIファイルを1枚再生(rec_play.obj)*/
  34. extern void    N_cd_setPage();            /*** CD 演奏状態表示(rec_cd.obj) ***/
  35.  
  36. void    change_icon();            /*** マウスアイコン変更(rec_mos.obj) ***/
  37. int        mos_btn_wait();            /*** マウスクリック待ち(rec_mos.obj) ***/
  38. int        mos_move_wait();            /*** マウスクリックor動作待ち(rec_mos.obj) ***/
  39. unsigned short    mosloop();        /*マウスボタンが押されるまでloop,部品idを返す*/
  40. void    move_page_slider();        /*ページスライダによるページ選択(rec_mos.obj)*/
  41. void    chg_myface();            /*** オプション処理/似顔絵(rec_menu) ***/
  42. void    push_myface();            /*** オプション処理/似顔絵(rec_menu) ***/
  43. /*****************************************************************************/
  44. void    change_icon(patNo)            /*** マウスアイコン変更(rec_mos.obj) ***/
  45. unsigned char    patNo;                /*** 0:★型,1:砂時計 ***/
  46. {
  47.     static unsigned char    oldNo=255;
  48.  
  49.     if (patNo!=oldNo) {
  50.         MOS_type(1,0,0,&icn_pat[0]+(2+((2*16)*2))*patNo);
  51.     }
  52.     oldNo=patNo;
  53. }
  54. /*****************************************************************************/
  55. int        mos_btn_wait()    /*マウスの牡丹が押されるのを待つ(牡丹の値を返す)*/
  56. {
  57.     for ( WIN_work.mb=0 ; WIN_work.mb==0 ; ) {
  58.         __NmosGet();                /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
  59.     }
  60.     return    WIN_work.mb;
  61. }
  62. /*****************************************************************************/
  63. int        mos_move_wait()    /*マウスを大きく動かしたら終了(牡丹の値を返す)*/
  64. {
  65.     int    mx1,my1;
  66.  
  67.     __NmosGet();                /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
  68.     mx1=WIN_work.mx;
  69.     my1=WIN_work.my;
  70.     for ( ; ; ) {
  71.         __NmosGet();                /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
  72.         if ( WIN_work.mb!=0 ||
  73.              (WIN_work.mx<(mx1-10)) || ((mx1+10)<WIN_work.mx) ||
  74.              (WIN_work.my<(my1-10)) || ((my1+10)<WIN_work.my)) {
  75.             break;
  76.         }
  77.     }
  78.     return    WIN_work.mb;
  79. }
  80. /*****************************************************************************/
  81. unsigned short    mosloop()        /*マウスボタンが押されるまでloop,部品idを返す*/
  82. {
  83.     static short            timer=0;
  84.     FRAME                    pos;
  85.     unsigned int            moji,encode;
  86.     register unsigned short    optid;
  87.     register short            i,off,calet,width,length;
  88.  
  89.     WIN_work.mb=0;
  90.     moji=0x100;
  91.     while ( (WIN_work.mb==0)&&(moji>0xff) ) {
  92.         __NmosGet();                /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
  93.         moji=KYB_read(1,&encode);
  94.         if ((WIN_work.mb==0)&&(moji>0xff)&&(timer==0)){
  95.             /*** CDパネルが表示されていればCD曲番更新 ***/
  96.             if ((N_WIN_getWinAttr(win_cd)&N_WIN_ATTR_see)!=0) {
  97.                 N_cd_setPage(0);
  98.             }
  99.             /*** infoパネルが表示されていればアニメ ***/
  100.             if ((N_WIN_getWinAttr(win_info)&N_WIN_ATTR_see)!=0) {
  101.                 chg_myface();        /*** オプション処理/似顔絵(rec_menu) ***/
  102.             }
  103.         }
  104.         timer=(timer<2048)?timer+1:0;
  105.     }
  106.     optid=WIN_work.pointedOptId;
  107.     if (moji<=0xff){
  108.         /*** テキスト入力 ***/
  109.         if ((N_WIN_getOptKind(optid)==N_WIN_OPTITEM_txt)&&
  110.             (N_WIN_bittestOptAttr(optid,N_TXT_ATTR_calet)!=0)) {
  111.             pos=N_WIN_getOptPos(optid);
  112.             char    *add=N_WIN_getOptTxtAdd(optid);
  113.             off=N_WIN_getOptData1(optid);
  114.             calet=N_WIN_getOptData2(optid);
  115.             width=(pos.rdw.x-pos.lup.x-4)/(WIN_work.charsize/2);
  116.             length=strlen(add);
  117.             switch (moji) {
  118.                 case(0x1d):    /*** LEFT ***/
  119.                     calet=(calet>0)?calet-1:calet;
  120.                     off=(calet<off)?calet:off;
  121.                     N_WIN_re_entryOptDat(optid,off,calet);
  122.                     break;
  123.                 case(0x1c):    /*** RIGHT ***/
  124.                     calet=(calet<length)?calet+1:calet;
  125.                     off=(calet>(off+width))?calet-width:off;
  126.                     N_WIN_re_entryOptDat(optid,off,calet);
  127.                     break;
  128.                 case(8):    /*** BS ***/
  129.                     if (calet>0) {
  130.                         for ( i=calet-1 ; i<length ; i++ ) {
  131.                             add[i]=add[i+1];
  132.                         }
  133.                         calet--;
  134.                         off=(calet<off)?calet:off;
  135.                         N_WIN_re_entryOptDat(optid,off,calet);
  136.                     }
  137.                     break;
  138.                 case(0x7f):    /*** DEL ***/
  139.                     if (calet<length) {
  140.                         for (i=calet;i<length;i++) {
  141.                             add[i]=add[i+1];
  142.                         }
  143.                         N_WIN_re_entryOptDat(optid,off,calet);
  144.                     }
  145.                     break;
  146.                 default:
  147.                     if ((' '<=moji)&&(length<79)) {
  148.                         if (calet<(length-1)) {
  149.                             for ( i=length ; i>=calet ; i-- ) {
  150.                                 add[i+1]=add[i];
  151.                             }
  152.                             add[calet]=(char)moji;
  153.                         } else {
  154.                             add[calet]=(char)moji;
  155.                             add[calet+1]=(char)0;
  156.                         }
  157.                         calet++;
  158.                         off=(calet>(off+width-1))?calet-width+1:off;
  159.                         N_WIN_re_entryOptDat(optid,off,calet);
  160.                     }
  161.                     break;
  162.             }
  163.         } else {
  164.             switch (moji) {
  165.                 case(0x1d):    /*** LEFT ***/
  166.                     disp_rev();        /*動画一駒戻し*/
  167.                     break;
  168.                 case(0x1c):    /*** RIGHT ***/
  169.                     disp_cue();        /*動画一駒進め*/
  170.                     break;
  171.             }
  172.         }
  173.         return 0;
  174.     }
  175.     /*** ウィンドゥ&部品操作 ***/
  176.     if ( WIN_work.mb==_MosBtnLeft) {
  177.         doPoint(WIN_work.mx,WIN_work.my);
  178.     }
  179.     else {
  180.         WIN_work.pointedWinId=0;
  181.         WIN_work.pointedOptId=0;
  182.     }
  183.     return WIN_work.pointedOptId;
  184. }
  185. /*****************************************************************************/
  186. void    move_page_slider()    /*ページスライダによるページ選択(rec_main.obj)*/
  187. {
  188.     static short    _oldoff=0;
  189.     N_ST_WIN    *ST_WIN=WIN_work.win;
  190.     N_ST_OPT    *ST_OPT=WIN_work.opt;
  191.     register unsigned short    sldNo=__NgetOptNo(sld_edit_page);
  192.     register unsigned short    txtNo=__NgetOptNo(txt_edit_now);
  193.     register unsigned short    winNo=__NgetWinNo(ST_OPT[sldNo].winid);
  194.     register short    sldsize,off;
  195.     register unsigned short    _oldpage;
  196.  
  197.     if (sldstep<=0) {
  198.         return;
  199.     }
  200.     _oldpage=NowPage;
  201.     NowPage=N_WIN_getOptData2(sld_edit_page)/sldstep;
  202.     NowPage=(NowPage>LastPage)?LastPage:NowPage;
  203.     if (ST_OPT[sldNo].data2!=_oldoff) {
  204.         sldsize=(ST_OPT[sldNo].data1)/2;
  205.         off=ST_OPT[sldNo].data2;
  206.         ST_OPT[txtNo].pos.lup.x=ST_OPT[sldNo].pos.lup.x
  207.             +off+sldsize-(8*3+4)/2+1;
  208.         ST_OPT[txtNo].pos.rdw.x=ST_OPT[sldNo].pos.lup.x
  209.             +off+sldsize+(8*3+4)/2+1;
  210.         strcpy(ST_OPT[txtNo].add,itoa(NowPage+1,3));
  211.         EGB_writeMode(WIN_work.EGB_work,0);    /*** PSET ***/
  212.         MOS_disp(FALSE);
  213.         __NdispWin_Txt(txtNo,ST_WIN[winNo].pos);
  214.         MOS_disp(TRUE);
  215.     }
  216.     if (NowPage!=_oldpage) {
  217.         tvi_put(1,VideoBufAdd+(imgsize*NowPage));
  218.     }
  219.     _oldoff=off;
  220. }
  221. /*****************************************************************************/
  222. void  chg_myface()                /*** オプション処理/似顔絵(rec_menu) ***/
  223. {
  224.     static char    pat=0;
  225.  
  226.     N_WIN_re_entryOptAdd(btn_myface,&myface+(pat*16*32));
  227.     pat=(pat>0)?0:1;
  228. }
  229. /*****************************************************************************/
  230. void  push_myface()                /*** オプション処理/似顔絵(rec_menu) ***/
  231. {
  232.     N_WIN_re_entryOptAdd(btn_myface,&myface+(2*16*32));
  233.     mos_btn_wait();
  234. }
  235. /*****************************************************************************
  236. $Log: RCS/rec_mos.cv $
  237.  * Revision 1.9  90/11/13 20:12:04  Nam
  238.  * renew MOS_getpos -> __mosGet
  239.  * 
  240.  * Revision 1.8  90/11/13 14:45:04  Nam
  241.  * Release at V0.0 L18d
  242.  * 
  243.  * Revision 1.7  90/11/12 18:10:46  Nam
  244.  * add animation of myface
  245.  * 
  246.  * Revision 1.6  90/11/10 16:19:46  Nam
  247.  * *** empty log message ***
  248.  * 
  249.  * Revision 1.5  90/11/06 14:43:16  Nam
  250.  * delete info with LandRclick
  251.  * 
  252.  * Revision 1.4  90/11/01 11:39:36  Nam
  253.  * Rel V0.0L17 at '90.11.2 for FPICS.
  254.  * 
  255.  * Revision 1.3  90/11/01 11:39:36  Nam
  256.  * rename 'win_usage'->'win_info'
  257.  * 
  258.  * Revision 1.2  90/10/25 19:00:04  Nam
  259.  * use 'rec_st.h'
  260.  * 
  261.  * Revision 1.1  90/10/10 18:05:20  Nam
  262.  * Initial revision
  263.  * 
  264. ******************************************************************************/
  265.