; The OS/K Team licenses this file to you under the MIT license. ; See the LICENSE file in the project root for more information. argbuf.size := 256 argbuf = [argbuf.size] argv0 = [argbuf.size] argv1pos = 0 stdin_echoing = 1 ps1 = "C:\\> " main: .print_prompt: mov rcx, STRLEN_MAX mov rdx, ps1 prns.rep.nz rdx ; empty argbuf mov rcx, argbuf.size mov rdx, argbuf stosb.rep rdx, 0 ; iterator through argbuf xor rcx, rcx .input_loop: pause pause ; Fill .buf with user input scan rax b.z rax, 0, .input_loop cmp b[stdin_echoing], 1 prn.z rax b.z rax, 10, .extract_argv0 ; when max line length is reached, ; force a newline b.z rcx, argbuf.size, .extract_argv0 ; add character to buffer and increase iterator (rcx) add rdx, rcx, argbuf mov b[rdx], rax inc rcx ; another one jmp .input_loop .extract_argv0: ; find first whitespace or null-terminator mov rcx, argbuf.size mov rdx, argbuf scasb.rep.nz rdx, ' ' ; argv1 exists? if so, save its position ; (to do) ; extract argv0 sub rcx, argbuf.size, rcx mov rdx, argbuf mov rax, argv0 movsb.rep rax, rdx ; null-terminate argv0 mov b[rax], 0 .detect_builtin: .builtin_dir = "dir" mov ax0, argv0 mov ax1, .builtin_dir call strcmp b.z rax, 0, .handle_DIR ; fallthrough .exec_prog: jmp .print_prompt ; ; call builtins ; .handle_DIR: call builtins.dir jmp .print_prompt