// File: FreeSlave[P]vhlt/common/scriplib.cpp
// Function: GetToken(bool)
bool            GetToken(const bool crossline)
{
    char           *token_p;

    if (s_tokenready)                                        // is a g_token allready waiting?
    {
        s_tokenready = false;
        return true;
    }

    if (s_script->script_p >= s_script->end_p)
        return EndOfScript(crossline);

    // skip space
skipspace:
#ifdef ZHLT_TEXNAME_CHARSET
	while (*s_script->script_p <= 32 && *s_script->script_p >= 0)
#else
    while (*s_script->script_p <= 32)
#endif
    {
        if (s_script->script_p >= s_script->end_p)
            return EndOfScript(crossline);

        if (*s_script->script_p++ == '\n')
        {
            if (!crossline)
                Error("Line %i is incomplete (did you place a \" inside an entity string?) \n", s_scriptline);
            s_scriptline = s_script->line++;
        }
    }

    if (s_script->script_p >= s_script->end_p)
        return EndOfScript(crossline);

    // comment fields
    if (*s_script->script_p == ';' || *s_script->script_p == '#' || // semicolon and # is comment field
        (*s_script->script_p == '/' && *((s_script->script_p) + 1) == '/')) // also make // a comment field
    {
        if (!crossline)
            Error("Line %i is incomplete (did you place a \" inside an entity string?) \n", s_scriptline);

        //ets+++
        if (*s_script->script_p == '/')
            s_script->script_p++;
        if (s_script->script_p[1] == 'T' && s_script->script_p[2] == 'X')
            g_TXcommand = s_script->script_p[3];             // AR: "//TX#"-style comment

        //ets---
        while (*s_script->script_p++ != '\n')
        {
            if (s_script->script_p >= s_script->end_p)
                return EndOfScript(crossline);
        }
        //ets+++
        s_scriptline = s_script->line++;                       // AR: this line was missing
        //ets---
        goto skipspace;
    }

    // copy g_token
    token_p = g_token;

    if (*s_script->script_p == '"')
    {
        // quoted token
        s_script->script_p++;
        while (*s_script->script_p != '"')
        {
            *token_p++ = *s_script->script_p++;

            if (s_script->script_p == s_script->end_p)
                break;

            if (token_p == &g_token[MAXTOKEN])
                Error("Token too large on line %i\n", s_scriptline);
        }
        s_script->script_p++;
    }
    else
    {
        // regular token
#ifdef ZHLT_TEXNAME_CHARSET
		while ((*s_script->script_p > 32 || *s_script->script_p < 0) && *s_script->script_p != ';')
#else
        while (*s_script->script_p > 32 && *s_script->script_p != ';')
#endif
        {
            *token_p++ = *s_script->script_p++;

            if (s_script->script_p == s_script->end_p)
                break;

            if (token_p == &g_token[MAXTOKEN])
                Error("Token too large on line %i\n", s_scriptline);
        }
    }

    *token_p = 0;

    if (!strcmp(g_token, "$include"))
    {
        GetToken(false);
        AddScriptToStack(g_token);
        return GetToken(crossline);
    }

    return true;
}

// Assembly:
subq $0x18, %rsp
movb %dil, %al
andb $0x1, %al
movb %al, 0x16(%rsp)
testb $0x1, 0x20c56f1(%rip)   # 0x20d2515
je 0xce37
movb $0x0, 0x20c56e8(%rip)   # 0x20d2515
movb $0x1, 0x17(%rsp)
jmp 0xd310
movq 0x20c56ca(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c56bc(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jb 0xce6e
movb 0x16(%rsp), %al
andb $0x1, %al
movzbl %al, %edi
callq 0xcd30
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xd310
jmp 0xce70
jmp 0xce72
movq 0x20c568f(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x20, %ecx
movb %al, 0x7(%rsp)
jg 0xcea9
movq 0x20c5673(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
setge %al
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
testb $0x1, %al
jne 0xceb6
jmp 0xcf4f
movq 0x20c564b(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c563d(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jb 0xceed
movb 0x16(%rsp), %al
andb $0x1, %al
movzbl %al, %edi
callq 0xcd30
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xd310
movq 0x20c5614(%rip), %rcx   # 0x20d2508
movq 0x1008(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x1008(%rcx)
movsbl (%rax), %eax
cmpl $0xa, %eax
jne 0xcf4a
testb $0x1, 0x16(%rsp)
jne 0xcf2c
movl 0x20c55f2(%rip), %esi   # 0x20d2510
leaq 0x201c5(%rip), %rdi     # 0x2d0ea
movb $0x0, %al
callq 0xba80
movq 0x20c55d5(%rip), %rcx   # 0x20d2508
movl 0x1018(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x1018(%rcx)
movl %eax, 0x20c55c6(%rip)   # 0x20d2510
jmp 0xce72
movq 0x20c55b2(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c55a4(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jb 0xcf86
movb 0x16(%rsp), %al
andb $0x1, %al
movzbl %al, %edi
callq 0xcd30
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xd310
movq 0x20c557b(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0xcfe7
movq 0x20c5565(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0xcfe7
movq 0x20c554f(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0xd0f8
movq 0x20c5535(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x2f, %eax
jne 0xd0f8
testb $0x1, 0x16(%rsp)
jne 0xd002
movl 0x20c551c(%rip), %esi   # 0x20d2510
leaq 0x200ef(%rip), %rdi     # 0x2d0ea
movb $0x0, %al
callq 0xba80
movq 0x20c54ff(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0xd031
movq 0x20c54e9(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x1008(%rax)
movq 0x20c54d0(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0x54, %eax
jne 0xd076
movq 0x20c54b9(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl 0x2(%rax), %eax
cmpl $0x58, %eax
jne 0xd076
movq 0x20c54a2(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movb 0x3(%rax), %al
movb %al, 0x20c548a(%rip)    # 0x20d2500
jmp 0xd078
movq 0x20c5489(%rip), %rcx   # 0x20d2508
movq 0x1008(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x1008(%rcx)
movsbl (%rax), %eax
cmpl $0xa, %eax
je 0xd0d5
movq 0x20c5465(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c5457(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jb 0xd0d3
movb 0x16(%rsp), %al
andb $0x1, %al
movzbl %al, %edi
callq 0xcd30
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xd310
jmp 0xd078
movq 0x20c542c(%rip), %rcx   # 0x20d2508
movl 0x1018(%rcx), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, 0x1018(%rcx)
movl %eax, 0x20c541d(%rip)   # 0x20d2510
jmp 0xce70
leaq 0x20c4401(%rip), %rax   # 0x20d1500
movq %rax, 0x8(%rsp)
movq 0x20c53fd(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x22, %eax
jne 0xd1e9
movq 0x20c53e3(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x1008(%rax)
movq 0x20c53ca(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x22, %eax
je 0xd1cb
movq 0x20c53b4(%rip), %rcx   # 0x20d2508
movq 0x1008(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x1008(%rcx)
movb (%rax), %cl
movq 0x8(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x8(%rsp)
movb %cl, (%rax)
movq 0x20c5383(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c5375(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jne 0xd19e
jmp 0xd1cb
leaq 0x20c435b(%rip), %rax   # 0x20d1500
addq $0x1000, %rax           # imm = 0x1000
cmpq %rax, 0x8(%rsp)
jne 0xd1c6
movl 0x20c5358(%rip), %esi   # 0x20d2510
leaq 0x1ff81(%rip), %rdi     # 0x2d140
movb $0x0, %al
callq 0xba80
jmp 0xd137
movq 0x20c5336(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x1008(%rax)
jmp 0xd2c2
jmp 0xd1eb
movq 0x20c5316(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jg 0xd21d
movq 0x20c5300(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, 0x6(%rsp)
jge 0xd238
movq 0x20c52e4(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
setne %al
movb %al, 0x6(%rsp)
movb 0x6(%rsp), %al
testb $0x1, %al
jne 0xd242
jmp 0xd2c0
movq 0x20c52bf(%rip), %rcx   # 0x20d2508
movq 0x1008(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x1008(%rcx)
movb (%rax), %cl
movq 0x8(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x8(%rsp)
movb %cl, (%rax)
movq 0x20c528e(%rip), %rax   # 0x20d2508
movq 0x1008(%rax), %rax
movq 0x20c5280(%rip), %rcx   # 0x20d2508
cmpq 0x1010(%rcx), %rax
jne 0xd293
jmp 0xd2c0
leaq 0x20c4266(%rip), %rax   # 0x20d1500
addq $0x1000, %rax           # imm = 0x1000
cmpq %rax, 0x8(%rsp)
jne 0xd2bb
movl 0x20c5263(%rip), %esi   # 0x20d2510
leaq 0x1fe8c(%rip), %rdi     # 0x2d140
movb $0x0, %al
callq 0xba80
jmp 0xd1eb
jmp 0xd2c2
movq 0x8(%rsp), %rax
movb $0x0, (%rax)
leaq 0x20c422f(%rip), %rdi   # 0x20d1500
leaq 0x1fe84(%rip), %rsi     # 0x2d15c
callq 0x4530
cmpl $0x0, %eax
jne 0xd30b
xorl %edi, %edi
callq 0xce10
leaq 0x20c4210(%rip), %rdi   # 0x20d1500
callq 0xcb60
movb 0x16(%rsp), %al
andb $0x1, %al
movzbl %al, %edi
callq 0xce10
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xd310
movb $0x1, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
addq $0x18, %rsp
retq
nopl (%rax,%rax)