native func alen native func aget native func aput native func anew native func _array func __array { "NotImplemented" "Not implemented" throw } native func _char native func _int native func _file native func _float native func _long native func _double func __char { _char } func __int { _int } func __file { _file } native func __float func __long { _long } native func __double native func ischar native func isint native func isfloat native func islong native func isdouble native func stop native func include native func putchar native func read native func type native func mktype # call a dynamically computed function native func call native func typename native func throw # try and catch are keywords, not functions # storelength native func stlen native func eq native func gt native func lt native func not native func + native func - native func / native func * native func ** native func % native func ^ native func dup native func pop native func swap "char" mktype =TYPE_CHAR "int" mktype =TYPE_INT "file" mktype =TYPE_FILE "float" mktype =TYPE_FLOAT "long" mktype =TYPE_LONG "double" mktype =TYPE_DOUBLE "array" mktype =TYPE_ARRAY "string" mktype =TYPE_STRING func _string { =object object ischar if { 0 _char 1 anew =object } object isint if { itos =object } object isfloat if { ftoi =object } object islong if { ltoi =object } object isdouble if { dtoi =object } object } func __string { _string } func isstring { isarray } func itos { ntos } func ltos { ntos } func ftos { ntos } func dtos { ntos } # Number to string func ntos { "" =s =n n 0 lt dup if { n neg =n 1 =negative } =negative n type =thetype while n 1 lt not { n (n 10 % dup =x) - =n s (n '0' + _char) strconcat =s } 1 =steps while n 0 eq not { n (n (1 (steps dup 10 * =steps) /) % dup =x) - =n s (x '0' + _char) strconcat =s } negative if { "-" s strconcat =s } s } # Copy array func acopy { # bind args =len =idx2 =idx1 =arr2 =arr1 1 neg =i while (i 1 + =i) (i len lt) { arr2 i idx2 + (arr1 i idx1 + aget) aput } } func strconcat { # bind args _string =str2 _string =str1 0 _char str1 alen str2 alen anew = str str1 str 0 0 str1 alen acopy str2 str 0 str1 alen str2 alen acopy str } func strsplit { # bind args _string =str _string =splitter 1 neg =i "" 0 anew =sequences while (i 1 + =1) (i str alen lt) { str i aget =chr splitter 0 aget =spl "" =sequence 1 neg =j while (j 1 + =j) (chr spl eq) { (str i j + aget dup =chr) (splitter j aget dup =spl) eq not if { sequences =oldsq "" (sequences alen dup =seq 1 +) anew =sequences oldsq sequences 0 0 oldsq alen acopy sequences seq sequence aput } else { sequence chr strconcat =sequence } } } sequences } func puts { _string =str 1 neg =i while (i 1 + =i) (i str alen lt) { str i aget putchar } }