// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: parse_include
static struct element* parse_include( struct element *elem,
	struct function *func, struct variables *vars, struct statement *prev, char *message ) {
	struct element *next = elem->next;
	struct string_list *include;
	int path_len = str_idx( func->file->string, "/:\\", -1 ) + 1;
	int name_len = unquote_string( next->str.string, NULL, '"' );
	struct string *path = ( struct string * ) new_source( path_len + name_len );
	if( path ) {
		memcpy( path->string, func->file->string, sizeof( char ) * path_len );
		unquote_string( next->str.string, &path->string[ path_len ], '"' );
		if( strchr( "/\\", path->string[ path_len ] ) || strchr( &path->string[ path_len ], ':' ) ) {
			/* Absolute path. */
			unquote_string( next->str.string, path->string, '"' );
		}
		if( get_string_list_index( func->env->include_paths, next->str.string ) < 0 ) {
			include = new_string_list( &next->str, func->env->include_paths );
			if( include ) {
				func->env->include_paths = include;
				if( include_tt_file( path, func->env, message ) ) {
					next = next->next->next;
				}
				func->env->include_paths = include->next;
				unref_string( include->str );
				free( include );
			} else {
				strcpy( message, OUT_OF_MEMORY );
			}
		} else {
			sprintf( message, "File %.64s already included on line %d.\n", next->str.string, elem->line );
		}
		unref_string( path );
	} else {
		strcpy( message, OUT_OF_MEMORY );
	}
	return next;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x8(%rax), %rdi
leaq 0xfea8(%rip), %rsi      # 0x1bfe3
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0xc6c0
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x22, %edx
callq 0xa860
movl %eax, -0x40(%rbp)
movl -0x3c(%rbp), %edi
addl -0x40(%rbp), %edi
callq 0x3930
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0xc30c
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x8(%rax), %rsi
movslq -0x3c(%rbp), %rdx
shlq $0x0, %rdx
callq 0x3170
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rsi
movslq -0x3c(%rbp), %rax
addq %rax, %rsi
movl $0x22, %edx
callq 0xa860
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x3c(%rbp), %rcx
movsbl (%rax,%rcx), %esi
leaq 0xfe10(%rip), %rdi      # 0x1bfe7
callq 0x30d0
cmpq $0x0, %rax
jne 0xc201
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rdi
movslq -0x3c(%rbp), %rax
addq %rax, %rdi
movl $0x3a, %esi
callq 0x30d0
cmpq $0x0, %rax
je 0xc21b
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rsi
movl $0x22, %edx
callq 0xa860
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x390(%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xafd0
cmpl $0x0, %eax
jge 0xc2e0
movq -0x30(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x390(%rax), %rsi
callq 0x4850
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xc2ce
movq -0x38(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rcx, 0x390(%rax)
movq -0x48(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rsi
movq -0x28(%rbp), %rdx
callq 0x9f90
cmpl $0x0, %eax
je 0xc2a0
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rcx, 0x390(%rax)
movq -0x38(%rbp), %rax
movq (%rax), %rdi
callq 0x3c20
movq -0x38(%rbp), %rdi
callq 0x3030
jmp 0xc2de
movq -0x28(%rbp), %rdi
movq 0x14e87(%rip), %rsi     # 0x21160
callq 0x3070
jmp 0xc301
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x8(%rbp), %rax
movl 0x28(%rax), %ecx
leaq 0xfcf0(%rip), %rsi      # 0x1bfea
movb $0x0, %al
callq 0x31f0
movq -0x48(%rbp), %rdi
callq 0x3c20
jmp 0xc31c
movq -0x28(%rbp), %rdi
movq 0x14e49(%rip), %rsi     # 0x21160
callq 0x3070
movq -0x30(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)