谁能告诉我有关使用(钢铁银行)Common Lisp 通过系统调用编写 GUI 的信息?我知道那里有一些图书馆,但这是一个语言学习练习,所以我想自己做。
我正在 Kubuntu 8.10 和 SBCL 1.0.18 上开发。
谢谢。
谁能告诉我有关使用(钢铁银行)Common Lisp 通过系统调用编写 GUI 的信息?我知道那里有一些图书馆,但这是一个语言学习练习,所以我想自己做。
我正在 Kubuntu 8.10 和 SBCL 1.0.18 上开发。
谢谢。
您可以仔细查看sb-posix-package。但正如页面所说“SB-UNIX 软件包中包含的功能仅供 SBCL 内部使用;其内容可能会因版本而异。”
另一种可能性 - 我会选择 - 是通过 CFFI 包含 C-syscall(2)-Instruction ,然后执行它。
要创建一个窗口 GUI,您必须使用 X11,至少要给您一个窗口来绘画。因此,您必须了解 X11-Specifications 才能创建窗口,并实现访问 Unix Domain Sockets 或启动 shm-devices 等的 Syscalls。
如果您只想在控制台上显示图形,您可以考虑使用 framebuffer-device /dev/fb*
。您需要 ioctl(2) 和用于 read(2)ing 和 write(2)ing 的系统调用才能使用它,但我认为这比使用 X11 容易得多(尽管仍然有很多工作)。也许您应该查看 libFB 的源代码或类似的东西以了解如何初始化它等。
这真的是你想做的吗?这是很多工作,你会学到很多,但更多的是关于 linux 系统基础架构,而不是关于 SBCL,我想。如果您想在 SBCL 下使用 Syscalls,也许最好尝试仅使用 Linux-Syscalls 打开 TCP-Sockets - 仅此一项可能需要数小时的挫败感。
通过系统调用编写 GUI,您的意思是不使用任何 GUI 工具包,例如 Gtk+ 或 Qt?在这种情况下,您应该通过套接字直接与 X-server 对话,并在其上实现所有 X11 协议(或使用 CLX)和 GUI。但这不是最简单的任务,因为 X11 很复杂。
如果您决定深入研究 X11,有一些规范链接:http://www.xfree86.org/current/specindex.html http://www.freedesktop.org/wiki/Specifications?action=show&redirect=Standards