[Dashboard\Mitsubishi\Outlander\Outlander XL - 93C86 Yazaki]

Size(280,320); 

Form
{
    Group("Пробег",15,10,140,50)
    {
        Digit(Distance," ",5,18,90);
        Label(lb1,"KM",110,20);
    }
    Picture(Picture1,"Mitsubishi.bmp",170,10,0,0);
    Group("Идентификация",5,80,270,45)
    {
        Label(vin," ",0,18);
    }
    Group("Информация",5,130,270,45)
    {
        Label(message," ",0,18);
    }
    Group("Описание",5,180,270,85) 
    {
        Label(lb4,"Калькулятор пробега для Mitsubishi Outlander XL.",0,20);
        Label(lb5,"EEPROM 93C86",0,35);
        Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,50);
        Label(lb3,"и нажмите кнопку <Применить>.",0,65);
	}
     CheckBox(service,"Reset service. Потом сбросить кнопкой суточника",15,65); 
}

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

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

OnApply
{
	if(service=1) 
	{
	@0x5E8 = 0x00;
	@0x5E9 = 0x00;
	@0x5EC = 0xFF;
	@0x5ED = 0xFF;
	@0x5F0 = 0xAA;
	@0x5F1 = 0xAA;	               
	}


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

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

		while(Var2 < (0x3E + 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 < 0x7B) 
		{	
			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="Дамп ОК. Новый пробег записан.";
	}
}