Browse Source

Add spport for -rX options

Yann Weber 5 years ago
parent
commit
254c71f687
1 changed files with 32 additions and 15 deletions
  1. 32
    15
      wtfstopw.asm

+ 32
- 15
wtfstopw.asm View File

461
 
461
 
462
 ;
462
 ;
463
 ;	Argument parsing
463
 ;	Argument parsing
464
-;		TODO : support -r2
465
 ;
464
 ;
466
 arg_parse:
465
 arg_parse:
467
 	; Checking argument count
466
 	; Checking argument count
468
 	mov rax, [rsp]
467
 	mov rax, [rsp]
469
-	cmp rax, 3
470
-	je parse_r
471
 	cmp rax, 1
468
 	cmp rax, 1
472
 	je arg_ok
469
 	je arg_ok
473
-	; If 1 argument only it can only be -h
470
+	cmp rax, 3
471
+	jle parse_r
474
 	arg_err: ; badval & badarg jmp here too
472
 	arg_err: ; badval & badarg jmp here too
475
 		mov rax, [rsp+8] ; argv[0] program name
473
 		mov rax, [rsp+8] ; argv[0] program name
476
 		mov rdi, -1 ; return status
474
 		mov rdi, -1 ; return status
481
 	cmp bl, '-'
479
 	cmp bl, '-'
482
 	jne badarg
480
 	jne badarg
483
 	mov bl, [rax+1]
481
 	mov bl, [rax+1]
484
-	cmp bl, 'h' ; -h given with another argument
482
+	cmp bl, 'h' ; -h
485
 	je arg_err
483
 	je arg_err
486
 	cmp bl, 'r'
484
 	cmp bl, 'r'
487
 	jne badarg
485
 	jne badarg
488
 	mov bl, [rax+2]
486
 	mov bl, [rax+2]
489
 	cmp bl, 0
487
 	cmp bl, 0
490
-	; the 1st argument is -r the second must be a 1 digit integer in [1..8]
491
-	mov rax, [rsp+24]
488
+	jne arg_nxt ; the value seems to be just after the -r like -r2
489
+	nxt_arg:
490
+		; the 1st argument is -r the second must be the time_res
491
+		; check that the arg exists
492
+		mov rax, [rsp]
493
+		cmp rax, 3
494
+		jne arg_err
495
+		mov rax, [rsp+24]
496
+		jmp arg_cont
497
+	arg_nxt:
498
+		; check that there is no more args
499
+		mov rbx, [rsp]
500
+		cmp rbx, 2
501
+		jne arg_err
502
+		add rax, 2
503
+	arg_cont:
504
+	; rax should point on the value
505
+	mov bl, [rax+1]
506
+	cmp bl, 0
507
+	jne badval
492
 	xor rbx, rbx
508
 	xor rbx, rbx
493
 	mov bl, [rax]
509
 	mov bl, [rax]
494
 	cmp bl, '1'
510
 	cmp bl, '1'
496
 	cmp bl, '8'
512
 	cmp bl, '8'
497
 	jg badval
513
 	jg badval
498
 	sub bl, '0'
514
 	sub bl, '0'
499
-	dbg1:
500
 	mov [time_res], rbx
515
 	mov [time_res], rbx
501
 	jmp arg_ok
516
 	jmp arg_ok
502
 
517
 
503
-badval: ; print an error message, usage and exit
518
+; print an error message, usage and exit with rax pointing the value
519
+badval:
504
 	mov rsi, badval_msg
520
 	mov rsi, badval_msg
505
 	mov rdx, badval_msglen
521
 	mov rdx, badval_msglen
506
-	mov rax, [rsp+24]
507
 	jmp arg_strerr
522
 	jmp arg_strerr
508
 
523
 
509
-badarg: ; print an error message, usage and exit
524
+; print an error message, usage and exit
525
+badarg:
510
 	mov rsi, badarg_msg
526
 	mov rsi, badarg_msg
511
 	mov rdx, badarg_msglen
527
 	mov rdx, badarg_msglen
512
 	mov rax, [rsp+16]
528
 	mov rax, [rsp+16]
513
 	jmp arg_strerr
529
 	jmp arg_strerr
514
 
530
 
515
-arg_strerr: ; rsi msg ptr, rdx msg len, rax arg ptr
531
+; rsi msg ptr, rdx msg len, rax arg ptr
532
+arg_strerr:
516
 	mov r8, rax
533
 	mov r8, rax
517
 	mov rax, 1
534
 	mov rax, 1
518
 	mov rdi, 1
535
 	mov rdi, 1
519
 	syscall
536
 	syscall
520
 	mov rsi, r8
537
 	mov rsi, r8
521
 	mov rax, r8
538
 	mov rax, r8
522
-	call strlen
539
+	call proc_strlen
523
 	mov rax, 1
540
 	mov rax, 1
524
 	syscall
541
 	syscall
525
 	mov rax, 1
542
 	mov rax, 1
545
 
562
 
546
 	pop rsi
563
 	pop rsi
547
 	mov rax, rsi
564
 	mov rax, rsi
548
-	call strlen
565
+	call proc_strlen
549
 	mov rax, 1
566
 	mov rax, 1
550
 	syscall
567
 	syscall
551
 
568
 
559
 	syscall
576
 	syscall
560
 
577
 
561
 ; With rax pointing on the string, the result will be in rdx
578
 ; With rax pointing on the string, the result will be in rdx
562
-strlen:
579
+proc_strlen:
563
 	mov r8, rax
580
 	mov r8, rax
564
 	mov r9, r8
581
 	mov r9, r8
565
 	sub r9, 1
582
 	sub r9, 1

Loading…
Cancel
Save