|
@@ -101,16 +101,17 @@ section .data
|
101
|
101
|
badval_msglen: equ $ - badval_msg
|
102
|
102
|
|
103
|
103
|
hours: db "000000000" ; increase size of this string to increase hours max
|
104
|
|
- timestr: db ":00:00.0 ", 0x0a
|
|
104
|
+ timestr: db ":00:00.0 ", 0
|
105
|
105
|
timestrlen: equ $ - timestr
|
106
|
106
|
hourslen: equ timestr - hours ; hours len -> the max number of digits
|
107
|
107
|
|
108
|
108
|
time_res: dq 2 ; 2 digits bellow seconds can grow to 8
|
109
|
109
|
|
110
|
110
|
nl: db 0x0A
|
|
111
|
+ cr: db 0xd
|
111
|
112
|
buf: db 0
|
112
|
113
|
|
113
|
|
- lapsmsg: db 0x0d, "Lap : "
|
|
114
|
+ lapsmsg: db "Lap : "
|
114
|
115
|
lapsmsglen: equ $ - lapsmsg
|
115
|
116
|
|
116
|
117
|
lapcount: db "00000000"
|
|
@@ -189,8 +190,8 @@ mov [ts_sleep.tv_nsec], rax
|
189
|
190
|
|
190
|
191
|
std ; set DF for string operations
|
191
|
192
|
main_loop:
|
192
|
|
- push 2
|
193
|
|
- push 0xD
|
|
193
|
+ push 2 ; stderr
|
|
194
|
+ push 0xD ; \r
|
194
|
195
|
call proc_print_time
|
195
|
196
|
|
196
|
197
|
; Attempt to read from stdin
|
|
@@ -362,11 +363,11 @@ proc_print_time:
|
362
|
363
|
cmp rcx, r9
|
363
|
364
|
cmovnle rcx, r9
|
364
|
365
|
|
365
|
|
- mov r10, [rsp + 8]
|
|
366
|
+ mov r10, [rsp + 8] ; leading chr as 1st argument
|
366
|
367
|
mov byte [timestr+timestrlen-1], r10b
|
367
|
368
|
|
368
|
369
|
mov rax, 1 ; write
|
369
|
|
- mov rdi, [rsp + 16]
|
|
370
|
+ mov rdi, [rsp + 16] ; fd as 2nd argument
|
370
|
371
|
mov rdx, timestrlen + 9
|
371
|
372
|
sub rdx, rcx ; timestr + hours len
|
372
|
373
|
lea rsi, [hours + rcx] ; hours start pointer
|
|
@@ -378,10 +379,16 @@ proc_print_time:
|
378
|
379
|
; sig handler for SIGINT displaying lap count and time on stdout
|
379
|
380
|
;
|
380
|
381
|
proc_lap_handler:
|
|
382
|
+ mov rax, 1
|
|
383
|
+ mov rdi, 2
|
|
384
|
+ mov rsi, cr
|
|
385
|
+ mov rdx, 1
|
|
386
|
+ syscall ; \r on stderr
|
|
387
|
+
|
381
|
388
|
mov rax, 1
|
382
|
389
|
mov rdi, 1
|
383
|
390
|
mov rsi, lapsmsg
|
384
|
|
- mov rdx, 5 ; "Lap "
|
|
391
|
+ mov rdx, 4 ; "Lap "
|
385
|
392
|
syscall
|
386
|
393
|
|
387
|
394
|
; increment the lapcount str directly
|
|
@@ -409,24 +416,22 @@ proc_lap_handler:
|
409
|
416
|
add r10b, 1
|
410
|
417
|
mov [rbx], r10b
|
411
|
418
|
|
412
|
|
-
|
413
|
419
|
mov rax, 1
|
414
|
|
- mov rdi, 1
|
|
420
|
+ mov rdi, 1 ; stdout
|
415
|
421
|
mov rdx, [laplen]
|
416
|
422
|
mov rsi, lapcount
|
417
|
423
|
add rsi, lapcountlen
|
418
|
424
|
sub rsi, rdx ; leftmost digit ptr
|
419
|
425
|
syscall
|
420
|
426
|
|
421
|
|
- mov rax, 1
|
422
|
|
- mov rdi, 1
|
|
427
|
+ mov rax, 1 ; write
|
423
|
428
|
mov rsi, lapsmsg + 4
|
424
|
429
|
mov rdx, 3 ; " : "
|
425
|
430
|
syscall
|
426
|
431
|
|
427
|
432
|
std ; set DF for string operations
|
428
|
|
- push 1
|
429
|
|
- push 0xA
|
|
433
|
+ push 1 ; stdout
|
|
434
|
+ push 0xA ; \n
|
430
|
435
|
call proc_print_time
|
431
|
436
|
|
432
|
437
|
ret
|