format ELF64 executable 3
include "lib/linux_syscall.inc"
include "lib/print.inc"
include "lib/itoa.inc"
include "lib/file.inc"
include "lib/string.inc"

segment readable executable
entry main

main:
	mov rdi, input_filename
	call load_file

	mov r8, [input]
	mov [input_pointer], r8

.go:
	call print_line
	jmp .go

	call unload_file
	exit 0

part_1:
	mov rdi, number
	call atoi
	mov rbx, part_1_answer
	call itoa
	mov rdi, part_1_verbiage
	call print_c_string
	ret

print_line:
	mov r11, 0
	mov rdi, [input_pointer]
	mov rsi, current_line
	mov dl, 'x'
	call copy_until_token_to_string

	mov rdi, current_line
	call atoi
	add r11, rax

	mov rdi, current_line
	call string_length
	add [input_pointer], rax
	inc [input_pointer]

	alarm r11

	mov rdi, [input_pointer]
	mov rsi, current_line
	mov dl, 'x'
	call copy_until_token_to_string

	mov rdi, current_line
	call atoi
	add r11, rax

	mov rdi, current_line
	call string_length
	add [input_pointer], rax
	inc [input_pointer]

	alarm r11

	mov rdi, [input_pointer]
	mov rsi, current_line
	mov dl, 10
	call copy_until_token_to_string

	mov rdi, current_line
	call atoi
	add r11, rax

	mov rdi, current_line
	call string_length
	add [input_pointer], rax
	inc [input_pointer]

	alarm r11

	alarm 0
	
	ret


segment readable writable
input_filename db '../data/2015/2/input.txt', 0
input_pointer dq -1
part_1_verbiage db 'Part 1: '
part_1_answer db '      ', 0
part_2_verbiage db 'Part 2: '
part_2_answer db '      ', 0
number db '42069', 0
current_line db '          ', 0