⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilhandler.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
						GrDestroyGC(gc_pal64);			}			break;				case SHOW_RETURN_KEYDOWN:		PwdSet_Quit:					RestorePopupRect(wPtr);			MapSub1Handler(wPtr, NULL, 0);			break;					case SHOW_ZERO_KEYDOWN:	DrawPwdMasks(0x30); break;		case SHOW_ONE_KEYDOWN: DrawPwdMasks(0x31); break;		case SHOW_TWO_KEYDOWN: DrawPwdMasks(0x32); break;		case SHOW_THREE_KEYDOWN: DrawPwdMasks(0x33); break;		case SHOW_FOUR_KEYDOWN: DrawPwdMasks(0x34); break;		case SHOW_FIVE_KEYDOWN: DrawPwdMasks(0x35); break;		case SHOW_SIX_KEYDOWN: DrawPwdMasks(0x36); break;		case SHOW_SEVEN_KEYDOWN: DrawPwdMasks(0x37); break;		case SHOW_EIGHT_KEYDOWN: DrawPwdMasks(0x38); break;		case SHOW_NINE_KEYDOWN: DrawPwdMasks(0x39); break;				case SHOW_ENTER_KEYDOWN:			if (pwdStr.pwd[0][0] == '@' || pwdStr.pwd[0][1] == '@' || pwdStr.pwd[0][2] == '@' || pwdStr.pwd[0][3] == '@') {				OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png");				GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Set Password",-1,GR_TFASCII);				GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Password is not set!",-1,GR_TFASCII);				wPtr->KbdHandler = OkCancelKeydownHandler;				wPtr->KbdHandler_dptr = (DATA_POINTER) 1;				break;			}							if (pwd == -1) {				// password == verify ?				if (pwdStr.pwd[0][0] == pwdStr.pwd[1][0] && pwdStr.pwd[0][1] == pwdStr.pwd[1][1] &&					pwdStr.pwd[0][2] == pwdStr.pwd[1][2] &&	pwdStr.pwd[0][3] == pwdStr.pwd[1][3]) 				{											int pwdEnter = (pwdStr.pwd[0][0] - 0x30)*1000 + (pwdStr.pwd[0][1] - 0x30)*100 + (pwdStr.pwd[0][2] - 0x30)*10 + (pwdStr.pwd[0][3] - 0x30);					iniSub1[PSWD_INDEX].selected = pwd = pwdEnter;		// Saved in SaveSettings()					goto PwdSet_Quit;				}				else {				PwdSet_NotVerified:					OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png");					GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Set Password",-1,GR_TFASCII);					GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Password is not confirmed!",-1,GR_TFASCII);					wPtr->KbdHandler = OkCancelKeydownHandler;					wPtr->KbdHandler_dptr = (DATA_POINTER) 1;				}			}			else {				char tmp[4];						itoa(pwd,tmp,4);				// entered password == current pwd?				if (pwdStr.pwd[0][0] == tmp[0] && pwdStr.pwd[0][1] == tmp[1] &&					pwdStr.pwd[0][2] == tmp[2] && pwdStr.pwd[0][3] == tmp[3]) 				{					// new password == verify ?					if (pwdStr.pwd[1][0] == pwdStr.pwd[2][0] && pwdStr.pwd[1][1] == pwdStr.pwd[2][1] &&						pwdStr.pwd[1][2] == pwdStr.pwd[2][2] && pwdStr.pwd[1][3] == pwdStr.pwd[2][3]) 					{												int pwdEnter = (pwdStr.pwd[1][0] - 0x30)*1000 + (pwdStr.pwd[1][1] - 0x30)*100 + (pwdStr.pwd[1][2] - 0x30)*10 + (pwdStr.pwd[1][3] - 0x30);						iniSub1[PSWD_INDEX].selected = pwd = pwdEnter;		// Saved in SaveSettings()						goto PwdSet_Quit;					}					else						goto PwdSet_NotVerified;				}				else {				//	password is incorrect					OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png");					GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Password Entry",-1,GR_TFASCII);					GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Password is not correct!",-1,GR_TFASCII);					wPtr->KbdHandler = OkCancelKeydownHandler;					wPtr->KbdHandler_dptr = (DATA_POINTER) 1;				}			}					break;					case SHOW_POWER_KEYDOWN:		case SHOW_OPEN_KEYDOWN:		case SHOW_SETUP_KEYDOWN:			//Save all parameters			SaveSettings(wPtr);			RestorePopupRect(wPtr);			MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE);			break;			}	return;}void MapPwdSetHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){	int i;		gc1 = wPtr->gc;	gc_pal0 = wPtr->gc_pal0;	gc_pal6 = wPtr->gc_pal6;	gc_pal244 = wPtr->gc_pal244;	wid = wPtr->wid;		wPtr->KbdHandler = PwdSetKeydownHandler;	wPtr->KbdHandler_dptr = ptr;		//Retrieve pswd	pwd = iniSub1[PSWD_INDEX].selected;		//Init strings	for (i=0; i<3; i++) {		pwdStr.mask[i][0] = pwdStr.mask[i][1] = pwdStr.mask[i][2] = pwdStr.mask[i][3] = '#';	}		pwdStr.pwd[0][0] = pwdStr.pwd[0][1] = pwdStr.pwd[0][2] = pwdStr.pwd[0][3] = '@';	pwdStr.pwd[1][0] = pwdStr.pwd[1][1] = pwdStr.pwd[1][2] = pwdStr.pwd[1][3] = '$';	pwdStr.pwd[3][0] = pwdStr.pwd[3][1] = pwdStr.pwd[3][2] = pwdStr.pwd[3][3] = '&';			curId = 0; 	curIdMax = 3;  	curY = POPUP_LINE1_Y; curRow = 0;		SavePopupRect(wPtr);	OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png");	GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Set Password",-1,GR_TFASCII);	GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE4_Y+10,"Press Enter to set, Return to quit",-1,GR_TFASCII);	GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE5_Y+10,"or Cancel to re-enter.",-1,GR_TFASCII);		if (pwd == -1) {				GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"New:",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Confirm:",-1,GR_TFASCII);		curYMax = POPUP_LINE2_Y;	}	else {				GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"Current:",-1,GR_TFASCII);				GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"New:",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Confirm:",-1,GR_TFASCII);		curYMax = POPUP_LINE3_Y;	}		GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[0][0],1,GR_TFASCII);	for (i=1; i<4; i++)		GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),POPUP_LINE1_Y,&pwdStr.mask[0][i],1,GR_TFASCII);		for (i=0; i<4; i++)		GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),POPUP_LINE2_Y,&pwdStr.mask[1][i],1,GR_TFASCII);		//Password set before, so we want to confirm	if (pwd != -1)		for (i=0; i<4; i++)			GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),POPUP_LINE3_Y,&pwdStr.mask[2][i],1,GR_TFASCII);		return;}//----------------------// Messages stuff//voidMapMsgHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){		gc1 = wPtr->gc;	wid = wPtr->wid;		SavePopupRect(wPtr);	OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png");		GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Message",-1,GR_TFASCII);	switch ((int)ptr) {	case SHOW_ABORT_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Unrecoverable Disc Error.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Abort Playback!",-1,GR_TFASCII);		break;			case SHOW_INVALID_REGION_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Invalid Region Disc.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Abort Playback!",-1,GR_TFASCII);		break;		case SHOW_BOOK_MARK_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"When playing next time, Disc" ,-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"will restart from the current",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"stop position.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE4_Y,"To start from the beginning",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE5_Y,"press [Stop] again.",-1,GR_TFASCII);		break;	case SHOW_CANNOT_PLAYBACK_FROM_CURRENT_POSITION_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Playback cannot be resumed",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"from the current position.",-1,GR_TFASCII);		break;	case SHOW_PARENTAL_LEVEL_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"The current parental level",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"prohibits playback of this DVD.",-1,GR_TFASCII);				break;	case SHOW_CANNOT_PLAYBACK_AT_CURRENT_RESOLUTION_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"Playback cannot be resumed",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"for current screen resolution.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Please change to 480p.",-1,GR_TFASCII);		break;	case SHOW_CANNOT_DISPLAY_JPEG_FILE_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Cannot display current JPEG file.",-1,GR_TFASCII);		break;		case SHOW_BAD_AUDIO_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Cannot playback audio track.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Audio format is not supported.",-1,GR_TFASCII);		break;#if 0		case SHOW_BAD_VIDEO_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Cannot playback video track.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Video format is not supported.",-1,GR_TFASCII);		break;	case SHOW_BAD_MPEG4_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"Cannot playback video track.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Video format is Mpeg4 with GMC",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"and/or QPel.",-1,GR_TFASCII);		break;#endif		case SHOW_BAD_FORMAT_MSG:		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE1_Y,"Cannot playback file.",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Video/Audio format is not",-1,GR_TFASCII);		GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"supported.",-1,GR_TFASCII);		break;	}	return;}void ClearMsg(OSD_WINDOW *wPtr){	alarm(0);	RestorePopupRect(wPtr);	//GrFillRect(wPtr->wid,wPtr->gc_pal0,POPUP_X,POPUP_Y,POPUP_W,POPUP_H);}//-------------------------// DVI Setting stuff//static GR_PIXELVAL *dvicustomPixels;void DVIUpdateDigit(int prevId, int prevRow, int prevCol, int prevX, int prevY){	GR_SIZE retwidth, retheight, retbase;		//Clear	GrGetGCTextSize(gc1,DVISettings[prevRow][prevCol].val,prevId,GR_TFASCII, &retwidth, &retheight, &retbase);	GrText(wid,gc1,prevX+retwidth,prevY,&DVISettings[prevRow][prevCol].val[prevId],1,GR_TFASCII);		//Update	GrGetGCTextSize(gc_pal244,DVISettings[curRow][curCol].val,curId,GR_TFASCII, &retwidth, &retheight, &retbase);	GrText(wid,gc_pal244,curX+retwidth,curY,&DVISettings[curRow][curCol].val[curId],1,GR_TFASCII);		return;}voidDVISettingKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){	GR_EVENT *event;	char digit;	int prevId,prevRow,prevCol,prevX,prevY;	SUB_ITEM *pSub1 = (SUB_ITEM *)ptr;    event=wPtr->lastevent;	switch (event->keystroke.ch) {		case SHOW_LEFT_KEYDOWN:					prevId = curId; prevRow = curRow; prevCol = curCol; prevX = curX; prevY = curY;		if (curId <= 0) {			if (curCol == 1) {				curCol = 0;				curX = (curRow == 0)?H_FREQ_VAL_X:CUSTOM_DVI_VAL1_X;				curIdMax = (curRow == 0)?4:3;				curId = curIdMax;			}			//else			//	curId = curIdMax;			  		} else			curId--;				DVIUpdateDigit(prevId,prevRow,prevCol,prevX,prevY);		break;			case SHOW_RIGHT_KEYDOWN:		prevId = curId; prevRow = curRow; prevCol = curCol; prevX = curX; prevY = curY;		if (curId >= curIdMax) {			if (curCol == 0) {				curCol = 1;				curX = CUSTOM_DVI_VAL2_X;				curIdMax = 3;				curId = 0;			}			//else 			//	curId = 0;		} else			curId++;				DVIUpdateDigit(prevId,prevRow,prevCol,prevX,prevY);				break;			case SHOW_ZERO_KEYDOWN:  digit = 0x30; goto DVI_DrawDigit;	case SHOW_ONE_KEYDOWN:   digit = 0x31; goto DVI_DrawDigit;	case SHOW_TWO_KEYDOWN:	 digit = 0x32; goto DVI_DrawDigit;	case SHOW_THREE_KEYDOWN: digit = 0x33; goto DVI_DrawDigit;	case SHOW_FOUR_KEYDOWN:	 digit = 0x34; goto DVI_DrawDigit;	case SHOW_FIVE_KEYDOWN:  digit = 0x35; goto DVI_DrawDigit;	case SHOW_SIX_KEYDOWN:   digit = 0x36; goto DVI_DrawDigit;	case SHOW_SEVEN_KEYDOWN: digit = 0x37; goto DVI_DrawDigit;	case SHOW_EIGHT_KEYDOWN: digit = 0x38; goto DVI_DrawDigit;	case SHOW_NINE_KEYDOWN:  digit = 0x39;		DVI_DrawDigit:		if (curId == curIdMax)			DrawDigit(DVISettings[curRow][curCol].val, digit, 0);		else			DrawDigit(DVISettings[curRow][curCol].val, digit, 1);		break;	//case SHOW_CANCEL_KEYDOWN:	//	break;			case SHOW_UP_KEYDOWN:		if (curRow > 0) {			prevId = curId; prevRow = curRow; prevCol = curCol; prevX = curX; prevY = curY;			curRow--;			curY = DVISettings[curRow][curCol].y;			if (curRow == 0 && curCol == 0) {				curX = H_FREQ_VAL_X;				curIdMax = 4;			}			else {				curX = (curCol == 0)?CUSTOM_DVI_VAL1_X:CUSTOM_DVI_VAL2_X;				curIdMax = 3;			}			curId = 0;						DVIUpdateDigit(prevId,prevRow,prevCol,prevX,prevY);		}		break;			case SHOW_DOWN_KEYDOWN:		if (curRow < DVI_SETTING_ROWS - 1) {			prevId = curId; prevRow = curRow; prevCol = curCol; prevX = curX; prevY = curY;			curRow++;			curY = DVISettings[curRow][curCol].y;			curX = (curCol == 0)?CUSTOM_DVI_VAL1_X:CUSTOM_DVI_VAL2_X;			curId = 0;			curIdMax = 3;			DVIUpdateDigit(prevId,prevRow,prevCol,prevX,prevY);		}		break;	// Quit	case SHOW_SETUP_KEYDOWN:		//Save all parameters		pSub1->selected = DVI_OUT_CUSTOM;		SaveSettings(wPtr);		// fall through to quit		case SHOW_POWER_KEYDOWN:	case SHOW_OPEN_KEYDOWN:			RestoreRect(wPtr, &dvicustomPixels, CUSTOM_DVI_TEXT1_X-30, CUSTOM_DVI_HEADER_Y-40, 580, 310);		MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE);		break;						case SHOW_ENTER_KEYDOWN:		pSub1->selected = DVI_OUT_CUSTOM;		SaveSettings(wPtr);	case SHOW_RETURN_KEYDOWN:			GrClearWindow(wid, GR_FALSE);		RestoreRect(wPtr, &dvicustomPixels, CUSTOM_DVI_TEXT1_X-30, CUSTOM_DVI_HEADER_Y-40, 580, 310);		MapSub1Handler(wPtr, NULL, 0);		break;	}	return;	}void MapDVISettingHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){	int i;		gc1 = wPtr->gc;	gc_pal0 = wPtr->gc_pal0;	gc_pal6 = wPtr->gc_pal6;	gc_pal244 = wPtr->gc_pal244;	wid = wPtr->wid;			wPtr->KbdHandler = DVISettingKeydownHandler;	wPtr->KbdHandler_dptr = ptr;		SaveRect(wPtr, &dvicustomPixels, CUSTOM_DVI_TEXT1_X-30, CUSTOM_DVI_HEADER_Y-40, 580, 310, MWPALINDEX(6));		DrawUpperLeft(wid, gc_pal0, CUSTOM_DVI_TEXT1_X-30,CUSTOM_DVI_HEADER_Y-40);	DrawLowerLeft(wid, gc_pal0, CUSTOM_DVI_TEXT1_X-30,CUSTOM_DVI_HEADER_Y-40+310-1);	DrawLowerRight(wid, gc_pal0, CUSTOM_DVI_TEXT1_X-30+580-1,CUSTOM_DVI_HEADER_Y-40+310-1);	DrawUpperRight(wid, gc_pal0, CUSTOM_DVI_TEXT1_X-30+580-1,CUSTOM_DVI_HEADER_Y-40);		GrText(wid,gc1,CUSTOM_DVI_TEXT1_X,CUSTOM_DVI_HEADER_Y,"DVI Custom Settings:",-1,GR_TFASCII);	GrText(wid,gc1,CUSTOM_DVI_TEXT1_X,CUSTOM_DVI_TEXT_Y+(DVI_SETTING_ROWS*YOFF),"~~ Press Enter to set, Return to quit without setting",-1,GR_TFASCII);	GrText(wid,gc1,CUSTOM_DVI_TEXT1_X,DVISettings[0][0].y,DVISettings[0][0].text,-1,GR_TFASCII);	GrText(wid,gc1,H_FREQ_VAL_X,DVISettings[0][0].y,DVISettings[0][0].val,-1,GR_TFASCII);	GrText(wid,gc1,CUSTOM_DVI_TEXT2_X,DVISettings[0][1].y,DVISettings[0][1].text,-1,GR_TFASCII);	GrText(wid,gc1,CUSTOM_DVI_VAL2_X,DVISettings[0][1].y,DVISettings[0][1].val,-1,GR_TFASCII);	for (i=1; i<DVI_SETTING_ROWS; i++) {		GrText(wid,gc1,CUSTOM_DVI_TEXT1_X,DVISettings[i][0].y,DVISettings[i][0].text,-1,GR_TFASCII);		GrText(wid,gc1,CUSTOM_DVI_VAL1_X,DVISettings[i][0].y,DVISettings[i][0].val,-1,GR_TFASCII);		GrText(wid,gc1,CUSTOM_DVI_TEXT2_X,DVISettings[i][1].y,DVISettings[i][1].text,-1,GR_TFASCII);		GrText(wid,gc1,CUSTOM_DVI_VAL2_X,DVISettings[i][1].y,DVISettings[i][1].val,-1,GR_TFASCII);		}			GrText(wid,gc_pal244,H_FREQ_VAL_X,DVISettings[0][0].y,&DVISettings[0][0].val[0],1,GR_TFASCII);		curRow = curCol = 0; 	curId = 0; 			curIdMax = 4;	curX = H_FREQ_VAL_X; 		curY = CUSTOM_DVI_TEXT_Y;		return;}//------------------------------------------------------------------// Convert positive integer to ascii string with '0' padded in front // (ie: i=1, size=2 -> buffer = '02')// buf = ascii string for i; must be at least as size// size = number of chars buf holds// int itoa(int i, char *buf, int size){	char *pos = buf + size - 1;	unsigned int u;	if (buf == NULL || size == 0)		return -1;		u = i;	while (pos >= buf) {		*pos-- = '0' + (u % 10);		u /= 10;	}		return 0;}#if 0/* * Sleep a while to avoid using too much CPU time. */void do_idle(){	struct timespec idletime;	idletime.tv_sec = 0;	idletime.tv_nsec = 100000;	nanosleep(&idletime, NULL);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -