我正在学习arm64汇编,想做一个主机游戏。我获得了有关如何延迟使用 nanosleep 并将一些字符打印到控制台的信息。
现在我想获取屏幕的宽度和高度。这是我拥有的关于 macOS 系统调用的唯一资源,但我似乎没有找到任何有关屏幕分辨率的资源。
请帮忙。
要查找终端窗口的大小,请通过对终端文件描述符(例如文件描述符
ioctl
)调用 TIOCGWINSZ
来调用 0
。该示例是用 C 语言编写的,但您应该能够轻松地将其转换为汇编语言。我更愿意向您展示一个汇编示例,但我现在手边没有 macOS 来确保它是正确的。
#include <sys/ioctl.h>
#include <unistd.h>
struct winsize sz;
/* get the size of the terminal */
ioctl(STDIN_FILENO, TIOCGWINSZ, &sz);
printf("the terminal has %d rows and %d columns\n", sz.ws_row, sz.ws_col);
窗口大小结构的布局是四个半字,按此顺序:
ws_row number of rows
ws_col number of columns
ws_xpixel number of horizontal pixels
ws_ypixel number of vertical pixels
请注意,
ws_xpixel
和 ws_ypixel
字段可能不可靠。
当调整终端窗口大小时,将向终端前台进程组中的所有进程传递
SIGWINCH
(窗口更改)信号。您可以处理 SIGWINCH
来更新游戏对终端窗口当前大小的了解。在 SIGWINCH
处理程序中,再次调用 TIOCGWINSZ
调用以获取更新的终端大小。