[Dashboard\BMW\E65_7er_35080.cal]

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

Form
{
    Group("Пробег",5,10,110,50)
    {
	Digit(Distance," ",5,18,50);
    Label(lb1,"км",80,20);
    }
    Group("Идентификация",5,65,270,60)
    {
    Label(fg," ",0,25);
    } 
    Group("Информация",5,130,270,45)
    {
    Label(message," ",0,18);
    }
    Group("Описание",5,180,270,100) 
    {
    Label(lb4,"Калькулятор пробега для BMW E65_7er.",0,20);
    Label(lb5,"EEPROM M35080",0,35);
    Label(lb2,"Введите нужное значение в окне <Пробег>.",0,55);
    Label(lb3,"и нажмите кнопку <Применить>.",0,70);
    }
    Picture(Picture1,"BMW.bmp",160,6,0,0);
}

OnShow 

{
		Message.Bold=1; Message.Alignment=1;
        // 	проверяем правильность дампа
		Var0=((@0x1E<<8)|(@0x1F));
		if(Var0!=0xFFFF)
        {
		Var4=0; // точное вычисление пробега, добавка
		Var5=0; // точное вычисление пробега, смещение
		while(Var5<=0x1F)
			{	
			Var7=(@(Var5)<<8)|(@(Var5+1));
			if(Var7>Var0) {Var4=Var4+1;}
			Var5=Var5+2;
			}
		Distance=(Var0*16)+Var4;
        message.Color=0xFF0000;
        message="Дамп ОК. Введите пробег.";
		
        fg.Bold=1;
        fg="FGSTNR:"+#c.@0x314+#c.@0x315+#c.@0x316+#c.@0x317+#c.@0x318+#c.@0x319+#c.@0x31A;
        }
      	else
		{
        message.Color=0x0000FF; Message="Неверный дамп!"; Distance=0;   
		}
}

OnApply

{
    if(Distance>999999)	{message.Color=0x0000FF; Message="Пробег должен не более 999999 км.";}
    else
    {
	    Var0=Distance/16;
        Var1=(Distance%16)*2; // Вычисление добавки
        Var2=0;
		//запись старшей группы
		while(Var2<Var1) 
			{	
			@Var2=(Var0+1)>>8;
			Var2=Var2+1;
		    @Var2=Var0+1;
			Var2=Var2+1; 
			}

		//запись младшей группы
		while(Var2<=0x1E) 
			{	
			@Var2=Var0>>8;
			Var2=Var2+1;
	        @Var2=Var0;
			Var2=Var2+1; 
			}
        message.Color=0xFF0000; message="Дамп ОК. Новый пробег записан.";
 	}
}