[Dashboard\Lexus\RX\RX450H 93C66.cal]

Size(280,280); // ширина и высота

Form 

{   Group("Пробег",5,5,110,50)
 	{
	Digit(Distance," ",15,18,70);
	}
	Group("Информация",5,88,270,45)
    {Label(message," ",0,18);}
    Group("Описание",5,135,270,100) 
    {
	Label(lb4,"Калькулятор пробега для Lexus RX450H",0,20);
    Label(lb5,"EEPROM 93C66, панель Denso",0,35);
    Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,50);
    Label(lb3,"и нажмите кнопку <Применить>.",0,65);
    }
	Picture(Picture1,"Lexus.bmp",165,20,0,0);
}

OnShow

{
	Message.Bold = 1;
    Message.Alignment = 1;
    
    // --------------- проверяем правильность дампа
    Var0=0; 		
    Var1=(@0x65<<24)|(@0x64<<16)|(@0x63<<8)|@0x62;
    Var2=(@0x69<<24)|(@0x68<<16)|(@0x67<<8)|@0x66;
    Var3=(@0x6D<<24)|(@0x6C<<16)|(@0x6B<<8)|@0x6A;
    if(Var1!=Var2) {Var0=Var0+1;}
    if(Var2!=Var3) {Var0=Var0+1;}
    if(Var0!=0) 
	{ 
      	message.Color = 0x0000FF;
      	Message = "Неверный дамп!";
    	}
    	else
    	{
	Var1=Var1^0xFFFFFFFF;
        // переводим в двоично-десятичный вид
	Var0=((Var1>>28)&15)*10000000;
	Var0=Var0+(((Var1>>24)&15)*1000000);
	Var0=Var0+(((Var1>>20)&15)*100000);
	Var0=Var0+(((Var1>>16)&15)*10000);
	Var0=Var0+(((Var1>>12)&15)*1000);
	Var0=Var0+(((Var1>>8)&15)*100);
	Var0=Var0+(((Var1>>4)&15)*10);
	Var0=Var0+(Var1&15);
	// точное вычисление пробега, добавка
		Var5=0; // точное вычисление пробега, смещение
			while(Var5<=0x61)
				{	
				Var6=@(Var5);
				if(Var6!=0xFF){Var0=Var0+1;}
				Var5=Var5+2;
				}
	    message.Color = 0xFF0000;
        message = "Дамп ОК, нажмите кнопку <Применить>";
        Distance=Var0;
    }
}

OnApply
{
	Var4=Distance;
	Distance=Var4;
	    if(Var4>999999)
    	{
        message.Color=0x0000FF;
        Message="Пробег должен быть не более 999999.";
    	}
    	else
	{
        Var1=(Distance%50)*2; // вычисление добавки
	// запись добавки
		Var5=0; // смещение
			while(Var5<Var1)
				{  	
				@Var5=0x80;
				Var5=Var5+2;
				}
			while(Var5<0x62)
				{  	
				@Var5=0xFF;
				Var5=Var5+2;
				}		
	
        
	// запись основной части	 
	// переводим из двоично-десятичного в двоичный вид
        Var0=Distance-(Distance%50);
	Var2=Var0%10; Var0=Var0/10;
	Var2=Var2|((Var0%10)<<4); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<8); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<12);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<16);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<20);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<24);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<28);  

	Var2=Var2^0xFFFFFFFF;
	// заполняем дамп
        Var0=0x65;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;

        Var0=0x69;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;

        Var0=0x6D;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;
    
	message.Color=0xFF0000;
        message="Дамп ОК. Новый пробег записан.";
	}
}

