__attribute__((visibility ("hidden")))
mono_console_init ()
{
  unsigned int fd.0;
  int fd;

  fd = open ("/dev/null", 2);
  goto <D.17154>;
  <D.17153>:
  fd = open ("/dev/null", 2);
  <D.17154>:
  fd.0 = (unsigned int) fd;
  if (fd.0 <= 2) goto <D.17153>; else goto <D.17155>;
  <D.17155>:
  close (fd);
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
open (const char * __path, int __oflag)
{
  int D.17275;
  int D.17278;
  int D.17283;
  int D.17285;
  int D.17286;
  int D.17289;
  int D.17290;

  D.17275 = __builtin_va_arg_pack_len ();
  if (D.17275 > 1) goto <D.17276>; else goto <D.17277>;
  <D.17276>:
  __open_too_many_args ();
  <D.17277>:
  D.17278 = __builtin_constant_p (__oflag);
  if (D.17278 != 0) goto <D.17279>; else goto <D.17280>;
  <D.17279>:
  D.17283 = __oflag & 64;
  if (D.17283 != 0) goto <D.17281>; else goto <D.17284>;
  <D.17284>:
  D.17285 = __oflag & 4259840;
  if (D.17285 == 4259840) goto <D.17281>; else goto <D.17282>;
  <D.17281>:
  D.17286 = __builtin_va_arg_pack_len ();
  if (D.17286 <= 0) goto <D.17287>; else goto <D.17288>;
  <D.17287>:
  __open_missing_mode ();
  D.17289 = __open_2 (__path, __oflag);
  return D.17289;
  <D.17288>:
  <D.17282>:
  D.17289 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.17289;
  <D.17280>:
  D.17290 = __builtin_va_arg_pack_len ();
  if (D.17290 <= 0) goto <D.17291>; else goto <D.17292>;
  <D.17291>:
  D.17289 = __open_2 (__path, __oflag);
  return D.17289;
  <D.17292>:
  D.17289 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.17289;
}


__attribute__((visibility ("hidden")))
ves_icall_System_ConsoleDriver_Isatty (void * handle)
{
  MonoBoolean D.17294;
  long int handle.1;
  int D.17296;
  int D.17297;

  handle.1 = (long int) handle;
  D.17296 = (int) handle.1;
  D.17297 = isatty (D.17296);
  D.17294 = (MonoBoolean) D.17297;
  return D.17294;
}


__attribute__((visibility ("hidden")))
ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean want_echo)
{
  MonoBoolean D.17299;
  int D.17300;

  D.17300 = (int) want_echo;
  D.17299 = set_property (8, D.17300);
  return D.17299;
}


set_property (gint property, gboolean value)
{
  int D.17302;
  MonoBoolean D.17305;
  unsigned int D.17306;
  unsigned int property.2;
  unsigned int D.17308;
  _Bool D.17309;
  unsigned int D.17317;
  int D.17319;
  unsigned int D.17320;
  unsigned int D.17321;
  int D.17324;
  struct termios attr;
  gboolean callset;
  gboolean check;

  try
    {
      callset = 0;
      D.17302 = tcgetattr (0, &attr);
      if (D.17302 == -1) goto <D.17303>; else goto <D.17304>;
      <D.17303>:
      D.17305 = 0;
      return D.17305;
      <D.17304>:
      D.17306 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.17308 = D.17306 & property.2;
      D.17309 = D.17308 != 0;
      check = (gboolean) D.17309;
      if (value != 0) goto <D.17312>; else goto <D.17313>;
      <D.17313>:
      if (check != 0) goto <D.17312>; else goto <D.17311>;
      <D.17312>:
      if (value == 0) goto <D.17310>; else goto <D.17314>;
      <D.17314>:
      if (check == 0) goto <D.17310>; else goto <D.17311>;
      <D.17310>:
      callset = 1;
      if (value != 0) goto <D.17315>; else goto <D.17316>;
      <D.17315>:
      D.17306 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.17317 = D.17306 | property.2;
      attr.c_lflag = D.17317;
      goto <D.17318>;
      <D.17316>:
      D.17306 = attr.c_lflag;
      D.17319 = ~property;
      D.17320 = (unsigned int) D.17319;
      D.17321 = D.17306 & D.17320;
      attr.c_lflag = D.17321;
      <D.17318>:
      <D.17311>:
      if (callset == 0) goto <D.17322>; else goto <D.17323>;
      <D.17322>:
      D.17305 = 1;
      return D.17305;
      <D.17323>:
      D.17324 = tcsetattr (0, 0, &attr);
      if (D.17324 == -1) goto <D.17325>; else goto <D.17326>;
      <D.17325>:
      D.17305 = 0;
      return D.17305;
      <D.17326>:
      mono_attr = attr;
      D.17305 = 1;
      return D.17305;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
ves_icall_System_ConsoleDriver_SetBreak (MonoBoolean want_break)
{
  MonoBoolean D.17329;
  _Bool D.17330;
  int D.17331;

  D.17330 = want_break == 0;
  D.17331 = (int) D.17330;
  D.17329 = set_property (1, D.17331);
  return D.17329;
}


__attribute__((visibility ("hidden")))
ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout)
{
  long int D.17188;
  long int iftmp.3;
  int D.17334;
  long int iftmp.4;
  unsigned long __d.5;
  long int D.17343;
  long int D.17344;
  long int D.17345;
  int D.17348;
  long int D.17349;
  int D.17350;
  long int D.17351;
  int * D.17354;
  int D.17355;
  gint32 D.17360;
  struct fd_set rfds;
  struct timeval tv;
  struct timeval * tvptr;
  struct div_t divvy;
  int ret;
  int nbytes;

  try
    {
      <D.17189>:
      {
        unsigned int __i;
        struct fd_set * __arr;

        __arr = &rfds;
        __i = 0;
        goto <D.17185>;
        <D.17184>:
        __arr->fds_bits[__i] = 0;
        __i = __i + 1;
        <D.17185>:
        if (__i <= 15) goto <D.17184>; else goto <D.17186>;
        <D.17186>:
      }
      {
        long int __d;

        __d = 0;
        D.17334 = __builtin_constant_p (__d);
        if (D.17334 != 0) goto <D.17335>; else goto <D.17336>;
        <D.17335>:
        __d.5 = (unsigned long) __d;
        if (__d.5 <= 1023) goto <D.17339>; else goto <D.17340>;
        <D.17339>:
        iftmp.4 = __d / 64;
        goto <D.17341>;
        <D.17340>:
        iftmp.4 = __fdelt_warn (__d);
        <D.17341>:
        iftmp.3 = iftmp.4;
        goto <D.17342>;
        <D.17336>:
        iftmp.3 = __fdelt_chk (__d);
        <D.17342>:
        D.17188 = iftmp.3;
      }
      D.17343 = D.17188;
      D.17344 = rfds.fds_bits[D.17343];
      D.17345 = D.17344 | 1;
      rfds.fds_bits[D.17343] = D.17345;
      if (timeout >= 0) goto <D.17346>; else goto <D.17347>;
      <D.17346>:
      divvy = div (timeout, 1000); [return slot optimization]
      D.17348 = divvy.quot;
      D.17349 = (long int) D.17348;
      tv.tv_sec = D.17349;
      D.17350 = divvy.rem;
      D.17351 = (long int) D.17350;
      tv.tv_usec = D.17351;
      tvptr = &tv;
      goto <D.17352>;
      <D.17347>:
      tvptr = 0B;
      <D.17352>:
      ret = select (1, &rfds, 0B, 0B, tvptr);
      if (ret == -1) goto <D.17353>; else goto <D.17190>;
      <D.17353>:
      D.17354 = __errno_location ();
      D.17355 = *D.17354;
      if (D.17355 == 4) goto <D.17189>; else goto <D.17190>;
      <D.17190>:
      if (ret > 0) goto <D.17356>; else goto <D.17357>;
      <D.17356>:
      nbytes = 0;
      ret = ioctl (0, 21531, &nbytes);
      if (ret >= 0) goto <D.17358>; else goto <D.17359>;
      <D.17358>:
      ret = nbytes;
      <D.17359>:
      <D.17357>:
      D.17360 = MAX_EXPR <ret, 0>;
      return D.17360;
    }
  finally
    {
      rfds = {CLOBBER};
      tv = {CLOBBER};
      divvy = {CLOBBER};
      nbytes = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_console_handle_async_ops ()
{
  int need_cancel.6;

  need_cancel.6 = need_cancel;
  if (need_cancel.6 != 0) goto <D.17364>; else goto <D.17365>;
  <D.17364>:
  need_cancel = 0;
  do_console_cancel_event ();
  <D.17365>:
}


do_console_cancel_event ()
{
  struct MonoAppDomain * D.17366;
  struct MonoImage * D.17369;
  struct MonoClassField * cancel_handler_field.7;
  struct MonoClassField * cancel_handler_field.8;
  _Bool D.17376;
  long int D.17377;
  long int D.17378;
  struct MonoDelegate * load_value.9;
  struct MonoVTable * D.17386;
  _Bool D.17387;
  long int D.17388;
  long int D.17389;
  struct MonoClass * D.17392;
  static struct MonoClassField * cancel_handler_field;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoDelegate * load_value;
  struct MonoMethod * method;
  struct MonoMethodMessage * msg;
  struct MonoMethod * im;
  struct MonoVTable * vtable;

  try
    {
      domain = mono_domain_get ();
      D.17366 = domain->domain;
      if (D.17366 == 0B) goto <D.17367>; else goto <D.17368>;
      <D.17367>:
      return;
      <D.17368>:
      D.17369 = mono_defaults.corlib;
      klass = mono_class_from_name (D.17369, "System", "Console");
      if (klass == 0B) goto <D.17370>; else goto <D.17371>;
      <D.17370>:
      return;
      <D.17371>:
      cancel_handler_field.7 = cancel_handler_field;
      if (cancel_handler_field.7 == 0B) goto <D.17373>; else goto <D.17374>;
      <D.17373>:
      cancel_handler_field.8 = mono_class_get_field_from_name (klass, "cancel_handler");
      cancel_handler_field = cancel_handler_field.8;
      cancel_handler_field.7 = cancel_handler_field;
      D.17376 = cancel_handler_field.7 == 0B;
      D.17377 = (long int) D.17376;
      D.17378 = __builtin_expect (D.17377, 0);
      if (D.17378 != 0) goto <D.17379>; else goto <D.17380>;
      <D.17379>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 246, "cancel_handler_field");
      <D.17380>:
      <D.17374>:
      vtable = mono_class_vtable_full (domain, klass, 0);
      if (vtable == 0B) goto <D.17381>; else goto <D.17382>;
      <D.17381>:
      return;
      <D.17382>:
      cancel_handler_field.7 = cancel_handler_field;
      mono_field_static_get_value (vtable, cancel_handler_field.7, &load_value);
      load_value.9 = load_value;
      if (load_value.9 == 0B) goto <D.17384>; else goto <D.17385>;
      <D.17384>:
      return;
      <D.17385>:
      load_value.9 = load_value;
      D.17386 = load_value.9->object.vtable;
      klass = D.17386->klass;
      method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
      D.17387 = method == 0B;
      D.17388 = (long int) D.17387;
      D.17389 = __builtin_expect (D.17388, 0);
      if (D.17389 != 0) goto <D.17390>; else goto <D.17391>;
      <D.17390>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 258, "method != NULL");
      <D.17391>:
      D.17392 = method->klass;
      im = mono_get_delegate_invoke (D.17392);
      msg = mono_method_call_message_new (method, 0B, im, 0B, 0B);
      load_value.9 = load_value;
      mono_thread_pool_add (load_value.9, msg, 0B, 0B);
    }
  finally
    {
      load_value = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
ves_icall_System_ConsoleDriver_TtySetup (struct MonoString * keypad, struct MonoString * teardown, struct MonoArray * * control_chars, int * * size)
{
  int D.17406;
  int D.17407;
  struct MonoDomain * D.17409;
  struct MonoClass * D.17410;
  struct MonoArray * D.17411;
  int D.17412;
  MonoBoolean D.17415;
  unsigned int D.17416;
  unsigned int D.17417;
  unsigned int D.17418;
  unsigned int D.17419;
  int D.17420;
  struct MonoArray * D.17423;
  int setup_finished.10;
  gchar * iftmp.11;
  int atexit_called.12;
  char * D.17436;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims == -1) goto <D.17396>; else goto <D.17397>;
  <D.17396>:
  {
    int cols;
    int rows;
    const char * str;

    cols = 0;
    rows = 0;
    str = monoeg_g_getenv ("COLUMNS");
    if (str != 0B) goto <D.17398>; else goto <D.17399>;
    <D.17398>:
    cols = atoi (str);
    <D.17399>:
    str = monoeg_g_getenv ("LINES");
    if (str != 0B) goto <D.17400>; else goto <D.17401>;
    <D.17400>:
    rows = atoi (str);
    <D.17401>:
    if (cols != 0) goto <D.17404>; else goto <D.17402>;
    <D.17404>:
    if (rows != 0) goto <D.17405>; else goto <D.17402>;
    <D.17405>:
    D.17406 = cols << 16;
    D.17407 = D.17406 | rows;
    cols_and_lines = D.17407;
    goto <D.17403>;
    <D.17402>:
    cols_and_lines = -1;
    <D.17403>:
  }
  goto <D.17408>;
  <D.17397>:
  cols_and_lines = dims;
  <D.17408>:
  *size = &cols_and_lines;
  D.17409 = mono_domain_get ();
  D.17410 = mono_defaults.byte_class;
  D.17411 = mono_array_new (D.17409, D.17410, 17);
  mono_gc_wbarrier_generic_store (control_chars, D.17411);
  D.17412 = tcgetattr (0, &initial_attr);
  if (D.17412 == -1) goto <D.17413>; else goto <D.17414>;
  <D.17413>:
  D.17415 = 0;
  return D.17415;
  <D.17414>:
  mono_attr = initial_attr;
  D.17416 = mono_attr.c_lflag;
  D.17417 = D.17416 & 4294967293;
  mono_attr.c_lflag = D.17417;
  D.17418 = mono_attr.c_iflag;
  D.17419 = D.17418 & 4294962175;
  mono_attr.c_iflag = D.17419;
  mono_attr.c_cc[6] = 1;
  mono_attr.c_cc[5] = 0;
  D.17420 = tcsetattr (0, 0, &mono_attr);
  if (D.17420 == -1) goto <D.17421>; else goto <D.17422>;
  <D.17421>:
  D.17415 = 0;
  return D.17415;
  <D.17422>:
  D.17423 = *control_chars;
  set_control_chars (D.17423, &mono_attr.c_cc);
  setup_finished.10 = setup_finished;
  if (setup_finished.10 != 0) goto <D.17425>; else goto <D.17426>;
  <D.17425>:
  D.17415 = 1;
  return D.17415;
  <D.17426>:
  if (keypad != 0B) goto <D.17428>; else goto <D.17429>;
  <D.17428>:
  iftmp.11 = mono_string_to_utf8 (keypad);
  goto <D.17430>;
  <D.17429>:
  iftmp.11 = 0B;
  <D.17430>:
  keypad_xmit_str = iftmp.11;
  console_set_signal_handlers ();
  setup_finished = 1;
  atexit_called.12 = atexit_called;
  if (atexit_called.12 == 0) goto <D.17432>; else goto <D.17433>;
  <D.17432>:
  if (teardown != 0B) goto <D.17434>; else goto <D.17435>;
  <D.17434>:
  D.17436 = mono_string_to_utf8 (teardown);
  teardown_str = D.17436;
  <D.17435>:
  atexit (tty_teardown);
  <D.17433>:
  D.17415 = 1;
  return D.17415;
}


tty_teardown ()
{
  int setup_finished.13;
  gchar * teardown_str.14;
  long unsigned int D.17444;
  long int D.17445;
  int unused;

  setup_finished.13 = setup_finished;
  if (setup_finished.13 == 0) goto <D.17439>; else goto <D.17440>;
  <D.17439>:
  return;
  <D.17440>:
  teardown_str.14 = teardown_str;
  if (teardown_str.14 != 0B) goto <D.17442>; else goto <D.17443>;
  <D.17442>:
  teardown_str.14 = teardown_str;
  teardown_str.14 = teardown_str;
  D.17444 = __strlen_g (teardown_str.14);
  D.17445 = write (1, teardown_str.14, D.17444);
  unused = (int) D.17445;
  teardown_str.14 = teardown_str;
  monoeg_g_free (teardown_str.14);
  teardown_str = 0B;
  <D.17443>:
  tcflush (0, 0);
  tcsetattr (0, 0, &initial_attr);
  set_property (8, 1);
  setup_finished = 0;
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.17447;
  long int __ptr.15;
  long int __str.16;
  long int D.17450;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.15 = (long int) __ptr;
  __str.16 = (long int) __str;
  D.17450 = __ptr.15 - __str.16;
  D.17447 = (size_t) D.17450;
  return D.17447;
}


terminal_get_dimensions ()
{
  int * D.17452;
  int D.17453;
  short unsigned int D.17456;
  int D.17457;
  int D.17458;
  short unsigned int D.17459;
  int D.17460;
  int D.17461;
  struct winsize ws;
  int ret;
  int save_errno;

  try
    {
      D.17452 = __errno_location ();
      save_errno = *D.17452;
      D.17453 = ioctl (0, 21523, &ws);
      if (D.17453 == 0) goto <D.17454>; else goto <D.17455>;
      <D.17454>:
      D.17456 = ws.ws_col;
      D.17457 = (int) D.17456;
      D.17458 = D.17457 << 16;
      D.17459 = ws.ws_row;
      D.17460 = (int) D.17459;
      ret = D.17458 | D.17460;
      D.17452 = __errno_location ();
      *D.17452 = save_errno;
      D.17461 = ret;
      return D.17461;
      <D.17455>:
      D.17461 = -1;
      return D.17461;
    }
  finally
    {
      ws = {CLOBBER};
    }
}


__attribute__((__gnu_inline__, __pure__, __leaf__, __nothrow__))
atoi (const char * __nptr)
{
  int D.17464;
  long int D.17465;

  D.17465 = strtol (__nptr, 0B, 10);
  D.17464 = (int) D.17465;
  return D.17464;
}


set_control_chars (struct MonoArray * control_chars, const guchar * cc)
{
  unsigned char D.17467;
  const guchar * D.17468;
  unsigned char D.17469;
  const guchar * D.17470;
  unsigned char D.17471;
  const guchar * D.17472;
  unsigned char D.17473;
  const guchar * D.17474;
  unsigned char D.17475;
  const guchar * D.17476;
  unsigned char D.17477;
  const guchar * D.17478;
  unsigned char D.17479;
  const guchar * D.17480;
  unsigned char D.17481;
  const guchar * D.17482;
  unsigned char D.17483;
  const guchar * D.17484;
  unsigned char D.17485;
  const guchar * D.17486;
  unsigned char D.17487;
  const guchar * D.17488;
  unsigned char D.17489;
  const guchar * D.17490;
  unsigned char D.17491;
  const guchar * D.17492;
  unsigned char D.17493;
  const guchar * D.17494;
  unsigned char D.17495;
  const guchar * D.17496;
  unsigned char D.17497;
  const guchar * D.17498;
  unsigned char D.17499;

  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 0);
    D.17467 = *cc;
    *__p = D.17467;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 1);
    D.17468 = cc + 1;
    D.17469 = *D.17468;
    *__p = D.17469;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 2);
    D.17470 = cc + 2;
    D.17471 = *D.17470;
    *__p = D.17471;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 3);
    D.17472 = cc + 3;
    D.17473 = *D.17472;
    *__p = D.17473;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 4);
    D.17474 = cc + 4;
    D.17475 = *D.17474;
    *__p = D.17475;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 5);
    D.17476 = cc + 5;
    D.17477 = *D.17476;
    *__p = D.17477;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 6);
    D.17478 = cc + 6;
    D.17479 = *D.17478;
    *__p = D.17479;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 7);
    D.17480 = cc + 7;
    D.17481 = *D.17480;
    *__p = D.17481;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 8);
    D.17482 = cc + 8;
    D.17483 = *D.17482;
    *__p = D.17483;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 9);
    D.17484 = cc + 9;
    D.17485 = *D.17484;
    *__p = D.17485;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 10);
    D.17486 = cc + 10;
    D.17487 = *D.17486;
    *__p = D.17487;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 11);
    D.17488 = cc + 11;
    D.17489 = *D.17488;
    *__p = D.17489;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 12);
    D.17490 = cc + 12;
    D.17491 = *D.17490;
    *__p = D.17491;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 13);
    D.17492 = cc + 13;
    D.17493 = *D.17492;
    *__p = D.17493;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 14);
    D.17494 = cc + 14;
    D.17495 = *D.17494;
    *__p = D.17495;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 15);
    D.17496 = cc + 15;
    D.17497 = *D.17496;
    *__p = D.17497;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 16);
    D.17498 = cc + 16;
    D.17499 = *D.17498;
    *__p = D.17499;
  }
}


console_set_signal_handlers ()
{
  struct sigaction sigcont;
  struct sigaction sigint;
  struct sigaction sigwinch;

  try
    {
      memset (&sigcont, 0, 152);
      memset (&sigint, 0, 152);
      memset (&sigwinch, 0, 152);
      sigcont.__sigaction_handler.sa_handler = sigcont_handler;
      sigcont.sa_flags = 0;
      sigemptyset (&sigcont.sa_mask);
      sigaction (18, &sigcont, &save_sigcont);
      sigint.__sigaction_handler.sa_handler = sigint_handler;
      sigint.sa_flags = 0;
      sigemptyset (&sigint.sa_mask);
      sigaction (2, &sigint, &save_sigint);
      sigwinch.__sigaction_handler.sa_handler = sigwinch_handler;
      sigwinch.sa_flags = 0;
      sigemptyset (&sigwinch.sa_mask);
      sigaction (28, &sigwinch, &save_sigwinch);
    }
  finally
    {
      sigcont = {CLOBBER};
      sigint = {CLOBBER};
      sigwinch = {CLOBBER};
    }
}


sigwinch_handler (int signo, void * the_siginfo, void * data)
{
  void (*<T1097>) (int, struct siginfo_t *, void *) D.17502;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims != -1) goto <D.17500>; else goto <D.17501>;
  <D.17500>:
  cols_and_lines = dims;
  <D.17501>:
  D.17502 = save_sigwinch.__sigaction_handler.sa_sigaction;
  if (D.17502 > 1B) goto <D.17503>; else goto <D.17504>;
  <D.17503>:
  D.17502 = save_sigwinch.__sigaction_handler.sa_sigaction;
  D.17502 (signo, the_siginfo, data);
  <D.17504>:
}


sigint_handler (int signo)
{
  int in_sigint.17;
  int * D.17508;
  int save_errno;

  in_sigint.17 = in_sigint;
  if (in_sigint.17 != 0) goto <D.17506>; else goto <D.17507>;
  <D.17506>:
  return;
  <D.17507>:
  in_sigint = 1;
  D.17508 = __errno_location ();
  save_errno = *D.17508;
  need_cancel = 1;
  mono_gc_finalize_notify ();
  D.17508 = __errno_location ();
  *D.17508 = save_errno;
  in_sigint = 0;
}


sigcont_handler (int signo, void * the_siginfo, void * data)
{
  gchar * keypad_xmit_str.18;
  long unsigned int D.17513;
  long int D.17514;
  void (*<T1097>) (int, struct siginfo_t *, void *) D.17515;
  int unused;

  tcsetattr (0, 0, &mono_attr);
  keypad_xmit_str.18 = keypad_xmit_str;
  if (keypad_xmit_str.18 != 0B) goto <D.17511>; else goto <D.17512>;
  <D.17511>:
  keypad_xmit_str.18 = keypad_xmit_str;
  keypad_xmit_str.18 = keypad_xmit_str;
  D.17513 = __strlen_g (keypad_xmit_str.18);
  D.17514 = write (1, keypad_xmit_str.18, D.17513);
  unused = (int) D.17514;
  <D.17512>:
  D.17515 = save_sigcont.__sigaction_handler.sa_sigaction;
  if (D.17515 > 1B) goto <D.17516>; else goto <D.17517>;
  <D.17516>:
  D.17515 = save_sigcont.__sigaction_handler.sa_sigaction;
  D.17515 (signo, the_siginfo, data);
  <D.17517>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.17518;
  long unsigned int D.17519;

  D.17519 = __builtin_object_size (__dest, 0);
  D.17518 = __builtin___memset_chk (__dest, __ch, __len, D.17519);
  return D.17518;
}


