[Dashboard\Renault\Laguna\Laguna3 dash 24C16]

Size(280,310); 

Form 
{
    Group("Пробег",5,13,100,50)
    {
        Digit(Distance," ",5,18,60);
        Label(lbkm,"км",70,22);
       
    }
    Group("Идентификация",5,80,270,45)
    {
        Label(partN," ",0,18);
    }
    Group("Информация",5,125,270,45) 
    {
        Label(Message," ",0,18);
    }    
    Group("Описание",5,175,270,90) 
    {
        Label(lb1,"Калькулятор пробега для Renault Laguna3 dash",0,20);
        Label(lb2,"EEPROM 24C16",0,35);
        Label(lb3,"Введите нужное значение в окне <Пробег>.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Renault.bmp",155,20,0,0);
}

OnShow 
{
    Var0=6; // смещение всего блока
	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="Дамп ОК. Введите новый пробег."; 
    partN="PART №: "+#c.@0x792+#c.@0x793+#c.@0x794+#c.@0x795+#c.@0x796+#c.@0x797+#c.@0x798+#c.@0x799+#c.@0x79A+#c.@0x79B+#c.@0x79C;
}
    
OnApply
{   
    Var10=Distance;
	if(Var10>999999) {message.Color=0x0000FF; message.Bold=1; message="Пробег должен быть не более 999999 км";}
    else
    {
	// запись первой области
	Var0=6; // смещение всего блока
	Var1=0; // счетчик байт
	Var2=Var10%32; // добавка
	Var4=Var10/32; // основная часть
	Var12=Var10%2; // признак нечетности пробега
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x25)
		{
		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=0x26; // смещение всего блока
	Var1=0; // счетчик байт
		if (Var12=0)	{Var2=Var10%32;} 	 // добавка 
		else			{Var2=(Var10%32)-1;} // добавка с учетом 1км при нечетном пробеге
	Var4=Var10/32; // основная часть
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x25)
		{
		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="Новый пробег записан."; 
    }
}