Page 2 of 9
Re: Python для KolibriOS
Posted: Wed May 04, 2011 7:39 am
by XVilka
Поскольку схема тут не прижилась, решил я лучше поддержать питон. В чем нужна помощь сейчас?
Re: Python для KolibriOS
Posted: Wed May 04, 2011 9:20 am
by Jaeger
Есть недоделанный шаблон модуля на FASM (вечером залью на SVN), хочется для начала запустить его.
После этого помощь на его основе писать разные модули - нужно обсудить, какие именно. Навскидку, в таком порядке:
а) Файловый ввод-вывод.
б) Графический интерфейс.
в) ...
В перспективе ещё: слинковать VM в DLL и найти способ подгружать модули из отдельных файлов, не линкуя их с интерпретатором.
В общем, планов громадьё

Re: Python для KolibriOS
Posted: Wed May 04, 2011 9:27 am
by XVilka
ок. вечером посмотрим.
Re: Python для KolibriOS
Posted: Wed May 04, 2011 10:32 am
by Gluk
реквестую модуль re =)
Re: Python для KolibriOS
Posted: Thu May 05, 2011 9:21 am
by XVilka
Кандидаты в
президенты модули:
random:
https://bitbucket.org/urielka/tinypy/sr ... es/random/
A файл mymain.c стоит все-таки удалить
Re: Python для KolibriOS
Posted: Tue Jul 19, 2011 1:04 am
by Jaeger
Сделал чтение и запись в файл. Прошу прощения, что на C - чтобы написать даже такой несложный модуль на FASM, мне нужен большой непрерывный кусок свободного времени, а его нет
Небольшой пример идёт в комплекте (test.py).
Подробнее:
Spoiler:
Вначале идёт строка "import kolibri" - подключение модуля.
Открытие файла: f=kolibri.open(<filename>, <mode>)
filename - строка с полным именем файла.
mode - режим доступа(строка), первый символ 'r' (читать), 'w' (писать сначала), или 'a' (продолжить запись).
В f записывается ссылка на файловый объект. У него есть следуюзие атрибуты:
- f.write(obj) - записать строковое представление объекта в файл.
- f.writelines(list) - записать строковое представление объектов их списка в файл. Разделителя строк нет, объекты пишутся просто подряд.
- f.read() - прочитать весь файл в строку.
- f.name - имя файла
- f.pos - текущее положение в файле
- f.size - размер файла
- f.mode - режим доступа
- f.closed - tp_True, если файл был закрыт, иначе tp_False.
Re: Python для KolibriOS
Posted: Wed Aug 17, 2011 11:45 pm
by Jaeger
Отладил модуль на FASM, экспортирует функцию debug_print(s), выводящую строку на доску отладки.
Выложил на SVN документ, он же примерный план выступления на CC:
http://kolibrios.org/repos/programs/dev ... olibri.txt. Про модуль kolibri допишу, как только доделаю вывод окна и сеть. Посоветуйте - о чём стоит рассказать подробнее? Может быть, о чём-то стоит умолчать?
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 12:00 am
by CleverMouse
Что, так и не удалось добиться работы командной строки в menuetlibc? Даже установка нормальных опций gcc, типа -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2, не помогает?
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 11:25 am
by Jaeger
Не помогает, в main() передаётся argc = 268533588.
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 2:29 pm
by CleverMouse
Неужели даже если сделать find /path/to/program/source -name '*.o' | rm -rf - чтобы точно всё было пересобрано - явно добавить в $(MENUETLIBC)/makefiles/Makefile_for_program указанные опции в правилах .c.o, .cpp.o, .cc.o и пересобрать, то gcc всё равно будет компилировать кошмарный код типа
Code: Select all
seg000:00000371 lea ecx, [esp+arg_0]
seg000:00000375 and esp, 0FFFFFFF0h
seg000:00000378 push dword ptr [ecx-4]
seg000:0000037B push ebp
seg000:0000037C mov ebp, esp
seg000:0000037E push edi
seg000:0000037F push esi
seg000:00000380 push ebx
seg000:00000381 push ecx
seg000:00000382 sub esp, 14h
seg000:00000385 mov edi, [ecx]
seg000:00000387 mov ebx, [ecx+4]
seg000:0000038A push ds:off_1660
seg000:00000390 call sub_1D3
; после этого якобы edi = argc, ebx = argv, хотя при нормальной компиляции [ebp+8] = argc, [ebp+12] = argv
? Это взято из
viewtopic.php?p=31720#p31720 , если что.
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 3:58 pm
by Jaeger
Удалить *.o не помогло.
Пересобрал menuetlibc с этими же опциями - теперь tinypy не компилится:
../../libraries/menuetlibc/linuxtools/mgcc tpmain.c tpmain.o -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2
tpmain.c:1:0: error: -mpreferred-stack-boundary=2 is not between 4 and 12
tpmain.c:1:0: error: -mincoming-stack-boundary=2 is not between 4 and 12
make: *** [tpmain.o] Error 1
Не нашёл в теме этого листинга, но функция main() в выводе objdump -S tpmain.o выглядит очень похоже.
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 4:27 pm
by CleverMouse
Дополнительно поставить -march=i486 не помогает?
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 11:30 pm
by Jaeger
Добавил march=i486, не помогает.
Всё чудесатее и чудесатее.
Ставлю в main печаталки:
con_printf("argc=%d\n", argc);
con_printf("argv0=%s\n", argv[0]);
выводит правильный argc и мусор вместо argv[0]. Но если первую строку закомментировать, вторая отрабатывает правильно.
Что бы это могло означать?
Re: Python для KolibriOS
Posted: Thu Aug 18, 2011 11:34 pm
by XVilka
Запустить в qemu образ колибри с параметрами -s, подключиться с gdb, запустить программу, остановить на этой стадии, проинспектировать память.
http://www.linuxquestions.org/questions ... db-627729/
http://www.delorie.com/gnu/docs/gdb/gdb_56.html
Re: Python для KolibriOS
Posted: Fri Aug 19, 2011 12:12 am
by Jaeger
Изменил порядок инициализации, теперь TinyPy можно запускать из shell. Тем не менее, причину странного поведения печаталок хотелось бы выяснить.