[Dashboard\Toyota\Hiace\Hiace ER5911 Yazaki 113]

Size(290,270);

Form
{
    Group("Пробег",5,13,120,50)
    {
        Digit(Distance," ",5,18,70);
        Label(lbkm,"КМ",90,20);
    }
    Group("Информация",5,80,280,45) 
    {
        Label(Message," ",0,18);
    }    
    Group("Описание",5,130,280,90) 
    {
		Label(lb4,"Калькулятор пробега для Toyota Hiace",0,20);
		Label(lb5,"EEPROM ER5911, панель Yazaki.",0,35);
        Label(lb2,"Введите нужное значение в окне ПРОБЕГ.",0,50);
        Label(lb3,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Toyota.bmp",165,15,0,0);
}

OnShow
{	
	Message.Bold = 1;
	Message.Alignment = 1;
	// проверяем правильность дампа
	Var0 = 0x71; // смещение для множителя группы
	Var1 = @0x71;
	Var3 = 0; // счетчик ошибок
	while(Var0 != 0x77)
	{	        
		Var2 = @Var0; 	
		if(Var2 != Var1) {Var3 = Var3 + 1;}
		Var0 = Var0 + 1;
	}
	if (Var3 = 0)
	{
		Var1 = (Var1 + 1) & 0xFF; // вычисление множителя
		message.Color = 0xFF0000;
		message = "Дамп ОК. Введите пробег.";
		Var3 = @0x70; //младший байт пробега
		Var4 = 0; // точное вычисление пробега, добавка
		Var5 = 0; // точное вычисление пробега, смещение
		while(Var5 <= 0x70)
		{
			Var6 = @Var5;
			if(Var6 != Var3) {Var4 = Var4 + 1;}
			Var5 = Var5 + 1;
		}
		Distance = (((Var3 + 1) & 0xFF) * 113) + Var4 + (Var1 * 28928); 
	}
	else
	{
		message.Color = 0x0000FF;
		Message = "Неверный дамп!";
		Distance = 0;   
	}
}

OnApply
{	
	Var1 = Distance;
	if(Var1 > 999999)
	{
		message.Color = 0x0000FF;
		Message = "Пробег должен не более 999999 км.";
	}
	else	
	{ 	// разделяем алгоритм до 113 км включительно и от 113 км
		if(Var1 < 114) //работа по алгоритму до 113 км включительно	
		{
			Var2 = 0;
			while(Var2 < Var1) 
			{	
				@Var2 = 0x00;
				Var2 = Var2 + 1;
			}
			while(Var2 < 0x71) 
			{	
				@Var2 = 0xFF;
				Var2 = Var2 + 1;
			}
		}
		else
		{	
			//работа по алгоритму от 113 км
			Var0 = ((Distance - 113) / 113);
       		Var1 = ((Distance - 113) % 113); // Вычисление добавки
       		Var2 = 0;
			//запись старшей группы
			while(Var2 < Var1) 
			{
				@Var2 = Var0 + 1;
				Var2 = Var2 + 1;
			}
			//запись младшей группы
			while(Var2 < 0x71)
			{
				@Var2 = Var0;
				Var2 = Var2 + 1;
        	}
		}
		//запись множителя группы
		Var0 = 0x71; // смещение для множителя группы
		Var2 = ((Distance / 28928) + 0xFF) & 0xFF; 
		while(Var0 != 0x77)
		{	        
			@Var0 = Var2; 	
			Var0 = Var0 + 1;
      	}
		message.Color=0xFF0000;
		message="Дамп ОК. Новый пробег записан.";
	}
}