diff --git a/src/cat.S b/src/cat.S index 1de6eb3..78d3e0e 100644 --- a/src/cat.S +++ b/src/cat.S @@ -42,6 +42,26 @@ cat_file: mv s2, a0 li s1, 1 + la t1, number_nonblank + lb t1, 0(t1) + beqz t1, .LNoNonblankNumbers + + mv a1, s2 # load mod buf size to a1 + + beqz s1, 1f + la a0, mod_buf_0 # load mod_buf_0 as read buf + la a2, mod_buf_1 # load mod_buf_1 as write buf + j 2f + 1: + la a0, mod_buf_1 # load mod_buf_1 as read buf + la a2, mod_buf_0 # load mod_buf_0 as write buf + 2: + + call add_line_numbers + xori s1, s1, 1 # flip the mod buf to write to + mv s2, a1 # update the current byte count + .LNoNonblankNumbers: + la t1, number lb t1, 0(t1) beqz t1, .LNoNumbers diff --git a/src/mod.S b/src/mod.S index 7bc3980..1441ebb 100644 --- a/src/mod.S +++ b/src/mod.S @@ -120,11 +120,10 @@ add_line_numbers: beqz s7, .LLineNumbersSkipEmptyCheck mv t0, s4 # move the current string buf pointer into t0 - li t1, 1 - sub t0, t0, t1 # move the str pointer back one + addi t0, t0, 1 # move the str pointer forward one lb t0, 0(t0) # t4 still contains a newline char - beq t0, t4, 1f # if the previous byte IS a newline, skip to writing + beq t0, t4, 1f # if the next byte IS a newline, skip to writing .LLineNumbersSkipEmptyCheck: