[Dashboard\Land Rover\Range Rover HSX 28C16A]
Size(280,330); // ширина и высота

Form
{
    Group("Пробег",5,10,110,50)
    {
	Digit(Distance," ",5,18,50);
    Label(lb1,"км",80,20);
    }
    Group("Информация",5,130,270,45)
    {
    Label(message," ",0,18);
    }
    Group("Описание",5,180,270,100) 
    {
    Label(lb4,"Калькулятор пробега для Range Rover HSX",0,20);
    Label(lb5,"EEPROM OKI 28C16A",0,35);
    Label(lb2,"Введите нужное значение в окне <Пробег>.",0,55);
    Label(lb3,"и нажмите кнопку <Применить>.",0,70);
    }
     Picture(Logo,"Lrover.bmp",155,15,0,0);
}

OnShow 

{
		Message.Bold=1; Message.Alignment=1;
        // 	проверяем правильность дампа
		Var1=0x100; // начало старшей области
		Var2=0; // индикатор ошибки	
		Var4=@0x1C7; // старшая часть
		while (Var1<=0x1C7)
				{
				Var3=@Var1;
				if (Var3!=Var4) {Var2=Var2+1;}
				Var1=Var1+1;
				}
		
		Var10=0x0; // начало младшей области
		Var20=0; // счетчик добавки
		Var40=@0xC7; // младшая часть
				while (Var10<=0xC7)
				{
				Var30=@Var10;
				if (Var30>Var40) {Var20=Var20+1;}
				Var10=Var10+1;
				}
		if (Var2=0)
		{
		Var5=(Var4<<16)|(Var40<<8)|0x0;
		// переводим в двоично-десятичный вид
		Var0=((Var5>>28)&15)*10000000;
		Var0=Var0+(((Var5>>24)&15)*1000000);
		Var0=Var0+(((Var5>>20)&15)*100000);
		Var0=Var0+(((Var5>>16)&15)*10000);
		Var0=Var0+(((Var5>>12)&15)*1000);
		Var0=Var0+(((Var5>>8)&15)*100);
		Var0=Var0+(((Var5>>4)&15)*10);
		Var0=Var0+(Var5&15);
		Distance=Var0+(Var20/2)+100;
		}		
		else
		{
        message.Color=0x0000FF; Message="Неверный дамп!"; Distance=0;   
		}
}


OnApply

{	Var99=0; // индикатор ошибки
    if(Distance>999999)	{Var99=1;}
	if(Distance<100)	{Var99=1;}
	if (Var99!=0) {message.Color=0x0000FF; Message="Пробег должен не более 999999 км.";}
    else
    {
	Var1=(Distance%100); // вычисление добавки
	// переводим из двоично-десятичного в двоичный вид
    Var0=Distance-100;
	Var2=Var0%10; Var0=Var0/10;
	Var2=Var2|((Var0%10)<<4); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<8); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<12);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<16);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<20);
		
	// запись старшей области
	Var5=Var2>>16;
	Var10=0x100; // начало старшей области
	while (Var10<=0x1C7)
		{
		@Var10=Var5;
		Var10=Var10+1;
		}
	
	// запись младшей области
	Var6=Var2>>8;
	
	Var60=(Var6>>4)&0xF; Var61=Var6&0xF; // процедура десятичного сложения с 1
	if 	(Var61<0x9) {Var61=Var61+1; Var62=0;} else {Var61=0x0; Var62=1;}
	Var60=Var60+Var62; if (Var60>0x9) {Var60=0x0;} 
	Var66=(Var60<<4)|Var61;
	
	Var10=0x0; // начало младшей области
	Var1=Var1*2; // удвоим добавку (на 1км 2 ячейки)
	while (Var10!=Var1)
		{
		@Var10=Var66;
		Var10=Var10+1;
		}
	while (Var10<=0xC7)
		{
		@Var10=Var6;
		Var10=Var10+1;
		}
	message.Color=0xFF0000; message="Дамп ОК. Новый пробег записан.";
 	}
}