82 lines
1.8 KiB
Text
82 lines
1.8 KiB
Text
include 'std/std.fa'
|
|
include 'std/math.fa'
|
|
include 'std/logic.fa'
|
|
include 'std/mem/gmem.fa'
|
|
|
|
|
|
macro MAX_PRINT_INT 100 end
|
|
|
|
fun num_to_ascii [ int ] str eo 48 add end
|
|
|
|
fun print_num [ int int ] eo
|
|
as __print_num_fd as __print_num_n
|
|
|
|
@__print_num_n deref 0 eql if
|
|
"0" @__print_num_fd deref %fputs
|
|
end
|
|
|
|
0 @__print_num_n deref
|
|
lst if
|
|
"-" @__print_num_fd deref %fputs
|
|
@__print_num_n @__print_num_n deref 0 sub point
|
|
end
|
|
|
|
%MAX_PRINT_INT
|
|
#malloc as __print_num_arr
|
|
0 as __print_num_idx
|
|
0 as __print_num_return
|
|
|
|
label __print_num_resolve
|
|
@__print_num_n deref 0 eql if
|
|
@__print_num_idx deref as __print_num_idx_old
|
|
|
|
label __print_num_resolve_rev
|
|
@__print_num_idx deref
|
|
0 eql if
|
|
@__print_num_idx_old deref
|
|
@__print_num_arr deref
|
|
#mfree pop
|
|
|
|
ret
|
|
end
|
|
|
|
@__print_num_idx
|
|
1 @__print_num_idx deref sub
|
|
point
|
|
|
|
@__print_num_arr deref @__print_num_idx deref add
|
|
deref
|
|
@__print_num_fd deref %fputc
|
|
|
|
goto __print_num_resolve_rev
|
|
end
|
|
|
|
@__print_num_return
|
|
10 @__print_num_n deref #mod
|
|
point
|
|
|
|
@__print_num_arr deref
|
|
@__print_num_idx deref
|
|
add
|
|
@__print_num_return deref #num_to_ascii
|
|
set
|
|
|
|
@__print_num_idx @__print_num_idx deref 1 add point
|
|
|
|
@__print_num_n @__print_num_n deref #div10 point
|
|
|
|
goto __print_num_resolve
|
|
end
|
|
|
|
|
|
fun main [ str str int ] eo
|
|
69420 %STDOUT #print_num
|
|
10 %STDOUT %fputc
|
|
|
|
69420 0 sub %STDOUT #print_num
|
|
10 %STDOUT %fputc
|
|
|
|
%EXIT_SUCCESS %exit
|
|
end
|
|
|
|
#main
|