diff --git a/dosdl.asm b/dosdl.asm index 65c4719..09b298f 100644 --- a/dosdl.asm +++ b/dosdl.asm @@ -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 $'