系统调用的常见Lisp GUI编程

时间:2009-03-15 11:27:17

标签: user-interface common-lisp system-calls sbcl

有人能告诉我使用(Steel Bank)Common Lisp通过系统调用编写GUI吗?我知道有一些图书馆,但这是一个语言学习练习,所以我想自己做。

我正在开发Kubuntu 8.10和SBCL 1.0.18。

感谢。

2 个答案:

答案 0 :(得分:3)

通过系统调用编写GUI,你的意思是不使用任何GUI工具包,如Gtk +或Qt?在这种情况下,您应该通过套接字直接与X服务器通信,并在其上实现所有X11协议(或使用CLX)和GUI。但这不是最简单的任务,因为X11很复杂。

如果你决定深入研究X11,那么有一些规范链接:http://www.xfree86.org/current/specindex.html http://www.freedesktop.org/wiki/Specifications?action=show&redirect=Standards

答案 1 :(得分:3)

您可以仔细查看sb-posix-package。但是,因为页面sais“包SB-UNIX中包含的功能仅供SBCL内部使用;其内容可能会因版本而异。”

另一种可能性 - 我会选择的那种 - 是通过CFFI包含C-syscall(2)-Instruction,然后执行它。

要创建一个窗口化的GUI,您必须使用X11,至少为您提供一个要绘制的窗口。因此,您必须知道X11规范才能创建窗口,并实现Syscalls访问Unix域套接字或启动shm设备等。

如果你只想在控制台上使用图形,你可以考虑使用framebuffer-device /dev/fb*。你需要ioctl(2)和syscalls来读取(2)和写入(2)才能使用它,但是,我认为这比使用X11要容易得多(尽管仍有很多工作)。也许你应该查看libFB或类似内容的源代码,看看如何初始化它等等。

这真的是你想要做的吗?这是很多工作,你会学到很多,但更多关于linux系统基础设施,而不是关于SBCL,我认为。如果你想在SBCL下使用Syscalls,也许最好只尝试用Linux-Syscalls打开TCP-Sockets - 单独这可能需要几个小时的挫折。