[Dashboard\Porsche\911 93C86 ml V1]

Size(280,330); 

Form 

{
    Group("Пробег",5,5,110,50)
    {
        Digit(Distance," ",5,18,50);
        Label(lb1,"ml",80,20);
       
    }
    Group("Идентификация",5,80,270,65)
    {
        Label(VIN," ",0,18);
		Label(partN," ",0,38);
    }
    Group("Информация",5,145,270,45) 
    {
        Label(Message," ",0,18);
    }    
    Group("Описание",5,195,270,90) 
    {
        Label(lb5,"Калькулятор пробега для Porsche 911.",0,20);
        Label(lb2,"Мили, EEPROM 93C86.",0,35);
        Label(lb3,"Введите нужное значение в окне <Пробег>.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Porsche.bmp",165,8,0,0);
}

OnShow 

{
    Var0=0x300; // смещение первого блока
	Var1=0; // счетчик байт
	Var2=0; // счетчик добавки
	Var4=((@(0x00+Var0)<<8)+@(0x01+Var0))^0xFFFF; // первая группа
	Var17=Var4-1;
	Var5=((@(0x1E+0x200+Var0)<<8)+@(0x1F+0x200+Var0))^0xFFFF; // последняя группа
		
	// расчет добавки
	while (Var1<=0x1F)
		{
		Var15=(((@(Var1+Var0)<<8)|@(Var1+Var0+1))^0xFFFF)&0xFFFF; // текущая группа
		if (Var15!=Var17) {Var2=Var2+1;}			
		Var17=((Var17*2)+((Var17*2)>>16))&0xFFFF; // обработка первой группы  	
		Var1=Var1+2;
		}
	Var0=Var0+0x200;	// смещение второго блока
	Var1=0; // счетчик байт
	while (Var1<=0x1F)
		{
		Var15=(((@(Var1+Var0)<<8)|@(Var1+Var0+1))^0xFFFF)&0xFFFF; // текущая группа
		if (Var15!=Var17) {Var2=Var2+1;}			
		Var17=((Var17*2)+((Var17*2)>>16))&0xFFFF; // обработка первой группы  	
		Var1=Var1+2;
		}
		
	if (Var5=0)	{Var6=Var2%32;} 
	else {Var6=((Var4-1)*32)+Var2;}
	Var24=(Var6*1000000)/16093; Var14=Var24%100; if (Var14<50) {Var24=Var24/100;} else {Var24=(Var24/100)+1;}
	Distance=Var24;
	
	message.Color = 0xFF0000; message.Bold=1; message="Дамп ОК. Введите новый пробег."; 
	VIN.Bold=1;
	VIN = "VIN: "+#c.@0x01+#c.@0x00+#c.@0x03+#c.@0x02+#c.@0x05+#c.@0x04+#c.@0x07+#c.@0x06+#c.@0x09+#c.@0x08+#c.@0x0B+#c.@0x0A+#c.@0x0D+#c.@0x0C+#c.@0x0F+#c.@0x0E+#c.@0x11;
    partN.Bold=1; 
    partN="PART №: "+#c.@0x18+#c.@0x1B+#c.@0x1A+"."+#c.@0x1D+#c.@0x1C+#c.@0x1F+"."+#c.@0x1E+#c.@0x21+#c.@0x20+"."+#c.@0x23+#c.@0x22;
}
    
OnApply

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













