X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=stdio.asm;h=e07e809d8bba5deda2d599f73c9660a1cfd04f2d;hb=c39ff90d7e44da4984c0b04370eb41d839779d3b;hp=549852e614058f97d49f63074ad0050c62626577;hpb=4738ba3eabef30343223098bd81ee6ff80fbbafc;p=rrq%2Frrqforth.git diff --git a/stdio.asm b/stdio.asm index 549852e..e07e809 100644 --- a/stdio.asm +++ b/stdio.asm @@ -206,12 +206,12 @@ p_read_stream_char.CHAR: ;; Read next word from the given stream into the PAD pushr rsi pop rax + pushr rax ; the stream push qword p_pad_DFA push qword 0 - push rax p_read_word_skipblanks: - DOFORTH p_dup, p_read_stream_char + DOFORTH p_Rget, p_read_stream_char pop rbx cmp bl,0 jl p_read_word_nomore @@ -220,12 +220,12 @@ p_read_word_skipblanks: cmp bl,'#' je p_read_word_skipline p_read_word_readword: - ;; ( buffer length stream ) - mov rax,qword [rsp+16] - mov rcx,qword [rsp+8] + ;; ( buffer length ) + mov rax,qword [rsp+8] + mov rcx,qword [rsp] mov [rax+rcx],bl - inc qword [rsp+8] - DOFORTH p_dup, p_read_stream_char + inc qword [rsp] + DOFORTH p_Rget, p_read_stream_char ; ( -- buffer length char ) pop rbx cmp bl,0 jl p_read_word_nomore @@ -233,7 +233,14 @@ p_read_word_readword: jg p_read_word_readword p_read_word_nomore: - pop rax + xor rbx,rbx + mov rax,qword [rsp+8] + mov rcx,qword [rsp] + mov [rax+rcx],bl ; add NUL ending + inc qword [rsp] + DOFORTH p_str2temp + dec qword [rsp] + popr rax popr rsi next @@ -281,22 +288,22 @@ p_double_quote_endstream: WORD p_fdtell,'FDTELL', ;; ( chars* n fd -- ) ;; Write n bytes from chars* to fd - dq p_rot, p_rot, sys_write, p_drop, p_exit + dq p_rot, p_rot, sys_write, p_drop, p_return WORD p_tell,'TELL' ;; ( chars* n -- ) ;; Write n bytes from chars* to stdout - dq p_literal,1,p_fdtell, p_exit + dq p_literal,1,p_fdtell, p_return WORD p_fdemit,'FDEMIT' ;; ( c fd -- ) ;; Write byte to fd - dq p_literal,1, p_dsp, p_literal,1, sys_write, p_2drop, p_exit + dq p_literal,1, p_dsp, p_literal,1, sys_write, p_2drop, p_return WORD p_emit,'EMIT' ;; ( c -- ) ;; Write byte to stdout - dq p_literal,1, p_fdemit, p_exit + dq p_literal,1, p_fdemit, p_return WORD p_nl,'NL',dovalue ;; ( -- c ) @@ -353,4 +360,4 @@ p_dot_remainder: WORD p_dot,'.' ;; ( v -- ) ;; Print value to stdout - dq p_dot_temp, p_literal,1, p_fdtell, p_exit + dq p_dot_temp, p_literal,1, p_fdtell, p_return