Common Lisp GUI Программирование с помощью системных вызовов - PullRequest
2 голосов
/ 15 марта 2009

Может кто-нибудь рассказать мне об использовании (Steel Bank) Common Lisp для написания графических интерфейсов через системные вызовы? Я знаю, что есть некоторые библиотеки, но это упражнение по изучению языка, поэтому я хочу сделать это самостоятельно.

Я работаю на Kubuntu 8.10 и SBCL 1.0.18.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 16 марта 2009

Вы можете более подробно ознакомиться с sb-posix-package . Но, как говорится на странице: «Функциональные возможности, содержащиеся в пакете SB-UNIX, предназначены только для внутреннего использования SBCL; его содержимое может изменяться от версии к версии».

Другая возможность, которую я бы выбрал, - это включить инструкцию C-syscall (2) через CFFI , а затем выполнить ее.

Чтобы создать оконный графический интерфейс, вы должны использовать X11, по крайней мере, чтобы дать вам окно для рисования. Следовательно, вы должны знать спецификации X11, чтобы создать окно, и реализовать системные вызовы для доступа к доменным сокетам Unix или запуска устройств shm и т. Д.

Если вам просто нужна графика на консоли, вы можете подумать об использовании устройства framebuffer /dev/fb*. Вам нужны ioctl (2) и системные вызовы для чтения (2) и записи (2), чтобы использовать его, но, тем не менее, я думаю, что это будет намного проще, чем использовать X11 для этого (хотя все еще много Работа). Возможно, вам следует взглянуть на исходный код libFB или что-то подобное, чтобы увидеть, как его инициализировать и т. Д.

Это действительно то, что вы хотите сделать? Это большая работа, вы узнаете много нового, но больше об инфраструктуре системы linux, а не о SBCL, я думаю. Если вы хотите использовать Syscalls под SBCL, возможно, лучше попытаться открыть TCP-сокеты только с Linux-Syscalls - в одиночку это может занять несколько часов разочарования.

3 голосов
/ 15 марта 2009

Под написанием GUI через системные вызовы вы имеете в виду не использовать какой-либо инструментарий GUI, такой как Gtk + или Qt? В таком случае вам следует напрямую общаться с X-сервером через сокет и реализовывать весь протокол X11 (или использовать CLX) и графический интерфейс поверх него. Но это не самая простая задача, потому что X11 сложен.

Если вы решите покопаться в X11, есть несколько ссылок на спецификации: http://www.xfree86.org/current/specindex.html http://www.freedesktop.org/wiki/Specifications?action=show&redirect=Standards

...