[Dashboard\Ford\Explorer\Explorer 93C46]

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

Form
{
	Group("Пробег",5,5,140,50)
	{
		Digit(Distance," ",5,18,90);
		Label(lb1,"KM",110,20);
	}
	Group("Информация",5,58,270,45)
	{
		Label(message," ",0,18);
	}
	Group("Описание",5,105,270,100) 
	{
		Label(lb4,"Калькулятор пробега для Ford Explorer.",0,20);
		Label(lb5,"EEPROM 93C46",0,35);
		Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,55);
		Label(lb3,"и нажмите кнопку <Применить>.",0,70);
	}
	Picture(Picture1,"Ford.bmp",160,10,0,0);
}

OnShow
{
	Var0 = 0x00; // Начальный адрес
	Var4 = 0x00;
	Var5 = 0x00;
	Var10 = 0x00;
	Var11 = 0x00;
	Var14 = 0x00;

	// --------------- проверяем правильность дампа
	while(Var4 < 8) {
		Var14 = @Var0;
		if(Var14 = 0x80) {Var10 = Var10 + 1;}
		if(Var14 = 0xFF) {Var11 = Var11 + 1;}
		Var0 = Var0 + 1;
		Var4 = Var4 + 1;
	}
	Var11 = Var10 + Var11;
	if(Var11 != 8) {Var5 = 1;}

	Var1 = (@(Var0 + 0)) | (@(Var0 + 1) << 8) | (@(Var0 + 2) << 16) | (@(Var0 + 3) << 24);
	Var2 = (@(Var0 + 4)) | (@(Var0 + 5) << 8) | (@(Var0 + 6) << 16) | (@(Var0 + 7) << 24);
	Var3 = (@(Var0 + 8)) | (@(Var0 + 9) << 8) | (@(Var0 + 10) << 16) | (@(Var0 + 11) << 24);
	if(Var1 != Var2) {Var5 = 1;}
	if(Var2 != Var3) {Var5 = 1;}

	if(Var5 != 0) 
	{
		Message.Color = 0x0000FF;
		Message.Bold = 1;
		Message = "Неверный дамп!";
		Distance = 0;
	}
	else
	{
		// переводим из десятичной системы в двоично-десятичную
		Var1 = ((((@Var0 >> 4) & 0x0F) ^ 0x0F) * 10)     +  ((@Var0 & 0x0F) ^ 0x0F); 		  Var0 = Var0 + 1;
		Var2 = ((((@Var0 >> 4) & 0x0F) ^ 0x0F) * 1000)   + (((@Var0 & 0x0F) ^ 0x0F)  *  100); Var0 = Var0 + 1;
		Var3 = ((((@Var0 >> 4) & 0x0F) ^ 0x0F) * 100000) + (((@Var0 & 0x0F) ^ 0x0F)  *  10000); 
		Var5 = Var1 + Var2 + Var3 + Var10;

		Message.Color = 0xFF0000;
		Message.Bold = 1;
		Message.Alignment = 1;
		Distance = Var5;
		Message = "Введите пробег";
	}
}

OnApply
{
    
	Var0 = 0;       // индикатор ошибки
	Var5 = 0;       // Счетчик
	Var6 = 0x00;    // адрес
	Var10 = Distance;
	if(Var10 > 9999900) { Var0 = 1;}
	if(Var10 < 100)     { Var0 = 1;}
	if(Var0 != 0)
	{
		// ----------------- неверное значение пробега
		Message.Color = 0x0000FF;
		Message = "Пробег должен быть от 100 до 999900 км.";        
		}
	else
	{
		while (Var5 < 8)
		{
			Var1 = @Var6;
			if(Var1 != 0xFF) {@Var6 = 0xFF ;}
			Var6 = Var6 + 1;
			Var5 = Var5 + 1;
		}	

		Var5 = 0;       // Счетчик
		Var6 = 0x00;    // адрес
		Var1 = Var10 % 5;
		Var10 = Var10 - Var1;
		while (Var5 < Var1) {
			@Var6 = 0x80;
			Var5 = Var5 + 1;
			Var6 = Var6 + 2;
		}

		// переводим из десятичной системы в двоично-десятичную
		Var1 = (Var10 % 10); Var10 = Var10 / 10;
		Var1 = Var1 | ((Var10 % 10) << 4); Var10 = Var10 / 10;
		Var2 = (Var10 % 10); Var10 = Var10 / 10;
		Var2 = Var2 | ((Var10 % 10) << 4); Var10 = Var10 / 10;
		Var3 = (Var10 % 10); Var10 = Var10 / 10;
		Var3 = Var3 | ((Var10 % 10) << 4); Var10 = Var10 / 10;
		Var4 = (Var10 % 10); Var10 = Var10 / 10;
		Var4 = Var4 | ((Var10 % 10) << 4); // Var10 = Var10 / 10;

		Var5 = 0;       // Счетчик
		Var6 = 0x08;    // адрес
		while (Var5 < 3) {
			@Var6 = ( Var1 & 0xFF ) ^ 0xFF; Var6 = Var6 + 1;
			@Var6 = ( Var2 & 0xFF ) ^ 0xFF; Var6 = Var6 + 1;
			@Var6 = ( Var3 & 0xFF ) ^ 0xFF; Var6 = Var6 + 1;
			@Var6 = ( Var4 & 0xFF ) ^ 0xFF; Var6 = Var6 + 1;
			Var5 = Var5 + 1;
		}

		Message.Color = 0xFF0000;
		Message.Bold = 1;
		Message.Alignment = 1;
		Message = "Дамп OK";
	}
}