[Dashboard\Citroen\C5\BSI 95160 v2]

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

Form
{
    Group("Пробег",15,13,120,50)
	{
		Digit(Distance," ",5,18,70);
		Label(lbkm,"КМ",90,20);
	}
	CheckBox(ClearHistory, "Очистить историю",15,70);
	Group("Идентификация",5,90,270,50)
	{
		Label(pn," ",0,15);
		Label(Login," ",0,32);
	}
	Group("Информация",5,142,270,45)
	{
		Label(msg," ",0,18);
	}    
	Group("Описание",5,190,270,85)
    {
        Label(lb1,"Калькулятор пробега BSI Citroen C5",0,20);
        Label(lb2,"EEPROM ST95160 (2Kb)",0,35);
        Label(lb3,"Введите нужное значение в окне ПРОБЕГ.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Citroen.bmp",180,20,0,0);
}

OnShow 
{
	ClearHistory = 1;
	Var5 = 0;		// Error
    Var0 = 0x6E8;	// Начальный адрес
	Var1 = 0;
	Var4 = 0;		// MaxDist
	while(Var1 < 4) // Проверка дампа + поиск наибольшего значения пробега
	{
		Var2 = @Var0 + @(Var0 + 1) + @(Var0 + 2) + @(Var0 + 3) + @(Var0 + 4);
		Var2 = Var2 & 0xFF;
		Var3 = @(Var0 + 5) & 0xFF;
		if(Var2 != Var3)	{ Var5 = 1; Var1 = 4; } // Ошибка - выходим из цикла проверки
		else
		{ 
			Var6 = (@(Var0 + 3) << 16) | (@(Var0) << 8) | @(Var0 + 1); // Текущий пробег
	        Var6 = Var6  ^ 0xFFFFFF;
			if(Var4 < Var6) {Var4 = Var6;}	// Ищем максимальный пробег
			Var1 = Var1 + 1;
			Var0 = Var0 + 6;				// Начальный адрес следующей копии пробега
		}
	}

    if(Var5 = 1)
    {
        msg.Color = 0xFF;
        msg.Bold = 1;
        msg = "Неверный дамп!";
        Distance = 0;
    }
    else
    {
        msg.Color = 0x00;
        msg.Bold = 1;
        msg = "      Дамп OK!";
        Distance = Var4 / 10;
		Var0 = 0x6CA;
		Var1 = @(Var0 + 1) ^ 0xFF; Var2 = @(Var0) ^ 0xFF; Var3 = @(Var0 + 3) ^ 0xFF; Var4 = @(Var0 + 2) ^ 0xFF;
		Var5 = @(Var0 + 5) ^ 0xFF; Var6 = @(Var0 + 4) ^ 0xFF; Var7 = @(Var0 + 7) ^ 0xFF;
		Var8 = @(Var0 + 6) ^ 0xFF; Var9 = @(Var0 + 9) ^ 0xFF; Var10 = @(Var0 + 8) ^ 0xFF; Var11 = @(Var0 + 11) ^ 0xFF;
		Var12 = @(Var0 + 10) ^ 0xFF; Var13 = @(Var0 + 13) ^ 0xFF; Var14 = @(Var0 + 12) ^ 0xFF;
		Var15 = @(Var0 + 15) ^ 0xFF; Var16 = @(Var0 + 14) ^ 0xFF; Var17 = @(Var0 + 17) ^ 0xFF;
		pn = "VIN: " + #c.Var1 + #c.Var2 + #c.Var3 + #c.Var4 + #c.Var5 + #c.Var6 + #c.Var7 + #c.Var8 + #c.Var9 + #c.Var10 +
			#c.Var11 + #c.Var12 + #c.Var13 + #c.Var14 + #c.Var15 + #c.Var16 + #c.Var17;
		Var0 = 0x658;
		Var1 = @(Var0) ^ 0xFF; Var2 = @(Var0 + 1) ^ 0xFF; Var3 = @(Var0 + 2) ^ 0xFF; Var4 = @(Var0 + 3) ^ 0xFF;
		Login = "LOGIN: " + #c.Var3 + #c.Var4 + #c.Var1 + #c.Var2;
    }
}

OnApply 
{
	Var5 = 0x6E8; // Начальный адрес
	Var10 = Distance;
	Var0 = 0;
	if(Var10 > 999900)  {Var0 = 1;}

    if(Var0 = 1)
    {
        msg.Color = 0xFF;
        msg.Bold = 1;
        msg = "Пробег должен быть от 100 до 999900 км";        
    }
    else
    {
 		if(ClearHistory = 1)
		{
			// Чистим историю
			Var0 = 0;
			while(Var0 < 0x600)
			{
				Var1 = @Var0;
				if(Var1 != 0xFF) {@Var0 = 0xFF;}
				Var0 = Var0 + 1;
			}
		}

		Var11 = Var5 + 24;
        Var10 = Var10 * 10;    
          
        Var1 = (Var10 & 0xFF) ^ 0xFF; 
        Var2 = ((Var10 >> 8) & 0xFF) ^ 0xFF; 
        Var3 = ((Var10 >> 16) & 0xFF) ^ 0xFF; 
		Var4 = (Var1 + Var2 + Var3 + 0xFF + 0xC3) & 0xFF;
        while (Var5 < Var11) {
           @Var5 = Var2;	Var5 = Var5 + 1;
           @Var5 = Var1;	Var5 = Var5 + 1;
           @Var5 = 0xFF;	Var5 = Var5 + 1;
           @Var5 = Var3;	Var5 = Var5 + 1;
           @Var5 = 0xC3;	Var5 = Var5 + 1;
           @Var5 = Var4;	Var5 = Var5 + 1;
        } 
        // заполняем дамп
        msg.Color = 0x00;
        msg.Bold = 1;
        msg = "Дамп OK!";
    }
}