; Grok echo 1.1 · pure NASM x86_64 Linux · LINEAR · NO children
; BAPHOMET · A=ARG B=STDOUT · no invent C
; usage: echo [-n] [STRING...]
        global  _start
        global  echo_fn
        global  echo

        section .data
nl:     db 10
spc:    db 32
flg_n:  db 0
vmsg:   db "bgrtx-echo 1.1 pure ASM · LINEAR · EZZIE/ESSIE/BAPHOMET · NO children",10
vlen    equ $-vmsg

        section .text
echo_fn:
echo:
        mov     eax, 1
        ret

_start:
        pop     rcx                 ; argc
        pop     rax                 ; argv0
        dec     rcx
        mov     rbx, rsp            ; argv+1
        mov     byte [rel flg_n], 0
        xor     r15, r15            ; printed flag

        ; scan leading -n only
        test    rcx, rcx
        jle     .finish
        mov     rsi, [rbx]
        cmp     word [rsi], '-n'
        jne     .body
        cmp     byte [rsi+2], 0
        jne     .body
        mov     byte [rel flg_n], 1
        add     rbx, 8
        dec     rcx

.body:
        test    rcx, rcx
        jle     .finish
        ; space if needed
        test    r15, r15
        jz      .puts
        push    rcx
        push    rbx
        mov     rax, 1
        mov     rdi, 1
        lea     rsi, [rel spc]
        mov     rdx, 1
        syscall
        pop     rbx
        pop     rcx
.puts:
        mov     rsi, [rbx]
        ; strlen → rdx
        xor     rdx, rdx
.sl:    cmp     byte [rsi+rdx], 0
        je      .wr
        inc     rdx
        jmp     .sl
.wr:
        push    rcx
        push    rbx
        mov     rax, 1
        mov     rdi, 1
        ; rsi already
        syscall
        pop     rbx
        pop     rcx
        mov     r15, 1
        add     rbx, 8
        dec     rcx
        jmp     .body

.finish:
        cmp     byte [rel flg_n], 1
        je      .exit
        mov     rax, 1
        mov     rdi, 1
        lea     rsi, [rel nl]
        mov     rdx, 1
        syscall
.exit:
        xor     rdi, rdi
        mov     rax, 60
        syscall
