[Dashboard\Mitsubishi\Diamant TC97101.cal]

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

Form 

{   Group("Пробег",5,5,110,50)
 	{
	Digit(Distance," ",15,18,50);
	Label(lbkm,"км",80,20);
	}
     	Group("Информация",5,88,310,45)
    	{Label(message," ",0,18);}
    	Group("Описание",5,135,310,100) 
    	{
		Label(lb4,"Калькулятор пробега для Mitsubishi Diamant.",0,20);
		Label(lb1,"1995-1996 г.",0,35);
        Label(lb5,"EEPROM TC97101, панель Nippondenso.",0,50);
        Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,65);
        Label(lb3,"и нажмите кнопку <Применить>.",0,80);
    	}
    Picture(Picture1,"Mitsubishi.bmp",175,15,0,0);
   	
}

OnShow

{
	Message.Bold=1;
    Message.Alignment=1;
    // проверяем правильность дампа
    Var1=(@0x21<<8)|@0x20;
    Var2=(@0x23<<8)|@0x22;
    if(Var1!=Var2) 
	{ 
   	message.Color=0x0000FF;	Message="Неверный дамп!";
    }
    else
    {
	// точное вычисление пробега, добавка
	Var4=0; // смещение
	Var8=0; // добавка
		while (Var4<=0x1F)
		{
		Var5=@Var4;
		Var6=0; // сдвиг внутри байта
			while (Var6<=7)
			{
			Var7=(Var5>>Var6)&0x01;
			if (Var7=1) {Var8=Var8+1;}
			Var6=Var6+1;
			}	
		Var4=Var4+1;	
		}
        message.Color=0xFF0000;
        message="Дамп ОК, нажмите кнопку <Применить>";
        Distance=(Var1*256)+Var8; 
    }
}

OnApply

{
	Var10=Distance;
    if(Var10>999999)
   	{
    message.Color=0x0000FF;
    Message="Пробег должен быть не более 999999 км.";
    }
	else
	{   
	// расчет добавки
	Var1=Var10%256; //полная добавка
		
		// запись первого байта
		Var2=1; // смещение внутри байта, пропускаем младший бит
		Var3=0; // байт для записи
		if (Var1>7) {Var11=7;} else {Var11=Var1;} // добавка, записываемая в первый байт
		while (Var2<=Var11)
			{
			Var3=Var3+(0x01<<Var2);
			Var2=Var2+1;
			}
		@0x0=Var3;	
		
		if (Var1<=7) 
		{
		Var4=0x01; // смещение для записи оставшихся нулей
		while (Var4<=0x1F) {@Var4=0x0; Var4=Var4+1;}
		}
		
		if (Var1>7) 	  // если добавка больше 7
		{
		Var1=Var1-7;
		Var5=Var1/8; // число полностью заполненных FF байт
		Var6=0; 	// смещение по байтам
		while (Var6<Var5) {Var6=Var6+1; @Var6=0xFF;}
		
		Var1=Var1%8; // остаток для записи в последний значащий байт
		
		// запись в последний значащий байт
			Var6=Var6+1; // адрес последнего значащего байта
			Var12=0; // смещение внутри байта
			Var13=0; // байт для записи
			while (Var12<Var1)
			{
			Var13=Var13+(0x01<<Var12);
			Var12=Var12+1;
			}
			@Var6=Var13;	
		
			Var14=Var6+1; // смещение для записи оставшихся нулей
			while (Var14<=0x1F) {@Var14=0x0; Var14=Var14+1;}	
		}
	
	// запись основной части	 
	Var0=Var10/256;
	@0x20=Var0; @0x21=(Var0)>>8;
	@0x22=Var0;	@0x23=(Var0)>>8;
		
	message.Color=0xFF0000;
    message="Дамп ОК. Новый пробег записан.";
	}
}

