www.pudn.com > sunplus-DVDsetup.rar > setup_newstyle_ui.c, change:2004-06-28,size:71662b


/************************************************* 
* setup_newstyle_ui.c 
* 
*  include when NEW_STYLE_SETUP  for GBM 
* 
*  UI function: 
*     LEFT,RIGHT, UP, DOWN,  SELECT, ShowSetupPage.  
*  
* Creator: zhaoyanhua  
* Date:  3-7-25 17:12 
**************************************************/ 
 
#ifdef SDRAM_16Mb_Mode//zhaoyanhua add 2003-11-10 16:33 
#include "memmap.h" 
#include "memmap0.h" 
#endif 
 
void ShowCUSTMMsg(void); 
void ShowCurrentPage_for_NTSC(int page); 
void ShowCurrentPage_for_PAL(int page); 
void draw_setup_Btn_HL(UINT8 r, int xStart, int yStart, int xLen, int yLen ); 
 
#ifdef IR_KEY_SET_VIDEO_MODE 
#ifdef SET_4_VIDEO_MODE 
#define VIDEO_MODE_VAL_DEFAULT 		3 
#else//#ifdef SET_4_VIDEO_MODE 
#define VIDEO_MODE_VAL_DEFAULT 		0 
#endif//#ifdef SET_4_VIDEO_MODE 
#endif//#ifdef IR_KEY_SET_VIDEO_MODE 
 
#if defined(GBM_DVD)&&!defined(GBM_FULL_FUNCTION)&&!defined(USER_MPEG_LOGO) 
#undef SAME_DISC_RESUME 
#endif 
 
#define NTSC_AUDIO_YSTART   2 
#define NTSC_LAN_YSTART     163 
#define NTSC_VIDEO_YSTART   4 
#define NTSC_SYSTEM_YSTART  235 
#define NTSC_EXIT_YSTART   221 
#define PAL_AUDIO_YSTART   0 
#define PAL_LAN_YSTART     185-HL_OFFSET+5+3 
#define PAL_VIDEO_YSTART   5-3 
#define PAL_SYSTEM_YSTART  265-HL_OFFSET+5+3 
#define PAL_EXIT_YSTART    251-HL_OFFSET+15 
 
#define HL_XSTART_OFFSET	3 
#define HL_OFFSET	20 
/* 
** FUNC: Show the Highlight (hand icon) 
**       and setup menu in current page. 
** 
** zhaoyanhua  
** date: 3-7-14 10:44 
*/ 
void ShowCurrentPage_for_NTSC(int page) 
{ 
 
	#ifdef MONE_SETUP 
    	printf("&&&&-------SHOW CURRENt page ! page = %d\n",page); 
	#endif 
 
	if (page ==3) 
	{ 
		osd_tog_region(0,OSD_ON); 
		//osd_tog_region(2,OSD_OFF); 
	} 
	else if ((page == 0) || (page == 7)) 
	{ 
		osd_tog_region(0,OSD_OFF); 
		//osd_tog_region(2,OSD_ON); 
	} 
	else 
	{ 
		osd_tog_region(0,OSD_OFF); 
		//osd_tog_region(2,OSD_OFF); 
	} 
	 
	/* 
 	char *str1 = "PRESS"; 
	memset(linebuf,0,100); 
	osd_DrawString(0, 0, str1, 11, 0); 
	*/ 
	switch (page) 
	{ 
		case  SYSPAGE: 
							 
			draw_setup_Btn_HL(1, 227+HL_OFFSET-HL_XSTART_OFFSET,NTSC_SYSTEM_YSTART , 140-HL_OFFSET, 67); 
							 
 
			break; 
			case  LANGPAGE: 
		 
			draw_setup_Btn_HL(1, 8+HL_OFFSET-HL_XSTART_OFFSET , NTSC_LAN_YSTART, 140-HL_OFFSET, 67); 
							 
			break; 
 
		case  AUDPAGE: 
							 
			draw_setup_Btn_HL(1, 8+HL_OFFSET-HL_XSTART_OFFSET, NTSC_AUDIO_YSTART , 140-HL_OFFSET,67); 
							 
			break; 
 
		case  MULTISPKPAGE: 
							 
			draw_setup_Btn_HL(1, 450+HL_OFFSET-HL_XSTART_OFFSET , NTSC_AUDIO_YSTART, 140-HL_OFFSET, 67); 
							 
			break; 
			case  AC3DIGITALPAGE: 
 
			draw_setup_Btn_HL(1, 450+HL_OFFSET-HL_XSTART_OFFSET, NTSC_LAN_YSTART , 140-HL_OFFSET, 67); 
							 
			break; 
			case  VIDEOPAGE: 
			 
			draw_setup_Btn_HL(0, 18+HL_OFFSET-HL_XSTART_OFFSET, NTSC_VIDEO_YSTART , 140-HL_OFFSET, 67); 
							 
			break; 
		case  EXITPAGE : 
			{ 
				osd_draw_rect(0, 0, 38*16, 9*SETUP_BUTTON_HEIGHT+24, 0); 
							 osd_DrawIcon(445, NTSC_EXIT_YSTART , 0,page);	 
								 
				break; 
			} 
		default:  break; 
	} 
 
    #ifdef ROLL_SHOW_SETUP 
    if(page != EXITPAGE)//nono 20030919 
    //show osd msg from BUTTON start to BUTTON end. 
    MoveBuf2OSD(SETUP_MENU_XSTART+10, (SETUP_MENU_XSTART+10)+(SETUP_SUB_XSTART-SETUP_MENU_XSTART-1));    
    #endif 
 
} 
 
 
void ShowCurrentPage_for_PAL(int page) 
{ 
 
	#ifdef MONE_SETUP 
    	printf("&&&&-------SHOW CURRENt page ! page = %d\n",page); 
	#endif 
 
	if (page ==3) 
	{ 
		osd_tog_region(0,OSD_ON); 
		//osd_tog_region(2,OSD_OFF); 
	} 
	else if ((page == 0) || (page == 7)) 
	{ 
		osd_tog_region(0,OSD_OFF); 
		//osd_tog_region(2,OSD_ON); 
	} 
	else 
	{ 
		osd_tog_region(0,OSD_OFF); 
		//osd_tog_region(2,OSD_OFF); 
	} 
 
	/* 
 	char *str1 = "PRESS"; 
	memset(linebuf,0,100); 
	osd_DrawString(0, 0, str1, 11, 0); 
	*/ 
	switch (page) 
	{ 
		case  SYSPAGE: 
							 
			draw_setup_Btn_HL(1, 227+HL_OFFSET-HL_XSTART_OFFSET, PAL_SYSTEM_YSTART, 140-HL_OFFSET, 70); 
							 
 
			break; 
			case  LANGPAGE: 
			 
			draw_setup_Btn_HL(1, 8+HL_OFFSET-HL_XSTART_OFFSET, PAL_LAN_YSTART, 140-HL_OFFSET, 70); 
							 
			break; 
 
		case  AUDPAGE: 
							 
			draw_setup_Btn_HL(1, 8+HL_OFFSET-HL_XSTART_OFFSET, PAL_AUDIO_YSTART, 140-HL_OFFSET,70); 
							 
			break; 
 
		case  MULTISPKPAGE: 
							 
			draw_setup_Btn_HL(1, 450+HL_OFFSET, PAL_AUDIO_YSTART, 140-HL_OFFSET, 70); 
							 
			break; 
			case  AC3DIGITALPAGE: 
			 
			draw_setup_Btn_HL(1, 450+HL_OFFSET, PAL_LAN_YSTART, 140-HL_OFFSET, 70); 
							 
			break; 
			case  VIDEOPAGE: 
			 
			draw_setup_Btn_HL(0, 18+HL_OFFSET-HL_XSTART_OFFSET, PAL_VIDEO_YSTART, 140-HL_OFFSET, 70); 
							 
			break; 
		case  EXITPAGE : 
			{ 
				osd_draw_rect(0, 0, 38*16, 13*SETUP_BUTTON_HEIGHT+10, 0); 
				osd_DrawIcon(445, PAL_EXIT_YSTART, 0,page);	 
								 
				break; 
			} 
		default:  break;							 
	} 
    #ifdef ROLL_SHOW_SETUP 
    if(page != EXITPAGE)//nono 20030919 
    MoveBuf2OSD(SETUP_MENU_XSTART+10, (SETUP_MENU_XSTART+10)+(SETUP_SUB_XSTART-SETUP_MENU_XSTART-1));    
    #endif 
} 
 
 
/* 
** FUNC: to rewrite the infomation in CUSM when Rating_8. 
** 
**  zhaoyanhua  
**  Date: 3-7-25 17:55  
*/ 
void ShowCUSTMMsg(void) 
{ 
	BYTE    buf[40]; 
	BYTE    *pVersion; 
	extern const UINT8 ServoVersion[]; 
	int i=0; 
 
	pVersion = (BYTE *)(ROM_BASE_UNCACHED); 
 
	//show ROM code checksum 
	buf[0]= '['; 
	for (i=0x40; i<0x44; i++) 
	{ 
		BYTE    ch[3]; 
		psprintf(ch,"%02x",*(pVersion+i));			 
		buf[2*i-126]=ch[1]; 
		buf[2*i-127]=ch[0]; 
	} 
 
	buf[9]= ']'; 
	buf[10]= 0; 
	osd_DrawString(SETUP_SUB_XSTART+6, SETUP_MENU_YSTART+2, buf, SFONTCOLOR, SBGCOLOR); 
 
	//ServoVersion[16]=0; can't write to const data 
	osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART, ServoVersion, SFONTCOLOR, SBGCOLOR); 
 
	//show some "codes" strings 
	for (i=0x50; i<0x58; i++) { //Extend version string length to 8 Bytes, Jeff 20020715 
		buf[i-0x50] = *(pVersion+i); 
	} 
 
	buf[8]= 0; //Extend version string length to 8 Bytes, Jeff 20020715 
	osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+1, buf, SFONTCOLOR, SBGCOLOR); 
 
	//add build version, Jeff 20021008 
	psprintf(buf, "%s", VERSION_STRING); 
	osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART+1, buf, SFONTCOLOR, SBGCOLOR); 
 
	psprintf(buf, "%c SUM:", regs0->stamp+'A'); 
	osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+2, buf, SFONTCOLOR, SBGCOLOR); 
 
				 
} 
 
 
/* 
**FUNC : draw a rect border to show which button is select. 
** 
** zhaoyanhua  
** Date: 2003-07-22 15:49 
*/ 
void draw_setup_Btn_HL(UINT8 r, int xStart, int yStart, int xLen, int yLen ) 
{ 
	osd_draw_region_rect(xStart, yStart, xLen, yLen, BUTTON_COLOR, r); 
	osd_draw_region_rect(xStart+4, yStart+4, xLen-8, yLen-8, 0, r );		 
} 
 
void setup_func_down(void) 
{ 
    const char *str; 
    int     i; 
    
    reset_passwd_cnt(); 
 
	SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffc0); 
 
    if (setupLevel==0) { //main menu page 
    
/* 
        if ( (page==AC3DIGITALPAGE) && 	( (SETUP_SPDIF==SPDIFBITSTREAM) || (coding_mode_now!=AUDIF_CODING_MODE_AC3) )  ) 
        { 
			page--; 
		} 
 
        if ( (page==MULTISPKPAGE) &&  (cd_type_loaded!=CDDVD) && ( coding_mode_now&(~(AUDIF_CODING_MODE_AC3|AUDIF_CODING_MODE_DTS|AUDIF_CODING_MODE_DTSCD)) ) ) 
        { 
			page--; 
        } else if ( (page==MULTISPKPAGE) && (SETUP_SPDIF!=SPDIFSIMULATE) ) 
        { 
			page--; 
        } 
 
        #ifdef TWO_CHANNEL_ONLY 
        if (page==MULTISPKPAGE)     page--; 
        #endif//SetMovePointer(38, 15);//system Button 
	 
*/ 
 
		return; 
    } else 
	if (setupLevel==1) { 
		//second level menu page 
		if ( (index_y+index_y_start)  (setupItemNum[1]-1)) { 
			if (full_scrn&CUSTM) { 
				//CUSTM menu page 
				//clear third-level menu 
#ifdef  RATING_8 
                if (index_y == 3)  
                { 
                    osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
						SETUP_MENU_YSTART, 
						(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
						8*SETUP_BUTTON_HEIGHT,//(SETUP_MAX_LINE-SETUP_MENU_YSTART-2)*SETUP_BUTTON_HEIGHT, 
						SBGCOLOR); 
 
					ShowCUSTMMsg(); 
						 
				} 
				else 
#endif//end RAGING_8 
				{ 
					osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
						(SETUP_MENU_YSTART+3)*SETUP_BUTTON_HEIGHT, 
						(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
						7*SETUP_BUTTON_HEIGHT,//(SETUP_MAX_LINE-SETUP_MENU_YSTART-2)*SETUP_BUTTON_HEIGHT, 
						SBGCOLOR); 
				} 
					 
				id = setup_item[page][index_y][1]; 
 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 0); 
 
				index_y++; 
 
				id = setup_item[page][index_y][1]; 
 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 1); 
 
				//the last active item in sub-menu is "EXIT", so we skip it's drawing selection area 
                #ifdef RCD_GPIO_CONTROL                                             // alan 2002/7/26 02:08下午 
				if (index_y  (4)) { 
                #else 
				if (index_y  (6-1)) { 
                #endif 
					//draw ">>" between sub-mean and it's corresponding selection area 
 
					#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:52 clead 2003-8-6  
					if((id!=STR_OS_NEXT_PAGE)&&(id!=STR_OS_PREV_PAGE)) 
					#endif 							 
 
					osd_DrawString(SETUP_SUB_XSTART-1, index_y+SETUP_MENU_YSTART+1, Ch_arrorR, SFONTCOLOR, SBGCOLOR); 
 
					submenuStart = index_y+SETUP_MENU_YSTART; 
 
					if (setup_item[page][index_y][0]==SET_NM) { 
						char buf[8]; 
								 
#ifdef RATING_8 
						osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
										  (SETUP_MENU_YSTART+4)*SETUP_BUTTON_HEIGHT, 
										  (SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
										  5*SETUP_BUTTON_HEIGHT, 
										  SBGCOLOR); 
#endif		 
								 
						psprintf(buf, "%04d", UserSet.parent_passwd); 
						osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
						osd_DrawString(SETUP_SUB_XSTART+1, submenuStart+1, buf, 4, SBGCOLOR); 
					} else { 
						//get select item 
						sel = setup_sel[page][index_y]; 
#ifdef RATING_8 
						if ( page!=SYSPAGE&&index_y==3 ) 
						{ 
							submenuStart = SETUP_MENU_YSTART; 
						} 
						else 
						{ 
							submenuStart = index_y+SETUP_MENU_YSTART; 
						} 
#else 
						submenuStart = index_y+SETUP_MENU_YSTART; 
#endif 
 
						//draw third-level menu 
						for (i=2; i<MAX_ITEM_SEL; i++) 
						{ 
							id = setup_item[page][index_y][i]; 
							if (id==0) break; 
							ShowSel(SETUP_SUB_XSTART, (i-2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2,sel == i); 
						} 
						setupItemNum[2] = i - 2; 
					} 
				} 
			} else { 
				//normal setup second-level page 
 
				if (index_y > (SETUP_MAX_LINE-5)) { 
					index_y = SETUP_MAX_LINE-5; 
					index_y_start++; 
					ShowSetupPage(1); 
				} 
 
				//clear third-level menu 
				osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
							SETUP_MENU_YSTART*SETUP_BUTTON_HEIGHT, 
							(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
							10*SETUP_BUTTON_HEIGHT, 
							SBGCOLOR); 
 
				id = setup_item[page][index_y+index_y_start][1]; 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 0); 
 
//                    #ifndef SETUP_ALL_VALID 
#if !defined(SETUP_ALL_VALID)||defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)       //gerry,2004-1-17 0:40    
						//special case 
				if ( (page==MULTISPKPAGE) && 
							(SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) 
							) 
				{ 
					index_y++; 
//							if ( (index_y+index_y_start) == SPKSTART) { 
					if ( (index_y+index_y_start) == SPKSTART && (index_y+index_y_start) != SPKEND) 
				 	{ 
                    	if (index_y_start==0) { 
							index_y += (SPKEND-SPKSTART+1); 
                        } else { 
							index_y = SPKEND+1; 
							index_y_start--; 
							ShowSetupPage(1); 
							return; 
                        } 
					} 
 
				}  
				#if defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)      //gerry,2004-1-17 0:40 
				else  
				#endif//ONLY_DOWNMIXOFF_CAN_SET_CE_RE				 
#endif//ONLY_DOWNMIXOFF_CAN_SET_CE_RE  
 
                #ifndef SETUP_ALL_VALID					 
				if (page==AUDPAGE) { 
                	if ( (SETUP_SPDIF==SPDIFBITSTREAM) && 
									(index_y==DIGIOUTITEM) && 
									( ( coding_mode_now&(AUDIF_CODING_MODE_AC3| 
									//AUDIF_CODING_MODE_PCM|   //DTSCD-BITSTREAM MODE, Jeff 20020719 
									AUDIF_CODING_MODE_DTS) 
									)||(cd_subtype==CD_DTS) )//nono 2-7-25 17:29 
									) 
                    { 
                    	index_y += (VOLCTRLEND-VOLCTRLSTART+2); 
                    } else 
                    { 
                    	index_y++; 
 
                        if ( ( 
								( 
								(SETUP_SPK_DOWNMIX==AC3DOWNMIXOFF) && 
								( coding_mode_now&(AUDIF_CODING_MODE_AC3| 
								AUDIF_CODING_MODE_DTS| 
								AUDIF_CODING_MODE_DTSCD) 
								) 
								) 
								||(coding_mode_now==AUDIF_CODING_MODE_LPCM)//terry,0512,currently ,we are not surport LPCM key shift 
								) 
								&&(index_y==KEYITEM) 
								) 
                        { 
                        	index_y++; 
                        } 
                    } 
                    #ifndef NO_AC3_DYNAMIC_RANGE 
				} else if ( (page==AC3DIGITALPAGE) && //Jeff 20020621 
								(index_y==(AC3DYNAMICITEM1-1)) && 
								( (SETUP_AC3DIGITAL_OUTMODE!=AC3DYNAMICITEM2) 
//								 ||(SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) 
								) 
								) 
				{ 
					index_y++; 
//				    index_y=AC3DYNAMICITEM1+1; 
                    #endif //NO_AC3_DYNAMIC_RANGE 
				} else 
                #endif //SETUP_ALL_VALID 
				{ 
					index_y++; 
				} 
 
				if (setup_item[page][index_y+index_y_start][0]==SET_SPACE)    index_y++; 
 
				id = setup_item[page][index_y+index_y_start][1]; 
 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 1); 
 
				//the last active item in sub-menu is "EXIT", so we skip it's drawing selection area 
				if ((index_y+index_y_start)  (setupItemNum[1]-1)) { 
								//draw ">>" between sub-mean and it's corresponding selection area 
 
					#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:52 clead 2003-8-6  
					if((id!=STR_OS_NEXT_PAGE)&&(id!=STR_OS_PREV_PAGE)) 
					#endif 							 
 
					osd_DrawString(SETUP_SUB_XSTART-1, index_y+SETUP_MENU_YSTART+1, Ch_arrorR, SFONTCOLOR, SBGCOLOR); 
					submenuStart = index_y+SETUP_MENU_YSTART; 
 
					//special item(PASSWORD), page-0, item-4 
					if (setup_item[page][index_y+index_y_start][0]==SET_NM) { 
						if (UserSet.parental_ststus==C_LOCK) { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_LOCK]; 
						} else { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL + 1; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_UNLOCK]; 
						} 
						osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
						osd_DrawString(SETUP_SUB_XSTART+1, (submenuStart)+1, str, 4, SBGCOLOR); 
					} else 
					if (setup_item[page][index_y+index_y_start][0]==SET_SCALE) { 
						setup_PrepareScaleItem(id, 0); 
					} else { 
						//special item(LANGUAGE) 
                        #ifdef RATING_8 
#ifdef GBM_FULL_FUNCTION 
						if (page==LANGPAGE || ((page==SysNextPage) && (index_y==GRADEITEM)) ) { 
#else//GBM_FULL_FUNCTION 
						if (page==LANGPAGE || ((page==SYSPAGE) && (index_y==GRADEITEM)) ) { 
#endif//GBM_FULL_FUNCTION										 
						// if (page==LANGPAGE||(SETUP_GRADE==STR_OS_RATING )) { 
                        #else 
						if (page==LANGPAGE) { 
                        #endif 
							submenuStart = SETUP_MENU_YSTART; //from 0 
						} 
 
						//draw third-level menu 
						for (i=2; i<MAX_ITEM_SEL; i++) { 
							//get select item 
							sel = setup_sel[page][index_y]; 
 
							id = setup_item[page][index_y][i]; 
							if (id==0) break; 
 
							ShowSel(SETUP_SUB_XSTART, (i-2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2,sel == i); 
						} 
						setupItemNum[2] = i - 2; 
					} 
				} 
			} 
        } 
        else 
		{ 
			if (full_scrn&CUSTM) return; 
 
			if (setup_item[page][index_y][1]==STR_OS_RETURN_MAIN_SETUP) 
			{ 
				return; 
			} 
		} 
    } else 
	if (setupLevel==2) { 
		if (setup_item[page][index_y][0]==SET_SCALE) { 
			setup_CookScaleItem(id, 0); 
			run_save_sel_cmd(page,index_y); 
		} else 
		if ( (index_y2  (setupItemNum[2]-1)) && (setup_item[page][index_y][0]!=SET_NM) ) { 
			//third-level menu page 
			sel = setup_sel[page][index_y]; 
 
			id = setup_item[page][index_y][index_y2+2]; 
 
			ShowSel(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2,(index_y2+2) == sel); 
			index_y2++; 
			ShowSel(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2,(index_y2+2) == sel); 
			if ((index_y2+2) == sel) { 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
			} else { 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 0); 
			} 
			id = setup_item[page][index_y][index_y2+2]; 
			str = setup_SetItemString(); 
			osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, SANTIFONTCOLOR, SANTIBGCOLOR); 
		} 
	} 
 
#if 1//defined(GBM_UP_DOWN_SHOW_LONG_MENU)		//gerry,2004-2-7 17:51 
	//draw menu title 
	if (full_scrn&CUSTM) 
		show_main_title(STR_OS_MENU); 
	else 
	{ 
		if (GBM_run_setupmenu_flag)//zhaoyanhua add 3-7-14 19:32 
		{ 
#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME	//freyman 2004-3-25 23:52 
#ifdef NEXT_PAGE_SHOW_ADVANCED_SETUP			//gerry for gbm,2004-2-2 15:37 
			if (page==SysNextPage) 
			{ 
				//show_main_title(setup_MainP[0][0]); 
				if(IsOSDChinese()) 
					show_main_title(setup_item[0][6][1]); 
				else 
					show_main_title(STR_OS_PREV_PAGE); 
			} 
			else 
#else 
			if (page==SysNextPage) 
				show_main_title(setup_MainP[0][0]); 
			else 
#endif 
#endif//SAME_DISC_RESUME 
				show_main_title(setup_MainP[page][0]); 
		}	 
	}	 
#endif//defined(GBM_UP_DOWN_SHOW_LONG_MENU)		//gerry,2004-2-7 17:51								 
 
} 
 
 
void setup_func_up(void) 
{ 
    BYTE    upperbound; 
    const char *str; 
    int     i; 
     
    SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffc0); 
    reset_passwd_cnt(); 
 
    if (full_scrn&CUSTM) { 
        upperbound=2; 
    } else { 
        upperbound=0; 
    } 
 
    if (setupLevel==0) { 
    	 
   		return; 
    } else 
	if (setupLevel==1) { 
		if (index_y==0) 
		{ 
			return ; 
		 
		} else 
		if ( (index_y+index_y_start) > upperbound) { 
			if (full_scrn&CUSTM) { 
				//clear third-level menu 
#ifdef  RATING_8 
            	if (index_y == 3)  
                { 
					osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
						SETUP_MENU_YSTART, 
						(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
						8*SETUP_BUTTON_HEIGHT,//(SETUP_MAX_LINE-SETUP_MENU_YSTART-2)*SETUP_BUTTON_HEIGHT, 
						SBGCOLOR); 
 
					ShowCUSTMMsg(); 
						 
				} 
				else 
#endif//end RAGING_8 
				{ 
					osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
						(SETUP_MENU_YSTART+3)*SETUP_BUTTON_HEIGHT, 
						(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
						7*SETUP_BUTTON_HEIGHT,//(SETUP_MAX_LINE-SETUP_MENU_YSTART-2)*SETUP_BUTTON_HEIGHT, 
						SBGCOLOR); 
				} 
				id = setup_item[page][index_y][1]; 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 0); 
 
				index_y--; 
 
				id = setup_item[page][index_y][1]; 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 1); 
				//draw ">>" between sub-mean and it's corresponding selection area 
 
				#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 clead 2003-8-6  
				if((id!=STR_OS_NEXT_PAGE)&&(id!=STR_OS_PREV_PAGE)) 
				#endif 							 
 
				osd_DrawString(SETUP_SUB_XSTART-1, index_y+SETUP_MENU_YSTART+1, Ch_arrorR, SFONTCOLOR, SBGCOLOR); 
				submenuStart = index_y+SETUP_MENU_YSTART; 
 
				if (setup_item[page][index_y][0]==SET_NM) { 
					char buf[8]; 
                    psprintf(buf, "%04d", UserSet.parent_passwd); 
                    osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
                    osd_DrawString(SETUP_SUB_XSTART+1, submenuStart+1, buf, 4, SBGCOLOR); 
 
				} else { 
                	//get select item 
                    sel = setup_sel[page][index_y]; 
#ifdef RATING_8 
                    if ( page!=SYSPAGE&&index_y==3 ) { 
                    	submenuStart = SETUP_MENU_YSTART; 
                    } 
                    else{ 
                    	submenuStart = index_y+SETUP_MENU_YSTART; 
                    } 
#else 
					submenuStart = index_y+SETUP_MENU_YSTART; 
#endif 
                    //draw third-level menu 
                    for (i=2; i<MAX_ITEM_SEL; i++) { 
                    	id = setup_item[page][index_y][i]; 
                        if (id==0) break; 
                        ShowSel(SETUP_SUB_XSTART, (i-2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2,sel == i); 
                    } 
                    setupItemNum[2] = i - 2; 
				} 
			} else { 
				//normal setup second-level menu page 
 
				if ( (index_y==0) && (index_y_start>0) ) { 
					index_y_start--; 
					ShowSetupPage(1); 
					return; 
				} 
 
				//clear third-level menu 
				osd_draw_rect((SETUP_SUB_XSTART-1)*16, 
						SETUP_MENU_YSTART*SETUP_BUTTON_HEIGHT, 
						(SETUP_MAX_WIDTH-SETUP_SUB_XSTART-1)*16, 
						10*SETUP_BUTTON_HEIGHT, 
						SBGCOLOR); 
 
				id = setup_item[page][index_y+index_y_start][1]; 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 0); 
 
				index_y--; 
				if (setup_item[page][index_y+index_y_start][0]==SET_SPACE)    index_y--; 
 
//#ifndef SETUP_ALL_VALID 
#if !defined(SETUP_ALL_VALID)||defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)           //gerry,2004-1-17 0:39 
					//special case 
				if (page==MULTISPKPAGE) { 
					if (SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) { 
						if ( (index_y+index_y_start) == SPKEND) { 
                        	if (index_y_start==0) { 
								index_y -= (SPKEND-SPKSTART+1); 
                            } else { 
								index_y = SPKSTART-1; 
								index_y_start--; 
								ShowSetupPage(1); 
 
								return; 
                            } 
						} 
					} 
				} 
				#if !defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE) 
				else  
                #endif//ONLY_DOWNMIXOFF_CAN_SET_CE_RE					 
#endif//    #if !defined(SETUP_ALL_VALID)||defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)  
			#ifndef SETUP_ALL_VALID					 
				if (page  ==AUDPAGE) { 
                	if ( (SETUP_SPDIF==SPDIFBITSTREAM) && 
							//(index_y==KEYITEM) && 
							(index_y==VOLCTRLEND) && //Jeff 20020723 
							( ( coding_mode_now&(AUDIF_CODING_MODE_AC3| 
							//AUDIF_CODING_MODE_PCM|   //DTSCD-BITSTREAM MODE, Jeff 20020719 
							AUDIF_CODING_MODE_DTS) 
							)||(cd_subtype==CD_DTS) )//nono 2-7-25 17:29 
							) 
                    { 
						index_y -= (VOLCTRLEND-VOLCTRLSTART+1); 
                    } else 
                    { 
						if ( 
								( 
								( (SETUP_SPK_DOWNMIX==AC3DOWNMIXOFF) && 
								(coding_mode_now&(AUDIF_CODING_MODE_AC3| 
								AUDIF_CODING_MODE_DTS| 
								AUDIF_CODING_MODE_DTSCD) 
								) 
								) 
								||(coding_mode_now==AUDIF_CODING_MODE_LPCM)//terry,0512,currently ,we are not surport LPCM key shift 
								) 
								&&(index_y==KEYITEM) 
								) 
						{ 
							index_y--; 
						} 
 
                    } 
				} 
#ifndef NO_AC3_DYNAMIC_RANGE 
				else if ( (page==AC3DIGITALPAGE) && //Jeff 20020621 
						(index_y==(AC3DYNAMICITEM1)) && 
						( (SETUP_AC3DIGITAL_OUTMODE!=AC3DYNAMICITEM2)  
//						||(SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) 
						) 
						) 
				{ 
					index_y--; 
//					index_y=AC3DYNAMICITEM1-1; 
				} 
#endif //NO_AC3_DYNAMIC_RANGE 
 
#endif //#ifndef SETUP_ALL_VALID 
 
				id = setup_item[page][index_y+index_y_start][1]; 
 
				setup_DrawItem(1, index_y+SETUP_MENU_YSTART+1, 1); 
 
				//the last active item in sub-menu is "EXIT", so we skip it's drawing selection area 
				if ( (index_y+index_y_start)  (setupItemNum[1]-1)) { 
						//draw ">>" between sub-mean and it's corresponding selection area 
 
					#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 clead 2003-8-6  
					if((id!=STR_OS_NEXT_PAGE)&&(id!=STR_OS_PREV_PAGE)) 
					#endif 							 
						 
					osd_DrawString(SETUP_SUB_XSTART-1, index_y+SETUP_MENU_YSTART+1, Ch_arrorR, SFONTCOLOR, SBGCOLOR); 
 
					submenuStart = index_y+SETUP_MENU_YSTART; 
 
					//special item(PASSWORD), page-0, item-4 
					if (setup_item[page][index_y+index_y_start][0]==SET_NM) { 
						if (UserSet.parental_ststus==C_LOCK) { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_LOCK]; 
						} else { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL + 1; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_UNLOCK]; 
						} 
						osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
						osd_DrawString(SETUP_SUB_XSTART+1, (submenuStart)+1, str, 4, SBGCOLOR); 
					} else 
					if (setup_item[page][index_y+index_y_start][0]==SET_SCALE) { 
						setup_PrepareScaleItem(id, 0); 
					} else { 
						//special item(LANGUAGE) 
#ifdef RATING_8 
#ifndef GBM_FULL_FUNCTION 
						if (page==LANGPAGE || ((page==SYSPAGE) && (index_y==GRADEITEM)) ) { 
#else//GBM_FULL_FUNCTION 
						if (page==LANGPAGE || ((page==SysNextPage) && (index_y==GRADEITEM)) ) { 
#endif//GBM_FULL_FUNCTION								 
#else 
						if (page==LANGPAGE) { 
#endif 
							submenuStart = SETUP_MENU_YSTART; //from 0 
						} 
 
						//get select item 
						sel = setup_sel[page][index_y+index_y_start]; 
						//draw third-level menu 
						for (i=2; i<MAX_ITEM_SEL; i++) { 
							const char *str; 
							id = setup_item[page][index_y+index_y_start][i]; 
							if (id==0) break; 
 
							str = setup_SetItemString(); 
 
							if (sel == i) { 
								osd_draw_setup_button(SETUP_SUB_XSTART, (i-2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
								osd_DrawString(SETUP_SUB_XSTART+1, (i-2+submenuStart)+1, str, 4, SBGCOLOR); 
							} else { 
								osd_draw_setup_button(SETUP_SUB_XSTART, (i-2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
								osd_DrawString(SETUP_SUB_XSTART+1, (i-2+submenuStart)+1, str, SFONTCOLOR, SBGCOLOR); 
							} 
						} 
						setupItemNum[2] = i - 2; 
					} 
				} 
			} 
 
        } 
    } else 
	if (setupLevel==2) { 
		upperbound=0; 
		if (setup_item[page][index_y][0]==SET_SCALE) { 
			setup_CookScaleItem(id, 1); 
			run_save_sel_cmd(page,index_y); 
		} else 
		if ( (index_y2 > upperbound) && (setup_item[page][index_y][0]!=SET_NM) ) { 
			//third-level menu page 
			sel = setup_sel[page][index_y]; 
 
			id = setup_item[page][index_y][index_y2+2]; 
			str = setup_SetItemString(); 
 
 
			if ((index_y2+2) == sel) { 
				//keep upper button to UP mode with SANTIBGCOLOR 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
				osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, 4, SBGCOLOR); 
			} else { 
				//normal UP button 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
				osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, SFONTCOLOR, SBGCOLOR); 
			} 
 
			index_y2--; 
 
			if ((index_y2+2) == sel) { 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
			} else { 
				osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 0); 
			} 
 
			id = setup_item[page][index_y][index_y2+2]; 
			str = setup_SetItemString(); 
			osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, SANTIFONTCOLOR, SANTIBGCOLOR); 
 
		} 
	} 
#if 1//defined(GBM_UP_DOWN_SHOW_LONG_MENU)		//gerry,2004-2-7 17:51 
	//draw menu title 
	if (full_scrn&CUSTM) 
		show_main_title(STR_OS_MENU); 
	else 
	{ 
		if (GBM_run_setupmenu_flag)//zhaoyanhua add 3-7-14 19:32 
		{ 
#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 
#ifdef NEXT_PAGE_SHOW_ADVANCED_SETUP			//gerry for gbm,2004-2-2 15:37 
			if (page==SysNextPage) 
			{ 
				//show_main_title(setup_MainP[0][0]); 
				if(IsOSDChinese()) 
					show_main_title(setup_item[0][6][1]); 
				else 
					show_main_title(STR_OS_PREV_PAGE); 
			} 
			else 
#else 
			if (page==SysNextPage) 
				show_main_title(setup_MainP[0][0]); 
			else 
#endif 
#endif//SAME_DISC_RESUME 
				show_main_title(setup_MainP[page][0]); 
		}	 
	}	 
#endif//defined(GBM_UP_DOWN_SHOW_LONG_MENU)		//gerry,2004-2-7 17:51 
 
} 
 
void setup_func_left(void) 
{ 
    const char *str; 
 
	SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffc0); 
 
 
    if ( (setupLevel==0)) 
    { 
    	#ifdef MONE_SETUP	 
    	printf("-------LEFT! page = %d\n",page); 
		#endif     
 
 
//terry 20030802 
    		if (page >=7) 
    			page = 0; 
   			else 
    			page++; 
    		 
			if (page > 5) 
				page = 7; //to exit page. zhaoyanhua 3-7-14 13:07 
 
/* 
 
    	if (page>0) 
   		{ 
   			if (page == 7) 
   				page = page - 2;//Exit->DIRTIAL page.zhaoyanhua note 3-7-14 11:26 
   			else 
   				page--; 
   		} 
   		else 
   			page = 7;//EXIT page. 
  */ 			 
   		 
    	setupLevel=1; 
   		if (page = 5) 
   			ShowSetupPage(0); 
   		/*else 
   		//if (page > 5) 
   		{ 
   			osd_draw_rect(0, 0, 38*16, 9*SETUP_BUTTON_HEIGHT+24, 0); 
   			//osd_draw_rect(0, 0, 22*16, 9*SETUP_BUTTON_HEIGHT, 0); 
   		}	//osd_tog_region(1,OSD_OFF); 
		*/ 
 
    	if (getVPP_TVsystem() ==  1)//terry,0813 
		{ 
			 
			ShowCurrentPage_for_PAL(page); 
		 
		}else 
		{	 
			 
			ShowCurrentPage_for_NTSC(page); 
	 
		} 
    	//ShowCurrentPage(page); 
    	setupLevel=0; 
    	/* 
    	// make tab disable 
    	osd_draw_rect(line*page/6+13, 11+1, line/6-4, SETUP_BUTTON_HEIGHT+9, 1); 
    	if (p_scan==1) 
   			osd_DrawLine((line*page)/6+11, SETUP_BUTTON_HEIGHT+20, (line*(page+1))/6+9, SETUP_BUTTON_HEIGHT+20, SWHITECOLOR, 2); 
   		else 
   			osd_DrawLine((line*page)/6+11, SETUP_BUTTON_HEIGHT+20, (line*(page+1))/6+9, SETUP_BUTTON_HEIGHT+20, SWHITECOLOR, 1); 
 
   		if (page>0) 
   			page--; 
   		else 
   			page=5; 
 
#ifndef SETUP_ALL_VALID		// alan, 2003/7/18 10:49上午 
        if ( (page==AC3DIGITALPAGE) && 	( (SETUP_SPDIF==SPDIFBITSTREAM) || (coding_mode_now!=AUDIF_CODING_MODE_AC3) )  ) 
        { 
			page--; 
		} 
 
        if ( (page==MULTISPKPAGE) &&  (cd_type_loaded!=CDDVD) && ( coding_mode_now&(~(AUDIF_CODING_MODE_AC3|AUDIF_CODING_MODE_DTS|AUDIF_CODING_MODE_DTSCD)) ) ) 
        { 
			page--; 
        } else if ( (page==MULTISPKPAGE) && (SETUP_SPDIF!=SPDIFSIMULATE) ) 
        { 
			page--; 
        } 
#endif 
 
        #ifdef TWO_CHANNEL_ONLY 
        if (page==MULTISPKPAGE)     page--; 
        #endif 
 
        // make tab enable 
  		osd_draw_rect(line*page/6+13, 11+1, line/6-4, SETUP_BUTTON_HEIGHT+10, SBGCOLOR); 
 
   		// highlight : draw a frame to identify which tab is enable 
   		SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffff); 
		osd_DrawLine(line*page/6+30,14,line*page/6+80,14,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+30,50,line*page/6+80,50,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+30,14,line*page/6+30,50,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+80,14,line*page/6+80,50,SANTIBGCOLOR,1); 
 
   		setupLevel=1; 
   		ShowSetupPage(0); 
   		setupLevel=0;*/ 
    } 
     
    else 
     
    if (setupLevel==2) { //left operation only active when switch to selection area of sub-menu 
        if (full_scrn&CUSTM) { 
            if (setup_item[page][index_y][0]==SET_NM) { 
				char buf[8]; 
                osd_draw_setup_button(SETUP_SUB_XSTART, submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
                psprintf(buf, "%04d", UserSet.parent_passwd); 
                osd_DrawString(SETUP_SUB_XSTART+1, submenuStart+1, buf, SFONTCOLOR, SBGCOLOR); 
            } else { 
                id = setup_item[page][index_y][index_y2+2]; 
                str = _OsdMessegeFont1[osd_font_mode][id]; 
                if ((index_y2+2) == sel) { 
                	osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
                    osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, 4, SBGCOLOR); 
                } else { 
                    setup_DrawItem(2, index_y2+submenuStart+1, 0); 
                } 
            } 
        } else { 
#ifdef RATING_8 
			if ( page!=SYSPAGE&&index_y==3 ) { 
				submenuStart = SETUP_MENU_YSTART;} 
			else{ 
				submenuStart = index_y+SETUP_MENU_YSTART; 
			} 
#else 
			submenuStart = index_y+SETUP_MENU_YSTART; 
#endif 
            //change string color of current selection item in selection area 
 
            //special item(PASSWORD), page-0, item-4 
            if (setup_item[page][index_y][0]==SET_NM) { 
                osd_draw_setup_button(SETUP_SUB_XSTART, submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
                show_lock(UserSet.parental_ststus,0); 
            } else 
				if (setup_item[page][index_y][0]==SET_SCALE) { 
					setup_PrepareScaleItem(id, 0); 
 
					if ((id == STR_OS_BRIGHTNESS) || 
						(id == STR_OS_CONTRAST) || 
						(id == STR_OS_HUE) || 
						(id == STR_OS_SATURATION) 
#ifdef DIP_CFG_ENABLE 
						||(id == STR_OS_DEINTLC) 
#endif//#ifdef DIP_CFG_ENABLE 
					   ) // robert 030214 
						{ 
							osd_replace_rect_color(SBGCOLOR,SBGCOLOR); 
						} 
				} else { 
					//special item(LANGUAGE) 
#ifdef RATING_8 
					//if (page==LANGPAGE||(setup_sel[page][index_y]==SETUP_GRADE )) { 
#ifndef GBM_FULL_FUNCTION 
					if (page==LANGPAGE || ((page==SYSPAGE) && (index_y==GRADEITEM)) ) { 
#else//GBM_FULL_FUNCTION 
					if (page==LANGPAGE || ((page==SysNextPage) && (index_y==GRADEITEM)) ) { 
#endif//GBM_FULL_FUNCTION					 
#else 
						if (page==LANGPAGE) { 
#endif 
							submenuStart = SETUP_MENU_YSTART; //from 0 
						} 
 
						id = setup_item[page][index_y][index_y2+2]; 
						str = setup_SetItemString(); 
 
						if ((index_y2+2) == sel) { 
							osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 1); 
							osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, 4, SBGCOLOR); 
						} else { 
							osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
							osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, SFONTCOLOR, SBGCOLOR); 
						} 
					} 
				} 
 
				//change string color of current item in sub-menu 
				id = setup_item[page][index_y][1]; 
				str = _OsdMessegeFont1[osd_font_mode][id]; 
				osd_draw_setup_button(SETUP_MENU_XSTART, index_y+SETUP_MENU_YSTART+1, SETUP_SUB_XSTART-SETUP_MENU_XSTART-1, SANTIBGCOLOR, 1); 
				osd_DrawString(SETUP_MENU_XSTART+1, index_y+SETUP_MENU_YSTART+1, str, SANTIFONTCOLOR, SANTIBGCOLOR); 
				setupLevel = 1; 
		} 
} 
 
void setup_func_right(void) 
{ 
	const char *str; 
	 
	SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffc0); 
   
    if (setupLevel==0) 
    { 
 
    	// make tab disable 
    	 
/*    		if (page >=7) 
    			page = 0; 
    		else 
    			page++; 
    		 
			if (page > 5) 
				page = 7; //to exit page. zhaoyanhua 3-7-14 13:07 
*/ 
//terry 20030802 
    	if (page>0) 
   		{ 
   			if (page == 7) 
   				page = page - 2;//Exit->DIRTIAL page.zhaoyanhua note 3-7-14 11:26 
   			else 
   				page--; 
   		} 
   		else 
   			page = 7;//EXIT page. 
 
   			 
			 
			setupLevel=1; 
   			if (page = 5)  //exit page not show. 
   				ShowSetupPage(0); 
   			/* 
   			else 
   			{ 
   				//osd_tog_region(1,OSD_OFF); 
   				osd_draw_rect(0, 0, 38*16, 7*SETUP_BUTTON_HEIGHT+15, 0); 
   				//osd_draw_rect(0, 0, 22*16, 9*SETUP_BUTTON_HEIGHT, 0); 
   			}*/ 
   			setupLevel=0; 
   			//ShowCurrentPage(page); 
   			 
    	if(getVPP_TVsystem() ==  1)//terry,0813 
		{ 
			 
			ShowCurrentPage_for_PAL(page); 
		 
		}else 
		{	 
			 
			ShowCurrentPage_for_NTSC(page); 
	 
		} 
 
    /*    if ( (page==MULTISPKPAGE) &&  (cd_type_loaded!=CDDVD) && ( coding_mode_now&(~(AUDIF_CODING_MODE_AC3|AUDIF_CODING_MODE_DTS|AUDIF_CODING_MODE_DTSCD)) ) ) 
        { 
			page++; 
        } else if ( (page==MULTISPKPAGE) && (SETUP_SPDIF!=SPDIFSIMULATE) ) 
        { 
			page++; 
        } 
 
        if ( (page==AC3DIGITALPAGE) && 	( (SETUP_SPDIF==SPDIFBITSTREAM) || (coding_mode_now!=AUDIF_CODING_MODE_AC3) )  ) 
        { 
			page++; 
		} 
 
        #ifdef TWO_CHANNEL_ONLY 
        if (page==MULTISPKPAGE)     page++; 
        #endif 
*/ 
    	 
	 
/* 
    	// highlight : draw a frame to identify which tab is enable 
    	SetOsdCol(0,0,SANTIBGCOLOR,0xa346ffff); 
		osd_DrawLine(line*page/6+30,14,line*page/6+80,14,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+30,50,line*page/6+80,50,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+30,14,line*page/6+30,50,SANTIBGCOLOR,1); 
		osd_DrawLine(line*page/6+80,14,line*page/6+80,50,SANTIBGCOLOR,1); 
 
    	setupLevel=1; 
    	ShowSetupPage(0); 
    	setupLevel=0; 
   */ 
    } 
    else 
    
	//right operation only active when switch to menu of sub-menu 
	if (setupLevel==1) { 
 
	if (index_y==(setupItemNum[1]-1)) return; 
 
    #ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 
    //zhaoyanhua add 2003-8-8 17:11 
    //not draw 3rd menu  when turn right at NEXTPAGE/PREVPAGE,  
    if ((page == SYSPAGE)&&(index_y == NEXTPAGEITEM)) 
        return; 
    #ifdef USER_LOGO 
    else if ((page == SysNextPage)&&(index_y == PREVPAGEITEM)) 
    #else//#ifdef USER_LOGO 
    else if ((page == SysNextPage)&&(index_y == PREVPAGEITEM-1))//PREVPAGEITEM-1=2 
    #endif//#ifdef USER_LOGO 
        return; 
	#endif//SAME_DISC_RESUME 
 
	//check GRADE 
#ifdef GBM_FULL_FUNCTION 
	if ( (page==SysNextPage) && (index_y==GRADEITEM) ) { 
#else//GBM_FULL_FUNCTION 
	if ( (page==SYSPAGE) && (index_y==GRADEITEM) ) { 
#endif//GBM_FULL_FUNCTION	 
		if (UserSet.parental_ststus==C_LOCK) return; 
	} 
 
	//change string color of current item in sub-menu 
	osd_draw_setup_button(SETUP_MENU_XSTART, index_y+SETUP_MENU_YSTART+1, SETUP_SUB_XSTART-SETUP_MENU_XSTART-1, SBGCOLOR, 1); 
 
	id = setup_item[page][index_y][1]; 
	str = _OsdMessegeFont1[osd_font_mode][id]; 
	osd_DrawString(SETUP_MENU_XSTART+1, index_y+SETUP_MENU_YSTART+1, str, 4, SBGCOLOR); 
 
	//change string color of current selection item in selection area 
	submenuStart = index_y + SETUP_MENU_YSTART; 
	sel = setup_sel[page][index_y]; 
 
	index_y2 = sel-2; 
 
	if (full_scrn&CUSTM) { 
		//special item(PASSWORD), page-0, item-4 
		if (setup_item[page][index_y][0]==SET_NM) { 
			char buf[8]; 
			osd_draw_setup_button(SETUP_SUB_XSTART, submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
			psprintf(buf, "%04d", UserSet.parent_passwd); 
			osd_DrawString(SETUP_SUB_XSTART+1, submenuStart+1, buf, SANTIFONTCOLOR, SANTIBGCOLOR); 
		} else { 
			id = setup_item[page][index_y][index_y2+2]; 
#ifdef RATING_8 
			if ( page!=SYSPAGE&&index_y==3 ) { 
				submenuStart = SETUP_MENU_YSTART;} 
			else{ 
                submenuStart = index_y+SETUP_MENU_YSTART; 
			} 
#else 
			submenuStart = index_y+SETUP_MENU_YSTART; 
#endif 
			setup_DrawItem(2, index_y2+submenuStart+1, 1); 
		} 
	} else { 
		//special item(PASSWORD), page-0, item-4 
		if (setup_item[page][index_y][0]==SET_NM) { 
			osd_draw_setup_button(SETUP_SUB_XSTART, submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
			show_lock(UserSet.parental_ststus,1); 
		} else 
			if (setup_item[page][index_y][0]==SET_SCALE) { 
				if ((id == STR_OS_BRIGHTNESS) || 
					(id == STR_OS_CONTRAST) || 
					(id == STR_OS_HUE) || 
					(id == STR_OS_SATURATION) 
                #ifdef DIP_CFG_ENABLE 
					||(id == STR_OS_DEINTLC) 
                #endif//#ifdef DIP_CFG_ENABLE 
				   ) // robert 030214 
				{ 
					//osd_replace_rect_color(0, 0, (SETUP_MAX_WIDTH*16), (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT), SBGCOLOR, 12); 
					osd_replace_rect_color(SBGCOLOR, SBGCOLOR);//15); 
				} 
				setup_PrepareScaleItem(id, 1); 
			} else { 
				//special item(LANGUAGE) 
#ifdef RATING_8 
				//if (page==LANGPAGE||(setup_sel[page][index_y]==SETUP_GRADE )) { 
#ifndef GBM_FULL_FUNCTION 
				if (page==LANGPAGE || ((page==SYSPAGE) && (index_y==GRADEITEM)) ) { 
#else//GBM_FULL_FUNCTION				 
				if (page==LANGPAGE || ((page==SysNextPage) && (index_y==GRADEITEM)) ) { 
#endif//GBM_FULL_FUNCTION 
#else 
					if (page==LANGPAGE) { 
#endif 
						submenuStart = SETUP_MENU_YSTART; //from 0 
					} 
 
					id = setup_item[page][index_y][index_y2+2]; 
					str = setup_SetItemString(); 
					osd_draw_setup_button(SETUP_SUB_XSTART, index_y2+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
					osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, str, SANTIFONTCOLOR, SANTIBGCOLOR); 
 
				} 
			} 
//			printf("======In Right\n"); 
			setupLevel = 2; 
	} 
} 
 
 
void setup_func_select(void) 
{ 
	const char *str; 
	UINT8   md=setup_item[page][index_y][0]; 
 
	#if defined(DVD_AUDIO)//dingzhy add it 04-03-23 3:57PM 
	if(pDSV->hid_gp_chk_pwd==2) 
	{ 
 
	    check_dvd_audio_password();//nono 2004/3/2 05:40PM 
              return;  
	} 
	#endif//#if defined(DVD_AUDIO) 
 
	if (setupLevel == 0)//zhaoyanhua add  3-7-14 19:13 
	{ 
		if (page = 5) 
		{ 
			GBM_run_setupmenu_flag =1; 
			setupLevel = 1; 
			#ifndef SDRAM_16Mb_Mode 
			osd_init_setup(); 
			#endif 
			 
			#ifdef MONE_SETUP	 
    			printf("&&&&-------SELECT \n"); 
			#endif    
			 
			//zoom to show setup menu. zhaoyanhua 3-7-17 13:27 
			/*setVPP_OffsetMode(OFFSET_USER); 
			vpp_zoom = 1;//reference : ircmd_zoom()  
			startup_vpp();     
			setVPP_DoItNow(); 
			//setVPP_OffsetX(-160); 
			//setVPP_OffsetY(-180); 
    		*/ 
			//setup_state = 0;//according to the customer demand. 2003-07-19 11:58 
			//full_scrn=SETUP; 
			//play_state =  
			#ifdef SDRAM_16Mb_Mode 
		    prog_state = 2; 
		    #else 
			setup_state = 2; 
			#endif//SDRAM_16Mb_Mode 
			ShowTitle(); 
			//play_state = VCD_STATE_PAUSE; 
			//ircmd_play(); 
			//ircmd_stop(); 
			//system_stop(); 
			#ifdef SDRAM_16Mb_Mode 
			//NOTE: 
			//when SDRAM_16M_Mode,ShowTitle() may destroyed  
			// OSD memory. So must evaluate osd_base_addr again. 
			//zhaoyanhua add 2003-11-10 17:06 
			regs0->osd_base_addr=OSD_BASE_USE_ADDR;//P_BIDIR_LUMA; 
			#endif 
			 
			#ifdef SDRAM_16Mb_Mode 
			osd_init_setup(); 
			#endif 
			 
			ShowSetupPage(2); 
			 
			return; 
		} 
		else  //if enter "select " on EXITPAGE,exit SETUP. zhaoyanhua note 3-7-14 19:26 
		{ 
			GBM_run_setupmenu_flag = 0;	 
			#ifdef MONE_SETUP	 
    			printf("&&&&------- page = 7SELECT \n"); 
			#endif   
			 
			ExitSetupPage(1); 
			#ifdef SDRAM_16Mb_Mode 
			//to avoid the bug when exit setup ,not show display 
			//zhaoyanhua add 2003-11-13 18:59 
		    if (old_t_disp) 
		    { 
			    t_disp=old_t_disp; 
			    DispPolling(3); 
		    } 
			#endif 
						 
		} 
	} 
	else if (setupLevel == 1) 
	{ 
		sel=setup_sel[page][index_y+index_y_start]; 
		id=setup_item[page][index_y+index_y_start][1]; 
 
		if (id == STR_OS_RETURN_MAIN_SETUP) 
		{ 
#ifdef NEXT_PAGE_SHOW_ADVANCED_SETUP			//gerry,2004-2-2 20:30 
			if (page==7)		//in fact it is Prev-Page,2004-2-2 20:35 
			{ 
			page=0; 
			setupLevel=1; 
			index_y = 0; 
			index_y_start=0; 
			ShowSetupPage(1); 
			return; 
			} 
#endif//NEXT_PAGE_SHOW_ADVANCED_SETUP 
			index_y=0; 
			if (full_scrn&CUSTM) 
			{ 
				ExitSetupPage(1); 
 
			} 
			else 
			{ 
				//ExitSetupPage(1); 
			 
			//zhaoyanhua add 3-7-14 19:27 
 
			GBM_run_setupmenu_flag = 0; 
 
 
			//resume to Normal. zhaoyanhua 3-7-17 13:27 
			/*setVPP_OffsetMode(OFFSET_USER); 
			vpp_zoom = 0; 
			startup_vpp();     
			setVPP_DoItNow(); 
			*/ 
			#ifdef SDRAM_16Mb_Mode 
			prog_state = 4; 
			ShowTitle(); 
			prog_state = 5; 
			#else 
			setup_state = 1; 
			ShowTitle(); 
			setup_state = 3; 
			#endif//SDRAM_16Mb_Mode 
			 
			#ifdef SDRAM_16Mb_Mode 
			//NOTE: 
			//when SDRAM_16M_Mode,ShowTitle() may destroyed  
			// OSD memory. So must evaluate osd_base_addr again. 
			//zhaoyanhua add 2003-11-10 17:06 
			regs0->osd_base_addr=OSD_BASE_USE_ADDR;//P_BIDIR_LUMA; 
			#endif 
			 
			//play_state = VCD_STATE_PAUSE; 
            #ifdef NEXTPAGE_SYS//SAME_DISC_RESUME //freyman 2004-3-25 23:53 zhaoyanhua add 2003-8-8 16:41 
			if(page==SysNextPage) 
			    page = SYSPAGE; 
            #endif 
 
            //printf("getVPP_TVsystem():%x\n",getVPP_TVsystem()); 
			if(getVPP_TVsystem() ==  1)//terry,0813 
				{ 
					osd_init_hand_ICON_for_PAL(); 
					setupLevel=1; 
					ShowSetupPage(0);//must showsetuppage,because it will clear the rect. 
					setupLevel=0; 
					ShowCurrentPage_for_PAL(page); 
		 
				} 
			 
			else  
				{	 
					osd_init_hand_ICON_for_NTSC(); 
					setupLevel=1; 
					ShowSetupPage(0);//must showsetuppage,because it will clear the rect. 
					setupLevel=0; 
					ShowCurrentPage_for_NTSC(page); 
	 
				} 
 
			#ifdef MONE_SETUP 
    		printf("&&&&-------exit setup page ------- \n"); 
			#endif  
			return; 
		} 
		} 
		else 
		{ 
 
#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 clead 2003-8-6  
			if (id==STR_OS_NEXT_PAGE) 
			{ 
			page=SysNextPage; 
			setupLevel=1; 
			index_y = 0; 
			index_y_start=0; 
			ShowSetupPage(1); 
			printf("======      clead next       ======\n\n"); 
			return; 
		}else  
			if (id==STR_OS_PREV_PAGE) 
			{ 
			page=0; 
			setupLevel=1; 
			index_y = 0; 
			index_y_start=0; 
			ShowSetupPage(1); 
			printf("======      clead PREV       ======\n\n"); 
			return; 
			}else  
#endif  
 
			setup_func_right(); 
		} 
	} 
	else if (setupLevel == 2) 
	{ 
		sel=setup_sel[page][index_y]; 
		id=setup_item[page][index_y][1]; 
 
		//PASSWORD item 
		if (md==SET_NM) 
		{ 
			if(digit_cnt==4) 
			{ 
				if (UserSet.parental_ststus==C_LOCK && (tmp_passwd==UserSet.parent_passwd ||tmp_passwd==USER_SUPER_PASSWORD) ) 
				{ 
					show_lock(C_UNLOCK,1); 
				} 
				else 
				{ 
					if(UserSet.parental_ststus==C_UNLOCK) 
					{ 
						UserSet.parent_passwd=tmp_passwd; 
					} 
 
					if (!(full_scrn&CUSTM)) 
						show_lock(C_LOCK,1); 
				} 
 
				if(user_input_pwd!=1)//2002-6-13 for huajia 
					run_save_sel_cmd(page,index_y); 
			} 
 
			reset_passwd_cnt(); 
			setup_func_left(); 
			return; 
		} 
		else 
		if (setup_item[page][index_y][0]==SET_SCALE) 
		{ 
			// run_save_sel_cmd(page,index_y); 
			//    setup_func_left(); 
		} 
		else 
		if ((index_y2+2) != sel) 
		{ 
			//UP origional 
			id = setup_item[page][index_y][sel]; 
			osd_draw_setup_button(SETUP_SUB_XSTART, (sel-2)+submenuStart+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SBGCOLOR, 0); 
			str = setup_SetItemString(); 
			osd_DrawString(SETUP_SUB_XSTART+1, (sel-2)+submenuStart+1, (char *)str, SFONTCOLOR, SBGCOLOR); 
			//DOWN current 
			id = setup_item[page][index_y][index_y2+2]; 
			osd_draw_setup_button(SETUP_SUB_XSTART, (index_y2+submenuStart)+1, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
			str = setup_SetItemString(); 
			osd_DrawString(SETUP_SUB_XSTART+1, index_y2+submenuStart+1, (char *)str, SANTIFONTCOLOR, SANTIBGCOLOR); 
			setup_sel[page][index_y] = index_y2 + 2; 
 
			sel = setup_sel[page][index_y]; 
			id = setup_item[page][index_y][1]; 
 
			if ( (page==CUSTMPAGEINDEX) && (id==STR_OS_RATING) ) 
			{ 
				SETUP_GRADE = SETUP_CUSTM_GRADE; 
#ifdef GBM_FULL_FUNCTION 
				run_save_sel_cmd(SysNextPage, GRADEITEM); 
#else//GBM_FULL_FUNCTION 
				run_save_sel_cmd(SYSPAGE, GRADEITEM); 
#endif//GBM_FULL_FUNCTION				 
			} 
 
			if (md==SET_FUNC) 
			{ 
				exe_setup_function(setup_item[page][index_y][1],setup_item[page][index_y][sel],1); 
				// alan, 2003/8/22 07:32PM				 
#ifdef SUPPORT_PROLOGIC_II 
				if ( (setup_item[page][index_y][1]==STR_OS_PROLOGIC) && 
					 (setup_item[page][index_y][sel]!=STR_OS_OFF) 
				   ) 
				{ 
					SETUP_SPDIF=2; 
					exe_setup_function(STR_OS_AUD_OUT,STR_OS_SIMULATE,0); 
				} 
				 
				if ( (setup_item[page][index_y][1]==STR_OS_AUD_OUT) && 
					 (setup_item[page][index_y][sel]!=STR_OS_SIMULATE) 
				   ) 
				{ 
					SETUP_PROLOGIC_II=4;    // alan, 2003/8/11 01:56PM							 
					exe_setup_function(STR_OS_PROLOGIC,STR_OS_OFF,0); 
				}				 
#endif//SUPPORT_PROLOGIC_II 
			} 
 
			run_save_sel_cmd(page,index_y); 
			//  setup_func_left(); 
		} 
 
        //ShowSetupPage(2); 
		setup_func_left(); 
 
		if (id==STR_OS_DEFAULT_SETUP) 
		{ 
			set_default_value(); 
			run_set_variable(); 
			run_save_total_sel(); 
			setupLevel = 1; 
			ShowSetupPage(2); 
			//nono 2003-8-26 1:42 for DTS mute after setup_default 
			exe_setup_function(setup_item[MULTISPKPAGE][AC3DOWNMIXITEM][1], 
			        setup_item[MULTISPKPAGE][AC3DOWNMIXITEM][ SETUP_SPK_DOWNMIX ],0);//nono 2003-8-26 0:50 
 
 
		#ifdef IR_KEY_SET_VIDEO_MODE 
		video_mode_val=VIDEO_MODE_VAL_DEFAULT; 
		set_video_val(video_mode_val); 
		//WriteToI2c(0xa0, 220,(BYTE *)&video_mode_val,1); 
		#endif 
 
            #ifdef VOLUME_RECODE 
			{ 
				int volume; 
				printf("audio_volume=%d\n",audio_volume); 
				audio_volume = VOL_VALUE;       //set to max volume when we default gerry 2-11-6 9:26; 
				printf("audio_volume=%d\n",audio_volume); 
				volume=WriteToI2c(0xa0, ADDR_I2C_VOLUME, (BYTE *)&audio_volume,sizeof(audio_volume)); 
			} 
			AudioSetVolume(audio_volume); 
            #endif //#ifdef VOLUME_RECODE 
 
            #ifdef Ti3001_OSD_UI_1    // jason 2-10-5 15:30 
			    reset_amplifier_default_setup(); 
			    AudioSetVolume(audio_volume); 
			    ti_set_volume(SET_ALL_VALUE); //ti_set_volume(SET_ALL_VALUE,TI_VOL_VALUE); 
            #endif //#ifdef Ti3001_OSD_UI_1 
 
			if ((cd_type_loaded==CDDA) && (cd_subtype==CD_DTS) ) //nono 2-11-9 9:19 
				AudioSetOutputMode(0x09, 0); //Set Output mode(9:2 channel, surround effect) 
 
			AudioSetPause(); //Jeff 20021017 
        } //if (id==STR_OS_DEFAULT_SETUP) 
	} 
} 
 
 
void ShowSetupPage(BYTE refresh) 
{ 
	int     i; 
	BYTE    fontColor, bgColor; 
	BYTE    upDown; 
	const char   *str; 
	 
	reset_passwd_cnt(); 
 
	if (full_scrn&CUSTM) 
	{ //set to CUSTM mode 
		osd_init_setup(); 
		setupLevel = 1; 
		index_y = 2; 
		index_y_start = 0; 
	} 
	//printf("refresh=:%d,setupLevel=:%d\n",refresh,setupLevel); 
	if (refresh) 
	{ 
		//draw main rect* 
		if (!(full_scrn&CUSTM)) 
			osd_draw_rect(0,16, (SETUP_MAX_WIDTH*16), 12*SETUP_BUTTON_HEIGHT/*(SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT)*/, SBGCOLOR); 
		else//for CUSTM 
		{	 
			osd_draw_rect(0, 0, (SETUP_MAX_WIDTH*16), (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT), SBGCOLOR); 
	 
		if (p_scan==1) 
		{ 
			//draw top horizontal line 
			osd_DrawLine(12, SETUP_BUTTON_HEIGHT+20, (SETUP_MAX_WIDTH*16-10), SETUP_BUTTON_HEIGHT+20, SWHITECOLOR, 2); 
			//draw bottom horizontal line 
			osd_DrawLine(10, (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), (SETUP_MAX_WIDTH*16-10), (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), SBLACKCOLOR, 2); 
		} else { 
			osd_DrawLine(12, SETUP_BUTTON_HEIGHT+20, (SETUP_MAX_WIDTH*16-10), SETUP_BUTTON_HEIGHT+20, SWHITECOLOR, 1); 
			osd_DrawLine(10, (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), (SETUP_MAX_WIDTH*16-10), (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), SBLACKCOLOR, 1); 
		} 
			//draw left vertical line 
			osd_DrawLine(10, SETUP_BUTTON_HEIGHT+20, 10, (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), SWHITECOLOR, 1); 
			//draw right vertical line 
			osd_DrawLine((SETUP_MAX_WIDTH*16-12), SETUP_BUTTON_HEIGHT+20, (SETUP_MAX_WIDTH*16-12), (SETUP_MAX_LINE*SETUP_BUTTON_HEIGHT-12), SBLACKCOLOR, 1); 
		} 
		 
		if (refresh==2) 
		{ 
			//osd_draw_rect(10, 10, line, SETUP_BUTTON_HEIGHT+10, 1); 
			//osd_draw_rect((line*page)/6+10, 10, line/6, SETUP_BUTTON_HEIGHT+10, SBGCOLOR); 
			/*for (i=0;i<6;i++) 
			{ 
				if (p_scan==1) 
					osd_DrawLine((line*i)/6+11, 10, (line*(i+1))/6+10, 10, SWHITECOLOR, 2);	// top 
				else 
					osd_DrawLine((line*i)/6+11, 10, (line*(i+1))/6+10, 10, SWHITECOLOR, 1);	// top 
				osd_DrawLine((line*i)/6+11, 10, (line*i)/6+11, SETUP_BUTTON_HEIGHT+21, SWHITECOLOR, 1); // left 
				osd_DrawLine((line*(i+1))/6+8, 10, (line*(i+1))/6+8, SETUP_BUTTON_HEIGHT+20, SBLACKCOLOR, 1); // right 
			} 
			) 
					 
			osd_DrawLine((line*page)/6+12, SETUP_BUTTON_HEIGHT+20, (line*(page+1))/6+8, SETUP_BUTTON_HEIGHT+20, SBGCOLOR, 2); 
		*/ 
		} 
 
	} else 
	{ 
		if (!(full_scrn&CUSTM)) 
		{ 
		if (!GBM_run_setupmenu_flag)//zhaoyanhua add 3-7-14 19:32 
			{ 
				#ifdef ROLL_SHOW_SETUP //zhaoyanhua add 2003-8-15 13:45 
				clrFrameBuffer(FRAME_BIDIR); 
				#endif 
				if( getVPP_TVsystem() ==  1)//terry,0813 
					osd_draw_rect(0, 0, 38*16/*22*16*/, 13*SETUP_BUTTON_HEIGHT+10, 0);//9*SETUP_BUTTON_HEIGHT 
				else 
					osd_draw_rect(0, 0, 38*16/*22*16*/, 9*SETUP_BUTTON_HEIGHT+24, 0);//9*SETUP_BUTTON_HEIGHT 
			} 
		else 
			osd_draw_rect(0/*20*/, 0/*SETUP_BUTTON_HEIGHT+24*/, (SETUP_MAX_WIDTH*15), /*12*SETUP_BUTTON_HEIGHT*/11*SETUP_BUTTON_HEIGHT, SBGCOLOR); 
		} 
 
	} 
/* 
	if (!(full_scrn&CUSTM)) 
	{ 
		if (p_scan==1) 
		{ 
			osd_DrawIcon(4,13,0,page); 
			osd_DrawIcon(16,13,1,page); 
			osd_DrawIcon(27,13,2,page); 
			osd_DrawIcon(38,13,3,page); 
			osd_DrawIcon(50,13,4,page); 
			osd_DrawIcon(61,13,5,page); 
		} 
		else { 
			osd_DrawIcon(4,7,0,page); 
			osd_DrawIcon(16,7,1,page); 
			osd_DrawIcon(27,7,2,page); 
			osd_DrawIcon(38,7,3,page); 
			osd_DrawIcon(50,7,4,page); 
			osd_DrawIcon(61,7,5,page); 
		} 
	} 
*/ 
	if (setupLevel == 0) 
	{//main page menu 
        BYTE oldPage=page; 
	 
       //draw strings in main page menu 
       for (i=0; i<MAX_PAGE_ITEM; i++) 
       { 
           BYTE iPageStr; 
           BYTE updowngray; 
 
           iPageStr = setup_MainP[i][0]; 
           if (iPageStr == STR_OS_SPACE) continue; 
           if (iPageStr == STR_OS_NO) break; 
 
           if (page == setup_MainP[i][1]) 
           { 
                 updowngray = 1; 
           } else 
           { 
                 updowngray = 0; 
           } 
 
            #ifndef SETUP_ALL_VALID 
            //special case 
            if ( (i==MULTISPKPAGE) && (cd_type_loaded!=CDDVD) && 
                    ( coding_mode_now&(~(AUDIF_CODING_MODE_AC3| 
                    AUDIF_CODING_MODE_DTS|AUDIF_CODING_MODE_DTSCD)))) 
            { 
                updowngray = 2; 
            } 
           else if ( (i==MULTISPKPAGE) &&(SETUP_SPDIF!=SPDIFSIMULATE)) 
           { 
				updowngray = 2; 
           } 
           else if ( (i==AC3DIGITALPAGE) && ( (SETUP_SPDIF==SPDIFBITSTREAM) || 
					(coding_mode_now!=AUDIF_CODING_MODE_AC3)) 	) 
           {//terry,2-4-27 22:35 , reference down and up key 
			//we should use function avoid the bug. 
					updowngray = 2; 
		   } 
            #endif 
 
           page = i; 
 
           setup_DrawItem(0, i+SETUP_MENU_YSTART+1, updowngray); 
           page = oldPage; 
        } //for (i=0; i<MAX_PAGE_ITEM; i++) 
 
        setupItemNum[0]=i; 
         
         
	} else 
	 
	 
	{ //second(or third)-level page menu 
		BYTE    iItemType; 
 
		//find max items in this page 
		for (i=0; i<MAX_PAGE_ITEM; i++) 
		{ 
			iItemType=setup_item[page][i][0]; 
			if (iItemType == SET_SPACE) continue; 
			if (iItemType == SET_NE) break; 
		} 
		setupItemNum[1] = i; 
 
 
		//draw menu title 
		 
		 
		if (full_scrn&CUSTM) 
			show_main_title(STR_OS_MENU); 
		else 
		{ 
			if (GBM_run_setupmenu_flag)//zhaoyanhua add 3-7-14 19:32 
			{ 
#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:53 
#ifdef NEXT_PAGE_SHOW_ADVANCED_SETUP			//gerry for gbm,2004-2-2 15:37 
				if (page==SysNextPage) 
				{ 
					//show_main_title(setup_MainP[0][0]); 
					if(IsOSDChinese()) 
					show_main_title(setup_item[0][6][1]); 
					else 
					show_main_title(STR_OS_PREV_PAGE); 
				} 
				else 
#else 
				if (page==SysNextPage) 
				show_main_title(setup_MainP[0][0]); 
				else 
#endif 
#endif//SAME_DISC_RESUME 
				show_main_title(setup_MainP[page][0]); 
		}	 
		}	 
			 
		//draw item strings in sub menu 
		for (i=index_y_start; i<setupItemNum[1]; i++) 
		{ 
			if ( (i-index_y_start+1) > (SETUP_MAX_LINE-3) ) break; 
 
			iItemType=setup_item[page][i][0]; 
			if (iItemType == SET_SPACE) continue; 
			if (iItemType == SET_NE) break; 
 
			id = setup_item[page][i][1]; 
 
			if (id==STR_OS_RETURN_MAIN_SETUP)  // no main page, so this item changes to exit_setup_menu 
			{ 
				if ((!GBM_run_setupmenu_flag) && !(full_scrn & CUSTM))//zhaoyanhua add 3-7-14 19:32 
					return; 
				else 
					id=STR_OS_EXIT_MENU; 
			} 
			str = _OsdMessegeFont1[osd_font_mode][id]; 
			if ( (index_y+index_y_start) == i) 
			{ 
				if (setupLevel==1) 
				{ 
                     fontColor = SANTIFONTCOLOR; 
				} else 
				{ 
                     fontColor = SFONTCOLOR; 
				} 
				bgColor = SANTIBGCOLOR; 
				upDown = 1; 
			}else 
			{ 
				bgColor = SBGCOLOR; 
				upDown = 0; 
 
//            #ifndef SETUP_ALL_VALID 
#if !defined(SETUP_ALL_VALID)||defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)       //gerry,2004-1-17 0:44 
                //special case 
                if ( (page==MULTISPKPAGE) && (SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) && 
                            ( (i>=SPKSTART) && (i=SPKEND) )) 
                { 
                    fontColor = SGRAYCOLOR; 
                } else 
#endif//    #if !defined(SETUP_ALL_VALID)||defined(ONLY_DOWNMIXOFF_CAN_SET_CE_RE)     
#ifndef SETUP_ALL_VALID     
                if ( (page==AUDPAGE) && 
                            ( 
							((SETUP_SPK_DOWNMIX==AC3DOWNMIXOFF) && 
							( coding_mode_now&(AUDIF_CODING_MODE_AC3| 
							AUDIF_CODING_MODE_DTS| 
							AUDIF_CODING_MODE_DTSCD) 
							) 
							) 
							||(coding_mode_now==AUDIF_CODING_MODE_LPCM)//terry,0512,currently ,we are not surport LPCM key shift 
                            ) && 
                            (i==(KEYITEM) ) 
							) 
                { 
                    fontColor = SGRAYCOLOR; 
                } 
				else if ( (page==AUDPAGE) && 
                            (SETUP_SPDIF==SPDIFBITSTREAM) && 
                            ( ( coding_mode_now&(AUDIF_CODING_MODE_AC3| 
							AUDIF_CODING_MODE_DTS| 
							//AUDIF_CODING_MODE_PCM|   //DTSCD-BITSTREAM MODE, Jeff 20020719 
							AUDIF_CODING_MODE_DTSCD) 
                            )||(cd_subtype==CD_DTS) )&&      //NONO 2-7-25 17:26 
                            ( (i>=VOLCTRLSTART) && (i=VOLCTRLEND) ) 
							) 
				{ 
					fontColor = SGRAYCOLOR; 
                #ifndef NO_AC3_DYNAMIC_RANGE 
				} else if ( (page==AC3DIGITALPAGE) && //Jeff 20020621 
                            (i==AC3DYNAMICITEM1) && 
                            ( (SETUP_AC3DIGITAL_OUTMODE!=AC3DYNAMICITEM2)  
//                            ||(SETUP_SPK_DOWNMIX!=AC3DOWNMIXOFF) 
                            ) 
							) 
				{ 
					fontColor = SFONTCOLOR; 
//					fontColor = SGRAYCOLOR; 
                #endif //NO_AC3_DYNAMIC_RANGE 
				} else 
            #endif //SETUP_ALL_VALID 
				{ 
					fontColor = SFONTCOLOR; 
				} 
				} 
				if (!refresh) 
				{ 
					bgColor=SBGCOLOR; 
					upDown=0; 
					if (i==index_y_start) fontColor=SFONTCOLOR; 
				} 
				if ((!GBM_run_setupmenu_flag) && !(full_scrn&CUSTM))//zhaoyanhua add 3-7-14 19:32 
				{ 
					 
					#ifdef ROLL_SHOW_SETUP //zhaoyanhua add 2003-8-14 15:50 
					if(page != EXITPAGE)//nono 20030919 
					{ 
					osd_draw_setup_button(SETUP_MENU_XSTART+10, i-index_y_start/*+SETUP_MENU_YSTART*/, SETUP_SUB_XSTART-SETUP_MENU_XSTART-1, bgColor, upDown); 
					MoveString2Buf((SETUP_MENU_XSTART+10),i,str, fontColor, bgColor ); 
					} 
					#else 
					osd_draw_setup_button(SETUP_MENU_XSTART+10, i-index_y_start/*+SETUP_MENU_YSTART*/, SETUP_SUB_XSTART-SETUP_MENU_XSTART-1, bgColor, upDown); 
					osd_DrawString(SETUP_MENU_XSTART+1+10, i-index_y_start/*+SETUP_MENU_YSTART*/, str, fontColor, bgColor); 
				    #endif 
				} 
				else 
				{ 
					osd_draw_setup_button(SETUP_MENU_XSTART, i-index_y_start+SETUP_MENU_YSTART+1, SETUP_SUB_XSTART-SETUP_MENU_XSTART-1, bgColor, upDown); 
					osd_DrawString(SETUP_MENU_XSTART+1, i-index_y_start+SETUP_MENU_YSTART+1, str, fontColor, bgColor); 
				} 
			} //end of for each item 
 
			//some special system information shown in selection area 
			if (full_scrn&CUSTM) 
			{ 
				#if 0 
				BYTE    buf[40]; 
				BYTE    *pVersion; 
				extern const UINT8 ServoVersion[]; 
 
				pVersion = (BYTE *)(ROM_BASE_UNCACHED); 
 
				//show ROM code checksum 
				buf[0]= '['; 
				for (i=0x40; i<0x44; i++) 
				{ 
					BYTE    ch[3]; 
					psprintf(ch,"%02x",*(pVersion+i)); 
					buf[2*i-126]=ch[1]; 
					buf[2*i-127]=ch[0]; 
				} 
 
				buf[9]= ']'; 
				buf[10]= 0; 
				osd_DrawString(SETUP_SUB_XSTART+6, SETUP_MENU_YSTART+2, buf, SFONTCOLOR, SBGCOLOR); 
 
				//ServoVersion[16]=0; can't write to const data 
				osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART, ServoVersion, SFONTCOLOR, SBGCOLOR); 
 
				//show some "codes" strings 
				for (i=0x50; i<0x58; i++) { //Extend version string length to 8 Bytes, Jeff 20020715 
					buf[i-0x50] = *(pVersion+i); 
				} 
 
				buf[8]= 0; //Extend version string length to 8 Bytes, Jeff 20020715 
				osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+1, buf, SFONTCOLOR, SBGCOLOR); 
 
				//add build version, Jeff 20021008 
				psprintf(buf, "%s", VERSION_STRING); 
				osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART+1, buf, SFONTCOLOR, SBGCOLOR); 
 
				psprintf(buf, "%c SUM:", regs0->stamp+'A'); 
				osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+2, buf, SFONTCOLOR, SBGCOLOR); 
				#endif 
				 
				ShowCUSTMMsg(); 
				index_y = 2; 
			} 
 
			if (refresh) 
			{ 
				draw_3rd_menu(); 
			} 
			return; 
 
			//draw ">" between sub-mean and it's corresponding selection area 
 
			#ifdef NEXTPAGE_SYS//SAME_DISC_RESUME		//freyman 2004-3-25 23:54 clead 2003-8-6  
			if((id!=STR_OS_NEXT_PAGE)&&(id!=STR_OS_PREV_PAGE)) 
			#endif 							 
 
			osd_DrawString(SETUP_SUB_XSTART-1, index_y+SETUP_MENU_YSTART, Ch_arrorR, SFONTCOLOR, SBGCOLOR); 
 
			//show first selection menu of third-level menu 
#ifdef  Ti3001_OSD_UI_2 
			if(page!=5&&page!=6) 
			{ 
				for (i=2; i<MAX_ITEM_SEL; i++) 
				{ 
					//get select item 
					sel = setup_sel[page][index_y+index_y_start]; 
 
					id = setup_item[page][index_y+index_y_start][i]; 
					if (id==0) break; 
 
					str = setup_SetItemString(); 
 
					if (sel == i) { 
						fontColor = SFONTCOLOR; 
						bgColor = SANTIBGCOLOR; 
						upDown = 1; 
					} else { 
						fontColor = SFONTCOLOR; 
						bgColor = SBGCOLOR; 
						upDown = 0; 
					} 
 
					//special item(PASSWORD), page-0, item-4 
					if (setup_item[page][index_y+index_y_start][0]==SET_NM) { 
						if (UserSet.parental_ststus==C_LOCK) { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_LOCK]; 
						} else { 
							setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL + 1; 
							str = _OsdMessegeFont1[osd_font_mode][STR_OS_UNLOCK]; 
						} 
						osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart), SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
						osd_DrawString(SETUP_SUB_XSTART+1, (submenuStart), str, SANTIFONTCOLOR, SANTIBGCOLOR); 
					} else { 
						osd_draw_setup_button(SETUP_SUB_XSTART, (i-2+index_y)+SETUP_MENU_YSTART, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, bgColor, upDown); 
						osd_DrawString(SETUP_SUB_XSTART+1, (i-2+index_y)+SETUP_MENU_YSTART, str, fontColor, bgColor); 
					} 
				} 
				setupItemNum[2] = i-2; 
			} 
			else 
			{ 
				for (i=1; i<MAX_ITEM_SEL; i++) 
				{ 
 
 
					//get select item 
					sel = setup_sel[page][index_y+index_y_start]; 
 
					id = setup_item[page][index_y+index_y_start][i]; 
					if (id==0) break; 
 
					str = setup_SetItemString(); 
 
					if (sel == i) 
					{ 
						fontColor = SFONTCOLOR; 
						bgColor = SANTIBGCOLOR; 
						//bgColor = SBGCOLOR; 
						upDown = 1; 
					} else 
					{ 
						fontColor = SFONTCOLOR; 
						bgColor = SBGCOLOR; 
						upDown = 0; 
					} 
					if (setup_item[page][index_y+index_y_start][0]==SET_SCALE) 
					{ 
						setup_PrepareScaleItem(id,upDown); 
					} 
				} 
				setupItemNum[2] = i-2; 
			} 
#else 
			for (i=2; i<MAX_ITEM_SEL; i++) 
			{ 
				//get select item 
				sel = setup_sel[page][index_y+index_y_start]; 
 
				id = setup_item[page][index_y+index_y_start][i]; 
				if (id==0) break; 
 
				str = setup_SetItemString(); 
 
				if (sel == i) 
				{ 
					fontColor = SFONTCOLOR; 
					bgColor = SANTIBGCOLOR; 
					upDown = 1; 
				} 
				else 
				{ 
					fontColor = SFONTCOLOR; 
					bgColor = SBGCOLOR; 
					upDown = 0; 
				} 
 
				//special item(PASSWORD), page-0, item-4 
				if (setup_item[page][index_y+index_y_start][0]==SET_NM) 
				{ 
					if (UserSet.parental_ststus==C_LOCK) 
					{ 
                        setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL; 
                        str = _OsdMessegeFont1[osd_font_mode][STR_OS_LOCK]; 
					} else 
					{ 
                        setup_sel[page][index_y+index_y_start] = MIN_ITEM_SEL + 1; 
                        str = _OsdMessegeFont1[osd_font_mode][STR_OS_UNLOCK]; 
					} 
					osd_draw_setup_button(SETUP_SUB_XSTART, (submenuStart), SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, SANTIBGCOLOR, 1); 
					osd_DrawString(SETUP_SUB_XSTART+1, (submenuStart), str, SANTIFONTCOLOR, SANTIBGCOLOR); 
				} 
				else 
				{ 
					osd_draw_setup_button(SETUP_SUB_XSTART, (i-2+index_y)+SETUP_MENU_YSTART, SETUP_MAX_WIDTH-SETUP_SUB_XSTART-2, bgColor, upDown); 
					osd_DrawString(SETUP_SUB_XSTART+1, (i-2+index_y)+SETUP_MENU_YSTART, str, fontColor, bgColor); 
				} 
			} 
 
			setupItemNum[2] = i-2; 
#endif 
    } 
} 
 
 
extern void wait_v_blank(void); // in vpp+dvd.c 
extern BYTE rem_osd_id;//nono 2-7-15 21:34 
void ExitSetupPage(BYTE save) //jhuang 2001/5/18 10:30PM 
{ 
    int play=0; 
    //save==1 save and exit setup menu 
    //save==-1 NOT save and exit setup menu 
 
    set_vpp_disp_size(0,0);//terry,2003/8/13 06:18PM 
 
    //In CUSTM page, we set UserSet.parental_ststus=C_UNLOCK, so we resync UserSet.parental_ststus here 
    //if (setup_sel[0][1] == (MIN_ITEM_SEL+1) ) { 
    if (SETUP_PASSWORD == (MIN_ITEM_SEL+1) ) { 
        UserSet.parental_ststus=C_UNLOCK; 
    } else { 
        UserSet.parental_ststus=C_LOCK; 
        SETUP_PASSWORD=MIN_ITEM_SEL; 
    } 
 
    safe_srn_forceOFF(); 
    safe_srn_off(); 
    osd_disable(); 
 
#ifndef QISHENG_DVD 
    if( (old_play_state==VCD_STATE_NORMAL)&&(play_state==VCD_STATE_PAUSE) ) 
        play|=0x01; 
#endif 
 
    if(NP_P_CFG_for_Video != UserSet.P_V_CFG) 
    { 
        if(cd_type_loaded==CDDVD) 
        { 
            set_video_aspect(); 
            play|=is_aspect_menu(); 
        } 
    } 
 
    if(save==1) { 
        setup_save_exit();//run_save_cmd(); 
    } 
 
    #ifdef SDRAM_16Mb_Mode 
   //  if (prog_state != 3) 
        { 
            #include "memmap0.h" 
 
            regs0->osd_base_addr=regs0->osdya; 
            osd_init(); 
         full_scrn=0; 
         ClearOsdMsg(0); 
         psprintf(RegionValStr[REGION1], ""); 
         PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1); 
 
        
          
         //for SDRAM_16Mb_Mode not support other types except MP3﹜JPEG 
    /*    if ((cd_type_loaded == CDROM) && (pFsJpeg->gifsFuncBtn == 2)) 
            { 
                prog_state=255; 
            //for JPEG, it will be disposed in fsNav.c zhaoyanhua note 2003-8-7 8:59 
                ircmd_post_func(CMD_FUNC | CMD_FUNC_PLAY); 
        
        } 
        else*/  
        { 
             if( (cd_type_loaded==CDROM)&&(Is_MP3_STATE()==0) ) 
            { 
            /* 
             //some funciton has been include in FS_ForceReturn2Menu(). 
            //to avoid when play JPEG, draw GUI menu more than once. 
            //zhaoyanhua add 3-7-25 20:39 
             #ifndef NEW_MP3_GUI  
                ReturnFromOtherModeToMenu(); 
    #endif 
            */ 
            //Because ReturnFromOtherModeToMenu() is only valid in SUPPORT_FILE_SYSTEM. 
            //so I changed the function  FS_ForceReturn2Menu(); 
            //zhaoyanhua note 2003-8-26 19:38 
                FS_ForceReturn2Menu(); 
             
            //if(Is_OTHER_STATE()==0) 
            //  pFsJpeg->gifsbPreview = 1; 
		    } 
            else if( (cd_type_loaded == CDDA)&&(old_play_state!=VCD_STATE_STOP) ) 
    	    { 
    	        prog_state = 0; 
    	        ShowTitle(); 
    	        ircmd_resume(); 
    	    }else if( (old_play_state==VCD_STATE_STOP)|| 
			(system_state==SYSTEM_NODISC)||(system_state==SYSTEM_OPEN) ) 
		    { 
                prog_state=0; 
		        ShowTitle(); 
		    }else 
           { 
                printf("================resume\n"); 
			    if ((prog_state != 6)) 
                ircmd_resume(); 
			     
			} 
          prog_state = 0; 
            } 
 
         
             
        } 
      
#else//NOT 16M mode 
 
    //Terry,2002/4/29 01:16AM 
    //Note: Don't revise the seq. . 
    full_scrn=0; 
    //terry,2002/5/10 02:52下午 
    //move to osd1.c 
    //ClearOsdMsg(0); 
    //wait_v_blank(); 
 
    //zhaoyanhua mask 2003-8-7 9:38 
    //#ifdef SDRAM_16Mb_Mode 
    //   regs0->osd_base_addr=regs0->osdya; 
    //#endif 
	 
	#ifdef MONE_SETUP 
	 
		printf("--------iN EXITPAGE seutp_state = %d\n",setup_state);	 
	#endif 
	 
	 
		 
		osd_init(); 
			 
	 	setup_state = 0;		 
			 
		#ifdef MONE_SETUP 
		printf("-------old_play_state=%d,play_state=%d\n",old_play_state,play_state); 
		#endif 
		 
   	 
 
        if( (cd_type_loaded==CDROM)&&(Is_MP3_STATE()==0) ) 
        { 
        //some funciton has been include in FS_ForceReturn2Menu(). 
        //to avoid when play JPEG, draw GUI menu more than once. 
        //zhaoyanhua add 3-7-25 20:39 
        #ifndef NEW_MP3_GUI  
            ReturnFromOtherModeToMenu(); 
      	#endif	 
             
#ifdef JPEG_THUMBNAIL_MENU 
            pFsJpeg->g_nJpegMode=0;//nono 2004-1-7 11:45 
#endif//JPEG_THUMBNAIL_MENU 
             
            FS_ForceReturn2Menu(); 
             
            //if(Is_OTHER_STATE()==0) 
            //  pFsJpeg->gifsbPreview = 1; 
		} 
		else if ((play&0x01)) 
     	{ 
        	ircmd_play(); 
			#ifdef MONE_SETUP 
			printf("================play !\n"); 
			#endif	 
		}    
   // else if ((play_state!=VCD_STATE_STOP)&&(play_state!=VCD_STATE_IDLE)) 
   //     PrintOsdMsg(rem_osd_id,REGION1,1,0);//show "PAUSE" & "STEP"...after "setup" 2-7-15 21:44 
     
 
    	else if(play&0x02) 
    	{  
        	rep_run_the_menu(); 
    		#ifdef MONE_SETUP 
			printf("================rep menu!\n"); 
			#endif 
    	} 
    	else if (is_menu()) 
   	 	{ 
    		//ircmd_return(); 
    		ircmd_root_menu(); 
    		#ifdef MONE_SETUP 
			printf("================menu\n"); 
			#endif	 
   		} 
    	else 
    	{ 
    	    if( (cd_type_loaded == CDDA)&&(old_play_state!=VCD_STATE_STOP) ) 
    	    { 
 
 
    #ifdef USER_MPEG_LOGO 
    if ( 
           (need_show_logo==1) && 
           ( 
               (play_state==VCD_STATE_STOP) || (play_state==VCD_STATE_OPEN) || (system_state==SYSTEM_NODISC) 
           ) 
       )	// alan, 2003/9/8 06:02下午 
    { 
//    	ShowTitle(); 
    	need_show_logo=0; 
//   	ircmd_resume(); 
    } 
#endif//   #ifdef USER_MPEG_LOGO 
 
 
    	       ShowTitle(); 
    	       ircmd_resume(); 
 
 
    	    }else if( (old_play_state==VCD_STATE_STOP)|| 
			 (system_state==SYSTEM_NODISC)||(system_state==SYSTEM_OPEN) ) 
		    { 
 
 
    #ifdef USER_MPEG_LOGO 
    if ( 
           (need_show_logo==1) && 
           ( 
               (play_state==VCD_STATE_STOP) || (play_state==VCD_STATE_OPEN) || (system_state==SYSTEM_NODISC) 
           ) 
       )	// alan, 2003/9/8 06:02下午 
    { 
//    	ShowTitle(); 
    	need_show_logo=0; 
   } 
#endif//   #ifdef USER_MPEG_LOGO 
		        ShowTitle(); 
 
 
		    }else 
            { 
                printf("================resume\n"); 
			    ircmd_resume(); 
			} 
   		 } 
#endif//SDRAM_16Mb_MODE 
}