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 >
Wrap
C/C++ Source or Header
|
1990-11-13
|
6KB
|
213 lines
/*
$Header: rec_rec.cv 1.7 90/11/13 22:21:50 Nam Exp $
*/
#include <egb.h> /* グラフィック関連のヘッダファイル */
#include <mos.h> /* マウス関連のヘッダファイル */
#include <n_win.h> /* 自前のウィンドゥ関数ヘッダ */
#define _Dezi (0x0001)
#define _ExpandTable (0x0002)
#define _ComplessTable (0x0004)
#define _TVI (0x0008)
#define _BadPath (0x0080)
extern char *EGB_work; /*** EGBワークエリア(disp.obj) ***/
extern N_WIN_WORK WIN_work; /*** ウィンドゥライブラリ用ワーク(n_win_1.obj)***/
extern char *VideoBufAdd; /*** 画像データバッファ ***/
extern FRAME tviframe; /*** 動画データの枠 ***/
extern unsigned long imgsize; /*** 画像データ1枚のサイズ ***/
extern unsigned short MaxVideoBuf; /*** 画像データバッファ最大枚数 ***/
extern unsigned short StartPage; /*** 画像データ指定開始ページ ***/
extern unsigned short EndPage; /*** 画像データ指定終了ページ ***/
extern unsigned short NowPage; /*** 画像データ現在ページ ***/
extern unsigned short LastPage; /*** 画像データ終了ページ ***/
extern unsigned short sysflag; /*** 設定状態フラグ ***/
extern char undomode[6]; /*** ***/
extern unsigned short btn_edit_ins;
extern void N_set_dezi(); /*** デジタイズプレーン設定(video.obj) ***/
extern void N_set_disp(); /*** 表示プレーン設定(video.obj) ***/
extern void N_wait_vsync(); /*** VSINC待ち(video.obj) ***/
extern void VC8get_ful(); /*** テーブル参照全画面転送(vc_get.obj) ***/
extern void N_set_resolution(); /*** 画面解像度設定(disp.obj) ***/
extern void tvi_disp(); /*TVIファイルを1枚再生(rec_play.obj)*/
extern int mos_btn_wait(); /*** マウスクリック待ち(rec_mos.obj) ***/
extern int disp_alart(); /*** アラートボックス表示(rec_main.obj) ***/
extern void set_edit_page(); /*エディットウィンドゥの各カウンタの再設定(rec_main.obj)*/
extern void set_page_slider(); /*ページスライダの再設定(rec_main.obj)*/
extern void ins_edit_page(); /*** ページの挿入(rec_edit.obj) ***/
extern int check_video(); /*** ビデオ信号の有無を調べる(rec_pal.obj) ***/
void record_1page(); /*** 1面録画(rec_rec.obj) ***/
void record(); /*** 録画(rec_rec.obj) ***/
int video_rec();
/*****************************************************************************/
int check_Cpal() /*パレットの有無をチェック(内部)*/
{
if ((sysflag & _ComplessTable)==0) {
disp_alart(1,"圧縮パレットがないヨ"
,"パレットを作ってちょ!!!");
return -1;
}
return 0;
}
/*****************************************************************************/
void record_1page() /*1flame録画*/
{
register short start,end;
if (check_Cpal()!=0) { /*** パレットファイルのチェック ***/
return;
}
if ((sysflag & _Dezi)==0) {
disp_alart(1,"画像が無いよ","");
return;
}
if ((sysflag & _TVI)==0) {
start=0;
end=0;
}
else {
/*** OVLモード ***/
if ((N_WIN_getOptAttr(btn_edit_ins)&N_BTN_ATTR_highlight)==0) {
start=NowPage;
end=LastPage;
}
/*** INSモード ***/
else {
if (LastPage>=MaxVideoBuf-1) {
disp_alart(1,"これ以上は録画できないので"
,"クリアするか上書きモードにしてネ");
return;
}
start=end=LastPage+1;
}
}
VC8get_ful(0x40000,VideoBufAdd+(imgsize*start));
NowPage=start;
LastPage=end;
undomode[0]=0; /*** undo不可に ***/
sysflag|=_TVI;
set_edit_page();
tvi_disp(start);
/* set_page_slider();*/
}
/*****************************************************************************/
void record() /*録画*/
{
register unsigned short tmp;
register int ret;
register short start,end,last=LastPage;
if (check_Cpal()!=0) { /*** パレットファイルのチェック ***/
return;
}
check_video(); /*** ビデオ信号の有無を調べる(video.obj) ***/
if ((sysflag & _TVI)==0) {
start=0;
end=MaxVideoBuf-1;
last=end;
}
else {
/*** OVL ***/
if ((N_WIN_getOptAttr(btn_edit_ins)&N_BTN_ATTR_highlight)==0) {
start=(StartPage>(MaxVideoBuf-1))?MaxVideoBuf-1:StartPage;
end=(EndPage>(MaxVideoBuf-1))?MaxVideoBuf-1:EndPage;
if (start>end) {
tmp=start;
start=end;
end=tmp;
}
}
/*** INS ***/
else {
if (LastPage>=MaxVideoBuf-1) {
disp_alart(1,"これ以上は録画できないので"
,"クリアするか上書きモードにしてネ");
return;
}
if (StartPage!=0xffff) {
ins_edit_page(StartPage,MaxVideoBuf-LastPage); /*** 挿入 ***/
start=StartPage;
end=StartPage+(MaxVideoBuf-LastPage);
}
else {
start=LastPage+1;
end=MaxVideoBuf-1;
last=end;
}
}
}
ret=video_rec(start,end);
MOS_disp(FALSE);
EGB_writePage(EGB_work,0); /*** ページ0に書き込み ***/
EGB_clearScreen(EGB_work);
N_set_resolution(3,10,0,0,2);
if (ret!=_MosBtnRight) {
NowPage=start;
LastPage=last;
StartPage=EndPage=0xffff;
undomode[0]=0; /*** undo不可に ***/
sysflag|=_TVI;
set_edit_page();
set_page_slider();
}
N_WIN_dispWinAll();
}
/*****************************************************************************/
int video_rec(start,end)
short start,end;
{
unsigned char stop[2]={ 1, 0 };
register unsigned short i,j;
MOS_disp(FALSE);
N_set_resolution(11,11,0,0,0);
EGB_dezitize(EGB_work,1);
/*マウスの牡丹が押されるのを待つ*/
if (mos_btn_wait()==_MosBtnRight) {
return WIN_work.mb;
}
EGB_displayPage(EGB_work,0,0); /*** VRAM表示停止 ***/
/*EGB_superImpose(EGB_work,0x80);*/ /*** スーパーインポーズ開始 ***/
for ( i=start,j=0 ; i<=end ; i++,j++ ) {
N_wait_vsync();
N_set_dezi((j+1) & 1);
N_set_disp(stop[(j & 1)]); /*** 表示プレーン切り換え ***/
VC8get_ful((j & 1)*0x40000,VideoBufAdd+(imgsize*i));
}
EGB_dezitize(EGB_work,0);
/*EGB_superImpose(EGB_work,0);*/ /*** スーパーインポーズ終了 ***/
tvi_disp(start);
MOS_disp(TRUE);
return 0;
}
/*****************************************************************************
$Log: RCS/rec_rec.cv $
* Revision 1.7 90/11/13 22:21:50 Nam
* rec with disp and VSYNC-WAIT
* renew MOS_getpos -> __mosGet
*
* Revision 1.6 90/11/12 17:01:18 Nam
* Release at V0.0 L18d
*
* Revision 1.5 90/11/12 17:01:18 Nam
* add optbtn operation
*
* Revision 1.4 90/10/31 15:37:06 Nam
* Rel V0.0L17 at '90.11.2 for FPICS.
*
* Revision 1.3 90/10/31 15:37:06 Nam
* *** empty log message ***
*
* Revision 1.2 90/10/25 18:59:00 Nam
* use 'rec_st.h'
*
* Revision 1.1 90/10/10 18:05:20 Nam
* Initial revision
*
******************************************************************************/