📄 utilhandler.c
字号:
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 + -