Board.KolibriOS.org http://board.kolibrios.org/ |
|
Порт LUA (5.2.0) http://board.kolibrios.org/viewtopic.php?f=45&t=1663 |
Page 1 of 6 |
Author: | SoUrcerer [ Wed Feb 16, 2011 10:53 am ] | ||
Post subject: | Порт LUA (5.2.0) | ||
Новые версии на последних страницах. Текущая на сегодня (19.12.2011) - Lua 5.2.0 с командами ввода-вывода через консоль Портирую Lua потихоньку. Начинать решил с малого, с одной из устаревших версий - Lua 4.0. Особой разницы между Lua 4 и Lua 5.1 (и даже Lua 5.2a) нет, но код Lua 4 на самом деле несколько понятнее, поэтому сначала потренируюсь на Lua 4, а затем, глядишь, и до Lua 5.1 доберусь. Вызов интерпретатора обычный: lua [имя программы] или же lua -e "код для выполнения" Пока что не работает вывод на консоль (потому что stdin/stdout пока что не знают про console.obj, но это пока что). Поэтому stdout идет в stdout.log, а stdin идет из stdin.log. Spoiler: Show
|
Author: | SoUrcerer [ Thu Feb 17, 2011 12:17 pm ] | ||
Post subject: | Re: Порт LUA | ||
Пока решил не заморачиваться с перенаправлением стандартного вывода в консоль (боюсь, что сейчас не хватит теоретических знаний для таких правок в 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 достаточно.
|
Author: | SoUrcerer [ Thu Feb 17, 2011 12:35 pm ] | ||
Post subject: | Re: Порт LUA | ||
Внезапно, попробовал свои правила сборки lua 4 на последней на сегодняшний день версии lua - lua 5.2a. Кто-то заказывал lua в хотелках, помнится? Можете расписаться в получении. Новее некуда. Пока что не перенес библиотеку Колибри (см. предыдущий пост), но это дело времени. UPD: Ох, поспешишь - людей насмешишь. ![]()
|
Author: | SoUrcerer [ Thu Feb 17, 2011 10:14 pm ] | ||
Post subject: | Re: Порт LUA | ||
Написал простой калькулятор для демонстрации возможностей lua в Колибри. Использовать вместе с интерпретатором lua 4.0, слинкованным с библиотекой Колибри. *чуть было не решил, что библиотека работы со строками не слинковалась, пока писал программу... посмотрел в исходники - а оказывается команды lua 4 и lua 5 очень сильно отличаются. будьте внимательны!*
|
Author: | Asper [ Thu Feb 24, 2011 3:10 pm ] |
Post subject: | Re: Порт LUA |
И со вторым интерпретатором поздравляю. Кажется это была чья-то хотелка, получить LUA в Колибри. Да и не забываем обновлять http://wiki.kolibrios.org/wiki/Changes_in_0770 |
Author: | kogemyaka [ Tue Mar 08, 2011 7:09 pm ] |
Post subject: | Re: Порт LUA |
Неплохо получилось, всё работает. Ещё бы можно было кнопки удалять и добавить работу со временем. А вообще трудно было его портировать? |
Author: | SoUrcerer [ Tue Mar 08, 2011 9:05 pm ] |
Post subject: | Re: Порт LUA |
здорово,что работает.Увы,работает не везде хорошо из-за проблем с crt или чем-то связанным. Если будет время,и это действительно нужно,могу добавить функции. С менуэтлибц портировать было очень легко-исправить ссылки на часть функции,подправить заглушки для сигналов и перенаправить вывод. Пробовал использовать ньюлиб,но слишком много функций не хватает пока что-вроде в основном математика.Правда,я мало времени этому уделил. |
Author: | Serge [ Tue Mar 08, 2011 10:35 pm ] |
Post subject: | Re: Порт LUA |
Sorcerer Каких функций не хватает ? Кинь лог линковки. |
Author: | SoUrcerer [ Tue Mar 08, 2011 11:19 pm ] |
Post subject: | Re: Порт LUA |
Вот так: Code: lauxlib.o:lauxlib.c:(.text+0x4d2): undefined reference to `__srget_r' |
Author: | Serge [ Tue Mar 08, 2011 11:54 pm ] |
Post subject: | Re: Порт LUA |
Часть функций я уже добавил в последнюю сборку (fread fscanf ftell srand rand atan2 fmod modf strcoll setjmp longjmp __srget __srget_r есть точно). |
Author: | SoUrcerer [ Wed Mar 09, 2011 12:16 am ] |
Post subject: | Re: Порт LUA |
Странно, беру 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 совпадает до байта с тем, что был раньше. |
Author: | Serge [ Wed Mar 09, 2011 1:20 am ] |
Post subject: | Re: Порт LUA |
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 байт |
Author: | SoUrcerer [ Wed Mar 09, 2011 9:35 am ] |
Post subject: | Re: Порт LUA |
Моя вина, накосячил где-то. Теперь поменьше список (обновлено): Code: freopen Смотрел на код newlib, есть ли смысл мне ковыряться в направлении реализации этих функций, генерируя не ахти какой по качеству код? |
Author: | Albom [ Wed Mar 09, 2011 9:43 am ] |
Post subject: | Re: Порт LUA |
Sorcerer wrote: Code: GetModuleFileNameA@12 Это ф-ции WinAPI. Есть ли они в коде? Или может что-то компилятор (линковщик) из других библиотек подтягивает? |
Author: | SoUrcerer [ Wed Mar 09, 2011 10:16 am ] |
Post subject: | Re: Порт LUA |
Ох я и даю, lua компилировался с целью windows, а не ansi. Спасибо, сейчас поковыряюсь еще.. |
Page 1 of 6 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |