1 ! Copyright (C) 2012 John Benediktsson
2 ! See https://factorcode.org/license.txt for BSD license
4 USING: accessors alien.c-types classes.struct io.streams.c
5 kernel math memoize scratchpad system terminal unix unix.ffi ;
7 QUALIFIED-WITH: alien.c-types c
13 CONSTANT: IOCPARM_MASK 0x1fff ! parameter length, at most 13 bits
14 CONSTANT: IOC_VOID 0x20000000 ! no parameters
15 CONSTANT: IOC_OUT 0x40000000 ! copy parameters out
16 CONSTANT: IOC_IN 0x80000000 ! copy parameters in
18 : _IOC ( inout group num len -- n )
19 [ 8 shift ] 2dip IOCPARM_MASK bitand 16 shift
22 : _IO ( group num -- n ) [ IOC_VOID ] 2dip 0 _IOC ;
24 : _IOCR ( group num len -- n ) [ IOC_OUT ] 3dip _IOC ;
26 : _IOCW ( group num len -- n ) [ IOC_IN ] 3dip _IOC ;
32 { ws_ypixel c:short } ;
34 MEMO: TIOCGWINSZ ( -- x ) CHAR: t 104 winsize heap-size _IOCR ;
38 M: macosx (terminal-size)
39 stdout-handle fileno TIOCGWINSZ winsize new
40 [ ioctl ] keep swap 0 < [
43 [ ws_col>> ] [ ws_row>> ] bi