Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 13, 2017 2:13 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 88 сообщений ]  На страницу 1 2 3 4 5 6 След.
Автор Сообщение
 Заголовок сообщения: Порт LUA (5.2.0)
СообщениеДобавлено: Ср фев 16, 2011 10:53 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Новые версии на последних страницах. Текущая на сегодня (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.

Спойлер: Показать
Не проверял работу с файлами, но, по идее, все должно работать как положено.
Чтобы проверить, как работает интерпретатор, можно запустить его так:
lua -e "print ('Hello, world!')"
Никаких сообщений выведено не будет, окно не создается. Зато создаются три файла - stdin.log, stdout.log и stderr.log. В stdout.log и будет "Hello, world!"


Вложения:
lua.7z [46.65 КБ]
168 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Чт фев 17, 2011 12:17 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Пока решил не заморачиваться с перенаправлением стандартного вывода в консоль (боюсь, что сейчас не хватит теоретических знаний для таких правок в 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 достаточно.


Вложения:
lua-lib.7z [47.58 КБ]
139 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Чт фев 17, 2011 12:35 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Внезапно, попробовал свои правила сборки lua 4 на последней на сегодняшний день версии lua - lua 5.2a.
Кто-то заказывал lua в хотелках, помнится? Можете расписаться в получении. Новее некуда. Пока что не перенес библиотеку Колибри (см. предыдущий пост), но это дело времени.

UPD: Ох, поспешишь - людей насмешишь. :( В этой версии почему-то поломалось открытие файлов, работают только команды, полученные через опцию командной строки "e". Как только исправлю, выложу.


Вложения:
lua52.7z [63.25 КБ]
119 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Чт фев 17, 2011 10:14 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Написал простой калькулятор для демонстрации возможностей lua в Колибри. Использовать вместе с интерпретатором lua 4.0, слинкованным с библиотекой Колибри.

*чуть было не решил, что библиотека работы со строками не слинковалась, пока писал программу... посмотрел в исходники - а оказывается команды lua 4 и lua 5 очень сильно отличаются. будьте внимательны!*


Вложения:
calc.lua.7z [964 байт]
142 скачивания
Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Чт фев 24, 2011 3:10 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 974
И со вторым интерпретатором поздравляю. Кажется это была чья-то хотелка, получить LUA в Колибри.

Да и не забываем обновлять http://wiki.kolibrios.org/wiki/Changes_in_0770


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Вт мар 08, 2011 7:09 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 10, 2009 7:56 pm
Сообщения: 97
Неплохо получилось, всё работает. Ещё бы можно было кнопки удалять и добавить работу со временем.

А вообще трудно было его портировать?


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Вт мар 08, 2011 9:05 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
здорово,что работает.Увы,работает не везде хорошо из-за проблем с crt или чем-то связанным.
Если будет время,и это действительно нужно,могу добавить функции.
С менуэтлибц портировать было очень легко-исправить ссылки на часть функции,подправить заглушки для сигналов и перенаправить вывод. Пробовал использовать ньюлиб,но слишком много функций не хватает пока что-вроде в основном математика.Правда,я мало времени этому уделил.


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Вт мар 08, 2011 10:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Sorcerer

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


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Вт мар 08, 2011 11:19 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Вот так:
Код:
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'


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Вт мар 08, 2011 11:54 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Часть функций я уже добавил в последнюю сборку (fread fscanf ftell srand rand atan2 fmod modf strcoll setjmp longjmp __srget __srget_r есть точно).


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Ср мар 09, 2011 12:16 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Странно, беру 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 совпадает до байта с тем, что был раньше.


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Ср мар 09, 2011 1:20 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
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 байт


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Ср мар 09, 2011 9:35 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Моя вина, накосячил где-то. Теперь поменьше список (обновлено):
Код:
freopen
fgets
tmpfile
fscanf
ftell
setvbuf
system
remove
rename
tmpnam
clock
strftime
difftime
exit
strpbrk


Смотрел на код newlib, есть ли смысл мне ковыряться в направлении реализации этих функций, генерируя не ахти какой по качеству код?


Последний раз редактировалось SoUrcerer Ср мар 09, 2011 10:19 am, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Ср мар 09, 2011 9:43 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Sorcerer писал(а):
Код:
GetModuleFileNameA@12
GetLastError@0
FormatMessageA@28
FreeLibrary@4
LoadLibraryExA@12
GetProcAddress@8


Это ф-ции WinAPI. Есть ли они в коде? Или может что-то компилятор (линковщик) из других библиотек подтягивает?


Вернуться к началу
 Заголовок сообщения: Re: Порт LUA
СообщениеДобавлено: Ср мар 09, 2011 10:16 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Ох я и даю, lua компилировался с целью windows, а не ansi. Спасибо, сейчас поковыряюсь еще..


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 88 сообщений ]  На страницу 1 2 3 4 5 6 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB