segment .data
infp    dq      0
argv    dq      0
read_mode:
        db      "r",0

        segment .bss
data    resb    160
data_size equ   $-data

        segment .text
        global  main
        extern  fopen, fgets, fputs, fclose, stdout

main:
        push    rbp
        mov     rbp, rsp
	frame	2, 0, 3
	sub	rsp, frame_size

;       Step past argv[0]
        add     rdx, 8
        mov     [argv], rdx

;       Process each file
.more_files:
        mov     r8, [argv]
        mov     rcx, [r8]     ; get the next filename into rcx
        cmp     rcx, 0
        je      .done
        add     r8, 8         ; advance argv
        mov     [argv], r8
        lea     rdx, [read_mode]
        call    fopen
        cmp     rax, 0
        je      .more_files
        mov     [infp], rax    ; save the file pointer
.more_lines:
        lea     rcx, [data]    ; first parameter of fgets
        mov     rdx, data_size ; second parameter to fgets
        mov     r8, [infp]     ; third parameter
        call    fgets
        cmp     rax, 0
        jne     .put
        mov     rcx, [infp]
        call    fclose         ; close the file
        jmp     .more_files
.put    lea     rcx, [data]    ; first parameter of fputs
        mov     rdx, [stdout]  ; second parameter
        call    fputs
        jmp     .more_lines
.done   xor     eax, eax
        leave
        ret