Добро пожаловать!

Я Дож, программирование — моё хобби. По мере того, как я осваиваю что-то новое, стараюсь об этом написать пост.
На текущий момент в блоге затронуты следующие темы: vim, free pascal, lisp, forth, m4
Занимаюсь разработкой своего языка под названием DEmbro, подбробней: wiki и svn
Для постов, не связанных с программированием, у меня есть отдельное жж.

марта 30, 2011

SetPixelFormat 3221684230

Пытаюсь написать на DEmbro OpenGL-приложение.

Функция SetPixelFormat возвращает ошибку, GetLastError сообщет, что это ошибка C0070006 (или 3221684230 в decimal), а после чтения форумов узнал, что эта ошибка возникает в системе с nVidia видеокартой, если handle окна не принадлежит процессу (или процесс не имеет должных прав).

Это весьма печально, потому что я не понимаю, почему так должно получаться. Если написать на паскале соответствующий код, то всё будет нормально. Код на DEmbro ничем особым с точки зрения системы отличаться не должен. Единственное отличие -- то, что вызов системных функций происходит из асм кода, и тут что-то могло всплыть с правами, но эта теория выглядит не убедительно.

Самое обидное, что эта ошибка возникает именно в OpenGL и именно с nVidia-видеокартой. Т.е. если бы я использовал DirectX или ATI-видеокарту, то такой ошибки не возникло бы.

[UPDATE] Ура, справился с этим. Всегда так получается, что пока я наедине с собой ищу ошибку несколько часов, ничего не выходит. Как только опишу её кому-то — сразу осеняет и проблема решается. Пора спать.


Читать дальше......

марта 20, 2011

DEmbro: документация, плавающая точка, и конфигурируемость

Написал программу, генерирующую хелп в вики из документации в исходниках. Теперь
я могу прямо под функцией в коде описать что она делает, и потом документация
на неё автоматически может быть сгенерирвана в нужный формат. В дальнейшем можно
будет писать документации сразу на нескольких языках.

Пока что с самой документацией бардка, не успел ещё всё оформить.

Решил, что для чисел с плавающей точкой тоже, как и строкам, нужен отдельный стек.
В качестве этого отдельного стека я выбрал стек сопроцессора — получилось так,
программирование плавающих вычислений на DEmbro почти эквивалентно программированию
на ассемблере. Может показаться, что это как-то что-то усложняет, но это не так —
ассемблер сопроцессора очень гармонично вписывается в стековый стиль
программирования на DEmbro.

Осуществил свою главную задумку: теперь при создании DEmbro-машины доступно около
четырёх команд. Две из них служат для того, чтобы подключить остальные встроенные
команды. Это позволяет программисту самому решить какое подмножество команд DEmbro
выбрать для программирования. По умолчанию подключается файл «system.de», который
подключает весь функционал ядра.

Образцовым теперь выглядит файл для плавающих вычислений — он подключает команды
ядра, тут же содержит документацию на эти команды (не на все, но это вопрос
времени), и реализует недостающие полезные команды.


Читать дальше......

марта 01, 2011

Простейшие примеры работы со строками

Всё перечисленное уже работает, за исключением unicode->cp1251.


" expe" " rience" str+ // сложили две строки, получили experience
2 4 str-cut // оставили четыре символа, начиная со второго, получили peri (нумерация с нуля)
bdup str+ // сложили строку с самой собой, получили periperi
" rip" str^ // определяем символ, начиная с которого идёт первое вхождение rip в строке, получаем число 2
str# // узнали длину строки rip, т.е. 3
// Итого, на обычном стеке: 2 3
// На стеке строк: " periperi" " rip"
bdrop // скидывем строку rip со стека
str-del // удаляем три символа, начиная со второго, получаем peeri
utf8->unicode unicode->cp1251 // перекодировываем строку из utf8 в cp1251
" peeri" str= // проверяем равны ли строки, в данном случае получаем true
." Hello world!"cr // печатаем на консоль строку


Читать дальше......

Постоянные читатели

Обо мне

Моя фотография
Мой e-mail: vitek_03(at)mail(dot)ru