hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

types.ha (11814B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 export type time_t = i64;
      5 export type suseconds_t = i64;
      6 export type dev_t = u64;
      7 export type ino_t = u64;
      8 export type nlink_t = u64;
      9 export type id_t = uint;
     10 export type pid_t = uint;
     11 export type uid_t = uint;
     12 export type gid_t = uint;
     13 export type off_t = i64;
     14 export type blkcnt_t = i64;
     15 export type blksize_t = i32;
     16 export type fflags_t = u32;
     17 export type mode_t = u16;
     18 export type nfds_t = uint;
     19 export type rlim_t = u64;
     20 
     21 export def NGROUPS_MAX: size = 1023;
     22 export def NSIG: int = 32;
     23 
     24 export type sigset = struct {
     25 	__bits: [4]u32,
     26 };
     27 
     28 export def SA_ONSTACK: u64 = 0x0001;
     29 export def SA_RESTART: u64 = 0x0002;
     30 export def SA_RESETHAND: u64 = 0x0004;
     31 export def SA_NOCLDSTOP: u64 = 0x0008;
     32 export def SA_NODEFER: u64 = 0x0010;
     33 export def SA_NOCLDWAIT: u64 = 0x0020;
     34 export def SA_SIGINFO: u64 = 0x0040;
     35 
     36 export def SIG_ERR: uintptr = -1;
     37 export def SIG_DFL: uintptr = 0;
     38 export def SIG_IGN: uintptr = 1;
     39 export def SIG_CATCH: uintptr = 2;
     40 export def SIG_HOLD: uintptr = 3;
     41 
     42 export type sigact = struct {
     43 	union {
     44 		sa_handler: *fn (int) void,
     45 		sa_sigaction: *fn (int, *siginfo, *opaque) void,
     46 	},
     47 	sa_flags: int,
     48 	sa_mask: sigset,
     49 };
     50 
     51 export def SIG_BLOCK: int = 1;
     52 export def SIG_UNBLOCK: int = 2;
     53 export def SIG_SETMASK: int = 3;
     54 
     55 export type sigval = union {
     56 	sival_t: int,
     57 	sival_ptr: *opaque,
     58 };
     59 
     60 export type stack_t = struct {
     61 	ss_sp: *opaque,
     62 	ss_size: size,
     63 	ss_flags: int,
     64 };
     65 
     66 export type pollfd = struct {
     67 	fd: int,
     68 	events: i16,
     69 	revents: i16,
     70 };
     71 
     72 export type timespec = struct {
     73 	tv_sec: time_t,
     74 	tv_nsec: i64,
     75 };
     76 
     77 export type timeval = struct {
     78 	tv_sec: time_t,
     79 	tv_usec: suseconds_t,
     80 };
     81 
     82 export type st_flock = struct {
     83 	l_start: off_t,
     84 	l_len: off_t,
     85 	l_pid: pid_t,
     86 	l_type: i16,
     87 	l_whence: i16,
     88 	l_sysid: int,
     89 };
     90 
     91 export type st = struct {
     92 	dev: dev_t,
     93 	ino: ino_t,
     94 	nlink: nlink_t,
     95 	mode: mode_t,
     96 	uid: uid_t,
     97 	gid: gid_t,
     98 	rdev: dev_t,
     99 	atime: timespec,
    100 	mtime: timespec,
    101 	ctime: timespec,
    102 	btime: timespec,
    103 	sz: off_t,
    104 	blocks: blkcnt_t,
    105 	blksz: blksize_t,
    106 	flags: fflags_t,
    107 };
    108 
    109 export type freebsd11_stat = struct {
    110 	st_dev: u32,
    111 	st_ino: u32,
    112 	st_mode: mode_t,
    113 	st_nlink: u16,
    114 	st_uid: uid_t,
    115 	st_gid: gid_t,
    116 	st_rdev: u32,
    117 	st_atim: timespec,
    118 	st_mtim: timespec,
    119 	st_ctim: timespec,
    120 	st_size: off_t,
    121 	st_blocks: blkcnt_t,
    122 	st_blksize: blksize_t,
    123 	st_flags: fflags_t,
    124 	st_gen: u32,
    125 	st_lspare: u32,
    126 	st_birthtim: timespec,
    127 };
    128 
    129 export type freebsd11_dirent = struct {
    130 	d_fileno: u32,
    131 	d_reclen: u16,
    132 	d_type: u8,
    133 	d_namlen: u8,
    134 	d_name: [*]u8,
    135 };
    136 
    137 export type iovec = struct {
    138 	iov_base: *opaque,
    139 	iov_len: size
    140 };
    141 
    142 export type winsize = struct {
    143 	ws_row: u16,
    144 	ws_col: u16,
    145 	ws_xpixel: u16,
    146 	ws_ypixel: u16,
    147 };
    148 
    149 export type termios = struct {
    150 	c_iflag: tcflag,
    151 	c_oflag: tcflag,
    152 	c_cflag: tcflag,
    153 	c_lflag: tcflag,
    154 	c_cc: [NCCS]cc,
    155 };
    156 
    157 export def NCCS: size = 20;
    158 
    159 export type tcflag = enum uint {
    160 	// c_iflag bits
    161 	IGNBRK  = 0x00000001,
    162 	BRKINT  = 0x00000002,
    163 	IGNPAR  = 0x00000004,
    164 	PARMRK  = 0x00000008,
    165 	INPCK   = 0x00000010,
    166 	ISTRIP  = 0x00000020,
    167 	INLCR   = 0x00000040,
    168 	IGNCR   = 0x00000080,
    169 	ICRNL   = 0x00000100,
    170 	IXON    = 0x00000200,
    171 	IXOFF   = 0x00000400,
    172 	IXANY   = 0x00000800,
    173 	IMAXBEL = 0x00002000,
    174 
    175 	// c_oflag bits
    176 	OPOST  = 0x00000001,
    177 	ONLCR  = 0x00000002,
    178 	TABDLY = 0x00000004,
    179 	TAB0   = 0x00000000,
    180 	TAB3   = 0x00000004,
    181 	ONOEOT = 0x00000008,
    182 	OCRNL  = 0x00000010,
    183 	ONOCR  = 0x00000020,
    184 	ONLRET = 0x00000040,
    185 
    186 	// c_cflag bits
    187 	CIGNORE    = 0x00000001,
    188 	CSIZE      = 0x00000300,
    189 	CS5        = 0x00000000,
    190 	CS6        = 0x00000100,
    191 	CS7        = 0x00000200,
    192 	CS8        = 0x00000300,
    193 	CSTOPB     = 0x00000400,
    194 	CREAD      = 0x00000800,
    195 	PARENB     = 0x00001000,
    196 	PARODD     = 0x00002000,
    197 	HUPCL      = 0x00004000,
    198 	CLOCAL     = 0x00008000,
    199 	CCTS_OFLOW = 0x00010000,
    200 	CRTS_IFLOW = 0x00020000,
    201 	CRTSCTS    = (CCTS_OFLOW | CRTS_IFLOW),
    202 	CDTR_IFLOW = 0x00040000,
    203 	CDSR_OFLOW = 0x00080000,
    204 	CCAR_OFLOW = 0x00100000,
    205 	CNO_RTSDTR = 0x00200000,
    206 
    207 	// c_lflag bits
    208 	ECHOKE     = 0x00000001,
    209 	ECHOE      = 0x00000002,
    210 	ECHOK      = 0x00000004,
    211 	ECHO       = 0x00000008,
    212 	ECHONL     = 0x00000010,
    213 	ECHOPRT    = 0x00000020,
    214 	ECHOCTL    = 0x00000040,
    215 	ISIG       = 0x00000080,
    216 	ICANON     = 0x00000100,
    217 	ALTWERASE  = 0x00000200,
    218 	IEXTEN     = 0x00000400,
    219 	EXTPROC    = 0x00000800,
    220 	TOSTOP     = 0x00400000,
    221 	FLUSHO     = 0x00800000,
    222 	NOKERNINFO = 0x02000000,
    223 	PENDIN     = 0x20000000,
    224 	NOFLSH     = 0x80000000,
    225 };
    226 
    227 export type cc = enum u8 {
    228 	VEOF      = 0,
    229 	VEOL      = 1,
    230 	VEOL2     = 2,
    231 	VERASE    = 3,
    232 	VWERASE   = 4,
    233 	VKILL     = 5,
    234 	VREPRINT  = 6,
    235 	VERASE2   = 7,
    236 	VINTR     = 8,
    237 	VQUIT     = 9,
    238 	VSUSP     = 10,
    239 	VDSUSP    = 11,
    240 	VSTART    = 12,
    241 	VSTOP     = 13,
    242 	VLNEXT    = 14,
    243 	VDISCARD  = 15,
    244 	VMIN      = 16,
    245 	VTIME     = 17,
    246 	VSTATUS   = 18,
    247 };
    248 
    249 export def TIOCGWINSZ: u64 = 0x40087468;
    250 export def TIOCSWINSZ: u64 = 0x80087467;
    251 export def TIOCGETA: u64 = 0x402c7413;
    252 export def TIOCSETA: u64 = 0x802c7414;
    253 export def TIOCPTMASTER: u64 = 0x2000741c;
    254 export def TIOCSPGRP: u64 = 0x80047476;
    255 export def FIODGNAME: u64 = 0x80106678;
    256 
    257 export type rusage = struct {
    258 	ru_utime: timeval,
    259 	ru_stime: timeval,
    260 	ru_maxrss: i64,
    261 	ru_ixrss: i64,
    262 	ru_idrss: i64,
    263 	ru_isrss: i64,
    264 	ru_minflt: i64,
    265 	ru_majflt: i64,
    266 	ru_nswap: i64,
    267 	ru_inblock: i64,
    268 	ru_oublock: i64,
    269 	ru_msgsnd: i64,
    270 	ru_msgrcv: i64,
    271 	ru_nsignals: i64,
    272 	ru_nvcsw: i64,
    273 	ru_nivcsw: i64,
    274 };
    275 
    276 export def DT_UNKNOWN: u8 = 0;
    277 export def DT_FIFO: u8 = 1;
    278 export def DT_CHR: u8 = 2;
    279 export def DT_DIR: u8 = 4;
    280 export def DT_BLK: u8 = 6;
    281 export def DT_REG: u8 = 8;
    282 export def DT_LNK: u8 = 10;
    283 export def DT_SOCK: u8 = 12;
    284 export def DT_WHT: u8 = 14;
    285 
    286 export def O_RDONLY: int = 0x0000;
    287 export def O_WRONLY: int = 0x0001;
    288 export def O_RDWR: int = 0x0002;
    289 export def O_ACCMODE: int = 0x0003;
    290 export def O_NONBLOCK: int = 0x0004;
    291 export def O_APPEND: int = 0x0008;
    292 export def O_SHLOCK: int = 0x0010;
    293 export def O_EXLOCK: int = 0x0020;
    294 export def O_ASYNC: int = 0x0040;
    295 export def O_FSYNC: int = 0x0080;
    296 export def O_SYNC: int = 0x0080;
    297 export def O_NOFOLLOW: int = 0x0100;
    298 export def O_CREAT: int = 0x0200;
    299 export def O_TRUNC: int = 0x0400;
    300 export def O_EXCL: int = 0x0800;
    301 export def O_NOCTTY: int = 0x8000;
    302 export def O_DIRECT: int = 0x00010000;
    303 export def O_DIRECTORY: int = 0x00020000;
    304 export def O_EXEC: int = 0x00040000;
    305 export def O_TTY_INIT: int = 0x00080000;
    306 export def O_CLOEXEC: int = 0x00100000;
    307 export def O_DSYNC: int = 0x01000000;
    308 
    309 export def AT_FDCWD: int = -100;
    310 export def AT_EACCESS: int = 0x0100;
    311 export def AT_SYMLINK_NOFOLLOW: int = 0x0200;
    312 export def AT_SYMLINK_FOLLOW: int = 0x0400;
    313 export def AT_REMOVEDIR: int = 0x0800;
    314 export def AT_RESOLVE_BENEATH: int = 0x2000;
    315 export def AT_EMPTY_PATH: int = 0x4000;
    316 
    317 export def S_IFIFO: mode_t = 0o010000;
    318 export def S_IFCHR: mode_t = 0o020000;
    319 export def S_IFDIR: mode_t = 0o040000;
    320 export def S_IFBLK: mode_t = 0o060000;
    321 export def S_IFREG: mode_t = 0o100000;
    322 export def S_IFLNK: mode_t = 0o120000;
    323 export def S_IFSOCK: mode_t = 0o140000;
    324 
    325 export def MAP_SHARED: uint = 0x0001;
    326 export def MAP_PRIVATE: uint = 0x0002;
    327 export def MAP_FIXED: uint = 0x0010;
    328 export def MAP_HASSEMAPHORE: uint = 0x0200;
    329 export def MAP_STACK: uint = 0x0400;
    330 export def MAP_NOSYNC: uint = 0x0800;
    331 export def MAP_FILE: uint = 0x0000;
    332 export def MAP_ANON: uint = 0x1000;
    333 export def MAP_GUARD: uint = 0x00002000;
    334 export def MAP_EXCL: uint = 0x00004000;
    335 export def MAP_NOCORE: uint = 0x00020000;
    336 export def MAP_PREFAULT_READ: uint = 0x00040000;
    337 export def MAP_32BIT: uint = 0x00080000;
    338 
    339 export def PROT_NONE: uint = 0x00;
    340 export def PROT_READ: uint = 0x01;
    341 export def PROT_WRITE: uint = 0x02;
    342 export def PROT_EXEC: uint = 0x04;
    343 
    344 export def SIGHUP: int = 1;
    345 export def SIGINT: int = 2;
    346 export def SIGQUIT: int = 3;
    347 export def SIGILL: int = 4;
    348 export def SIGTRAP: int = 5;
    349 export def SIGABRT: int = 6;
    350 export def SIGIOT: int = SIGABRT;
    351 export def SIGEMT: int = 7;
    352 export def SIGFPE: int = 8;
    353 export def SIGKILL: int = 9;
    354 export def SIGBUS: int = 10;
    355 export def SIGSEGV: int = 11;
    356 export def SIGSYS: int = 12;
    357 export def SIGPIPE: int = 13;
    358 export def SIGALRM: int = 14;
    359 export def SIGTERM: int = 15;
    360 export def SIGURG: int = 16;
    361 export def SIGSTOP: int = 17;
    362 export def SIGTSTP: int = 18;
    363 export def SIGCONT: int = 19;
    364 export def SIGCHLD: int = 20;
    365 export def SIGTTIN: int = 21;
    366 export def SIGTTOU: int = 22;
    367 export def SIGIO: int = 23;
    368 export def SIGXCPU: int = 24;
    369 export def SIGXFSZ: int = 25;
    370 export def SIGVTALRM: int = 26;
    371 export def SIGPROF: int = 27;
    372 export def SIGWINCH: int = 28;
    373 export def SIGINFO: int = 29;
    374 export def SIGUSR1: int = 30;
    375 export def SIGUSR2: int = 31;
    376 export def SIGTHR: int = 32;
    377 export def SIGLWP: int = SIGTHR;
    378 export def SIGLIBRT: int = 33;
    379 
    380 export def F_DUPFD: int = 0;
    381 export def F_GETFD: int = 1;
    382 export def F_SETFD: int = 2;
    383 export def F_GETFL: int = 3;
    384 export def F_SETFL: int = 4;
    385 export def F_GETOWN: int = 5;
    386 export def F_SETOWN: int = 6;
    387 export def F_OGETLK: int = 7;
    388 export def F_OSETLK: int = 8;
    389 export def F_OSETLKW: int = 9;
    390 export def F_DUP2FD: int = 10;
    391 export def F_GETLK: int = 11;
    392 export def F_SETLK: int = 12;
    393 export def F_SETLKW: int = 13;
    394 export def F_SETLK_REMOTE: int = 14;
    395 export def F_READAHEAD: int = 15;
    396 export def F_RDAHEAD: int = 16;
    397 export def F_DUPFD_CLOEXEC: int = 17;
    398 export def F_DUP2FD_CLOEXEC: int = 18;
    399 export def F_ADD_SEALS: int = 19;
    400 export def F_GET_SEALS: int = 20;
    401 export def F_ISUNIONSTACK: int = 21;
    402 
    403 export def F_SEAL_SEAL: int = 0x0001;
    404 export def F_SEAL_SHRINK: int = 0x0002;
    405 export def F_SEAL_GROW: int = 0x0004;
    406 export def F_SEAL_WRITE: int = 0x0008;
    407 
    408 export def FD_CLOEXEC: int = 1;
    409 export def F_UNLCKSYS: int = 4;
    410 export def F_CANCEL: int = 5;
    411 
    412 export def F_RDLCK: i16 = 1;
    413 export def F_UNLCK: i16 = 2;
    414 export def F_WRLCK: i16 = 3;
    415 
    416 export def PRIO_PROCESS: int = 0;
    417 export def PRIO_PGRP: int = 1;
    418 export def PRIO_USER: int = 2;
    419 
    420 export def F_OK: int = 0;
    421 export def X_OK: int = 0x01;
    422 export def W_OK: int = 0x02;
    423 export def R_OK: int = 0x04;
    424 
    425 export def CLOCK_REALTIME: int = 0;
    426 export def CLOCK_MONOTONIC: int = 4;
    427 export def CLOCK_VIRTUAL: int = 1;
    428 export def CLOCK_PROF: int = 2;
    429 export def CLOCK_UPTIME: int = 5;
    430 export def CLOCK_UPTIME_PRECISE: int = 7;
    431 export def CLOCK_UPTIME_FAST: int = 8;
    432 export def CLOCK_REALTIME_PRECISE: int = 9;
    433 export def CLOCK_REALTIME_FAST: int = 10;
    434 export def CLOCK_MONOTONIC_PRECISE: int = 11;
    435 export def CLOCK_MONOTONIC_FAST: int = 12;
    436 export def CLOCK_SECOND: int = 13;
    437 export def CLOCK_THREAD_CPUTIME_ID: int = 14;
    438 export def CLOCK_PROCESS_CPUTIME_ID: int = 15;
    439 
    440 export def WNOHANG: int = 1;
    441 export def WUNTRACED: int = 2;
    442 export def WSTOPPED: int = WUNTRACED;
    443 export def WCONTINUED: int = 4;
    444 export def WNOWAIT: int = 8;
    445 export def WEXITED: int = 16;
    446 export def WTRAPPED: int = 32;
    447 
    448 export def STDIN_FILENO: int = 0;
    449 export def STDOUT_FILENO: int = 1;
    450 export def STDERR_FILENO: int = 2;
    451 
    452 export def SEEK_SET: int = 0;
    453 export def SEEK_CUR: int = 1;
    454 export def SEEK_END: int = 2;
    455 
    456 // Flock operations
    457 export def LOCK_SH: int = 1;
    458 export def LOCK_EX: int = 2;
    459 export def LOCK_NB: int = 4;
    460 export def LOCK_UN: int = 8;
    461 
    462 export type rlimit = struct {
    463 	rlim_cur: rlim_t,
    464 	rlim_max: rlim_t,
    465 };
    466 
    467 export def RLIM_INFINITY: rlim_t = -1;
    468 
    469 export def RLIMIT_CPU: int		= 0;
    470 export def RLIMIT_FSIZE: int		= 1;
    471 export def RLIMIT_DATA: int		= 2;
    472 export def RLIMIT_STACK: int		= 3;
    473 export def RLIMIT_CORE: int		= 4;
    474 export def RLIMIT_RSS: int		= 5;
    475 export def RLIMIT_MEMLOCK: int		= 6;
    476 export def RLIMIT_NPROC: int		= 7;
    477 export def RLIMIT_NOFILE: int		= 8;
    478 export def RLIMIT_SBSIZE: int		= 9;
    479 export def RLIMIT_VMEM: int		= 10;
    480 export def RLIMIT_AS: int		= RLIMIT_VMEM;
    481 export def RLIMIT_NPTS: int		= 11;
    482 export def RLIMIT_SWAP: int		= 12;
    483 export def RLIMIT_KQUEUES: int		= 13;
    484 export def RLIMIT_UMTXP: int		= 14;
    485 
    486 export def SHUT_RD: int = 0;
    487 export def SHUT_WR: int = 1;
    488 export def SHUT_RDWR: int = 2;