[Dashboard\Citroen\C4\BSI C4 95128 V5]

Size(280,300); 

Form 
{
    Group("Пробег",15,10,120,50)
    {
        Digit(Distance," ",5,18,70);
        Label(lbkm,"КМ",90,20);
    }
    Group("Идентификация",5,70,270,45)
    {
        Label(pn," ",0,18);
    }
    Group("Информация",5,115,270,45) 
    {
        Label(msg," ",0,18);
    }    
    Group("Описание",5,160,270,90) 
    {
        Label(lb1,"Калькулятор пробега для Citroen C4.",0,20);
        Label(lb2,"EEPROM 95128 .",0,35);
        Label(lb3,"Введите нужное значение в окне <Пробег>.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Citroen.bmp",180,8,0,0);
}

OnShow 
{
    
    Var0 = 0x1D4; // Начальный адрес
    Var1 = 0; Var4 = 0; Var5 = 0;

    while(Var1 < 2)
    {
		Var2 = @(Var0 + 1) ^ 0xFF;
		Var3 = @(Var0 + 3) & 0xFF;
		if( Var2 != Var3 ) { Var5 = Var5 + 1; }

		Var2 = @(Var0) ^ 0xFF;
		Var3 = @(Var0 + 2) +  @(Var0 + 4) ;
		if( Var2 != Var3 ) { Var5 = Var5 + 1; }

		Var2 = (@(Var0 + 2)) | (@(Var0 + 3) << 8) | (@(Var0 + 4) << 16);
		if(Var4 < Var2) {Var4 = Var2;} // Ищем наибольшее значение

        Var0 = Var0 + 8;
        Var1 = Var1 + 1;
    } 

    if(Var5 > 2)
    {
        msg.Color = 0xFF;
        msg.Bold = 1;
        msg = "Неверный дамп!";
        Distance = Var2;
    }
    else
    {
        msg.Color = 0x00;
        msg.Bold = 1;
        msg = "Дамп OK! Введите новый пробег.";
        Distance = Var4 / 10;
		pn ="VIN: "+#c.@0x1a3+#c.@0x1a4+#c.@0x1a5+#c.@0x1a6+#c.@0x1a7+#c.@0x1a8+#c.@0x1a9+#c.@0x1aa+#c.@0x1ab+#c.@0x1ac+#c.@0x1ad+#c.@0x1ae+#c.@0x1af+#c.@0x1b0+#c.@0x1b1+#c.@0x1b2+#c.@0x1b3; 
    }
}

OnApply 
{
    Var10 = Distance;
    Var0 = 0;
    if(Var10 < 100)     {Var0 = 1;}
    if(Var10 > 999900)  {Var0 = 1;}

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

		Var5 = 0x208 - 2; // Начальный адрес
        Var11 = 0;
        Var10 = Var10 * 10;    
          
        Var1 = Var10 & 0xFF; 
        Var2 = (Var10 >> 8) & 0xFF; 
        Var3 = (Var10 >> 16) & 0xFF; 
        Var4 = ((Var1 + Var3) & 0xFF) ^ 0xFF; 
        Var6 = (Var2 & 0xFF) ^ 0xFF; 


        while (Var11 < 8) {

			@Var5 = Var4; Var5 = Var5 + 1;
			@Var5 = Var6; Var5 = Var5 + 1;
			@Var5 = Var1; Var5 = Var5 + 1;
			@Var5 = Var2; Var5 = Var5 + 1;
			@Var5 = Var3; Var5 = Var5 + 4;
			Var11 = Var11 + 1;
        } 
        // заполняем дамп

        msg.Color = 0x00;
        msg.Bold = 1;
		msg = "Новый пробег записан!";
    }
}