[Dashboard\Hyundai\i20 24C16]

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

Form
{
	Group("Пробег",5,5,140,50)
	{
		Digit(Distance," ",5,18,90);
		Label(lb1,"KM",110,20);
	}
	Group("Информация",5,58,270,45)
	{
		Label(message," ",0,18);
	}
	Group("Описание",5,105,270,100) 
	{
        Label(lb4,"Калькулятор пробега для Hyundai i20.",0,20);
        Label(lb5,"Панель Siemens-VDO. EEPROM 24C16.",0,35);
		Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,55);
		Label(lb3,"и нажмите кнопку <Применить>.",0,70);
	}
	Picture(Logo,"Hyundai.bmp",160,0,0,0);
}

OnShow 

{
    Var0=0x02; // смещение всего блока
	Var1=0; // счетчик байт
	Var2=0; // счетчик добавки
	Var4=((@(0x01+Var0)<<8)+@(0x00+Var0))^0xFFFF; // первая группа
	Var17=Var4-1;
	Var5=((@(0x3F+Var0)<<8)+@(0x3E+Var0))^0xFFFF; // последняя группа
		
	// расчет добавки
	while (Var1<=0x3F)
		{
		Var15=(((@(Var1+Var0+1)<<8)|@(Var1+Var0))^0xFFFF)&0xFFFF; // текущая группа
		if (Var15!=Var17) {Var2=Var2+1;}			
		Var17=((Var17*2)+((Var17*2)>>16))&0xFFFF; // обработка первой группы  	
		Var1=Var1+2;
		}
	
	if (Var5=0)	{Distance=Var2%32;} 
	else {Distance=((Var4-1)*32)+Var2;}
	message.Color = 0xFF0000; message.Bold=1; message="Дамп ОК. Введите новый пробег."; 
    
}
    
OnApply

{
    
    Var10=Distance;
	if(Var10>999999) {message.Color=0x0000FF; message.Bold=1; message="Пробег должен быть не более 999999 км";}
    else
    {
	// запись первой области
	Var0=0x02; // смещение всего блока
	Var1=0; // счетчик байт
	Var2=Var10%32; // добавка
	Var4=Var10/32; // основная часть
	Var12=Var10%2; // признак нечетности пробега
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x1F)
		{
		Var11=Var1+Var0;		
		@Var11=Var4^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var4^0xFFFF)>>8;		
		Var4=((Var4*2)+((Var4*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}	
	// запись добавки
		Var1=0; // счетчик байт
		
		while (Var1<Var2)
		{
		Var11=Var1+Var0;		
		@Var11=Var5^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var5^0xFFFF)>>8;		
		Var5=((Var5*2)+((Var5*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}
	// запись второй области
	Var0=0x22; // смещение всего блока
	Var1=0; // счетчик байт
		if (Var12=0)	{Var2=Var10%32;} 	 // добавка 
		else			{Var2=(Var10%32)-1;} // добавка с учетом 1км при нечетном пробеге
	Var4=Var10/32; // основная часть
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x1F)
		{
		Var11=Var1+Var0;		
		@Var11=Var4^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var4^0xFFFF)>>8;		
		Var4=((Var4*2)+((Var4*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}	
	// запись добавки
		Var1=0; // счетчик байт
		
		while (Var1<Var2)
		{
		Var11=Var1+Var0;		
		@Var11=Var5^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var5^0xFFFF)>>8;		
		Var5=((Var5*2)+((Var5*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}
	
	
	message.Color=0xFF0000; message.Bold=1; message="Новый пробег записан."; 
    }
}













