:include "c_wrap_linux.tnsl" {}uint8 star = "*\0" {}uint8 space = " \0" {}uint8 new_line = "\n\0" /; print_triangle (int argc) /; loop (int i = 0; i < argc) [i++] /; loop (int j = 0; j < argc - i) [j++] _printf(~space{0}) ;/ /; loop (int j = 0; j < 1 + 2*i) [j++] _printf(~star{0}) ;/ _printf(~new_line{0}) ;/ ;/ /; main (int argc, ~~uint8 argv) [int] # On windows, the first two arguments are passed in RCX and RDX, so we need to # update their positions here or else tnsl will have garbage values in r8 and r9 # asm "mov r8, rcx" # asm "mov r9, rdx" # If on linux, you would use rdi and rsi instead of rcx and rdx, respectively # simply comment out the bove asm, and uncomment the below lines asm "mov r8, rdi" asm "mov r9, rsi" print_triangle(argc) return 0 ;/