Page 2 of 7

Re: Порт LUA

Posted: Wed Mar 09, 2011 10:42 am
by Serge
Sorcerer

Файловые функции и strpbrk я добавлю.
void exit(int code){ _exit(code); }; Не posix, но сойдёт.
int remove(const char *path) ф. 70.8
int rename(const char *old, const char *new); Не поддерживается.
int system ( const char * command ); Не поддерживается.
clock strftime difftime на эти нет времени :roll: .

Re: Порт LUA

Posted: Wed Mar 09, 2011 10:57 am
by SoUrcerer
system - это разве не 70.7?
rename - это копирование файла в файл с новым именем, и удаление старого?

Re: Порт LUA

Posted: Wed Mar 09, 2011 11:33 am
by Serge
70.7 это exec(), а system() вызывает командный процессор которого у нас почти нет.
rename() для файлов и каталогов. Проще забить

Code: Select all

int rename(const char *old, const char *new)
{
   errno = EACCES; // или EPERM
   return -1;
}
Это наверное трансляция соответствующих команд LUA. Обычно программы такими вещами не занимаются.

Re: Порт LUA

Posted: Wed Mar 09, 2011 11:37 am
by SoUrcerer
Замечательно. Значит, в обозримом будущем Lua 5.2 заработает. Постараюсь запилить функции времени сам.
[offtop]А как насчет расширения функциональности argc/argv?[/offtop]
Да, это трансляция команд LUA, потому что функции вызываются из lua iolib

Re: Порт LUA

Posted: Wed Mar 09, 2011 11:49 am
by Serge
Sorcerer wrote:А как насчет расширения функциональности argc/argv?
В смысле деления командной строки на отдельные токены ? Код есть, добавлю со временем.

Re: Порт LUA

Posted: Wed Mar 09, 2011 12:32 pm
by SoUrcerer
kogemyaka wrote:Неплохо получилось, всё работает. Ещё бы можно было кнопки удалять и добавить работу со временем.
Кнопки удалять можно командой создания кнопок (по аналогии с системной функцией).
Стандартная функция lua для работы со временем только одна - clock, и вместо нее стоит заглушка, возвращающая 0. В принципе, можно добавить все системные функции Колибри, но я пока что не буду этого делать, а займусь lua 5.2.

Можно при желании добавить в lua возможность использования COFF-библиотек, и все Колибри-зависимые функции вынести туда.
Кстати, сейчас проверил работу с файлами, все ОК, только переводы строк в текстовых файлах распознаются дважды. Не работает только execute.

Re: Порт LUA

Posted: Wed Mar 09, 2011 12:59 pm
by Serge
Sorcerer
А ты можешь выложить скомпилированные объектники ? Проще будет найти, чего не хватает.

Re: Порт LUA

Posted: Wed Mar 09, 2011 1:17 pm
by SoUrcerer
Я просто беру lua52 с официального сайта, и собираю. Никаких правок не вносил в эту версию.
С menuetlibc собиралось только после правки макросов va и создания заглушки для signal (однако падало при вызове argv, и иногда в эмуляторе).

Re: Порт LUA

Posted: Wed Mar 09, 2011 1:21 pm
by Serge
Спасибо, посмотрю вечером.
Update.
Почти добил. Остались две функции clock() и strftime().

Re: Порт LUA

Posted: Thu Mar 10, 2011 8:12 am
by Serge
Sorcerer

Сделал заглушки на некоторые функции. Удалось собрать. При запуске без параметров выводит информационную строку и корректно завершается. Что ещё с ним можно делать я не знаю :oops: .

Update.
kos.txt - новый скрипт для ld. Линковать рекомендую с опцией -s - убирает отладочный мусор.
Для компиляции gcc -D__DYNAMIC_REENT__ -fomit-frame-pointer
дополнительно -ffast-math если проблемы с мат. функциями
-fno-builtin-printf больше не нужна

Re: Порт LUA

Posted: Thu Mar 10, 2011 8:40 am
by SoUrcerer
:wink: Замечательно. Работает запуск lua [имя_файла]. Из-за отсутствия кода разбора параметров другие ключи бесполезны (например, ключ e).
Проверяю сейчас работоспособность, действительно, работает стабильно. Размер бинарника примерно такой же, как у версии menuetlibc. Файловые операции работают.
Что и требовалось доказать, не работают: os.clock, os.difftime, os.time, os.date, os.rename, os.execute
Из всего этого можно с легкостью проститься лишь с os.rename, остальные функции нужны.
Я правильно понимаю, что я могу создать инклуд-файл со своими версиями clock(), difftime() и так далее, подключить их к lua.c, и функции будут переобъявлены? И если все заработает, это можно будет включить в библиотеку?

Для проверки работы lua я всегда держу под рукой простой скрипт 1.lua, который работает на большинстве версий lua:

Code: Select all

for i=1,10 do
 print ("Number is "..i)
end

Re: Порт LUA

Posted: Thu Mar 10, 2011 9:22 am
by Serge
Sorcerer
difftime должна работать. Там ничего нет:

Code: Select all

double
_DEFUN (difftime, (tim1, tim2),
	time_t tim1 _AND
	time_t tim2)
{
  return (double)(tim1 - tim2);
}
Я правильно понимаю, что я могу создать инклуд-файл со своими версиями clock(), difftime() и так далее, подключить их к lua.c, и функции будут переобъявлены? И если все заработает, это можно будет включить в библиотеку?
Конечно.

Re: Порт LUA

Posted: Thu Mar 10, 2011 12:26 pm
by SoUrcerer
Ну, тогда и os.clock работает :mrgreen: Правда, одно и то же число всегда выводит.

Re: Порт LUA

Posted: Thu Mar 10, 2011 1:05 pm
by Serge
clock должна показывать ипользованное процесорное время от запуска программы. Можно заменить на 26.9 и считать разницу от запуска при условной загрузке 100%.

Re: Порт LUA

Posted: Thu Mar 10, 2011 7:13 pm
by SoUrcerer
При запуске без параметров у меня lua, собранная из тех же [только без перенаправления ввода-вывода] исходников, переходит в режим командного интерпретатора и падает. Наверное, это не очень страшно.
И библиотеки почему-то не хотят прикручиваться пока что.