📄 search.c
字号:
/*****************************************************\
Creater: Kenny
Date : 2001/5/15 02:39PM
Description: Search menu using
\*****************************************************/
#include "global.h"
#include "osd.h"
#include "func.h"
#include "cfont.h"
#include "util.h"
#include "ircmd.h"
extern BYTE bin2asc(BYTE pp);
BYTE vcd_mode_select_num[VCD_MODE_NUM]={1,2};
BYTE dvd_mode_select_num[DVD_MODE_NUM]={3};
BYTE vcd_track_input;
enum
{
OP_NE=0,
OP_UPDN=0x1,
OP_SEL=0x2,
OP_TT,
};
#define MAX_Y_ITEM 3
#define MAX_MODE 2
#define MAX_X_ITEM 4
#define SEL_POS 2
const UINT8 vcd_mode[MAX_MODE][MAX_Y_ITEM][MAX_X_ITEM]={
{ //mode 0
{OP_TT, STR_OS_TRK_S, STR_OS_SPACE, STR_OS_SPACE},
{OP_UPDN, STR_OS_TIME, STR_OS_TIME_DASH, STR_OS_DIR1},
{OP_NE,0,0,0}
},
{ //mode 1
{OP_TT, STR_OS_DISC_S, STR_OS_SPACE, STR_OS_SPACE},
{OP_UPDN, STR_OS_TIME, STR_OS_TIME_DASH, STR_OS_DIR1},
{OP_UPDN, STR_OS_TRACK, STR_OS_SPACE, STR_OS_DIR5}
}
};
//********************************************
//*
//* Kenny add it 2001/5/8
//*
//********************************************/
void dvd_search(BYTE mode,BYTE base,BYTE num,BYTE init_osd)
{
switch(base)
{
case 0:
if(num==0)
{
PrintOsdMsg(STR_OS_GOTO,0x10,0,0,CH_N);
PrintOsdMsg(STR_OS_T_C_T,0x20,0,0,CH_N);
PrintOsdMsg(STR_OS_TIME,0x11,0,13,CH_N);
PrintOsdMsg(STR_OS_TIME_DASH,0x21,0,0x20,CH_N);
PrintOsdMsg(STR_OS_CHAPTER,0x12,0,13,CH_N);
PrintOsdMsg(dvd_chapter<<8,0x22,0,0x0e,CH_N);
PrintOsdMsg(STR_OS_TITLE,0x13,0,0x0d,CH_N);
PrintOsdMsg(dvd_title<<8,0x23,0,0x0e,CH_N);
}
else
{
PrintOsdMsg(STR_OS_SPACE,0x21,num,3,CH_N);
}
break;
case 1:
if(num==0)
{
PrintOsdMsg(STR_OS_TIME,0x11,0,13,CH_N);
PrintOsdMsg(STR_OS_TIME_DASH,0x21,0,0,CH_N);
PrintOsdMsg(STR_OS_CHAPTER,0x12,0,13,CH_N);
PrintOsdMsg(dvd_chapter<<8,0x22,0,0x2e,CH_N);
PrintOsdMsg(STR_OS_TITLE,0x13,0,13,CH_N);
PrintOsdMsg(dvd_title<<8,0x23,0,0x0e,CH_N);
}
else
{
PrintOsdMsg(dvd_chapter<<8,0x22,num,0xf,CH_N);
}
break;
case 2:
if(num==0)
{
PrintOsdMsg(STR_OS_TIME,0x11,0,13,CH_N);
PrintOsdMsg(STR_OS_TIME_DASH,0x21,0,0,CH_N);
PrintOsdMsg(STR_OS_CHAPTER,0x12,0,0x0d,CH_N);
PrintOsdMsg(dvd_chapter<<8,0x22,0,0x0e,CH_N);
PrintOsdMsg(STR_OS_TITLE,0x13,0,0x0d,CH_N);
PrintOsdMsg(dvd_title<<8,0x23,0,0x2e,CH_N);
}
else
{
PrintOsdMsg(dvd_title<<8,0x23,num,0xf,CH_N);
}
break;
}
}
void vcd_mode_search(BYTE mode,BYTE select_index,BYTE input_op)
{
BYTE i,j;
if(!input_op)//not input
{
if(select_index==0xff)
{
psprintf(RegionValStr[REGION0],"");
PrintOsdMsg(vcd_mode[mode][REGION0][1],0x10|REGION0,0,1,CH_N);
psprintf(RegionValStr[REGION0],"");
PrintOsdMsg(vcd_mode[mode][REGION0][2],0x20|REGION0,0,1,CH_N);
return;
}
psprintf(RegionValStr[REGION0],"");
PrintOsdMsg(vcd_mode[mode][REGION0][1],0x10|REGION0,0,1,CH_N);
for(i=0;i<MAX_Y_ITEM;i++)
{
if(vcd_mode[mode][i][0]==OP_UPDN)
{
for(j=1;j<MAX_X_ITEM;j++)
{
if(j==1)
{
psprintf(RegionValStr[i],":");
PrintOsdMsg(vcd_mode[mode][i][j],(j<<4)|i,0,1,CH_N);
}
else if(j==SEL_POS)
{
if(vcd_mode[mode][i][j]==STR_OS_SPACE)
{
PrintOsdMsg(disp_trk_now<<8,0x20|i,0,0xe,CH_N);
}
else
{
//psprintf(RegionValStr[i],"");
PrintOsdMsg(vcd_mode[mode][i][j],0x20|i,0,0,CH_N);
}
}
else if(j==3)
{
PrintOsdMsg(STR_OS_SPACE,0x30|i,0,0,CH_N);
}
}//for(j=1
}//if(vcd_mode
}//for(i=1
//psprintf(RegionValStr[select_index+1],"D");
PrintOsdMsg(vcd_mode[mode][select_index+1][3],0x30|(select_index+1),0,0,CH_N);
if(vcd_mode[mode][select_index+1][2]==STR_OS_SPACE)
{
PrintOsdMsg(disp_trk_now<<8,0x20|(select_index+1),0,0x2e,CH_N);
}
else
{
psprintf(RegionValStr[select_index+1],"\n");
PrintOsdMsg(vcd_mode[mode][select_index+1][2],0x20|(select_index+1),0,0x21,CH_N);
}
}
else
{
if(select_index==0)
PrintOsdMsg(STR_OS_SPACE,0x20|(index_y+1),input_op,3,CH_N);
else if(select_index==1)
PrintOsdMsg(vcd_track_input<<8,0x20|(index_y+1),input_op,0xf,CH_N);
}
}
void show_search(BYTE mode,BYTE select,BYTE input_op,BYTE init_osd)
{
if(init_osd)
{
ClearOsdMsg(0);
}
if(cd_type_loaded==CDDVD)
dvd_search(mode,select,input_op,init_osd);
else
vcd_mode_search(mode,select,input_op);
}
void search_func_select(void)
{
UINT32 goto_ff,fail=0;
switch(index_y)
{
case 0:
if(goto_hour!=0xff)
{
goto_time=(goto_hour*3600+goto_min*60+goto_sec);
goto_hour=goto_time/3600;
goto_min=(goto_time%3600)/60;
goto_sec=(goto_time%3600)%60;
if(cd_type_loaded==CDDVD)
{
}else if(cd_type_loaded!=CDROM)
{
//printf("1.GOTO hh=%d, mm=%d, ss=%d, ff=%d,lin=%d, lout=%d\n",goto_hour,goto_min,goto_sec,goto_ff,leadin_ff,leadout_ff);
if(IsPBCOn()||((search_mode==0)&&(!IsPBCOn())))
{
UINT32 st=0,end=0,user_input;
user_input=M2I(MSF(((UINT32)goto_hour*60+(UINT32)goto_min),goto_sec,0x0));
st=M2I(st_msf);
end=M2I(e_msf);
if(user_input >=(end-st))
fail=1;
else
goto_time=MSF(((UINT32)goto_hour*60+(UINT32)goto_min),goto_sec,0x0)+st_msf;
}
else
{
UINT16 leadin_ff = msf_mm(gettrkmsf(1))*60 \
+msf_ss(gettrkmsf(1));
UINT16 leadout_ff = msf_mm(gettrkmsf_leadout())*60 \
+msf_ss(gettrkmsf_leadout());
goto_time=MSF(((UINT32)goto_hour*60+(UINT32)goto_min),goto_sec,0x0)+(gettrkmsf(cd_trk_lo_now)&0x00ffffff);
goto_ff = ((goto_time>>16)&0xffff)*60+msf_ss(goto_time);
if( goto_ff > leadout_ff ||goto_ff <leadin_ff ) // leadout area
{
// printf("2.GOTO hh=%d, mm=%d, ss=%d, ff=%d, lin=%d, lout=%d\n",goto_hour,goto_min,goto_sec,goto_ff,leadin_ff,leadout_ff);
fail=1;
}
else
{
flag3S_digit_10=100;
}
}
}
if(!fail)
ircmd_post_func(CMD_FUNC | CMD_FUNC_GOTO);
}
break;
case 1:
case 2:
if(cd_type_loaded==CDDVD)
{
ircmd_post_func(CMD_FUNC|CMD_PTT_PLAY);
}
else
{
if( (vcd_track_input<=cd_total_trk()) && (vcd_track_input>=cd_trk_lo) )
{
ircmd_post_func(CMD_IR_SELECT | (vcd_track_input));
}
else
{
fail=1;
}
}
break;
} //switch
if(t_disp) //kenny add it 2001/5/8 to recover display information
t_disp=t_disp+10;
ClearOsdMsg(0);
full_scrn=0;
digit_cnt=0;
if(fail||(!sys_cmd))
invalid_key();
}
void search_func_clear(void)
{
digit_cnt=0;
show_search(search_mode,index_y,0,0);
switch(index_y)
{
case 0:
goto_hour=0xff;//special value to imply that the goto status which is not yet done
goto_min =0xff;
goto_sec =0xff;
break;
case 1:
dvd_chapter=0;
break;
case 2:
dvd_title=0;
break;
}
}
void search_func_down(void)
{
BYTE mode_select_num;
digit_cnt=0;
goto_hour=0xff;//special value to imply that the goto status which is not yet done
goto_min =0xff;
goto_sec =0xff;
if(cd_type_loaded==CDDVD)
mode_select_num=dvd_mode_select_num[search_mode];
else
mode_select_num=vcd_mode_select_num[search_mode];
index_y++;
index_y=index_y%mode_select_num;
show_search(search_mode,index_y,0,0);
}
void search_func_up(void)
{
BYTE mode_select_num;
digit_cnt=0;
goto_hour=0xff;//special value to imply that the goto status which is not yet done
goto_min =0xff;
goto_sec =0xff;
if(cd_type_loaded==CDDVD)
mode_select_num=dvd_mode_select_num[search_mode];
else
mode_select_num=vcd_mode_select_num[search_mode];
if(!index_y)
{
index_y=mode_select_num-1;
}
else
{
index_y--;
index_y=index_y%mode_select_num;
}
show_search(search_mode,index_y,0,0);
}
void time_search_input(void)
{
digit_cnt++;
switch (digit_cnt)
{
case 1:
goto_hour=0;
goto_min=0;
goto_hour=0;
goto_sec=ir_select_number;
show_search(search_mode,index_y,digit_cnt,0);
break;
case 2:
goto_sec = (goto_sec)*10+ ir_select_number;
show_search(search_mode,index_y,digit_cnt,0);
break;
case 3:
goto_min=goto_sec/10;
goto_sec=(goto_sec%10)*10+ir_select_number;
show_search(search_mode,index_y,digit_cnt,0);
break;
case 4:
goto_min=goto_min*10+(goto_sec/10);
goto_sec=(goto_sec%10)*10+ir_select_number;
show_search(search_mode,index_y,digit_cnt,0);
break;
case 5:
goto_hour=(goto_min/10);
goto_min=(goto_min%10)*10+(goto_sec/10);
goto_sec=(goto_sec%10)*10+ir_select_number;
show_search(search_mode,index_y,digit_cnt,0);
break;
case 6:
break;
default: break;
/* ignore other keys */
}
}
void search_func_input(void)
{
if(ir_select_number==10)
ir_select_number = 0;
if(index_y==0)
{
time_search_input();
}//if(index_y
else if(index_y==1)
{
if(cd_type_loaded==CDDVD)
chapter_search_input();
else
track_search_input();
}
else if(index_y==2)
{
title_search_input();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -