lib "crypt"; #include function psi\abs(int $i) : int { let n = intval($i); return abs(n) as to_int(abs); } function psi\div(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; return div(numerator, denominator) as to_array(div, to_int(quot), to_int(rem)); } function psi\ldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; return ldiv(numerator, denominator) as to_array(ldiv, to_int(quot), to_int(rem)); } function psi\lldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; return lldiv(numerator, denominator) as to_array(lldiv, to_int(quot), to_int(rem)); } function psi\strtold(string $str, string &$end = null) : float { let nptr = strval($str); let endptr = &NULL; return strtold(nptr, endptr) as to_float(strtold); set $end = to_string(*endptr); } function psi\free(object $memory) : void { let ptr = objval($memory); return free(ptr) as void(free); } function psi\malloc(int $size) : object { let size = intval($size); pre_assert size >= 0; return malloc(size) as to_object(malloc); } function psi\calloc(int $nmemb, int $size) : object { let nmemb = intval($nmemb); let size = intval($size); pre_assert size >= 0; return calloc(nmemb, size) as to_object(calloc); } function psi\realloc(object $obj, int $size) : object { let ptr = objval($obj); let size = intval($size); pre_assert size >= 0; return realloc(ptr, size) as to_object(realloc); }