TtmpTsmIterate

bool __fastcall TtmpTsmIterate(__int64 a1, __int64 a2){
  int v2; 
  _TERMINAL_DISPLAY_STATE v5; 
  int v6; 
  __int64 v7; 
  UINT64 v8; 
  bool result; 
  _TERMINAL_DISPLAY_STATE DisplayState; 

  v2 = *(_DWORD *)(a1 + 44);
  DisplayState = TerminalDisplayStateForceOff;
  if( v2 == 2 )
  {
    v5 = TerminalDisplayStateOff;
  }
  else
  {
    if( v2 != 1 )
    {
      v5 = *(_DWORD *)a1;
      v6 = 0;
      goto LABEL_7;
    }
    v5 = TerminalDisplayStateOn;
  }
  v6 = *(_DWORD *)(a1 + 48);
LABEL_7:
  if( *(_BYTE *)(a1 + 41) || v2 == 1 )
  {
    v8 = 0i64;
    *(_QWORD *)(a2 + 16) = *(_QWORD *)(a1 + 16);
  }
  else
  {
    v7 = *(_QWORD *)(a1 + 8);
    *(_QWORD *)(a2 + 16) = v7;
    v8 = *(_QWORD *)(a1 + 16) - v7;
  }
  if( (unsigned int)(v5 - 2) <= 1 )
  {
    if( *(_BYTE *)(a1 + 40) )
    {
      v5 = TerminalDisplayStateOn;
      *(_QWORD *)(a2 + 24) = 0i64;
    }
    else
    {
      TtmpTsmEvaluateTimeouts(*(_QWORD *)(a1 + 24), *(_QWORD *)(a1 + 32), v8, &DisplayState, (UINT64 *)(a2 + 24));
      v5 = DisplayState;
      if( (unsigned int)(DisplayState - 1) <= 1 )
        v6 = 12;
    }
  }
  else
  {
    *(_QWORD *)(a2 + 24) = 0i64;
  }
  *(_DWORD *)a2 = v5;
  result = *(_DWORD *)a1 != v5;
  *(_BYTE *)(a2 + 4) = result;
  *(_DWORD *)(a2 + 8) = v6;
  return result;
}

Referenced by:

TtmpUpdateTerminalState