osdmenu.lst
来自「显示屏驱动源代码」· LST 代码 · 共 1,286 行 · 第 1/5 页
LST
1,286 行
739 3 }
740 2
741 2 if( Bar_str[0] == 0x01 ) Bar_str[0] = 0x02; // |..
742 2 }
743 1
744 1 // Number // Hans
745 1 Bar_str[10] = val % 10 + '0'; val /= 10;
746 1 Bar_str[9] = val % 10 + '0'; val /= 10;
747 1 Bar_str[8] = val + '0';
748 1 if( Bar_str[8] == '0' ) Bar_str[8] = ' ';
749 1 /* // Hans
750 1 for(;i<7;i++)
751 1 Bar_str[i+3] = ' ';
752 1 */
753 1 WriteStringToAddr(addr, Bar_str, BARNUM_LENGTH);
754 1
755 1 }
756
757 void DrawNum(WORD addr,CODE_P struct NumType *nptr, WORD val)
758 {
759 1 BYTE x,i, j,k, len, mstr[5];//,color;
760 1 BYTE Num_str[]={ ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0 };
761 1 CODE_P BYTE *str;
762 1
763 1 x= MAX_DESC;//+ICON_CH_SZ;
764 1 i = nptr->PrePostCharLen >> 4 ;
765 1 j = nptr->PrePostCharLen & 0x0f ;
766 1 str = nptr->PrePostChar;
767 1
768 1 // Draw char on front of number.
769 1 if( i )
770 1 for(k=0; k<i; k++)
771 1 Num_str[k] = *str++;
772 1 // Draw number.
773 1 utoa(val,mstr,BAR_NUM_RADIX);
774 1 len = strlen(mstr);
775 1 str=mstr;
776 1 for(k=0; k<len; k++)
777 1 Num_str[k+i] = *str++;
778 1
779 1 // Draw char on back of number
780 1 if( j )
781 1 for(k=0; k<j; k++)
782 1 Num_str[k+i+len] = *str++;
783 1 WriteStringToAddr(addr, Num_str, BARNUM_LENGTH);
784 1
785 1 }
786
787 void DrawStringByLang( WORD addr, CODE_P struct EnumType *yptr, WORD val )
788 {
789 1
790 1 BYTE j,l,Size_val;
791 1 BYTE Buf[]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0 };
792 1 CODE_P BYTE *Str;
793 1
794 1 Size_val = yptr->Sz;
795 1 Str = yptr->Str;
796 1
C51 COMPILER V7.06 OSDMENU 02/21/2008 14:00:28 PAGE 14
797 1 if ( yptr->ByLang)
798 1 {
799 2 for(j=0; j<OSDLang*Size_val; j++)
800 2 Str += ( strlen(Str) + 1 );
801 2 }
802 1
803 1 if( val ){
804 2 for(j=0; j<val; j++)
805 2 Str += ( strlen(Str) + 1 );
806 2 }
807 1
808 1 WriteStringToAddr(addr, Buf, BARNUM_LENGTH);
809 1
810 1 l = CStrlen(Str);
811 1
812 1 WriteStringToAddr(addr, Str, l);
813 1
814 1 }
815 /*
816 #ifdef PAL_TV
817 void DrawFraction( CODE_P struct NumType *nptr, DWORD val, BYTE fp )
818 {
819 BYTE mstr[6], len;
820
821 ltoa_K( val, mstr, fp );
822 len = strlen(mstr);
823 CopyStrToOSDWindow(cur_osdwin, 0, 0, len, nptr->NumColor, mstr);
824 ClearOSDLine(cur_osdwin, len, 0, nptr->width-len, nptr->NumColor);
825 }
826 #endif
827
828 BYTE OnChangingValue(void)
829 {
830 return ( (val_osdwin==0xff ) ? 0 : 1 ); //OSDItemValue==0xffff: password error
831 }
832 // Not used yet *******************************************
833 BYTE OnChangingTime(void)
834 {
835 if ( val_osdwin==0xff ) return 0 ;
836 if ( MenuChild[cursor_item].Type==TIME ) return 1;
837 else return 0;
838
839 }
840 */
841
842 void DrawMenulist(BYTE NOTViewflag)
843 {
844 1 BYTE i,j,k, x=0, y=0;
845 1 CODE_P struct DefineMenu *DMp;
846 1 CODE_P BYTE *Desc;
847 1 BYTE Max_y;
848 1 WORD addr;
849 1
850 1 // Draw Title line
851 1 if( MenuFormat->TitleColor!=NIL ) {
852 2
853 2 #ifdef DEBUG_OSD
dPrintf("\r\nTitle color:0x%x", (WORD)MenuFormat->TitleColor);
#endif
856 2
857 2 DMp = &MenuTitle[title_item];
858 2 Desc = DMp->Desc[OSDLang];
C51 COMPILER V7.06 OSDMENU 02/21/2008 14:00:28 PAGE 15
859 2 j=strlen(Desc);
860 2
861 2 for( i=0,k=0; i<j; i++ )
862 2 if( *(Desc+i) == ROMFONT || *(Desc+i) == RAMFONT ) k++;
863 2
864 2 //ClearDataCnt(OSDMENU_SUBADDR, MenuFormat->width); // Clear the counter of OSD RAM Data from addr with
-space(' ').
865 2 DrawAttrCnt(OSDMENU_SUBADDR, MenuFormat->TitleColor, MenuFormat->width );
866 2 WriteStringToAddr(OSDMENU_SUBADDR, Desc, j);
867 2
868 2 if( (j-k ) < TITLE_MAX_DESC )
869 2 ClearDataCnt(OSDMENU_SUBADDR+j-k, TITLE_MAX_DESC-j+k);
870 2
871 2 y++;
872 2 }
873 1
874 1 if( MenuChild ) i = 0;
875 1 else i = NIL;
876 1
877 1 // Draw
878 1 Max_y = (cur_osdwin == OSDMENU_TOPWIN ? TOTAL_TOP_HEIGHT: MENU_HEIGHT+1);
879 1 addr = (cur_osdwin == OSDMENU_TOPWIN ? OSDMENU_MAINADDR: OSDMENU_SUBADDR);
880 1 addr += y*MenuFormat->width;
881 1
882 1 if( NOTViewflag==0 ) {
883 2 I2CAutoIncFlagOn = 1; // speedy submenu drawing
884 2 WriteDecoder(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
885 2 }
886 1
887 1 for( ; y < Max_y; y++) {
888 2
889 2 if(i != NIL) {
890 3 DisplayOSDMenuOneItem( cur_osdwin, &MenuChild[i], x, y, NOTViewflag);
891 3 i = GetLowerMenuItem( MenuChild, i );
892 3 }
893 2 else {
894 3 ClearDataCnt(addr, MenuFormat->width); // Clear the counter of OSD RAM Data from addr with space(' ').
895 3 }
896 2 addr += MenuFormat->width;
897 2
898 2 }
899 1
900 1 if( NOTViewflag==0 ) {
901 2 I2CAutoIncFlagOn = 0; // Recover
902 2 WriteDecoder(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Enable
903 2 }
904 1
905 1 }
906 //
907 // Here, Main Menu will display Only Icon at leftside.
908 //
909 #define ALLDATA 175 //25*7 MENU_WIDTH*MENU_HEIGT
910 void DisplayOSDMenu(void)
911 {
912 1 CODE_P BYTE *Str;
913 1 BYTE i;
914 1 #ifdef DEBUG_OSD
dPrintf("\r\n++(DisplayOSDMenu)");
#endif
917 1
918 1 // Clear all MENU Window Ram data
919 1 DrawAttrCnt(OSDMENU_MAINADDR, DEFAULT_COLOR, 5*2 ); // All Line Attr clear by default color.
C51 COMPILER V7.06 OSDMENU 02/21/2008 14:00:28 PAGE 16
920 1 DrawAttrCnt(OSDMENU_SUBADDR, TITLE_COLOR, TITLE_MAX_DESC ); // All Line Attr clear by default color.
921 1 if( MenuChild[ cursor_item ].Id == TVINSTALL && GetInputSelection()!= TV )
922 1 DrawAttrCnt(OSDMENU_SUBADDR+TITLE_MAX_DESC, CH_COLOR_MAGENTA|BACK_COLOR, MENU_HEIGHT*MENU_WIDTH );
923 1 else
924 1 {
925 2 if( (MenuChild[ cursor_item ].Id == PC_COLOR_MODE && GetPCColorTempModeEE() != 3 ) // User
926 2 ||( MenuChild[ cursor_item ].Id == VIDEOPICTURE && GetVideoModeEE() != 3 ) ) // User
927 2 {
928 3 DrawAttrCnt(OSDMENU_SUBADDR+MENU_WIDTH, DEFAULT_COLOR, MENU_WIDTH );
929 3 DrawAttrCnt(OSDMENU_SUBADDR+MENU_WIDTH*2, BACK_COLOR, (MENU_HEIGHT-1)*MENU_WIDTH );
930 3 }
931 2 else
932 2 DrawAttrCnt(OSDMENU_SUBADDR+TITLE_MAX_DESC, DEFAULT_COLOR, MENU_HEIGHT*MENU_WIDTH );
933 2
934 2 }
935 1
936 1 DrawAttrCnt(OSDMENU_SUBADDR+TITLE_MAX_DESC*8, COMMENT_COLOR, TITLE_MAX_DESC ); // All Line Attr clear by
- default color.
937 1
938 1 DrawMenulist(1);
939 1
940 1 // Draw Child
941 1 if( OSDMenuLevel == 1 ) //
942 1 {
943 2 pushMenu(); // Store ManuTile, tile_item.
944 2 MenuTitle = MenuChild;
945 2 title_item = cursor_item;
946 2
947 2 MenuFormat = ( CODE_P struct MenuType *) MenuTitle[title_item].TypeData;
948 2 MenuChild = MenuTitle[title_item].Child;
949 2 cur_osdwin--;
950 2
951 2 DrawMenulist(0); // draw total Submemu.
952 2
953 2 popMenu(); // Restore ManuTile, tile_item.
954 2 MenuFormat = ( CODE_P struct MenuType *) MenuTitle[title_item].TypeData;
955 2 MenuChild = MenuTitle[title_item].Child;
956 2 cur_osdwin++;
957 2 }
958 1
959 1 Str = Str_Comments[OSDLang];
960 1 i=strlen(Str);
961 1 WriteStringToAddr(OSDMENU_SUBADDR+TITLE_MAX_DESC*8, Str, i);
962 1
963 1 DisplayCursor();
964 1 }
965
966 void OSDHighMenu_sub(void)
967 {
968 1 BYTE temp_cursor;
969 1
970 1 #ifdef DEBUG_OSD
dPuts("\r\n(OSDHighMenu_sub)");
#endif
973 1 temp_cursor = cursor_item ;
974 1 MenuChild = MenuTitle;
975 1 cursor_item = title_item;
976 1
977 1 if( !popMenu() ) {
978 2 CloseOSDMenu();
979 2
980 2 MenuTitle = MenuChild; // Restore the Menu status.
C51 COMPILER V7.06 OSDMENU 02/21/2008 14:00:28 PAGE 17
981 2 title_item = cursor_item;
982 2 MenuChild = MenuTitle[title_item].Child;
983 2 cursor_item = temp_cursor;
984 2
985 2 //DoAction(EXITMENU);
986 2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?