administrativa
[m6w6/ext-psi] / psi.d / stdlib.psi
index 1229c9e2d53d1e718cf1cf884ec925cfd1ca8124..bf67899e2219ef64e273df56718a253843ebed1c 100644 (file)
@@ -1,10 +1,65 @@
+lib "crypt";
+
+#include <stdlib.h>
+
 function psi\abs(int $i) : int {
        let n = intval($i);
-       return to_int(abs);
+       return abs(n) as to_int(abs);
 }
 
 function psi\div(int $numerator, int $denominator) : array {
        let numerator = intval($numerator);
        let denominator = intval($denominator);
-       return to_array(div, to_int(quot), to_int(rem));
-}
\ No newline at end of file
+       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);
+}