Python для KolibriOS
-
Поскольку схема тут не прижилась, решил я лучше поддержать питон. В чем нужна помощь сейчас?
Есть недоделанный шаблон модуля на FASM (вечером залью на SVN), хочется для начала запустить его.
После этого помощь на его основе писать разные модули - нужно обсудить, какие именно. Навскидку, в таком порядке:
а) Файловый ввод-вывод.
б) Графический интерфейс.
в) ...
В перспективе ещё: слинковать VM в DLL и найти способ подгружать модули из отдельных файлов, не линкуя их с интерпретатором.
В общем, планов громадьё
После этого помощь на его основе писать разные модули - нужно обсудить, какие именно. Навскидку, в таком порядке:
а) Файловый ввод-вывод.
б) Графический интерфейс.
в) ...
В перспективе ещё: слинковать VM в DLL и найти способ подгружать модули из отдельных файлов, не линкуя их с интерпретатором.
В общем, планов громадьё
ок. вечером посмотрим.
реквестую модуль re =)
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Кандидаты в президенты модули:
random: https://bitbucket.org/urielka/tinypy/sr ... es/random/
A файл mymain.c стоит все-таки удалить
random: https://bitbucket.org/urielka/tinypy/sr ... es/random/
A файл mymain.c стоит все-таки удалить
Сделал чтение и запись в файл. Прошу прощения, что на C - чтобы написать даже такой несложный модуль на FASM, мне нужен большой непрерывный кусок свободного времени, а его нет
Небольшой пример идёт в комплекте (test.py).
Подробнее:
Открытие файла: 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.
Небольшой пример идёт в комплекте (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.
Отладил модуль на FASM, экспортирует функцию debug_print(s), выводящую строку на доску отладки.
Выложил на SVN документ, он же примерный план выступления на CC: http://kolibrios.org/repos/programs/dev ... olibri.txt. Про модуль kolibri допишу, как только доделаю вывод окна и сеть. Посоветуйте - о чём стоит рассказать подробнее? Может быть, о чём-то стоит умолчать?
Выложил на SVN документ, он же примерный план выступления на CC: http://kolibrios.org/repos/programs/dev ... olibri.txt. Про модуль kolibri допишу, как только доделаю вывод окна и сеть. Посоветуйте - о чём стоит рассказать подробнее? Может быть, о чём-то стоит умолчать?
Что, так и не удалось добиться работы командной строки в menuetlibc? Даже установка нормальных опций gcc, типа -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2, не помогает?
Сделаем мир лучше!
Не помогает, в main() передаётся argc = 268533588.
Неужели даже если сделать find /path/to/program/source -name '*.o' | rm -rf - чтобы точно всё было пересобрано - явно добавить в $(MENUETLIBC)/makefiles/Makefile_for_program указанные опции в правилах .c.o, .cpp.o, .cc.o и пересобрать, то gcc всё равно будет компилировать кошмарный код типа
? Это взято из viewtopic.php?p=31720#p31720 , если что.
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
Сделаем мир лучше!
Удалить *.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 выглядит очень похоже.
Пересобрал 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 выглядит очень похоже.
Дополнительно поставить -march=i486 не помогает?
Сделаем мир лучше!
Добавил march=i486, не помогает.
Всё чудесатее и чудесатее.
Ставлю в main печаталки:
con_printf("argc=%d\n", argc);
con_printf("argv0=%s\n", argv[0]);
выводит правильный argc и мусор вместо argv[0]. Но если первую строку закомментировать, вторая отрабатывает правильно.
Что бы это могло означать?
Всё чудесатее и чудесатее.
Ставлю в main печаталки:
con_printf("argc=%d\n", argc);
con_printf("argv0=%s\n", argv[0]);
выводит правильный argc и мусор вместо argv[0]. Но если первую строку закомментировать, вторая отрабатывает правильно.
Что бы это могло означать?
Запустить в qemu образ колибри с параметрами -s, подключиться с gdb, запустить программу, остановить на этой стадии, проинспектировать память.
http://www.linuxquestions.org/questions ... db-627729/
http://www.delorie.com/gnu/docs/gdb/gdb_56.html
http://www.linuxquestions.org/questions ... db-627729/
http://www.delorie.com/gnu/docs/gdb/gdb_56.html
Изменил порядок инициализации, теперь TinyPy можно запускать из shell. Тем не менее, причину странного поведения печаталок хотелось бы выяснить.
Who is online
Users browsing this forum: No registered users and 1 guest