; intel syntax - nasm, x86_64 linux

%include "util.asm"

section .data
    usage db "Usage: thing <thing to echo>", 0xa
    usage_len equ $ - usage

    nl db 0xa ; newline character

section .text
    global _start

print_usage:
    mov rax, sys_write
    mov rdi, 1 ; stdout
    mov rsi, usage
    mov rdx, usage_len
    syscall
    jmp not_ok_exit

strlen:
    xor rax, rax ; length = 0

.loop:
    cmp byte [rdi + rax], 0
    je .done

    inc rax
    jmp .loop

.done:
    ret

_start:

    lea rsi, [rsp + 8] ; argv
    mov rdi, [rsi + 8] ; argv[1]

    cmp rdi, 0
    je print_usage

    mov rbx, 1
    .loop:
    add rbx, 1
    ; now print the thing
    lea rsi, [rsp + 8]   ; argv
    mov rsi, [rsi + 8]   ; argv[1]
    cmp rsi, 0
    je print_usage

    mov rdi, rsi         ; strlen input buffer
    call strlen

    mov rdx, rax         ; length
    mov rax, sys_write
    mov rdi, 1           ; stdout
    syscall

    call newline

    sleep_ms 500

    cmp rbx, 10
    je ok_exit
    jmp .loop

    jmp ok_exit
