fn pass() -> void = () in // Get a line of user input and store it in a buffer fn input(buf: &char) -> void = let ch = getchar(), i = 0 in do for ((); ch != '\n' && ch != '\0'; i++) do buf[i] = ch; ch = getchar(); end; buf[i] = '\0'; end in // Print a newline fn putln() -> void = putchar('\n') in fn putnumln(n: int) -> void = do putnum(n); putln() end in fn streq(a: &char, b: &char) -> bool = do let i = 0, result = true in do for ((); a[i] == b[i] && a[i] != '\0'; i++) do pass() end; if a[i] != b[i] do result = false; end; result end end in fn putcharln(ch: char) -> void = do putchar(ch); putchar('\n') end in // Print a string fn putstr(s: &char) -> void = let i = 0 in for ((); s[i] != '\0'; i++) do putchar(s[i]); end in // Print a string with a newline fn putstrln(s: &char) -> void = do putstr(s); putln() end in fn fputstr(s: &char) -> void = do putstr(s); free(s) end in fn fputstrln(s: &char) -> void = do putstrln(s); free(s) end in // Allocate some memory and read user input to it let buf = alloc(256, char) in do fputstrln("Hello world!"); putchar('$'); putchar(' '); input(buf); // Print it back and then print an exclamation point putchar('-'); putchar('>'); putchar(' '); fputstr(buf); putcharln('!'); end