📄 lc_menu.c
字号:
/* Copyright 2003, ESS Technology, Inc. *//* SCCSID @(#)lc_menu.c 4.2 05/23/03 *//* Based on filesys.c 1.11 02/17/03 */#include "vcxi.h"#include "const.h"#include "filesys.h"#include "nav_menu.h"#include "fsosd.h"#include "util.h"#ifdef MP3#include "mp3.h"#endif/*------------------------------------------------------------------------ * Debugging macros *------------------------------------------------------------------------*/#ifdef DEBUG_OSDint osdreg=1;#define CPRINTF(a,b) {osdreg+=3;if(osdreg>13)osdreg=1;debug_osd(a,b,osdreg);}#else#define CPRINTF(a,b)#endif#if 0int bpt;#define BREAKPOINT(x) {bpt=x;while(bpt) VCX_service();}#else#define BREAKPOINT(x) #endif/*------------------------------------------------------------------------ * Private defines *------------------------------------------------------------------------*/#define ItemNum (NPOSD_LINES*2)#define HorzSpace 10/*------------------------------------------------------------------------ * Global or external variables *------------------------------------------------------------------------*/#ifdef HOST_SLAVEint temp_mp3_song=0;#endif/*------------------------------------------------------------------------ * Private variables *------------------------------------------------------------------------*//*------------------------------------------------------------------------ * Private functions *------------------------------------------------------------------------*/#if ((defined(MP3) || defined(GAMEBOY)) && defined(NON_PLAY_OSD))static MP3_page_buf(int, int);static MP3_highlight(int);static void MP3_track(void);static void MP3_menu(void);void MP3_select(void);int MP3_song(void);void track_to_mp3(int);#endif/*------------------------------------------------------------------------ * Begin function listing *------------------------------------------------------------------------*/#if (defined(MP3) || defined(GAMEBOY))#ifdef NON_PLAY_OSDstatic char MP3_DIR[32]="FOLDER : ";static char MP3_PAGE[] = "PAGE XX/XX";static char mp3_select;static MP3_page_buf(int cur_page, int total_pages){ int bcd_num; bcd_num = hex2bcd[cur_page]; MP3_PAGE[5] = ((bcd_num >> 4) & 0xf) + '0'; MP3_PAGE[6] = (bcd_num & 0xf) + '0'; bcd_num = hex2bcd[total_pages]; MP3_PAGE[8] = ((bcd_num >> 4) & 0xf) + '0'; MP3_PAGE[9] = (bcd_num & 0xf) + '0';}/* list MP3 directory */static void MP3_track(){ int i,j; int x=1,y=0; int list_track; int file_cnt = 0; NPOSD_clear_all(); list_track = real_track[mp3_dir]; CG_menu_on = 1; /* OSD menu is ON */ i = 0; do { MP3_DIR[i+10] = iso9660_dir[list_track].name[i]; i++; } while (iso9660_dir[list_track].name[i]); MP3_DIR[i+10] = 0; OUTOSD(4, MP3_DIR, MP3_DIR, 0); mp3_page = mp3_song/ItemNum; mp3_select = mp3_song-mp3_page*ItemNum; MP3_page_buf(mp3_page+1, (iso9660_dir[list_track].dir-1)/ItemNum+1); OUTOSD(8, MP3_PAGE, MP3_PAGE, 0); for (i=0; i<iso9660_file_cnt; i++){ if (iso9660_file[i].dir == list_track){ if (file_cnt >= ItemNum*mp3_page){ NPOSD_output(x,y,iso9660_file[i].name);#ifdef MP3_VERT_LISTING y++; if (y >= NPOSD_LINES) { y = 0; x += HorzSpace; if (x > (HorzSpace+1)) break; }#else x += HorzSpace; if (x > (HorzSpace+1)){ x = 1; y++; if (y >= NPOSD_LINES) break; }#endif } file_cnt++; } } MP3_highlight(mp3_select);}/* list MP3 root (those directories with MP3 files */static void MP3_menu(){ int i,j; int x=1,y=0; CLEARALLOSD(); CG_menu_on = 1; /* OSD menu is ON */ mp3_root_page = mp3_dir/ItemNum; mp3_select = mp3_dir-mp3_root_page*ItemNum; MP3_page_buf(mp3_root_page+1, mp3_total_page+1); OUTOSD(8, MP3_PAGE, MP3_PAGE, 0); MP3_DIR[10] = 'R'; MP3_DIR[11] = 'O'; MP3_DIR[12] = 'O'; MP3_DIR[13] = 'T'; MP3_DIR[14] = 0; OUTOSD(4, MP3_DIR, MP3_DIR, 0); for (i=mp3_root_page*ItemNum; i<real_track_cnt; i++){ NPOSD_output(x,y,iso9660_dir[real_track[i]].name);#ifdef MP3_VERT_LISTING y++; if (y >= NPOSD_LINES) { y = 0; x += HorzSpace; if (x > (HorzSpace+1)) break; }#else x += HorzSpace; if (x > (HorzSpace+1)){ x = 1; y++; if (y >= NPOSD_LINES) break; }#endif } MP3_highlight(mp3_select);}/* list MP3 info */void MP3_select(){ if (mp3_menu_changed == 1){ if (in_mp3_root) MP3_menu(); else MP3_track(); } else if (mp3_menu_changed == 2) OUTOSD(8, MP3_PAGE, MP3_PAGE, 0); else if (mp3_menu_changed == 3) OUTOSD(4, MP3_DIR, MP3_DIR, 0); mp3_menu_changed = 0;}/* "point out" the selection */static MP3_highlight(int item){ int x, y; char rt_arrow[2] = {FONT_RIGHT, 0}; #ifdef MP3_VERT_LISTING if (item >= NPOSD_LINES) { x = HorzSpace; y = item - NPOSD_LINES; } else { x = 0; y = item; }#else x = (item & 0x1) ? HorzSpace: 0; y = (item >> 1);#endif NPOSD_output(x, y, rt_arrow);}#endif /* NON_PLAY_OSD *//* move MP3 item selection */void MP3_item(int des){ if (in_mp3_root){ mp3_dir += des; if ((des > 0) && (mp3_dir >= real_track_cnt)) mp3_dir = 0; if ((des < 0) && (mp3_dir < 0)) mp3_dir = real_track_cnt - 1; } else{ mp3_song += des; if ((des > 0) && (mp3_song >= iso9660_dir[real_track[mp3_dir]].dir)) mp3_song = 0; if ((des < 0) && (mp3_song < 0)) mp3_song = iso9660_dir[real_track[mp3_dir]].dir - 1; } mp3_menu_changed = 1;}/* convert selection to real MP3 fileno. */int MP3_song(){ int i; int tmp = 0; for (i=0;i<mp3_dir;i++){ tmp += iso9660_dir[real_track[i]].dir; } tmp += (mp3_song+1); return(tmp);}/* real MP3 fileno to directory+songno. */void track_to_mp3(int track){ int id; MP3_VBR_gain = DEF_VBR_GAIN; /* Set to default value */ mp3_dir = 0; mp3_song = 0; in_mp3_root = 0;#ifdef DATA_CD id = (iso9660_file[track-1].loc) >> 24;#endif track--; while (track >= iso9660_dir[real_track[mp3_dir]].dir){ track -= iso9660_dir[real_track[mp3_dir]].dir; mp3_dir++; } mp3_song = track;#ifdef NON_PLAY_OSD MP3_track();#endif}#endif#ifdef HOST_SLAVE/*******************************************************************//* For MP3 dics, in Entry_state change the cussor position and *//* update the display Page according the global variable: mp3_song *//* Input: mp3_song *//* Output: cur_track_index; mp3_dir. *//*******************************************************************/ int haottt=0;int temp_song_num=0, sub_sum_song_num=0;void mp3_osd_change(){ unsigned char i; temp_mp3_song = mp3_song; haottt = mp3_song; for (i=0; i < real_track_cnt; i++) { sub_sum_song_num = temp_song_num; temp_song_num += iso9660_dir[real_track[i]].dir; if((haottt-1) < temp_song_num) { mp3_dir = i; haottt = haottt - sub_sum_song_num -1 ; temp_song_num=0; sub_sum_song_num=0; break; } } mp3_song = haottt; in_mp3_root=0; /* mp3_dir=0; */ /* MP3_item(0);*/ mp3_menu_changed=1; MP3_track(); mp3_menu_changed=0;}extern int cur_track_index;int get_track_index_from_mp3song(){ /* get absolute cur_track_index based on zero */ int i, temp_number=0; for(i=0; i<mp3_dir; i++) { temp_number += iso9660_dir[real_track[i]].dir; } temp_number += mp3_song; cur_track_index = temp_number; return (temp_number);}void mp3_osd_change_dir(int dir_id){ int i, temp_absolute_num=0; mp3_dir = dir_id; /* mp3_dir= (0 ... real_track_cnt) */ for (i=0; i<real_track_cnt; i++) { temp_absolute_num += iso9660_dir[real_track[i]].dir; } cur_track_index = temp_absolute_num; mp3_song = 0; in_mp3_root=0; mp3_menu_changed=1; MP3_track(); mp3_menu_changed=0;}void mp3_osd_back_root(){ int old_mp3_dir; /* mp3_dir = 0;*/ in_mp3_root = 1; /* mp3_menu_changed=1; */ MP3_menu(); cur_track_index=0;}void mp3_osd_enter_subdir(){ mp3_song=0; in_mp3_root = 0; mp3_osd_change_dir(mp3_dir); mp3_song = 0;}#endif /* HOST_SLAVE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -