[Dashboard\!\Yazaki 17 C46.cal]

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

Form
{
    Group("Пробег",5,5,150,50)
 	{
	Digit(Distance," ",5,18,90);
	}
	Group("",5,55,150,30)
	{
	CheckBox(Miles2Km,"Пересчитать Мили в Км",5,10);
	}
	Group("",165,55,150,30)
	{
	CheckBox(Km2Miles,"Пересчитать Км в Мили",5,10);
	}	
     	Group("Информация",5,88,310,45)
    	{Label(message," ",0,18);}
    	Group("Описание",5,135,310,100) 
    	{
	Label(lb4,"Калькулятор пробега для Toyota\Lexus Yazaki 17 93C46.",0,20);
        Label(lb5,"EEPROM 93C56, панель Yazaki.",0,35);
        Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,50);
        Label(lb3,"и нажмите кнопку <Применить>.",0,65);
    	}
    Picture(Picture1,"Toyota.bmp",160,5,0,0);
    Picture(Picture2,"Lexus.bmp",230,23,0,0);

}

OnShow
{
    Message.Bold=1;
    Message.Alignment=1;

    // проверяем правильность дампа

        Var0=((@0x21<<8)|(@0x20));
        if(Var0<0xFFFF)
        {
            message.Color = 0xFF0000;
            message =  "Дамп ОК. Введите пробег.";
            	Var4=0; // точное вычисление пробега, добавка
		Var5=0; // точное вычисление пробега, смещение
			while(Var5!=0x22)
				{	
					Var6=((@(Var5+1)<<8)|(@Var5));
						if(Var6>Var0) {Var4=Var4+1;}
					Var5 = Var5+2;
				}
	   Distance=(Var0*17)+Var4;
        }
      else
       {
        message.Color=0x0000FF;
        Message="Неверный дамп!";
        Distance=0;   
    }
        
    }


OnApply

{
    	if(Miles2Km=1) {Var4=(Distance*16093)/10000;}
	if(Km2Miles=1) {Var4=(Distance*1000000)/16093; Var14=Var4%100; if (Var14<50) {Var4=Var4/100;} else {Var4=(Var4/100)+1;}										}
	if(Miles2Km=Km2Miles) {Var4=Distance;}
	Distance=Var4; Var1=Var4;

    	if(Var1>999999)
    	{
        message.Color=0x0000FF;
        Message = "Пробег должен не более 999999 км.";
    	}
    	else
    	{
        Var0=Var1/17;
        Var1=(Distance%17)*2; // Вычисление добавки
        Var2=0;
		//запись старшей группы
		while(Var2<Var1) 
			{	
				@Var2=Var0+1;
				Var2=Var2+1;
		        	@Var2=Var0>>8;
				Var2=Var2+1; 
			}

		//запись младшей группы
		while(Var2<0x22) 
			{	
				@Var2=Var0;
				Var2=Var2+1;
		        	@Var2=Var0>>8;
				Var2=Var2+1; 
			}
	//запись контрольной суммы
	Var3=Var0%2; // Расчет знака контрольки, FF или 00

		while(Var2<(0x22+Var1)) 
			{	
				if(Var3=0) {@Var2=0xFF;} else {@Var2=0x00;}
				Var2=Var2+1;
				if(Var3=0) {@Var2=0xFF;} else {@Var2=0x00;}
				Var2=Var2+1;
			}
		while(Var2<0x44) 
			{	
				if(Var3=0) {@Var2=0x00;} else {@Var2=0xFF;}
				Var2=Var2+1;
				if(Var3=0) {@Var2=0x00;} else {@Var2=0xFF;}
				Var2=Var2+1;
			}
		

	
        message.Color=0xFF0000;
        message="Дамп ОК. Новый пробег записан.";

    	}
}

