Порт LUA (5.2.0)

...
  • Пока решил не заморачиваться с перенаправлением стандартного вывода в консоль (боюсь, что сейчас не хватит теоретических знаний для таких правок в libc). Вместо этого немного расширил базовую библиотеку lua для поддержки функций Колибри. Размер исполняемого файла практически не увеличился (менее чем на килобайт).

    Добавил следующие команды, аналогичные системным функциям:
    redraw(do) -- перерисовать окно. do= 1 - начать, do=2 - закончить
    window(x,y,xsize,ysize,color1,color2,color3) -- определить окно, аналогично системной функции 0
    textout(x,y,color,text) -- вывести текст. Здесь text это просто строковая переменная
    makebutton(x,y,xsize,ysize,id,color) --определить кнопку с кодом id
    event=checkevent() -- проверка событий, в переменной event число, определеяющее тип события
    event=waitevent() -- ожидание событий
    key=getkey() -- получить код нажатой клавиши
    button=getbutton() --получить код нажатой кнопки

    Не очень густо, но для простых программ, не использующих графику, хватит.
    Полное руководство по lua 4.0 есть тут.
    Когда будет настроение, перенесу в Колибри и lua 5.1, тем более формат библиотек незначительно поменялся, то есть эти функции по-прежнему будут доступны.

    В архиве скомпилированный интерпретатор lua 4 с поддержкой некоторых функций Колибри, и тестовая программа 1.lua (она рисует окно с кнопкой, и при нажатии на кнопку ее цвет меняется).
    Отныне в самой Колибри можно писать программы не только на FASM. Правда, быстродействие программ на lua хромает, но для brainware достаточно.
    Attachments
    lua-lib.7z (47.58 KiB)
    Downloaded 483 times
  • Внезапно, попробовал свои правила сборки lua 4 на последней на сегодняшний день версии lua - lua 5.2a.
    Кто-то заказывал lua в хотелках, помнится? Можете расписаться в получении. Новее некуда. Пока что не перенес библиотеку Колибри (см. предыдущий пост), но это дело времени.

    UPD: Ох, поспешишь - людей насмешишь. :( В этой версии почему-то поломалось открытие файлов, работают только команды, полученные через опцию командной строки "e". Как только исправлю, выложу.
    Attachments
    lua52.7z (63.25 KiB)
    Downloaded 466 times
  • Написал простой калькулятор для демонстрации возможностей lua в Колибри. Использовать вместе с интерпретатором lua 4.0, слинкованным с библиотекой Колибри.

    *чуть было не решил, что библиотека работы со строками не слинковалась, пока писал программу... посмотрел в исходники - а оказывается команды lua 4 и lua 5 очень сильно отличаются. будьте внимательны!*
    Attachments
    calc.lua.7z (964 Bytes)
    Downloaded 478 times
  • И со вторым интерпретатором поздравляю. Кажется это была чья-то хотелка, получить LUA в Колибри.

    Да и не забываем обновлять http://wiki.kolibrios.org/wiki/Changes_in_0770
  • Неплохо получилось, всё работает. Ещё бы можно было кнопки удалять и добавить работу со временем.

    А вообще трудно было его портировать?
  • здорово,что работает.Увы,работает не везде хорошо из-за проблем с crt или чем-то связанным.
    Если будет время,и это действительно нужно,могу добавить функции.
    С менуэтлибц портировать было очень легко-исправить ссылки на часть функции,подправить заглушки для сигналов и перенаправить вывод. Пробовал использовать ньюлиб,но слишком много функций не хватает пока что-вроде в основном математика.Правда,я мало времени этому уделил.
  • Sorcerer

    Каких функций не хватает ? Кинь лог линковки.
  • Вот так:

    Code: Select all

    lauxlib.o:lauxlib.c:(.text+0x4d2): undefined reference to `__srget_r'
    lauxlib.o:lauxlib.c:(.text+0x520): undefined reference to `__srget_r'
    lauxlib.o:lauxlib.c:(.text+0x554): undefined reference to `__srget_r'
    lauxlib.o:lauxlib.c:(.text+0x589): undefined reference to `__srget_r'
    lauxlib.o:lauxlib.c:(.text+0x6cc): undefined reference to `freopen'
    lauxlib.o:lauxlib.c:(.text+0x7d9): undefined reference to `fread'
    ldblib.o:ldblib.c:(.text+0xc0f): undefined reference to `fgets'
    ldo.o:ldo.c:(.text+0x1cf): undefined reference to `setjmp'
    ldo.o:ldo.c:(.text+0x436): undefined reference to `longjmp'
    liolib.o:liolib.c:(.text+0x2b1): undefined reference to `tmpfile'
    liolib.o:liolib.c:(.text+0x36f): undefined reference to `fgets'
    liolib.o:liolib.c:(.text+0x4a4): undefined reference to `__srget_r'
    liolib.o:liolib.c:(.text+0x4f7): undefined reference to `fread'
    liolib.o:liolib.c:(.text+0x57f): undefined reference to `fscanf'
    liolib.o:liolib.c:(.text+0x5e5): undefined reference to `fread'
    liolib.o:liolib.c:(.text+0x6f3): undefined reference to `_popen'
    liolib.o:liolib.c:(.text+0xed6): undefined reference to `setvbuf'
    liolib.o:liolib.c:(.text+0xf59): undefined reference to `ftell'
    liolib.o:liolib.c:(.text+0xf92): undefined reference to `_pclose'
    lmathlib.o:lmathlib.c:(.text+0x204): undefined reference to `srand'
    lmathlib.o:lmathlib.c:(.text+0x209): undefined reference to `rand'
    lmathlib.o:lmathlib.c:(.text+0x31c): undefined reference to `rand'
    lmathlib.o:lmathlib.c:(.text+0x4af): undefined reference to `modf'
    lmathlib.o:lmathlib.c:(.text+0x62a): undefined reference to `fmod'
    lmathlib.o:lmathlib.c:(.text+0x756): undefined reference to `atan2'
    loadlib.o:loadlib.c:(.text+0x3ee): undefined reference to `GetLastError@0'
    loadlib.o:loadlib.c:(.text+0x40e): undefined reference to `FormatMessageA@28'
    loadlib.o:loadlib.c:(.text+0x4e8): undefined reference to `LoadLibraryExA@12'
    loadlib.o:loadlib.c:(.text+0x522): undefined reference to `GetProcAddress@8'
    loadlib.o:loadlib.c:(.text+0x86e): undefined reference to `GetModuleFileNameA@12'
    loadlib.o:loadlib.c:(.text+0xa86): undefined reference to `FreeLibrary@4'
    loslib.o:loslib.c:(.text+0x44): undefined reference to `tmpnam'
    loslib.o:loslib.c:(.text+0x2e0): undefined reference to `rename'
    loslib.o:loslib.c:(.text+0x316): undefined reference to `remove'
    loslib.o:loslib.c:(.text+0x3c2): undefined reference to `exit'
    loslib.o:loslib.c:(.text+0x3e0): undefined reference to `system'
    loslib.o:loslib.c:(.text+0x448): undefined reference to `difftime'
    loslib.o:loslib.c:(.text+0x704): undefined reference to `strftime'
    loslib.o:loslib.c:(.text+0x752): undefined reference to `clock'
    lstrlib.o:lstrlib.c:(.text+0xa2b): undefined reference to `strpbrk'
    lua.o:lua.c:(.text+0x8e): undefined reference to `freopen'
    lua.o:lua.c:(.text+0xa8): undefined reference to `freopen'
    lua.o:lua.c:(.text+0xc2): undefined reference to `freopen'
    lua.o:lua.c:(.text+0x242): undefined reference to `signal'
    lua.o:lua.c:(.text+0x25f): undefined reference to `signal'
    lua.o:lua.c:(.text+0x2c3): undefined reference to `signal'
    lua.o:lua.c:(.text+0x473): undefined reference to `fgets'
    lua.o:lua.c:(.text+0xbcf): undefined reference to `_fileno'
    lvm.o:lvm.c:(.text+0x3b6): undefined reference to `strcoll'
    
  • Часть функций я уже добавил в последнюю сборку (fread fscanf ftell srand rand atan2 fmod modf strcoll setjmp longjmp __srget __srget_r есть точно).
  • Странно, беру dev-libs из темы Mesa, инклуды из 1902 ревизии, заново компилирую всё:
    $ i586-mingw32msvc-gcc -c *.c -fno-builtin-printf -I include
    Затем линкую:
    $i586-mingw32msvc-ld -o lua.kex -nostdlib -static -T kos.ld --image-base 0 --stack 0x100000 lapi.o lauxlib.o lbaselib.o lbitlib.o lcode.o lcorolib.o lctype.o ldblib.o ldebug.o ldo.o ldump.o lfunc.o lgc.o linit.o liolib.o llex.o lmathlib.o lmem.o loadlib.o lobject.o lopcodes.o loslib.o lparser.o lstate.o lstring.o lstrlib.o ltable.o ltablib.o ltm.o lua.o lundump.o lvm.o lzio.o libc.a

    Те же самые ошибки %) А размер нового libc.a совпадает до байта с тем, что был раньше.
  • Sorcerer
    Было dev-libs-02.03.2011.7z: libc.a 02.03.2011 356 596 байт
    стало dev-libs-08.03.2011.7z: libc.a 08.03.2011 363 568 байт
  • Моя вина, накосячил где-то. Теперь поменьше список (обновлено):

    Code: Select all

    freopen
    fgets
    tmpfile
    fscanf
    ftell
    setvbuf
    system
    remove
    rename
    tmpnam
    clock
    strftime
    difftime
    exit
    strpbrk
    
    Смотрел на код newlib, есть ли смысл мне ковыряться в направлении реализации этих функций, генерируя не ахти какой по качеству код?
    Last edited by SoUrcerer on Wed Mar 09, 2011 10:19 am, edited 1 time in total.
  • Sorcerer wrote:

    Code: Select all

    GetModuleFileNameA@12
    GetLastError@0
    FormatMessageA@28
    FreeLibrary@4
    LoadLibraryExA@12
    GetProcAddress@8
    
    Это ф-ции WinAPI. Есть ли они в коде? Или может что-то компилятор (линковщик) из других библиотек подтягивает?
  • Ох я и даю, lua компилировался с целью windows, а не ansi. Спасибо, сейчас поковыряюсь еще..
  • Who is online

    Users browsing this forum: No registered users and 4 guests