[Dashboard\BMW\E36\E36 93c56 Motometer]

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

Form
{
    Group("Пробег",5,10,110,50)
    {
	Digit(Distance," ",5,18,50);
    Label(lb1,"км",80,20);
    }
    Group("Идентификация",5,65,270,60)
    {
    Label(nr," ",0,25);
    } 
	Group("Информация",5,130,270,45)
    {
    Label(message," ",0,18);
    }
    Group("Описание",5,180,270,100) 
    {
    Label(lb4,"Калькулятор пробега для BMW E36.",0,20);
    Label(lb5,"EEPROM 93C56, панель Motometer).",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=((@0x9F<<8)|(@0x9E))^0xFFFF;
		if(Var0!=0xFFFF)
        {
		Var4=0; // точное вычисление пробега, добавка
		Var5=0x80; // точное вычисление пробега, смещение
		while(Var5<=0x9F)
			{	
			Var7=((@(Var5+1)<<8)|(@Var5))^0xFFFF;
			if(Var7>Var0) {Var4=Var4+2;}
			Var5=Var5+2;
			}
		Distance=(Var0*32)+Var4;
        message.Color=0xFF0000;
        message="Дамп ОК. Введите пробег.";
		}
		else
		{
        message.Color=0x0000FF; Message="Неверный дамп!"; Distance=0;   
		}
	Var10=((@0x40)>>4)&0xF;	Var11=(@0x42)&0xF; Var12=((@0x42)>>4)&0xF;
	nr.Bold=1;
	nr="BMWTNR: "+#i.Var10+"."+#b.@0x43+#i.Var11+"."+#i.Var12+#b.@0x41;
}

OnApply

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

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