Esempio n. 1
0
constexpr auto do_x_times(Count count, Body... body)
{
    return block(
        MOV(ecx, count),
    "start"_label,
        CMP(ecx, 0_d),
        JE("done"_rel8),
        body...,
        DEC(ecx),
        JMP("start"_rel8),
    "done"_label);
}
Esempio n. 2
0
    r.endGroup();
}

auto OsdTheme::load(Record &r, const QString &group) -> void
{
    r.beginGroup(group);
#define READ(a) r.read(a, #a);
    DO(READ)
#undef READ
    r.endGroup();
}

#define JSON_CLASS OsdTheme

static const auto jio = JIO(
    JE(font),
    JE(scale),
    JE(underline),
    JE(bold),
    JE(strikeout),
    JE(italic),
    JE(color),
    JE(styleColor),
    JE(style)
);

JSON_DECLARE_FROM_TO_FUNCTIONS

/******************************************************************************/

OsdThemeObject::OsdThemeObject(QObject *parent)
Esempio n. 3
0
#include "playlistthemeobject.hpp"
#include "misc/json.hpp"
#include "ui_controlsthemewidget.h"

#define JSON_CLASS ControlsTheme

static const auto jio = JIO(
    JE(titleBarEnabled),
    JE(showOnMouseMoved),
    JE(showLocationsInPlaylist),
    JE(showToolOnMouseOverEdge),
    JE(showPreviewOnMouseOverSeekBar),
    JE(showKeyframeForPreview),
    JE(showMediaTitleForLocalFilesInHistory),
    JE(showMediaTitleForUrlsInHistory),
    JE(previewSize),
    JE(previewMinimumSize),
    JE(previewMaximumSize)
);

JSON_DECLARE_FROM_TO_FUNCTIONS

#undef JSON_CLASS

/******************************************************************************/

struct ControlsThemeWidget::Data {
    Ui::ControlsThemeWidget ui;
    QTreeWidgetItem *titleBarEnabled, *showOnMouseMoved,
        *showLocationsInPlaylist, *showToolOnMouseOverEdge,
        *showPreviewOnMouseOverSeekBar, *showKeyframeForPreview,
Esempio n. 4
0
#include "audionormalizeroption.hpp"
#include "ui_audionormalizeroptionwidget.h"
#include "misc/json.hpp"

#define JSON_CLASS AudioNormalizerOption
static const auto jio = JIO(
    JE(use_rms),
    JE(smoothing),
    JE(max),
    JE(target),
    JE(chunk_sec)
);

JSON_DECLARE_FROM_TO_FUNCTIONS

/******************************************************************************/

struct AudioNormalizerOptionWidget::Data {
    Ui::AudioNormalizerOptionWidget ui;
};

AudioNormalizerOptionWidget::AudioNormalizerOptionWidget(QWidget *parent)
    : QWidget(parent), d(new Data)
{
    d->ui.setupUi(this);
    auto signal = &AudioNormalizerOptionWidget::optionChanged;
    PLUG_CHANGED(d->ui.target);
    PLUG_CHANGED(d->ui.use_rms);
    PLUG_CHANGED(d->ui.chunk_sec);
    PLUG_CHANGED(d->ui.max);
    PLUG_CHANGED(d->ui.smoothing);
Esempio n. 5
0
int main(int argc, const char * argv[]) {
    check_same("Mov literal", 3,
        Asm<int>(
            MOV(eax, 3_d),
            RET())()
    );
        
    check_same("64 bit register MOV", 6,
        Asm<int>(
            MOV(rax, 6_q),
            RET())()
    );
    
    check_same("Negative literal", -103,
        Asm<int>(
            MOV(eax, -3_d),
            ADD(eax, - - -100_d),
            RET())()
    );
    
    check_same("Move reg to reg", 4,
        Asm<int>(
            MOV(ecx, 4_d),
            MOV(eax, ecx),
            RET())()
    );
    
    check_same("Simple jmp", 3,
        Asm<int>(
            MOV(eax, 3_d),
            JMP("a"_rel8),
            ADD(eax, 2_d),
        "a"_label,
            RET())()
    );
    
    check_same("Simple loop", 30,
        Asm<int>(
            MOV(ecx, 5_d),
            MOV(eax, 0_d),
        "start"_label,
            CMP(ecx, 0_d),
            JE("done"_rel8),
            ADD(eax, 6_d),
            DEC(ecx),
            JMP("start"_rel8),
        "done"_label,
            RET())()
    );
    
    check_same("Macro simple loop", 30,
        Asm<int>(
            MOV(eax, 0_d),
            do_x_times(5_d,
                ADD(eax, 6_d)),
            RET())()
    );

    check_same("Access arg using esp", 1,
        Asm<int>(
            MOV(eax, _[esp + 28_d]),
            RET())(1, 2, 3)
    );
    
    check_same("Access arg using ebp", 1,
        Asm<int>(
            MOV(eax, _[ebp - 0xc_b]),
            RET())(1, 2, 3)
    );
    
    check_same("Index ebp", 1,
        Asm<int>(
            MOV(ecx, 2_d),
            MOV(eax, _[ebp + ecx * 2_b - 0x10_d]),
            RET())(1, 2, 3)
    );
    
    check_same("Access args using ebp", 5,
        Asm<int>(
            MOV(edx, 0_d),
            MOV(eax, _[ebp - 0xc_b]),
            MOV(ecx, _[ebp - 0x10_b]),
            DIV(ecx),
            MOV(ecx, _[ebp - 0x14_b]),
            DIV(ecx),
            RET())(100, 5, 4)
    );
    
    check_same("Access arg with 64 bit reg", 2,
        Asm<int>(
            MOV(rax, _[rsp + 24_d]),
            RET())(1, 2, 3)
    );
    
    check_same("Access second register zero", 1,
        Asm<int>(
            MOV(ecx, 0_d),
            MOV(eax, _[esp + 28_d + ecx]),
            RET())(1, 2, 3)
    );
    
    check_same("Access second register with offset", 1,
        Asm<int>(
            MOV(ecx, 8_d),
            MOV(eax, _[esp + 20_d + ecx]),
            RET())(1, 2, 3)
    );
    
    check_same("Access second register with offset and 1 scale", 1,
        Asm<int>(
            MOV(ecx, 8_d),
            MOV(eax, _[esp + 20_d + ecx * 1_b]),
            RET())(1, 2, 3)
    );

    check_same("Access second register with offset and 4 scale", 1,
        Asm<int>(
            MOV(ecx, 2_d),
            MOV(eax, _[esp + 20_d + ecx * 4_b]),
            RET())(1, 2, 3)
    );
    
    check_same("Call c function from assembly", 66,
        Asm<int>(
            MOV(rbx, _[rsp + 8_d]),
            CALL(rbx),
            RET())(&ret66)
    );

    check_same("Call c function from esp directly", 66,
        Asm<int>(
            CALL(_[rsp + 8_d]),
            RET())(&ret66)
    );
    
     check_same("Call c function from ebp directly", 66,
        Asm<int>(
            CALL(_[rbp - 0x10_d]),
            RET())(&ret66)
    );

  //  auto p = Asm<int>(CALL(_[rbp - 0xc_d]));
  // Print<decltype(p)::program> x{};

    std::cout << "done" << std::endl;
    return 0;
}