[Engine\EDC16 FLASH Decryptor]

Size(280,250); 

Form
{
    Group("Таблица перестановки битов",5,5,270,125)
    {
        ComboBox(bit0,"Бит 0",30,20,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit1,"Бит 1",30,45,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit2,"Бит 2",30,70,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit3,"Бит 3",30,95,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit4,"Бит 4",140,20,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit5,"Бит 5",140,45,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit6,"Бит 6",140,70,50,"0","1","2","3","4","5","6","7");    
        ComboBox(bit7,"Бит 7",140,95,50,"0","1","2","3","4","5","6","7");    
    }
    Group("Информация",5,130,270,50)
    {
        Label(msg," ",0,20);
    }     
}

OnShow 
{
    bit0 = 0;
    bit1 = 1;
    bit2 = 2;
    bit3 = 3;
    bit4 = 4;
    bit5 = 5;
    bit6 = 6;
    bit7 = 7;
}

OnApply
{
    // формируем маски для установки битов в новом байте
    Var0 = 1 << bit0;
    Var1 = 1 << bit1;
    Var2 = 1 << bit2;
    Var3 = 1 << bit3;
    Var4 = 1 << bit4;
    Var5 = 1 << bit5;
    Var6 = 1 << bit6;
    Var7 = 1 << bit7;

    // проверка ошибок ввода
    // возможен вариант, что пользователь пытается переставить разные 
    // биты из исходного байта на одно и то же место в новом байте
    // если же выбраны разные биты назначения, то в результате логического OR 
    // всех этих бит должно получиться значение 255

    Var10 = Var0 | Var1 | Var2 | Var3 | Var4 | Var5 | Var6 | Var7;

    if(Var10 != 255)
    {
        msg.Color = 0x0000FF;
        msg.Bold = 1;
        msg = "Неверно выбраны биты для перестановки!";    
    }
    else
    {
        msg.Color = 0x000000;
        msg.Bold = 1;
        msg = "Декодирование...";
        Var10 = 0;
        while(Var10 != 65536)
        {
            Var11 = @Var10; // Var11 - старый байт и буфера
            Var12 = 0;      // Var12 - новый байт

            if((Var11 & 1)  != 0)   { Var12 = Var12 | Var0;}
            if((Var11 & 2)  != 0)   { Var12 = Var12 | Var1;}
            if((Var11 & 4)  != 0)   { Var12 = Var12 | Var2;}
            if((Var11 & 8)  != 0)   { Var12 = Var12 | Var3;}
            if((Var11 & 16) != 0)   { Var12 = Var12 | Var4;}
            if((Var11 & 32) != 0)   { Var12 = Var12 | Var5;}
            if((Var11 & 64) != 0)   { Var12 = Var12 | Var6;}
            if((Var11 & 128) != 0)  { Var12 = Var12 | Var7;}

            @Var10 = Var12; // новое значение в буфер

            Var10 = Var10 + 1; 
            Var20 = (Var10 * 100)/65536;

            Str0 = "Декодирование "+#i.Var20 +"%";
            msg = Str0;
        }
        msg = "Декодирование завершено.";
    }
}




