Add command line parsing

This commit is contained in:
Juhani Krekelä 2022-02-25 01:05:50 +02:00
parent d157d8352b
commit 7af168618c
1 changed files with 61 additions and 7 deletions

View File

@ -9,9 +9,60 @@ args_area equ 0x81
section .code
parse_arguments:
; TODO: Implement argument parsing
xor ch, ch
mov cl, [args_length]
mov si, args_area
; Skip leading spaces
.skip_leading_space:
test cx, cx
jz .leading_spaces_skipped
cmp byte [si], ' '
jne .leading_spaces_skipped
dec cx
inc si
jmp .skip_leading_space
.leading_spaces_skipped:
; See whether we have /h or /u
cmp cx, 2
jb .not_mode_option
cmp byte [si], '/'
jne .not_mode_option
cmp byte [si + 1], 'h'
jne .not_hard_mode
.hard_mode:
mov byte [hard_mode], 1
add si, 2
sub cx, 2
jmp .after_option_space
.not_hard_mode:
cmp byte [si + 1], 'u'
jne .not_ultra_hard_mode
.ultra_hard_mode:
mov byte [hard_mode], 1
mov byte [ultra_hard_mode], 1
add si, 2
sub cx, 2
.after_option_space:
test cx, cx
jz .option_done
cmp byte [si], ' '
jne .option_done
dec cx
inc si
jmp .after_option_space
.option_done:
.not_ultra_hard_mode:
.not_mode_option:
test cx, cx
jz seed_rng_date
@ -243,10 +294,11 @@ check_targets:
loop .targets_loop
word_not_found:
mov si, not_found_str
print_error:
mov ah, 9
mov dx, space_dash_space_str
int 0x21
mov dx, not_found_str
mov dx, si
int 0x21
; Wait for a keypress
@ -262,7 +314,6 @@ word_not_found:
mov dx, erase_word_str
int 0x21
mov si, not_found_str
.clear_loop:
lodsb
cmp al, '$'
@ -274,7 +325,7 @@ word_not_found:
jmp .clear_loop
.done:
.done:
mov ah, 2
mov dl, 13
@ -780,6 +831,9 @@ guesses db 0
dictionary_entry times 5 db 0
hard_mode db 0
ultra_hard_mode db 0
rng_seed dd 0
rng_t dd 0
@ -801,7 +855,7 @@ section .rodata
greeting_str db 'Welcome to hello DOSdl. Run `dosdl /?` for help.', 13, 10, '$'
space_dash_space_str db ' - $'
not_found_str db 'word not found$'
not_found_str db ' - word not found$'
erase_word_str db ' $'
word_was_str db 'The word was: $'
correct_in_str db 'Correct in $'