import.inc

Переключить прокрутку окна
Загрузить этот исходный код

;
  ; Реализация среды исполнения языка программирования
  ; Объектно-ориентированный продвинутый векторный транслятор
  ;
  ; Copyright © 2021, 2024 Малик Разработчик
  ;
  ; Это свободная программа: вы можете перераспространять ее и/или изменять
  ; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
  ; в каком она была опубликована Фондом свободного программного обеспечения;
  ; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
  ;
  ; Эта программа распространяется в надежде, что она будет полезной,
  ; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
  ; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
  ; общественной лицензии GNU.
  ;
  ; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
  ; вместе с этой программой. Если это не так, см.
  ; <https://www.gnu.org/licenses/>.
;

; <fold макроинструкции для вставки таблиц импорта — в соответствии со спецификацией формата исполняемого модуля>
    macro pelibrary [liblabel, libname] {
        forward
                    local       lnlabel
        if((defined liblabel#.redundant) & ~(liblabel#.redundant))
                        dd          rva(liblabel#.lookup)
                        dd          $00000000
                        dd          $00000000
                        dd          rva(lnlabel)
                        dd          rva(liblabel#.address)
        end if
                    liblabel#.referred = 1
        common
                    dd          $00000000, $00000000, $00000000, $00000000, $00000000
        forward
        if((defined liblabel#.redundant) & ~(liblabel#.redundant))
            lnlabel:    db          libname, $00
                        rb          rva($) and $01
        end if
    }

    macro peimport liblabel*, [funclabel, funcname] {
        common
                    rb          (-rva($)) and $07
        if(defined liblabel#.referred)
            liblabel#.lookup:
        forward
                    local       fnlabel
            if(used funclabel)
                if(funcname eqtype "")
                                dq          rva(fnlabel)
                else
                                dq          $8000000000000000+(funcname)
                end if
            end if
        common
            if($ > liblabel#.lookup)
                            dq          $0000000000000000
                            liblabel#.redundant = 0
            else
                            liblabel#.redundant = 1
            end if
            liblabel#.address:
        forward
            if(used funclabel)
                funclabel:
                if(funcname eqtype "")
                                dq          rva(fnlabel)
                else
                                dq          $8000000000000000+(funcname)
                end if
            end if
        common
            if(~(liblabel#.redundant))
                            dq          $0000000000000000
            end if
        forward
            if(used funclabel & funcname eqtype "")
                fnlabel:    dw          $0000
                            db          funcname, $00
                            rb          rva($) and 1
            end if
        common
        end if
    }
; </fold>