// -*- mode: java; -*- // top-level default import struct sys { // libc bindings /** https://www.man7.org/linux/man-pages/man2/.2.html */ struct libc { i32 errno = "C"; // fd buf len -> len { i32 i64 u32 -> u32 } write = "C"; // fd buf len -> len { i32 i64 u32 -> u32 } read = "C"; // status { i32 -> i32 } _exit = "C"; // addr len prot flags fd off -> void* { i64 i64 i32 i32 i32 i32 -> i64 } mmap = "C"; // mmap flags i32 PROT_EXEC = 4; i32 PROT_READ = 1; i32 PROT_WRITE= 2; i32 PROT_NONE = 0; i32 MAP_PRIVATE = 2; i32 MAP_ANON = 32; }; struct ary { val copy = { u8[] dst, int doff, u8[~] src, int soff, int len -> for( int i=0; i i64 ptr = str; // cast array base to i64 return sys.libc.write(1,ptr,str#); }; // Return stdin as a u8[] val stdin = { -> var buf = new u8[8*1024]; i64 ptr = buf; int len = 0; while( true ) { int rez = sys.libc.read(0,ptr,buf#); if( rez < 0 ) sys.libc._exit(sys.libc.errno); len += rez; if( rez < buf# ) break; sys.libc._exit(-2); // Need to implement } // Compress var dst = new u8[len]; return sys.ary.copy(dst,0,buf,0,len); }; }; };