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. Тем не менее, причину странного поведения печаталок хотелось бы выяснить.
tinypy.7z (42.67 KiB)
Downloaded 350 times