[Dashboard\Motobikes\Polaris\Polaris Ranger RZR]

Size(280,300); 

Form 
{
    Group("Пробег",5,5,110,50)
    {
        Digit(Distance," ",5,18,50);
        Label(lb,"km",80,20);
       
    }
	 Group("Моточасы",5,60,110,50)
    {
        Digit(Hours," ",5,18,50);
        Label(lb5,"Hr",80,20);
       
    }
    Group("Информация",5,110,270,45) 
    {
        Label(Message," ",0,18);
    }    
    Group("Описание",5,160,270,90) 
    {
        Label(lb1,"Калькулятор пробега для Polaris Ranger RZR",0,20);
        Label(lb2," EEPROM 93C66.",0,35);
        Label(lb3,"Введите нужное значение в окне <Пробег>.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
      Picture(Picture1,"Polaris.bmp",145,35,0,0);
}


OnShow 

{
    Var0=0; // смещение пробега
	Var1=0; // счетчик байт
	Var2=0; // счетчик добавки
	Var4=((@(0x01+Var0)<<8)+@(0x00+Var0))^0xFFFF; // первая группа
	Var17=Var4-1;
	Var5=((@(0x1F+Var0)<<8)+@(0x1E+Var0))^0xFFFF; // последняя группа
		
	// расчет добавки
	while (Var1<=0x1F)
		{
		Var15=(((@(Var1+Var0+1)<<8)|@(Var1+Var0))^0xFFFF)&0xFFFF; // текущая группа
		if (Var15!=Var17) {Var2=Var2+1;}			
		Var17=((Var17*2)+((Var17*2)>>16))&0xFFFF; // обработка первой группы  	
		Var1=Var1+2;
		}
	
	if (Var5=0)	{Distance=Var2%16;} 
	else {Distance=((Var4-1)*16)+Var2;}
	
	Var0=0x20; // смещение всего блока моточасов
	Var1=0; // счетчик байт
	Var2=0; // счетчик добавки
	Var4=((@(0x01+Var0)<<8)+@(0x00+Var0))^0xFFFF; // первая группа
	Var17=Var4-1;
	Var5=((@(0x0F+Var0)<<8)+@(0x0E+Var0))^0xFFFF; // последняя группа
		
	// расчет добавки
	while (Var1<=0x0F)
		{
		Var15=(((@(Var1+Var0+1)<<8)|@(Var1+Var0))^0xFFFF)&0xFFFF; // текущая группа
		if (Var15!=Var17) {Var2=Var2+1;}			
		Var17=((Var17*2)+((Var17*2)>>16))&0xFFFF; // обработка первой группы  	
		Var1=Var1+2;
		}
	
	if (Var5=0)	{Hours=Var2%8;} 
	else {Hours=((Var4-1)*8)+Var2;}
	Hours=Hours/10;
	
	
	message.Color = 0xFF0000; message.Bold=1; message="Дамп ОК. Введите новый пробег."; 
   
}
    
OnApply

{
    
	Var10=Distance;
	if(Var10>999999) {message.Color=0x0000FF; message.Bold=1; message="Пробег должен быть не более 999999 км";}
    else
    {
	// запись области пробега
	Var0=0; // смещение всего блока
	Var1=0; // счетчик байт
	Var4=Var10/16; // основная часть
	Var2=(Var10%16)*2; // добавка для дискретности 1 при 16 словах
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x1F)
		{
		Var11=Var1+Var0;		
		@Var11=Var4^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var4^0xFFFF)>>8;		
		Var4=((Var4*2)+((Var4*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}	
	// запись добавки
		Var1=0; // счетчик байт
		
		while (Var1<Var2)
		{
		Var11=Var1+Var0;		
		@Var11=Var5^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var5^0xFFFF)>>8;		
		Var5=((Var5*2)+((Var5*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}
    
	// запись области моточасов
	Var10=Hours*10;
	Var0=0x20; // смещение всего блока
	Var1=0; // счетчик байт
	Var4=Var10/8; // основная часть
	Var2=(Var10%8)*2; // добавка для дискретности 1 при 8 словах
	Var5=Var4+1;   // добавка
	// запись основной части
		while (Var1<=0x0F)
		{
		Var11=Var1+Var0;		
		@Var11=Var4^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var4^0xFFFF)>>8;		
		Var4=((Var4*2)+((Var4*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}	
	// запись добавки
		Var1=0; // счетчик байт
		
		while (Var1<Var2)
		{
		Var11=Var1+Var0;		
		@Var11=Var5^0xFFFF;
		Var11=Var11+1;
		@Var11=(Var5^0xFFFF)>>8;		
		Var5=((Var5*2)+((Var5*2)>>16))&0xFFFF; 
		Var1=Var1+2; 
		}
	
		
		
	message.Color=0xFF0000; message.Bold=1; message="Новый пробег и моточасы записаны."; 
    }
}













