[Immo\Opel\HITAG2]

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

Form
{
    Group("Логин иммо",5,5,180,70)
    {        
        Label(lab1,"Строка 1",0,30);
    }
    Group("Описание",5,80,290,60) 
    {
        Label(lb4,"Калькулятор логина для Opel hitag 2",0,17);
        Label(lb5,"EEPROM 93C66",0,32);
    }
    Picture(Picture1,"Opel.bmp",220,20,0,0);
}

OnShow
{
    Var0 = 0;       // инидикатор ошибки

    // проверяем, чтобы в области логина не было одних FF и одних нулей
    // логин занимает 12 байт. Если все 12 байт будут равны 255 (FF), 
    // то сумма будет равна 12*255 = 3060, если все нули, то 0

    Var2 = 0;
    Var1 = 0x38; 
    while(Var1 != 0x44)
    {
        Var2 = Var2 + @Var1;
        Var1 = Var1 + 1;
    }
    if(Var2 = 0) { Var0 = 1;}
    if(Var2 = 3060) { Var0 = 1;}

    // проверяем две копии логина

    Var1 = 0x38; 
    Var2 = 0x3E;
    while(Var1 != 0x3E)
    {
        if(@Var1 != @Var2) { Var0 = 1;}
        Var1 = Var1 + 1;
        Var2 = Var2 + 1;
    }

    if(Var0 != 0)
    {
        lab1.bold = 1;
        lab1.Color = 0x0000FF;
        lab1 = "Неверный дамп!";
    }
    else
    {
        // дамп вроде правильный, вычисляем логин
        Var0 = (@0x38 << 32) | (@0x39 << 40) | 
               (@0x40 << 16) | (@0x41 << 24) |
               @0x42 | (@0x43 << 8);

        Var10 = Var0 & 0x3F;
        Var0 = (Var0 >> 6) | (Var10 << 42) ^ 0xFFFFFFFFFFFF;

        Var1 = (Var0 >> 24) & 255; Str0 = #b.Var1;
        Var1 = (Var0 >> 16) & 255; Str0 = Str0 + " "+#b.Var1;
        Var1 = (Var0 >> 8)  & 255; Str0 = Str0 + " "+#b.Var1;
        Var1 = (Var0 >> 32) & 255; Str0 = Str0 + " "+#b.Var1;
        Var1 = (Var0 >> 40) & 255; Str0 = Str0 + " "+#b.Var1;
        Var1 = Var0 & 255;         Str0 = Str0 + " "+#b.Var1;

        lab1.bold = 1;
        lab1.Color = 0x004000;
        Lab1 = Str0;
    }
}                                             




