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 >
Wrap
C/C++ Source or Header
|
1990-11-13
|
8KB
|
265 lines
/*
$Header: rec_mos.cv 1.9 90/11/13 20:12:04 Nam Exp $
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <egb.h> /* グラフィック関連のヘッダファイル */
#include <mos.h> /* マウス関連のヘッダファイル */
#include <fif.h> /* キーボードインターフェースのヘッダ*/
#include <fmc.h> /* FMC関数ライブラリヘッダ */
#include <n_win.h> /* 自前のウィンドゥ関数ヘッダ */
pragma Include ("rec_st.h"); /* 標準ヘッダ */
extern N_WIN_WORK WIN_work; /*** ウィンドゥライブラリ用ワーク(n_win_1.obj)***/
extern char *VideoBufAdd; /*** 画像データバッファ ***/
extern unsigned long imgsize; /*** 画像データ1枚のサイズ ***/
extern unsigned short NowPage; /*** 画像データ現在ページ ***/
extern unsigned short LastPage; /*** 画像データ最終ページ ***/
extern unsigned short sldstep; /*** 画像スライダ刻み幅 ***/
extern unsigned short win_cd,win_info,btn_myface;
extern unsigned short txt_edit_now;
extern unsigned short sld_edit_page;
extern char myface; /*** info用似顔絵 ***/
extern char icn_pat[(2+((2*16)*2))*2];
extern char *itoa(); /*** 整数>char変換(rec_disp.obj) ***/
extern void tvi_put(); /*TVIファイルを表示(rec_play.obj)*/
extern void disp_rev(); /*TVIファイルを1枚再生(rec_play.obj)*/
extern void disp_cue(); /*TVIファイルを1枚再生(rec_play.obj)*/
extern void N_cd_setPage(); /*** CD 演奏状態表示(rec_cd.obj) ***/
void change_icon(); /*** マウスアイコン変更(rec_mos.obj) ***/
int mos_btn_wait(); /*** マウスクリック待ち(rec_mos.obj) ***/
int mos_move_wait(); /*** マウスクリックor動作待ち(rec_mos.obj) ***/
unsigned short mosloop(); /*マウスボタンが押されるまでloop,部品idを返す*/
void move_page_slider(); /*ページスライダによるページ選択(rec_mos.obj)*/
void chg_myface(); /*** オプション処理/似顔絵(rec_menu) ***/
void push_myface(); /*** オプション処理/似顔絵(rec_menu) ***/
/*****************************************************************************/
void change_icon(patNo) /*** マウスアイコン変更(rec_mos.obj) ***/
unsigned char patNo; /*** 0:★型,1:砂時計 ***/
{
static unsigned char oldNo=255;
if (patNo!=oldNo) {
MOS_type(1,0,0,&icn_pat[0]+(2+((2*16)*2))*patNo);
}
oldNo=patNo;
}
/*****************************************************************************/
int mos_btn_wait() /*マウスの牡丹が押されるのを待つ(牡丹の値を返す)*/
{
for ( WIN_work.mb=0 ; WIN_work.mb==0 ; ) {
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
}
return WIN_work.mb;
}
/*****************************************************************************/
int mos_move_wait() /*マウスを大きく動かしたら終了(牡丹の値を返す)*/
{
int mx1,my1;
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
mx1=WIN_work.mx;
my1=WIN_work.my;
for ( ; ; ) {
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
if ( WIN_work.mb!=0 ||
(WIN_work.mx<(mx1-10)) || ((mx1+10)<WIN_work.mx) ||
(WIN_work.my<(my1-10)) || ((my1+10)<WIN_work.my)) {
break;
}
}
return WIN_work.mb;
}
/*****************************************************************************/
unsigned short mosloop() /*マウスボタンが押されるまでloop,部品idを返す*/
{
static short timer=0;
FRAME pos;
unsigned int moji,encode;
register unsigned short optid;
register short i,off,calet,width,length;
WIN_work.mb=0;
moji=0x100;
while ( (WIN_work.mb==0)&&(moji>0xff) ) {
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
moji=KYB_read(1,&encode);
if ((WIN_work.mb==0)&&(moji>0xff)&&(timer==0)){
/*** CDパネルが表示されていればCD曲番更新 ***/
if ((N_WIN_getWinAttr(win_cd)&N_WIN_ATTR_see)!=0) {
N_cd_setPage(0);
}
/*** infoパネルが表示されていればアニメ ***/
if ((N_WIN_getWinAttr(win_info)&N_WIN_ATTR_see)!=0) {
chg_myface(); /*** オプション処理/似顔絵(rec_menu) ***/
}
}
timer=(timer<2048)?timer+1:0;
}
optid=WIN_work.pointedOptId;
if (moji<=0xff){
/*** テキスト入力 ***/
if ((N_WIN_getOptKind(optid)==N_WIN_OPTITEM_txt)&&
(N_WIN_bittestOptAttr(optid,N_TXT_ATTR_calet)!=0)) {
pos=N_WIN_getOptPos(optid);
char *add=N_WIN_getOptTxtAdd(optid);
off=N_WIN_getOptData1(optid);
calet=N_WIN_getOptData2(optid);
width=(pos.rdw.x-pos.lup.x-4)/(WIN_work.charsize/2);
length=strlen(add);
switch (moji) {
case(0x1d): /*** LEFT ***/
calet=(calet>0)?calet-1:calet;
off=(calet<off)?calet:off;
N_WIN_re_entryOptDat(optid,off,calet);
break;
case(0x1c): /*** RIGHT ***/
calet=(calet<length)?calet+1:calet;
off=(calet>(off+width))?calet-width:off;
N_WIN_re_entryOptDat(optid,off,calet);
break;
case(8): /*** BS ***/
if (calet>0) {
for ( i=calet-1 ; i<length ; i++ ) {
add[i]=add[i+1];
}
calet--;
off=(calet<off)?calet:off;
N_WIN_re_entryOptDat(optid,off,calet);
}
break;
case(0x7f): /*** DEL ***/
if (calet<length) {
for (i=calet;i<length;i++) {
add[i]=add[i+1];
}
N_WIN_re_entryOptDat(optid,off,calet);
}
break;
default:
if ((' '<=moji)&&(length<79)) {
if (calet<(length-1)) {
for ( i=length ; i>=calet ; i-- ) {
add[i+1]=add[i];
}
add[calet]=(char)moji;
} else {
add[calet]=(char)moji;
add[calet+1]=(char)0;
}
calet++;
off=(calet>(off+width-1))?calet-width+1:off;
N_WIN_re_entryOptDat(optid,off,calet);
}
break;
}
} else {
switch (moji) {
case(0x1d): /*** LEFT ***/
disp_rev(); /*動画一駒戻し*/
break;
case(0x1c): /*** RIGHT ***/
disp_cue(); /*動画一駒進め*/
break;
}
}
return 0;
}
/*** ウィンドゥ&部品操作 ***/
if ( WIN_work.mb==_MosBtnLeft) {
doPoint(WIN_work.mx,WIN_work.my);
}
else {
WIN_work.pointedWinId=0;
WIN_work.pointedOptId=0;
}
return WIN_work.pointedOptId;
}
/*****************************************************************************/
void move_page_slider() /*ページスライダによるページ選択(rec_main.obj)*/
{
static short _oldoff=0;
N_ST_WIN *ST_WIN=WIN_work.win;
N_ST_OPT *ST_OPT=WIN_work.opt;
register unsigned short sldNo=__NgetOptNo(sld_edit_page);
register unsigned short txtNo=__NgetOptNo(txt_edit_now);
register unsigned short winNo=__NgetWinNo(ST_OPT[sldNo].winid);
register short sldsize,off;
register unsigned short _oldpage;
if (sldstep<=0) {
return;
}
_oldpage=NowPage;
NowPage=N_WIN_getOptData2(sld_edit_page)/sldstep;
NowPage=(NowPage>LastPage)?LastPage:NowPage;
if (ST_OPT[sldNo].data2!=_oldoff) {
sldsize=(ST_OPT[sldNo].data1)/2;
off=ST_OPT[sldNo].data2;
ST_OPT[txtNo].pos.lup.x=ST_OPT[sldNo].pos.lup.x
+off+sldsize-(8*3+4)/2+1;
ST_OPT[txtNo].pos.rdw.x=ST_OPT[sldNo].pos.lup.x
+off+sldsize+(8*3+4)/2+1;
strcpy(ST_OPT[txtNo].add,itoa(NowPage+1,3));
EGB_writeMode(WIN_work.EGB_work,0); /*** PSET ***/
MOS_disp(FALSE);
__NdispWin_Txt(txtNo,ST_WIN[winNo].pos);
MOS_disp(TRUE);
}
if (NowPage!=_oldpage) {
tvi_put(1,VideoBufAdd+(imgsize*NowPage));
}
_oldoff=off;
}
/*****************************************************************************/
void chg_myface() /*** オプション処理/似顔絵(rec_menu) ***/
{
static char pat=0;
N_WIN_re_entryOptAdd(btn_myface,&myface+(pat*16*32));
pat=(pat>0)?0:1;
}
/*****************************************************************************/
void push_myface() /*** オプション処理/似顔絵(rec_menu) ***/
{
N_WIN_re_entryOptAdd(btn_myface,&myface+(2*16*32));
mos_btn_wait();
}
/*****************************************************************************
$Log: RCS/rec_mos.cv $
* Revision 1.9 90/11/13 20:12:04 Nam
* renew MOS_getpos -> __mosGet
*
* Revision 1.8 90/11/13 14:45:04 Nam
* Release at V0.0 L18d
*
* Revision 1.7 90/11/12 18:10:46 Nam
* add animation of myface
*
* Revision 1.6 90/11/10 16:19:46 Nam
* *** empty log message ***
*
* Revision 1.5 90/11/06 14:43:16 Nam
* delete info with LandRclick
*
* Revision 1.4 90/11/01 11:39:36 Nam
* Rel V0.0L17 at '90.11.2 for FPICS.
*
* Revision 1.3 90/11/01 11:39:36 Nam
* rename 'win_usage'->'win_info'
*
* Revision 1.2 90/10/25 19:00:04 Nam
* use 'rec_st.h'
*
* Revision 1.1 90/10/10 18:05:20 Nam
* Initial revision
*
******************************************************************************/