
/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int __regparm3 wordtype(Terminal *term,int uc)

{
  unicode_data *puVar1;
  int iVar2;
  ucsword *puVar3;
  wchar_t wVar4;
  uint uVar5;
  
  uVar5 = uc & 0xffffff00;
  puVar1 = term->ucsdata;
  if (uVar5 == 0xd900) {
    uc = puVar1->unitab_xterm[uc & 0xff];
    uVar5 = uc & 0xffffff00;
  }
  else if (uVar5 == 0xda00) {
    uc = puVar1->unitab_scoacs[uc & 0xff];
    uVar5 = uc & 0xffffff00;
  }
  else if (uVar5 == 0xd800) {
    uc = puVar1->unitab_line[uc & 0xff];
    uVar5 = uc & 0xffffff00;
  }
  if (uVar5 == 0xf000) {
    iVar2 = puVar1->dbcs_screenfont;
    uc = puVar1->unitab_oemcp[uc & 0xff];
  }
  else {
    if (uVar5 == 0xf100) {
      uc = puVar1->unitab_font[uc & 0xff];
    }
    iVar2 = puVar1->dbcs_screenfont;
  }
  if ((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {
    return (uint)(uc != L' ');
  }
  puVar3 = wordtype::ucs_words;
  wVar4 = L'\x80';
  if (uc < L'\x80') {
    return (int)term->wordness[uc];
  }
  while ((uc < wVar4 || (puVar3->end < uc))) {
    puVar3 = puVar3 + 1;
    wVar4 = puVar3->start;
    if (wVar4 == L'\0') {
      return 2;
    }
  }
  return puVar3->ctype;
}



/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

uint __regparm3 FUN_00072600(int param_1,uint param_2)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  
  uVar4 = param_2 & 0xffffff00;
  iVar3 = *(int *)(param_1 + 0x1090);
  if (uVar4 == 0xd900) {
    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  else if (uVar4 == 0xda00) {
    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  else if (uVar4 == 0xd800) {
    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  if (uVar4 == 0xf000) {
    iVar1 = *(int *)(iVar3 + 4);
    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);
  }
  else {
    if (uVar4 == 0xf100) {
      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);
    }
    iVar1 = *(int *)(iVar3 + 4);
  }
  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {
    return (uint)(param_2 != 0x20);
  }
  piVar2 = (int *)&DAT_000ca260;
  iVar3 = 0x80;
  if ((int)param_2 < 0x80) {
    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);
  }
  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {
    piVar2 = piVar2 + 3;
    iVar3 = *piVar2;
    if (iVar3 == 0) {
      return 2;
    }
  }
  return piVar2[2];
}


CALL 0x0002dd7c
ADD ECX,0x9e14b
PUSH ESI
MOV ESI,EDX
AND ESI,0xffffff00
PUSH EBX
MOV EBX,dword ptr [EAX + 0x1090]
CMP ESI,0xd900
JZ 0x000726d0
CMP ESI,0xda00
JZ 0x00072710
CMP ESI,0xd800
JZ 0x000726f0
CMP ESI,0xf000
JZ 0x000726a8
CMP ESI,0xf100
JNZ 0x00072659
MOVZX EDX,DL
MOV EDX,dword ptr [EBX + EDX*0x4 + 0x810]
MOV ESI,dword ptr [EBX + 0x4]
TEST ESI,ESI
JNZ 0x00072690
LEA ECX,[ECX + 0xfffb9b10]
MOV EBX,0x80
CMP EDX,0x7f
JLE 0x000726c0
CMP EDX,EBX
JL 0x0007267d
CMP dword ptr [ECX + 0x4],EDX
JGE 0x00072728
ADD ECX,0xc
MOV EBX,dword ptr [ECX]
TEST EBX,EBX
JNZ 0x00072670
MOV EAX,0x2
POP EBX
POP ESI
RET
MOV ESI,dword ptr [EBX + 0xc]
CMP dword ptr [EBX + 0x8],ESI
JNZ 0x00072660
XOR EAX,EAX
CMP EDX,0x20
POP EBX
POP ESI
SETNZ AL
RET
MOV ESI,dword ptr [EBX + 0x4]
MOVZX EDX,DL
MOV EDX,dword ptr [EBX + EDX*0x4 + 0x1010]
TEST ESI,ESI
JZ 0x00072660
JMP 0x00072690
MOVSX EAX,word ptr [EAX + EDX*0x2 + 0xe6c]
POP EBX
POP ESI
RET
MOVZX EDX,DL
MOV EDX,dword ptr [EBX + EDX*0x4 + 0xc10]
MOV ESI,EDX
AND ESI,0xffffff00
JMP 0x0007263f
MOVZX EDX,DL
MOV EDX,dword ptr [EBX + EDX*0x4 + 0x410]
MOV ESI,EDX
AND ESI,0xffffff00
JMP 0x0007263f
MOVZX EDX,DL
MOV EDX,dword ptr [EBX + EDX*0x4 + 0x10]
MOV ESI,EDX
AND ESI,0xffffff00
JMP 0x0007263f
MOV EAX,dword ptr [ECX + 0x8]
POP EBX
POP ESI
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */\n\nuint __regparm3 FUN_00072600(int param_1,uint param_2)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}\n\n" comment (function_definition "uint __regparm3 FUN_00072600(int param_1,uint param_2)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00072600(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xd900)" ( (binary_expression "uVar4 == 0xd900" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0xc10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0xc10" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" else (if_statement "if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xda00)" ( (binary_expression "uVar4 == 0xda00" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x10" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" else (if_statement "if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xd800)" ( (binary_expression "uVar4 == 0xd800" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x410 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x410 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x410" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) })))))) (if_statement "if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" if (parenthesized_expression "(uVar4 == 0xf000)" ( (binary_expression "uVar4 == 0xf000" identifier == number_literal) )) (compound_statement "{\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }" { (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" identifier = (pointer_expression "*(int *)(iVar3 + 4)" * (cast_expression "(int *)(iVar3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (expression_statement "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x1010 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x1010" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" else (compound_statement "{\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" { (if_statement "if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" if (parenthesized_expression "(uVar4 == 0xf100)" ( (binary_expression "uVar4 == 0xf100" identifier == number_literal) )) (compound_statement "{\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x810 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x810 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x810" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })) (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" identifier = (pointer_expression "*(int *)(iVar3 + 4)" * (cast_expression "(int *)(iVar3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }" if (parenthesized_expression "((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)))" ( (binary_expression "(iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" ( (binary_expression "*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)" (pointer_expression "*(int *)(iVar3 + 8)" * (cast_expression "(int *)(iVar3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) == (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ))) )) (compound_statement "{\n    return (uint)(param_2 != 0x20);\n  }" { (return_statement "return (uint)(param_2 != 0x20);" return (call_expression "(uint)(param_2 != 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 != 0x20)" ( (binary_expression "param_2 != 0x20" identifier != number_literal) ))) ;) })) (expression_statement "piVar2 = (int *)&DAT_000ca260;" (assignment_expression "piVar2 = (int *)&DAT_000ca260" identifier = (cast_expression "(int *)&DAT_000ca260" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_000ca260" & identifier))) ;) (expression_statement "iVar3 = 0x80;" (assignment_expression "iVar3 = 0x80" identifier = number_literal) ;) (if_statement "if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" if (parenthesized_expression "((int)param_2 < 0x80)" ( (binary_expression "(int)param_2 < 0x80" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" { (return_statement "return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);" return (cast_expression "(int)*(short *)(param_1 + 0xe6c + param_2 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(param_1 + 0xe6c + param_2 * 2)" * (cast_expression "(short *)(param_1 + 0xe6c + param_2 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe6c + param_2 * 2)" ( (binary_expression "param_1 + 0xe6c + param_2 * 2" (binary_expression "param_1 + 0xe6c" identifier + number_literal) + (binary_expression "param_2 * 2" identifier * number_literal)) ))))) ;) })) (while_statement "while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" while (parenthesized_expression "(((int)param_2 < iVar3 || (piVar2[1] < (int)param_2)))" ( (parenthesized_expression "((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))" ( (binary_expression "(int)param_2 < iVar3 || (piVar2[1] < (int)param_2)" (binary_expression "(int)param_2 < iVar3" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < identifier) || (parenthesized_expression "(piVar2[1] < (int)param_2)" ( (binary_expression "piVar2[1] < (int)param_2" (subscript_expression "piVar2[1]" identifier [ number_literal ]) < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) )) (compound_statement "{\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" { (expression_statement "piVar2 = piVar2 + 3;" (assignment_expression "piVar2 = piVar2 + 3" identifier = (binary_expression "piVar2 + 3" identifier + number_literal)) ;) (expression_statement "iVar3 = *piVar2;" (assignment_expression "iVar3 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (if_statement "if (iVar3 == 0) {\n      return 2;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 2;\n    }" { (return_statement "return 2;" return number_literal ;) })) })) (return_statement "return piVar2[2];" return (subscript_expression "piVar2[2]" identifier [ number_literal ]) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */\n/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nint __regparm3 wordtype(Terminal *term,int uc)\n\n{\n  unicode_data *puVar1;\n  int iVar2;\n  ucsword *puVar3;\n  wchar_t wVar4;\n  uint uVar5;\n  \n  uVar5 = uc & 0xffffff00;\n  puVar1 = term->ucsdata;\n  if (uVar5 == 0xd900) {\n    uc = puVar1->unitab_xterm[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  if (uVar5 == 0xf000) {\n    iVar2 = puVar1->dbcs_screenfont;\n    uc = puVar1->unitab_oemcp[uc & 0xff];\n  }\n  else {\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }\n  if ((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {\n    return (uint)(uc != L' ');\n  }\n  puVar3 = wordtype::ucs_words;\n  wVar4 = L'\x80';\n  if (uc < L'\x80') {\n    return (int)term->wordness[uc];\n  }\n  while ((uc < wVar4 || (puVar3->end < uc))) {\n    puVar3 = puVar3 + 1;\n    wVar4 = puVar3->start;\n    if (wVar4 == L'\0') {\n      return 2;\n    }\n  }\n  return puVar3->ctype;\n}\n\n" comment comment (function_definition "int __regparm3 wordtype(Terminal *term,int uc)\n\n{\n  unicode_data *puVar1;\n  int iVar2;\n  ucsword *puVar3;\n  wchar_t wVar4;\n  uint uVar5;\n  \n  uVar5 = uc & 0xffffff00;\n  puVar1 = term->ucsdata;\n  if (uVar5 == 0xd900) {\n    uc = puVar1->unitab_xterm[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  if (uVar5 == 0xf000) {\n    iVar2 = puVar1->dbcs_screenfont;\n    uc = puVar1->unitab_oemcp[uc & 0xff];\n  }\n  else {\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }\n  if ((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {\n    return (uint)(uc != L' ');\n  }\n  puVar3 = wordtype::ucs_words;\n  wVar4 = L'\x80';\n  if (uc < L'\x80') {\n    return (int)term->wordness[uc];\n  }\n  while ((uc < wVar4 || (puVar3->end < uc))) {\n    puVar3 = puVar3 + 1;\n    wVar4 = puVar3->start;\n    if (wVar4 == L'\0') {\n      return 2;\n    }\n  }\n  return puVar3->ctype;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "wordtype(Terminal *term,int uc)" identifier (parameter_list "(Terminal *term,int uc)" ( (parameter_declaration "Terminal *term" type_identifier (pointer_declarator "*term" * identifier)) , (parameter_declaration "int uc" primitive_type identifier) ))) (compound_statement "{\n  unicode_data *puVar1;\n  int iVar2;\n  ucsword *puVar3;\n  wchar_t wVar4;\n  uint uVar5;\n  \n  uVar5 = uc & 0xffffff00;\n  puVar1 = term->ucsdata;\n  if (uVar5 == 0xd900) {\n    uc = puVar1->unitab_xterm[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  if (uVar5 == 0xf000) {\n    iVar2 = puVar1->dbcs_screenfont;\n    uc = puVar1->unitab_oemcp[uc & 0xff];\n  }\n  else {\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }\n  if ((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {\n    return (uint)(uc != L' ');\n  }\n  puVar3 = wordtype::ucs_words;\n  wVar4 = L'\x80';\n  if (uc < L'\x80') {\n    return (int)term->wordness[uc];\n  }\n  while ((uc < wVar4 || (puVar3->end < uc))) {\n    puVar3 = puVar3 + 1;\n    wVar4 = puVar3->start;\n    if (wVar4 == L'\0') {\n      return 2;\n    }\n  }\n  return puVar3->ctype;\n}" { (declaration "unicode_data *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ucsword *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "wchar_t wVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (expression_statement "uVar5 = uc & 0xffffff00;" (assignment_expression "uVar5 = uc & 0xffffff00" identifier = (binary_expression "uc & 0xffffff00" identifier & number_literal)) ;) (expression_statement "puVar1 = term->ucsdata;" (assignment_expression "puVar1 = term->ucsdata" identifier = (field_expression "term->ucsdata" identifier -> field_identifier)) ;) (if_statement "if (uVar5 == 0xd900) {\n    uc = puVar1->unitab_xterm[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" if (parenthesized_expression "(uVar5 == 0xd900)" ( (binary_expression "uVar5 == 0xd900" identifier == number_literal) )) (compound_statement "{\n    uc = puVar1->unitab_xterm[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" { (expression_statement "uc = puVar1->unitab_xterm[uc & 0xff];" (assignment_expression "uc = puVar1->unitab_xterm[uc & 0xff]" identifier = (subscript_expression "puVar1->unitab_xterm[uc & 0xff]" (field_expression "puVar1->unitab_xterm" identifier -> field_identifier) [ (binary_expression "uc & 0xff" identifier & number_literal) ])) ;) (expression_statement "uVar5 = uc & 0xffffff00;" (assignment_expression "uVar5 = uc & 0xffffff00" identifier = (binary_expression "uc & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" else (if_statement "if (uVar5 == 0xda00) {\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }\n  else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" if (parenthesized_expression "(uVar5 == 0xda00)" ( (binary_expression "uVar5 == 0xda00" identifier == number_literal) )) (compound_statement "{\n    uc = puVar1->unitab_scoacs[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" { (expression_statement "uc = puVar1->unitab_scoacs[uc & 0xff];" (assignment_expression "uc = puVar1->unitab_scoacs[uc & 0xff]" identifier = (subscript_expression "puVar1->unitab_scoacs[uc & 0xff]" (field_expression "puVar1->unitab_scoacs" identifier -> field_identifier) [ (binary_expression "uc & 0xff" identifier & number_literal) ])) ;) (expression_statement "uVar5 = uc & 0xffffff00;" (assignment_expression "uVar5 = uc & 0xffffff00" identifier = (binary_expression "uc & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" else (if_statement "if (uVar5 == 0xd800) {\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" if (parenthesized_expression "(uVar5 == 0xd800)" ( (binary_expression "uVar5 == 0xd800" identifier == number_literal) )) (compound_statement "{\n    uc = puVar1->unitab_line[uc & 0xff];\n    uVar5 = uc & 0xffffff00;\n  }" { (expression_statement "uc = puVar1->unitab_line[uc & 0xff];" (assignment_expression "uc = puVar1->unitab_line[uc & 0xff]" identifier = (subscript_expression "puVar1->unitab_line[uc & 0xff]" (field_expression "puVar1->unitab_line" identifier -> field_identifier) [ (binary_expression "uc & 0xff" identifier & number_literal) ])) ;) (expression_statement "uVar5 = uc & 0xffffff00;" (assignment_expression "uVar5 = uc & 0xffffff00" identifier = (binary_expression "uc & 0xffffff00" identifier & number_literal)) ;) })))))) (if_statement "if (uVar5 == 0xf000) {\n    iVar2 = puVar1->dbcs_screenfont;\n    uc = puVar1->unitab_oemcp[uc & 0xff];\n  }\n  else {\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }" if (parenthesized_expression "(uVar5 == 0xf000)" ( (binary_expression "uVar5 == 0xf000" identifier == number_literal) )) (compound_statement "{\n    iVar2 = puVar1->dbcs_screenfont;\n    uc = puVar1->unitab_oemcp[uc & 0xff];\n  }" { (expression_statement "iVar2 = puVar1->dbcs_screenfont;" (assignment_expression "iVar2 = puVar1->dbcs_screenfont" identifier = (field_expression "puVar1->dbcs_screenfont" identifier -> field_identifier)) ;) (expression_statement "uc = puVar1->unitab_oemcp[uc & 0xff];" (assignment_expression "uc = puVar1->unitab_oemcp[uc & 0xff]" identifier = (subscript_expression "puVar1->unitab_oemcp[uc & 0xff]" (field_expression "puVar1->unitab_oemcp" identifier -> field_identifier) [ (binary_expression "uc & 0xff" identifier & number_literal) ])) ;) }) (else_clause "else {\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }" else (compound_statement "{\n    if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }\n    iVar2 = puVar1->dbcs_screenfont;\n  }" { (if_statement "if (uVar5 == 0xf100) {\n      uc = puVar1->unitab_font[uc & 0xff];\n    }" if (parenthesized_expression "(uVar5 == 0xf100)" ( (binary_expression "uVar5 == 0xf100" identifier == number_literal) )) (compound_statement "{\n      uc = puVar1->unitab_font[uc & 0xff];\n    }" { (expression_statement "uc = puVar1->unitab_font[uc & 0xff];" (assignment_expression "uc = puVar1->unitab_font[uc & 0xff]" identifier = (subscript_expression "puVar1->unitab_font[uc & 0xff]" (field_expression "puVar1->unitab_font" identifier -> field_identifier) [ (binary_expression "uc & 0xff" identifier & number_literal) ])) ;) })) (expression_statement "iVar2 = puVar1->dbcs_screenfont;" (assignment_expression "iVar2 = puVar1->dbcs_screenfont" identifier = (field_expression "puVar1->dbcs_screenfont" identifier -> field_identifier)) ;) }))) (if_statement "if ((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {\n    return (uint)(uc != L' ');\n  }" if (parenthesized_expression "((iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage))" ( (binary_expression "(iVar2 != 0) && (puVar1->font_codepage == puVar1->line_codepage)" (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) && (parenthesized_expression "(puVar1->font_codepage == puVar1->line_codepage)" ( (binary_expression "puVar1->font_codepage == puVar1->line_codepage" (field_expression "puVar1->font_codepage" identifier -> field_identifier) == (field_expression "puVar1->line_codepage" identifier -> field_identifier)) ))) )) (compound_statement "{\n    return (uint)(uc != L' ');\n  }" { (return_statement "return (uint)(uc != L' ');" return (call_expression "(uint)(uc != L' ')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uc != L' ')" ( (binary_expression "uc != L' '" identifier != (char_literal "L' '" L' character ')) ))) ;) })) (expression_statement "puVar3 = wordtype::ucs_words;" (assignment_expression "puVar3 = wordtype" identifier = identifier) (ERROR "::ucs_words" : : identifier) ;) (expression_statement "wVar4 = L'\x80';" (assignment_expression "wVar4 = L'\x80'" identifier = (char_literal "L'\x80'" L' escape_sequence ')) ;) (if_statement "if (uc < L'\x80') {\n    return (int)term->wordness[uc];\n  }" if (parenthesized_expression "(uc < L'\x80')" ( (binary_expression "uc < L'\x80'" identifier < (char_literal "L'\x80'" L' escape_sequence ')) )) (compound_statement "{\n    return (int)term->wordness[uc];\n  }" { (return_statement "return (int)term->wordness[uc];" return (cast_expression "(int)term->wordness[uc]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "term->wordness[uc]" (field_expression "term->wordness" identifier -> field_identifier) [ identifier ])) ;) })) (while_statement "while ((uc < wVar4 || (puVar3->end < uc))) {\n    puVar3 = puVar3 + 1;\n    wVar4 = puVar3->start;\n    if (wVar4 == L'\0') {\n      return 2;\n    }\n  }" while (parenthesized_expression "((uc < wVar4 || (puVar3->end < uc)))" ( (parenthesized_expression "(uc < wVar4 || (puVar3->end < uc))" ( (binary_expression "uc < wVar4 || (puVar3->end < uc)" (binary_expression "uc < wVar4" identifier < identifier) || (parenthesized_expression "(puVar3->end < uc)" ( (binary_expression "puVar3->end < uc" (field_expression "puVar3->end" identifier -> field_identifier) < identifier) ))) )) )) (compound_statement "{\n    puVar3 = puVar3 + 1;\n    wVar4 = puVar3->start;\n    if (wVar4 == L'\0') {\n      return 2;\n    }\n  }" { (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) (expression_statement "wVar4 = puVar3->start;" (assignment_expression "wVar4 = puVar3->start" identifier = (field_expression "puVar3->start" identifier -> field_identifier)) ;) (if_statement "if (wVar4 == L'\0') {\n      return 2;\n    }" if (parenthesized_expression "(wVar4 == L'\0')" ( (binary_expression "wVar4 == L'\0'" identifier == (char_literal "L'\0'" L' escape_sequence ')) )) (compound_statement "{\n      return 2;\n    }" { (return_statement "return 2;" return number_literal ;) })) })) (return_statement "return puVar3->ctype;" return (field_expression "puVar3->ctype" identifier -> field_identifier) ;) })))
(translation_unit "uint __regparm3 FUN_00072600(int param_1,uint param_2)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}\n\n" (function_definition "uint __regparm3 FUN_00072600(int param_1,uint param_2)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00072600(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xd900)" ( (binary_expression "uVar4 == 0xd900" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0xc10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0xc10" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" else (if_statement "if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xda00)" ( (binary_expression "uVar4 == 0xda00" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x10" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" else (if_statement "if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" if (parenthesized_expression "(uVar4 == 0xd800)" ( (binary_expression "uVar4 == 0xd800" identifier == number_literal) )) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x410 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x410 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x410" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" identifier = (binary_expression "param_2 & 0xffffff00" identifier & number_literal)) ;) })))))) (if_statement "if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" if (parenthesized_expression "(uVar4 == 0xf000)" ( (binary_expression "uVar4 == 0xf000" identifier == number_literal) )) (compound_statement "{\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }" { (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" identifier = (pointer_expression "*(int *)(iVar3 + 4)" * (cast_expression "(int *)(iVar3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (expression_statement "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x1010 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x1010" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" else (compound_statement "{\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" { (if_statement "if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" if (parenthesized_expression "(uVar4 == 0xf100)" ( (binary_expression "uVar4 == 0xf100" identifier == number_literal) )) (compound_statement "{\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" { (expression_statement "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" * (cast_expression "(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x810 + (param_2 & 0xff) * 4)" ( (binary_expression "iVar3 + 0x810 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x810" identifier + number_literal) + (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" ( (binary_expression "param_2 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })) (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" identifier = (pointer_expression "*(int *)(iVar3 + 4)" * (cast_expression "(int *)(iVar3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }" if (parenthesized_expression "((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)))" ( (binary_expression "(iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" ( (binary_expression "*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)" (pointer_expression "*(int *)(iVar3 + 8)" * (cast_expression "(int *)(iVar3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) )))) == (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ))) )) (compound_statement "{\n    return (uint)(param_2 != 0x20);\n  }" { (return_statement "return (uint)(param_2 != 0x20);" return (call_expression "(uint)(param_2 != 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 != 0x20)" ( (binary_expression "param_2 != 0x20" identifier != number_literal) ))) ;) })) (expression_statement "piVar2 = (int *)&DAT_000ca260;" (assignment_expression "piVar2 = (int *)&DAT_000ca260" identifier = (cast_expression "(int *)&DAT_000ca260" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_000ca260" & identifier))) ;) (expression_statement "iVar3 = 0x80;" (assignment_expression "iVar3 = 0x80" identifier = number_literal) ;) (if_statement "if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" if (parenthesized_expression "((int)param_2 < 0x80)" ( (binary_expression "(int)param_2 < 0x80" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" { (return_statement "return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);" return (cast_expression "(int)*(short *)(param_1 + 0xe6c + param_2 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(param_1 + 0xe6c + param_2 * 2)" * (cast_expression "(short *)(param_1 + 0xe6c + param_2 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe6c + param_2 * 2)" ( (binary_expression "param_1 + 0xe6c + param_2 * 2" (binary_expression "param_1 + 0xe6c" identifier + number_literal) + (binary_expression "param_2 * 2" identifier * number_literal)) ))))) ;) })) (while_statement "while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" while (parenthesized_expression "(((int)param_2 < iVar3 || (piVar2[1] < (int)param_2)))" ( (parenthesized_expression "((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))" ( (binary_expression "(int)param_2 < iVar3 || (piVar2[1] < (int)param_2)" (binary_expression "(int)param_2 < iVar3" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < identifier) || (parenthesized_expression "(piVar2[1] < (int)param_2)" ( (binary_expression "piVar2[1] < (int)param_2" (subscript_expression "piVar2[1]" identifier [ number_literal ]) < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) )) (compound_statement "{\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" { (expression_statement "piVar2 = piVar2 + 3;" (assignment_expression "piVar2 = piVar2 + 3" identifier = (binary_expression "piVar2 + 3" identifier + number_literal)) ;) (expression_statement "iVar3 = *piVar2;" (assignment_expression "iVar3 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (if_statement "if (iVar3 == 0) {\n      return 2;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 2;\n    }" { (return_statement "return 2;" return number_literal ;) })) })) (return_statement "return piVar2[2];" return (subscript_expression "piVar2[2]" identifier [ number_literal ]) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) })))))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) ;) })) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < IDENT) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) })) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })))
(function_definition "uint __regparm3 FUN_00072600(int param_1,uint param_2)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" (type_identifier "uint") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00072600(int param_1,uint param_2)" (identifier "FUN_00072600") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  \n  uVar4 = param_2 & 0xffffff00;\n  iVar3 = *(int *)(param_1 + 0x1090);\n  if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }\n  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }\n  piVar2 = (int *)&DAT_000ca260;\n  iVar3 = 0x80;\n  if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }\n  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }\n  return piVar2[2];\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" (identifier "uVar4") (= "=") (binary_expression "param_2 & 0xffffff00" (identifier "param_2") (& "&") (number_literal "0xffffff00"))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1090)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")"))))) (; ";")) (if_statement "if (uVar4 == 0xd900) {\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" (if "if") (parenthesized_expression "(uVar4 == 0xd900)" (( "(") (binary_expression "uVar4 == 0xd900" (identifier "uVar4") (== "==") (number_literal "0xd900")) () ")")) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" ({ "{") (expression_statement "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" (identifier "param_2") (= "=") (pointer_expression "*(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc10 + (param_2 & 0xff) * 4)" (( "(") (binary_expression "iVar3 + 0xc10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0xc10" (identifier "iVar3") (+ "+") (number_literal "0xc10")) (+ "+") (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" (( "(") (binary_expression "param_2 & 0xff" (identifier "param_2") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" (identifier "uVar4") (= "=") (binary_expression "param_2 & 0xffffff00" (identifier "param_2") (& "&") (number_literal "0xffffff00"))) (; ";")) (} "}")) (else_clause "else if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" (else "else") (if_statement "if (uVar4 == 0xda00) {\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }\n  else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" (if "if") (parenthesized_expression "(uVar4 == 0xda00)" (( "(") (binary_expression "uVar4 == 0xda00" (identifier "uVar4") (== "==") (number_literal "0xda00")) () ")")) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" ({ "{") (expression_statement "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" (identifier "param_2") (= "=") (pointer_expression "*(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10 + (param_2 & 0xff) * 4)" (( "(") (binary_expression "iVar3 + 0x10 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" (( "(") (binary_expression "param_2 & 0xff" (identifier "param_2") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" (identifier "uVar4") (= "=") (binary_expression "param_2 & 0xffffff00" (identifier "param_2") (& "&") (number_literal "0xffffff00"))) (; ";")) (} "}")) (else_clause "else if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" (else "else") (if_statement "if (uVar4 == 0xd800) {\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" (if "if") (parenthesized_expression "(uVar4 == 0xd800)" (( "(") (binary_expression "uVar4 == 0xd800" (identifier "uVar4") (== "==") (number_literal "0xd800")) () ")")) (compound_statement "{\n    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);\n    uVar4 = param_2 & 0xffffff00;\n  }" ({ "{") (expression_statement "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" (identifier "param_2") (= "=") (pointer_expression "*(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x410 + (param_2 & 0xff) * 4)" (( "(") (binary_expression "iVar3 + 0x410 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x410" (identifier "iVar3") (+ "+") (number_literal "0x410")) (+ "+") (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" (( "(") (binary_expression "param_2 & 0xff" (identifier "param_2") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar4 = param_2 & 0xffffff00;" (assignment_expression "uVar4 = param_2 & 0xffffff00" (identifier "uVar4") (= "=") (binary_expression "param_2 & 0xffffff00" (identifier "param_2") (& "&") (number_literal "0xffffff00"))) (; ";")) (} "}"))))))) (if_statement "if (uVar4 == 0xf000) {\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }\n  else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" (if "if") (parenthesized_expression "(uVar4 == 0xf000)" (( "(") (binary_expression "uVar4 == 0xf000" (identifier "uVar4") (== "==") (number_literal "0xf000")) () ")")) (compound_statement "{\n    iVar1 = *(int *)(iVar3 + 4);\n    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);\n  }" ({ "{") (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar3 + 4)" (* "*") (cast_expression "(int *)(iVar3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" (identifier "param_2") (= "=") (pointer_expression "*(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x1010 + (param_2 & 0xff) * 4)" (( "(") (binary_expression "iVar3 + 0x1010 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x1010" (identifier "iVar3") (+ "+") (number_literal "0x1010")) (+ "+") (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" (( "(") (binary_expression "param_2 & 0xff" (identifier "param_2") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" (else "else") (compound_statement "{\n    if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }\n    iVar1 = *(int *)(iVar3 + 4);\n  }" ({ "{") (if_statement "if (uVar4 == 0xf100) {\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" (if "if") (parenthesized_expression "(uVar4 == 0xf100)" (( "(") (binary_expression "uVar4 == 0xf100" (identifier "uVar4") (== "==") (number_literal "0xf100")) () ")")) (compound_statement "{\n      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);\n    }" ({ "{") (expression_statement "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);" (assignment_expression "param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" (identifier "param_2") (= "=") (pointer_expression "*(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x810 + (param_2 & 0xff) * 4)" (( "(") (binary_expression "iVar3 + 0x810 + (param_2 & 0xff) * 4" (binary_expression "iVar3 + 0x810" (identifier "iVar3") (+ "+") (number_literal "0x810")) (+ "+") (binary_expression "(param_2 & 0xff) * 4" (parenthesized_expression "(param_2 & 0xff)" (( "(") (binary_expression "param_2 & 0xff" (identifier "param_2") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar1 = *(int *)(iVar3 + 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar3 + 4)" (* "*") (cast_expression "(int *)(iVar3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (if_statement "if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {\n    return (uint)(param_2 != 0x20);\n  }" (if "if") (parenthesized_expression "((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)))" (( "(") (binary_expression "(iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))" (( "(") (binary_expression "*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc)" (pointer_expression "*(int *)(iVar3 + 8)" (* "*") (cast_expression "(int *)(iVar3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 8)" (( "(") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8")) () ")")))) (== "==") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n    return (uint)(param_2 != 0x20);\n  }" ({ "{") (return_statement "return (uint)(param_2 != 0x20);" (return "return") (call_expression "(uint)(param_2 != 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_2 != 0x20)" (( "(") (binary_expression "param_2 != 0x20" (identifier "param_2") (!= "!=") (number_literal "0x20")) () ")"))) (; ";")) (} "}"))) (expression_statement "piVar2 = (int *)&DAT_000ca260;" (assignment_expression "piVar2 = (int *)&DAT_000ca260" (identifier "piVar2") (= "=") (cast_expression "(int *)&DAT_000ca260" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_000ca260" (& "&") (identifier "DAT_000ca260")))) (; ";")) (expression_statement "iVar3 = 0x80;" (assignment_expression "iVar3 = 0x80" (identifier "iVar3") (= "=") (number_literal "0x80")) (; ";")) (if_statement "if ((int)param_2 < 0x80) {\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" (if "if") (parenthesized_expression "((int)param_2 < 0x80)" (( "(") (binary_expression "(int)param_2 < 0x80" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "0x80")) () ")")) (compound_statement "{\n    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);\n  }" ({ "{") (return_statement "return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);" (return "return") (cast_expression "(int)*(short *)(param_1 + 0xe6c + param_2 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(short *)(param_1 + 0xe6c + param_2 * 2)" (* "*") (cast_expression "(short *)(param_1 + 0xe6c + param_2 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe6c + param_2 * 2)" (( "(") (binary_expression "param_1 + 0xe6c + param_2 * 2" (binary_expression "param_1 + 0xe6c" (identifier "param_1") (+ "+") (number_literal "0xe6c")) (+ "+") (binary_expression "param_2 * 2" (identifier "param_2") (* "*") (number_literal "2"))) () ")"))))) (; ";")) (} "}"))) (while_statement "while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" (while "while") (parenthesized_expression "(((int)param_2 < iVar3 || (piVar2[1] < (int)param_2)))" (( "(") (parenthesized_expression "((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))" (( "(") (binary_expression "(int)param_2 < iVar3 || (piVar2[1] < (int)param_2)" (binary_expression "(int)param_2 < iVar3" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (identifier "iVar3")) (|| "||") (parenthesized_expression "(piVar2[1] < (int)param_2)" (( "(") (binary_expression "piVar2[1] < (int)param_2" (subscript_expression "piVar2[1]" (identifier "piVar2") ([ "[") (number_literal "1") (] "]")) (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")"))) () ")")) () ")")) (compound_statement "{\n    piVar2 = piVar2 + 3;\n    iVar3 = *piVar2;\n    if (iVar3 == 0) {\n      return 2;\n    }\n  }" ({ "{") (expression_statement "piVar2 = piVar2 + 3;" (assignment_expression "piVar2 = piVar2 + 3" (identifier "piVar2") (= "=") (binary_expression "piVar2 + 3" (identifier "piVar2") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "iVar3 = *piVar2;" (assignment_expression "iVar3 = *piVar2" (identifier "iVar3") (= "=") (pointer_expression "*piVar2" (* "*") (identifier "piVar2"))) (; ";")) (if_statement "if (iVar3 == 0) {\n      return 2;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 2;\n    }" ({ "{") (return_statement "return 2;" (return "return") (number_literal "2") (; ";")) (} "}"))) (} "}"))) (return_statement "return piVar2[2];" (return "return") (subscript_expression "piVar2[2]" (identifier "piVar2") ([ "[") (number_literal "2") (] "]")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int __regparm3 function_1(type_1 *term,int var_1)

{
  type_2 *puVar1;
  int var_3;
  type_3 *var_5;
  type_4 var_4;
  type_5 var_2;
  
  var_2 = var_1 & 0xffffff00;
  puVar1 = term->ucsdata;
  if (var_2 == 0xd900) {
    var_1 = puVar1->unitab_xterm[var_1 & 0xff];
    var_2 = var_1 & 0xffffff00;
  }
  else if (var_2 == 0xda00) {
    var_1 = puVar1->unitab_scoacs[var_1 & 0xff];
    var_2 = var_1 & 0xffffff00;
  }
  else if (var_2 == 0xd800) {
    var_1 = puVar1->unitab_line[var_1 & 0xff];
    var_2 = var_1 & 0xffffff00;
  }
  if (var_2 == 0xf000) {
    var_3 = puVar1->dbcs_screenfont;
    var_1 = puVar1->unitab_oemcp[var_1 & 0xff];
  }
  else {
    if (var_2 == 0xf100) {
      var_1 = puVar1->unitab_font[var_1 & 0xff];
    }
    var_3 = puVar1->dbcs_screenfont;
  }
  if ((var_3 != 0) && (puVar1->font_codepage == puVar1->line_codepage)) {
    return (type_5)(var_1 != L' ');
  }
  var_5 = function_1::ucs_words;
  var_4 = L'\x80';
  if (var_1 < L'\x80') {
    return (int)term->wordness[var_1];
  }
  while ((var_1 < var_4 || (var_5->end < var_1))) {
    var_5 = var_5 + 1;
    var_4 = var_5->start;
    if (var_4 == L'\0') {
      return 2;
    }
  }
  return var_5->ctype;
}


(translation_unit (function_definition type: (type_identifier) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))))))) (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))))) (return_statement (subscript_expression argument: (identifier) index: (number_literal))))))

/* WARNING: Function: __i686.get_pc_thunk.cx replaced with injection: get_pc_thunk_cx */

uint __regparm3 MASKED(int param_1,uint param_2)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  
  uVar4 = param_2 & 0xffffff00;
  iVar3 = *(int *)(param_1 + 0x1090);
  if (uVar4 == 0xd900) {
    param_2 = *(uint *)(iVar3 + 0xc10 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  else if (uVar4 == 0xda00) {
    param_2 = *(uint *)(iVar3 + 0x10 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  else if (uVar4 == 0xd800) {
    param_2 = *(uint *)(iVar3 + 0x410 + (param_2 & 0xff) * 4);
    uVar4 = param_2 & 0xffffff00;
  }
  if (uVar4 == 0xf000) {
    iVar1 = *(int *)(iVar3 + 4);
    param_2 = *(uint *)(iVar3 + 0x1010 + (param_2 & 0xff) * 4);
  }
  else {
    if (uVar4 == 0xf100) {
      param_2 = *(uint *)(iVar3 + 0x810 + (param_2 & 0xff) * 4);
    }
    iVar1 = *(int *)(iVar3 + 4);
  }
  if ((iVar1 != 0) && (*(int *)(iVar3 + 8) == *(int *)(iVar3 + 0xc))) {
    return (uint)(param_2 != 0x20);
  }
  piVar2 = (int *)&DAT_000ca260;
  iVar3 = 0x80;
  if ((int)param_2 < 0x80) {
    return (int)*(short *)(param_1 + 0xe6c + param_2 * 2);
  }
  while (((int)param_2 < iVar3 || (piVar2[1] < (int)param_2))) {
    piVar2 = piVar2 + 3;
    iVar3 = *piVar2;
    if (iVar3 == 0) {
      return 2;
    }
  }
  return piVar2[2];
}

