/** * Constants */ const str nl = "\n"; const str terminal_namespace = "/dev/term/0"; plex Terminal { nat handle; } /** * Print with a newline */ function pln(str string) { Terminal term = open(terminal_namespace, 0); write(term, string, string.length); write(term, nl, nl.length); // implied return because it is a void function. } /** * Concatinates 2 strings */ function concat(str src1, str src2) str { str result = malloc(src1.length + src2.length); // note result[0].ref is much different than result.ref[0] ! // result[0].ref means the pointer at char 0 (pointer to first char) memcpy(result[0].ref, src1.ref); memcpy(result[src1.length].ref, src2.ref); return result; } /** * finds index of string, -1 if not found */ function str_index_of(str haystack, byte needle) int { int i = -1; for (byte c in haystack) { if (c == needle) { break; } } return i; } /** * checks if 2 strings are equal */ function str_eq(str src1, str src2) bool { if (src1.length != src2.length) return false; do (int i=0; src1.length; i++) { if (src1[i] != src2[i]) return false; } return true; } /** * Slice string */ function str_slice(str src, int start, int stop) str { int len = stop - start; str result = malloc(len); do (int i=start; i