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

  1. /*
  2. $Header: rec_rec.cv  1.7  90/11/13 22:21:50  Nam  Exp $
  3. */
  4. #include    <egb.h>        /* グラフィック関連のヘッダファイル */
  5. #include    <mos.h>        /* マウス関連のヘッダファイル         */
  6. #include    <n_win.h>    /* 自前のウィンドゥ関数ヘッダ        */
  7.  
  8. #define    _Dezi            (0x0001)
  9. #define    _ExpandTable    (0x0002)
  10. #define    _ComplessTable    (0x0004)
  11. #define    _TVI            (0x0008)
  12. #define    _BadPath        (0x0080)
  13.  
  14. extern char *EGB_work;                    /*** EGBワークエリア(disp.obj) ***/
  15. extern N_WIN_WORK    WIN_work;            /*** ウィンドゥライブラリ用ワーク(n_win_1.obj)***/
  16. extern char *VideoBufAdd;                /*** 画像データバッファ ***/
  17.  
  18. extern FRAME            tviframe;        /*** 動画データの枠 ***/
  19. extern unsigned long    imgsize;        /*** 画像データ1枚のサイズ ***/
  20. extern unsigned short    MaxVideoBuf;    /*** 画像データバッファ最大枚数 ***/
  21. extern unsigned short    StartPage;        /*** 画像データ指定開始ページ ***/
  22. extern unsigned short    EndPage;        /*** 画像データ指定終了ページ ***/
  23. extern unsigned short    NowPage;        /*** 画像データ現在ページ ***/
  24. extern unsigned short    LastPage;        /*** 画像データ終了ページ ***/
  25. extern unsigned short    sysflag;        /*** 設定状態フラグ ***/
  26. extern char                undomode[6];    /***  ***/
  27.  
  28. extern unsigned short    btn_edit_ins;
  29.  
  30. extern void    N_set_dezi();        /*** デジタイズプレーン設定(video.obj) ***/
  31. extern void    N_set_disp();        /*** 表示プレーン設定(video.obj) ***/
  32. extern void    N_wait_vsync();        /*** VSINC待ち(video.obj) ***/
  33. extern void    VC8get_ful();        /*** テーブル参照全画面転送(vc_get.obj) ***/
  34. extern void N_set_resolution();    /*** 画面解像度設定(disp.obj) ***/
  35. extern void tvi_disp();                /*TVIファイルを1枚再生(rec_play.obj)*/
  36. extern int    mos_btn_wait();            /*** マウスクリック待ち(rec_mos.obj) ***/
  37.  
  38. extern int    disp_alart();        /*** アラートボックス表示(rec_main.obj) ***/
  39. extern void    set_edit_page();    /*エディットウィンドゥの各カウンタの再設定(rec_main.obj)*/
  40. extern void    set_page_slider();    /*ページスライダの再設定(rec_main.obj)*/
  41. extern void ins_edit_page();    /*** ページの挿入(rec_edit.obj) ***/
  42. extern int  check_video();        /*** ビデオ信号の有無を調べる(rec_pal.obj) ***/
  43.  
  44. void record_1page();        /*** 1面録画(rec_rec.obj) ***/
  45. void record();                /*** 録画(rec_rec.obj) ***/
  46. int video_rec();
  47. /*****************************************************************************/
  48. int    check_Cpal()    /*パレットの有無をチェック(内部)*/
  49. {
  50.     if ((sysflag & _ComplessTable)==0) {
  51.         disp_alart(1,"圧縮パレットがないヨ"
  52.                     ,"パレットを作ってちょ!!!");
  53.         return -1;
  54.     }
  55.     return 0;
  56. }
  57. /*****************************************************************************/
  58. void    record_1page()    /*1flame録画*/
  59. {
  60.     register short    start,end;
  61.  
  62.     if (check_Cpal()!=0) {    /*** パレットファイルのチェック ***/
  63.         return;
  64.     }
  65.     if ((sysflag & _Dezi)==0) {
  66.         disp_alart(1,"画像が無いよ","");
  67.         return;
  68.     }
  69.     if ((sysflag & _TVI)==0) {
  70.         start=0;
  71.         end=0;
  72.     }
  73.     else {
  74.         /*** OVLモード ***/
  75.         if ((N_WIN_getOptAttr(btn_edit_ins)&N_BTN_ATTR_highlight)==0) {
  76.             start=NowPage;
  77.             end=LastPage;
  78.         }
  79.         /*** INSモード ***/
  80.         else {
  81.             if (LastPage>=MaxVideoBuf-1) {
  82.                 disp_alart(1,"これ以上は録画できないので"
  83.                             ,"クリアするか上書きモードにしてネ");
  84.                 return;
  85.             }
  86.             start=end=LastPage+1;
  87.         }
  88.     }
  89.     VC8get_ful(0x40000,VideoBufAdd+(imgsize*start));
  90.     NowPage=start;
  91.     LastPage=end;
  92.     undomode[0]=0;        /*** undo不可に ***/
  93.     sysflag|=_TVI;
  94.     set_edit_page();
  95.     tvi_disp(start);
  96. /*    set_page_slider();*/
  97. }
  98. /*****************************************************************************/
  99. void    record()    /*録画*/
  100. {
  101.     register unsigned short tmp;
  102.     register int    ret;
  103.     register short    start,end,last=LastPage;
  104.  
  105.     if (check_Cpal()!=0) {    /*** パレットファイルのチェック ***/
  106.         return;
  107.     }
  108.     check_video();    /*** ビデオ信号の有無を調べる(video.obj) ***/
  109.     if ((sysflag & _TVI)==0) {
  110.         start=0;
  111.         end=MaxVideoBuf-1;
  112.         last=end;
  113.     }
  114.     else {
  115.         /*** OVL ***/
  116.         if ((N_WIN_getOptAttr(btn_edit_ins)&N_BTN_ATTR_highlight)==0) {
  117.             start=(StartPage>(MaxVideoBuf-1))?MaxVideoBuf-1:StartPage;
  118.             end=(EndPage>(MaxVideoBuf-1))?MaxVideoBuf-1:EndPage;
  119.             if (start>end) {
  120.                 tmp=start;
  121.                 start=end;
  122.                 end=tmp;
  123.             }
  124.         }
  125.         /*** INS ***/
  126.         else {
  127.             if (LastPage>=MaxVideoBuf-1) {
  128.                 disp_alart(1,"これ以上は録画できないので"
  129.                             ,"クリアするか上書きモードにしてネ");
  130.                 return;
  131.             }
  132.             if (StartPage!=0xffff) {
  133.                 ins_edit_page(StartPage,MaxVideoBuf-LastPage);    /*** 挿入 ***/
  134.                 start=StartPage;
  135.                 end=StartPage+(MaxVideoBuf-LastPage);
  136.             }
  137.             else {
  138.                 start=LastPage+1;
  139.                 end=MaxVideoBuf-1;
  140.                 last=end;
  141.             }
  142.         }
  143.     }
  144.     ret=video_rec(start,end);
  145.     MOS_disp(FALSE);
  146.     EGB_writePage(EGB_work,0);            /*** ページ0に書き込み ***/
  147.     EGB_clearScreen(EGB_work);
  148.     N_set_resolution(3,10,0,0,2);
  149.     if (ret!=_MosBtnRight) {
  150.         NowPage=start;
  151.         LastPage=last;
  152.         StartPage=EndPage=0xffff;
  153.         undomode[0]=0;        /*** undo不可に ***/
  154.         sysflag|=_TVI;
  155.         set_edit_page();
  156.         set_page_slider();
  157.     }
  158.     N_WIN_dispWinAll();
  159. }
  160. /*****************************************************************************/
  161. int    video_rec(start,end)
  162. short    start,end;
  163. {
  164.     unsigned char    stop[2]={ 1, 0 };
  165.     register unsigned short    i,j;
  166.  
  167.     MOS_disp(FALSE);
  168.     N_set_resolution(11,11,0,0,0);
  169.     EGB_dezitize(EGB_work,1);
  170.     /*マウスの牡丹が押されるのを待つ*/
  171.     if (mos_btn_wait()==_MosBtnRight) {
  172.         return    WIN_work.mb;
  173.     }
  174.     EGB_displayPage(EGB_work,0,0);        /*** VRAM表示停止 ***/
  175.     /*EGB_superImpose(EGB_work,0x80);*/        /*** スーパーインポーズ開始 ***/
  176.     for ( i=start,j=0 ; i<=end ; i++,j++ ) {
  177.         N_wait_vsync();
  178.         N_set_dezi((j+1) & 1);
  179.         N_set_disp(stop[(j & 1)]);            /*** 表示プレーン切り換え ***/
  180.         VC8get_ful((j & 1)*0x40000,VideoBufAdd+(imgsize*i));
  181.     }
  182.     EGB_dezitize(EGB_work,0);
  183.     /*EGB_superImpose(EGB_work,0);*/        /*** スーパーインポーズ終了 ***/
  184.     tvi_disp(start);
  185.     MOS_disp(TRUE);
  186.     return    0;
  187. }
  188. /*****************************************************************************
  189. $Log: RCS/rec_rec.cv $
  190.  * Revision 1.7  90/11/13 22:21:50  Nam
  191.  * rec with disp and VSYNC-WAIT
  192.  * renew MOS_getpos -> __mosGet
  193.  * 
  194.  * Revision 1.6  90/11/12 17:01:18  Nam
  195.  * Release at V0.0 L18d
  196.  * 
  197.  * Revision 1.5  90/11/12 17:01:18  Nam
  198.  * add optbtn operation
  199.  * 
  200.  * Revision 1.4  90/10/31 15:37:06  Nam
  201.  * Rel V0.0L17 at '90.11.2 for FPICS.
  202.  * 
  203.  * Revision 1.3  90/10/31 15:37:06  Nam
  204.  * *** empty log message ***
  205.  * 
  206.  * Revision 1.2  90/10/25 18:59:00  Nam
  207.  * use 'rec_st.h'
  208.  * 
  209.  * Revision 1.1  90/10/10 18:05:20  Nam
  210.  * Initial revision
  211.  * 
  212. ******************************************************************************/
  213.