Exemplo n.º 1
0
bool IntelKernel::loadBootImage()
{
    MultibootModule *mod;
    BootImage *image;
    Arch::Memory virt(0, m_memory);
    Arch::Memory::Range range;
    Address vaddr;

    // Startup boot modules
    for (Size n = 0; n < multibootInfo.modsCount; n++)
    {
        // Map MultibootModule struct
        // TODO: too many arguments. Make an easier wrapper.
        vaddr = virt.findFree(PAGESIZE, Memory::KernelPrivate);
        virt.map(multibootInfo.modsAddress, vaddr,                        
                 Arch::Memory::Present | Arch::Memory::Readable);
        mod = (MultibootModule *)(vaddr + multibootInfo.modsAddress % PAGESIZE);
        mod += n;

        vaddr = virt.findFree(PAGESIZE, Memory::KernelPrivate),
        virt.map(mod->string, vaddr,
                 Arch::Memory::Present | Arch::Memory::Readable);
        String str = (char *) (vaddr + mod->string % PAGESIZE);

        // Mark its memory used
        for (Address a = mod->modStart; a < mod->modEnd; a += PAGESIZE)
            m_memory->allocate(a);

        // Is this a BootImage?
        if (str.match("*.img.gz"))
        {
            // Map the BootImage into our address space
            range.phys   = mod->modStart;
            range.size   = mod->modEnd - mod->modStart;
            range.virt   = virt.findFree(range.size, Memory::KernelPrivate);
            range.access = Arch::Memory::Present |
                           Arch::Memory::Readable;
            virt.mapRange(&range);
            image = (BootImage *) range.virt;

            // Verify this is a correct BootImage
            if (image->magic[0] == BOOTIMAGE_MAGIC0 &&
                image->magic[1] == BOOTIMAGE_MAGIC1 &&
                image->layoutRevision == BOOTIMAGE_REVISION)
            {
                m_bootImageAddress = mod->modStart;
                m_bootImageSize    = mod->modEnd - mod->modStart;

                // Loop BootPrograms
                for (Size i = 0; i < image->symbolTableCount; i++)
                    loadBootProcess(image, mod->modStart, i);
            }
            return true;
        }
    }
    return false;
}
Exemplo n.º 2
0
void View::pdraw(QPainter& p, const QRect& r)
      {
      //printf("View::pdraw virt:%d x:%d width:%d y:%d height:%d\n", virt(), r.x(), r.width(), r.y(), r.height());  
      
      if (virt()) {
            setPainter(p);
            int x = r.x();
            int y = r.y();
            int w = r.width();
            int h = r.height();
            if (xmag <= 0) {
                  // TODO These adjustments are required, otherwise gaps. Tried, unable to remove them for now.  p4.0.30
                  x -= 1;   
                  w += 2;
                  //x = (x + xpos + rmapx(xorg)) * (-xmag);
                  x = lrint((double(x + xpos) + rmapx_f(xorg)) * double(-xmag));
                  w = w * (-xmag);
                  }
            else {
                  //x = (x + xpos + rmapx(xorg)) / xmag;
                  x = lrint((double(x + xpos) + rmapx_f(xorg)) / double(xmag));
                  //w = (w + xmag - 1) / xmag;
                  w = lrint(double(w) / double(xmag));
                  x -= 1;
                  w += 2;
                  }
            if (ymag <= 0) {
                  y -= 1;
                  h += 2;
                  //y = (y + ypos + rmapy(yorg)) * (-ymag);
                  y = lrint((double(y + ypos) + rmapy_f(yorg)) * double(-ymag));
                  h = h * (-ymag);
                  }
            else {
                  //y = (y + ypos + rmapy(yorg)) / ymag;
                  y = lrint((double(y + ypos) + rmapy_f(yorg)) / double(ymag));
                  //h = (h + ymag - 1) / ymag;
                  h = lrint(double(h) / double(ymag));
                  y -= 1;
                  h += 2;
                  }

            if (x < 0)
                  x = 0;
            if (y < 0)
                  y = 0;
            
            draw(p, QRect(x, y, w, h));
            }
      else
            draw(p, r);
      }
Exemplo n.º 3
0
 void call(const std::string &msg = "") {
   print.print_member_call(std::cout, "call", {});
   virt(msg);
 }
Exemplo n.º 4
0
 virtual ~Base() {
   print.print_destructor(std::cout);
   virt();
 }
Exemplo n.º 5
0
 Base(const Base &rhs)
   : print{rhs.print}
 {
   print.print_copy_constructor(std::cout);
   virt();
 }
Exemplo n.º 6
0
 Base(const std::string &class_name = "Base")
   : print{class_name, sp_1, sp_2}
 {
   print.print_constructor(std::cout);
   virt();
 }
Exemplo n.º 7
0
 virtual ~Deriv() {
   print.print_destructor(std::cout);
   virt();
   Base1::call(std::string("called from ~") + print.get_name() + "()");
 }
Exemplo n.º 8
0
 Deriv(const Deriv &rhs)
   : Base1{rhs}, print{rhs.print}
 {
   print.print_copy_constructor(std::cout);
   virt();
 }
Exemplo n.º 9
0
 Deriv(const std::string &class_name = "Deriv", Args&&... args)
   : Base1{std::forward<Args>(args)...}, print{class_name, sp_1, sp_2}
 {
   print.print_constructor(std::cout);
   virt();
 }
Exemplo n.º 10
0
void EventCanvas::viewMousePressEvent(QMouseEvent* event)/*{{{*/
{
    ///keyState = event->state();
    _keyState = ((QInputEvent*) event)->modifiers();
    _button = event->button();

    //printf("viewMousePressEvent buttons:%x mods:%x button:%x\n", (int)event->buttons(), (int)keyState, event->button());

    // special events if right button is clicked while operations
    // like moving or drawing lasso is performed.
    if (event->buttons() & Qt::RightButton & ~(event->button()))
    {
        //printf("viewMousePressEvent special buttons:%x mods:%x button:%x\n", (int)event->buttons(), (int)keyState, event->button());
        switch (_drag)
        {
        case DRAG_LASSO:
            _drag = DRAG_OFF;
            redraw();
            return;
        case DRAG_MOVE:
            _drag = DRAG_OFF;
            endMoveItems(_start, MOVE_MOVE, 0);
            return;
        default:
            break;
        }
    }

    // ignore event if (another) button is already active:
    if (event->buttons() & (Qt::LeftButton | Qt::RightButton | Qt::MidButton) & ~(event->button()))
    {
        //printf("viewMousePressEvent ignoring buttons:%x mods:%x button:%x\n", (int)event->buttons(), (int)keyState, event->button());
        return;
    }
    bool shift = _keyState & Qt::ShiftModifier;
    bool alt = _keyState & Qt::AltModifier;
    bool ctrl = _keyState & Qt::ControlModifier;
    _start = event->pos();

    //---------------------------------------------------
    //    set curItem to item mouse is pointing
    //    (if any)
    //---------------------------------------------------

    CItemList list = _items;
    if(multiPartSelectionAction && !multiPartSelectionAction->isChecked())
        list = getItemlistForCurrentPart();
    if (virt())
    {
        _curItem = list.find(_start);//_items.find(_start);
    }
    else
    {
        _curItem = 0; //selectAtTick(_start.x());
        iCItem ius;
        bool usfound = false;
        for (iCItem i = list.begin(); i != list.end(); ++i)
        {
            MidiTrack* mtrack = (MidiTrack*)i->second->part()->track();
            int sy = _start.y();
            int p = y2pitch(sy);
            if(editor->isGlobalEdit())
                p += mtrack->getTransposition();
            int p2 = pitch2y(p);
            QPoint lpos(_start.x(), p2);
            QRect box = i->second->bbox();
            int x = rmapxDev(box.x());
            int y = rmapyDev(box.y());
            int w = rmapxDev(box.width());
            int h = rmapyDev(box.height());
            QRect r(x, y, w, h);
            r.translate(i->second->pos().x(), i->second->pos().y());
            if(r.contains(lpos))
            {
                if (i->second->isSelected())
                {
                    _curItem = i->second;
                    break;
                }
                else if (!usfound)
                {
                    ius = i;
                    usfound = true;
                }
            }
        }
        if (!_curItem && usfound)
            _curItem = ius->second;

    }

    if(editor->isGlobalEdit() && _curItem)
    {
        populateMultiSelect(_curItem);
    }

    if (_curItem && (event->button() == Qt::MidButton))
    {
        if (!_curItem->isSelected())
        {
            selectItem(_curItem, true);
            updateSelection();
            redraw();
        }
        startDrag(_curItem, shift);
    }
    else if (event->button() == Qt::RightButton)
    {
        if (_curItem)
        {
            if (shift)
            {
                _drag = DRAG_RESIZE;
                setCursor();
                int dx = _start.x() - _curItem->x();
                _curItem->setWidth(dx);
                _start.setX(_curItem->x());
                deselectAll();
                selectItem(_curItem, true);
                updateSelection();
                redraw();
            }
            else
            {
                _itemPopupMenu = genItemPopup(_curItem);
                if (_itemPopupMenu)
                {
                    QAction *act = _itemPopupMenu->exec(QCursor::pos());
                    if (act)
                        itemPopup(_curItem, act->data().toInt(), _start);
                    delete _itemPopupMenu;
                }
            }
        }
        else
        {
            _canvasPopupMenu = genCanvasPopup(true);
            if (_canvasPopupMenu)
            {
                QAction *act = _canvasPopupMenu->exec(QCursor::pos(), 0);
                if (act)
                {
                    int actnum = act->data().toInt();
                    canvasPopup(actnum);
                    if(actnum >= 20) //Nome of the tools have a higher number than 9
                    {
                        editor->updateCanvas();
                        los->arranger->updateCanvas();
                    }
                }
                delete _canvasPopupMenu;
            }
        }
    }
    else if (event->button() == Qt::LeftButton)
    {
        switch (_tool)
        {
        case PointerTool:
            if (_curItem)
            {
                /*if (_curItem->part() != _curPart)
                {
                    _curPart = _curItem->part();
                    _curPartId = _curPart->sn();
                    curPartChanged();
                }*/
                itemPressed(_curItem);
                if (shift)
                    _drag = DRAG_COPY_START;
                else if (alt)
                {
                    _drag = DRAG_CLONE_START;
                }
                else if (ctrl)
                { //Select all on the same pitch (e.g. same y-value)
                    deselectAll();
                    //printf("Yes, ctrl and press\n");
                    for (iCItem i = _items.begin(); i != _items.end(); ++i)
                    {
                        if (i->second->y() == _curItem->y())
                            selectItem(i->second, true);
                    }
                    updateSelection();
                    redraw();
                }
                else
                    _drag = DRAG_MOVE_START;
            }
            else
                _drag = DRAG_LASSO_START;
            setCursor();
            break;

            case RubberTool:
            deleteItem(_start);
            _drag = DRAG_DELETE;
            setCursor();
            break;

            case PencilTool:
            if (_curItem)
            {
                _drag = DRAG_RESIZE;
                setCursor();
                int dx = _start.x() - _curItem->x();
                _curItem->setWidth(dx);
                _start.setX(_curItem->x());
            }
            else
            {
                _drag = DRAG_NEW;
                setCursor();
                _curItem = newItem(_start, event->modifiers());
                if (_curItem)
                    _items.add(_curItem);
                else
                {
                    _drag = DRAG_OFF;
                    setCursor();
                }
            }
            deselectAll();
            if (_curItem)
            {
                selectItem(_curItem, true);
                // Play the note
                itemPressed(_curItem);
            }
            updateSelection();
            redraw();
            break;

            default:
            break;
        }
    }
    mousePress(event);
}/*}}}*/
 Derived()           { println("Derived::Derived()");  virt(); }
 Base()              { println("Base::Base()");  virt(); }