mono_console_init ()
{
  unsigned int fd.0;
  int fd;

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


open (const char * __path, int __oflag)
{
  int D.18308;
  int D.18311;
  int D.18316;
  int D.18318;
  int D.18319;
  int D.18322;
  int D.18323;

  D.18308 = __builtin_va_arg_pack_len ();
  if (D.18308 > 1) goto <D.18309>; else goto <D.18310>;
  <D.18309>:
  __open_too_many_args ();
  <D.18310>:
  D.18311 = __builtin_constant_p (__oflag);
  if (D.18311 != 0) goto <D.18312>; else goto <D.18313>;
  <D.18312>:
  D.18316 = __oflag & 64;
  if (D.18316 != 0) goto <D.18314>; else goto <D.18317>;
  <D.18317>:
  D.18318 = __oflag & 4259840;
  if (D.18318 == 4259840) goto <D.18314>; else goto <D.18315>;
  <D.18314>:
  D.18319 = __builtin_va_arg_pack_len ();
  if (D.18319 <= 0) goto <D.18320>; else goto <D.18321>;
  <D.18320>:
  __open_missing_mode ();
  D.18322 = __open_2 (__path, __oflag);
  return D.18322;
  <D.18321>:
  <D.18315>:
  D.18322 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.18322;
  <D.18313>:
  D.18323 = __builtin_va_arg_pack_len ();
  if (D.18323 <= 0) goto <D.18324>; else goto <D.18325>;
  <D.18324>:
  D.18322 = __open_2 (__path, __oflag);
  return D.18322;
  <D.18325>:
  D.18322 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.18322;
}


ves_icall_System_ConsoleDriver_Isatty (void * handle)
{
  MonoBoolean D.18327;
  long int handle.1;
  int D.18329;
  int D.18330;

  handle.1 = (long int) handle;
  D.18329 = (int) handle.1;
  D.18330 = isatty (D.18329);
  D.18327 = (MonoBoolean) D.18330;
  return D.18327;
}


ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean want_echo)
{
  MonoBoolean D.18332;
  int D.18333;

  D.18333 = (int) want_echo;
  D.18332 = set_property (8, D.18333);
  return D.18332;
}


set_property (gint property, gboolean value)
{
  int D.18335;
  MonoBoolean D.18338;
  unsigned int D.18339;
  unsigned int property.2;
  unsigned int D.18341;
  _Bool D.18342;
  int D.18343;
  _Bool D.18346;
  _Bool D.18347;
  _Bool D.18348;
  unsigned int D.18353;
  int D.18355;
  unsigned int D.18356;
  unsigned int D.18357;
  int D.18360;
  struct termios attr;
  gboolean callset;
  gboolean check;

  try
    {
      callset = 0;
      D.18335 = tcgetattr (0, &attr);
      if (D.18335 == -1) goto <D.18336>; else goto <D.18337>;
      <D.18336>:
      D.18338 = 0;
      return D.18338;
      <D.18337>:
      D.18339 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.18341 = D.18339 & property.2;
      D.18342 = D.18341 != 0;
      check = (gboolean) D.18342;
      D.18343 = value | check;
      if (D.18343 != 0) goto <D.18344>; else goto <D.18345>;
      <D.18344>:
      D.18346 = value == 0;
      D.18347 = check == 0;
      D.18348 = D.18346 | D.18347;
      if (D.18348 != 0) goto <D.18349>; else goto <D.18350>;
      <D.18349>:
      callset = 1;
      if (value != 0) goto <D.18351>; else goto <D.18352>;
      <D.18351>:
      D.18339 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.18353 = D.18339 | property.2;
      attr.c_lflag = D.18353;
      goto <D.18354>;
      <D.18352>:
      D.18339 = attr.c_lflag;
      D.18355 = ~property;
      D.18356 = (unsigned int) D.18355;
      D.18357 = D.18339 & D.18356;
      attr.c_lflag = D.18357;
      <D.18354>:
      <D.18350>:
      <D.18345>:
      if (callset == 0) goto <D.18358>; else goto <D.18359>;
      <D.18358>:
      D.18338 = 1;
      return D.18338;
      <D.18359>:
      D.18360 = tcsetattr (0, 0, &attr);
      if (D.18360 == -1) goto <D.18361>; else goto <D.18362>;
      <D.18361>:
      D.18338 = 0;
      return D.18338;
      <D.18362>:
      mono_attr = attr;
      D.18338 = 1;
      return D.18338;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


ves_icall_System_ConsoleDriver_SetBreak (MonoBoolean want_break)
{
  MonoBoolean D.18365;
  _Bool D.18366;
  int D.18367;

  D.18366 = want_break == 0;
  D.18367 = (int) D.18366;
  D.18365 = set_property (1, D.18367);
  return D.18365;
}


ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout)
{
  long int D.18221;
  long int iftmp.3;
  int D.18370;
  long int iftmp.4;
  unsigned long __d.5;
  long int D.18379;
  long int D.18380;
  long int D.18381;
  int D.18384;
  long int D.18385;
  int D.18386;
  long int D.18387;
  int * D.18390;
  int D.18391;
  gint32 D.18396;
  struct fd_set rfds;
  struct timeval tv;
  struct timeval * tvptr;
  struct div_t divvy;
  int ret;
  int nbytes;

  try
    {
      <D.18222>:
      {
        int __d0;
        int __d1;

        __asm__ __volatile__("cld; rep; stosq" : "=c" __d0, "=D" __d1 : "a" 0, "0" 16, "1" &rfds.fds_bits[0] : "memory");
      }
      {
        long int __d;

        __d = 0;
        D.18370 = __builtin_constant_p (__d);
        if (D.18370 != 0) goto <D.18371>; else goto <D.18372>;
        <D.18371>:
        __d.5 = (unsigned long) __d;
        if (__d.5 <= 1023) goto <D.18375>; else goto <D.18376>;
        <D.18375>:
        iftmp.4 = __d / 64;
        goto <D.18377>;
        <D.18376>:
        iftmp.4 = __fdelt_warn (__d);
        <D.18377>:
        iftmp.3 = iftmp.4;
        goto <D.18378>;
        <D.18372>:
        iftmp.3 = __fdelt_chk (__d);
        <D.18378>:
        D.18221 = iftmp.3;
      }
      D.18379 = D.18221;
      D.18380 = rfds.fds_bits[D.18379];
      D.18381 = D.18380 | 1;
      rfds.fds_bits[D.18379] = D.18381;
      if (timeout >= 0) goto <D.18382>; else goto <D.18383>;
      <D.18382>:
      divvy = div (timeout, 1000);
      D.18384 = divvy.quot;
      D.18385 = (long int) D.18384;
      tv.tv_sec = D.18385;
      D.18386 = divvy.rem;
      D.18387 = (long int) D.18386;
      tv.tv_usec = D.18387;
      tvptr = &tv;
      goto <D.18388>;
      <D.18383>:
      tvptr = 0B;
      <D.18388>:
      ret = select (1, &rfds, 0B, 0B, tvptr);
      if (ret == -1) goto <D.18389>; else goto <D.18223>;
      <D.18389>:
      D.18390 = __errno_location ();
      D.18391 = *D.18390;
      if (D.18391 == 4) goto <D.18222>; else goto <D.18223>;
      <D.18223>:
      if (ret > 0) goto <D.18392>; else goto <D.18393>;
      <D.18392>:
      nbytes = 0;
      ret = ioctl (0, 21531, &nbytes);
      if (ret >= 0) goto <D.18394>; else goto <D.18395>;
      <D.18394>:
      ret = nbytes;
      <D.18395>:
      <D.18393>:
      D.18396 = MAX_EXPR <ret, 0>;
      return D.18396;
    }
  finally
    {
      rfds = {CLOBBER};
      tv = {CLOBBER};
      divvy = {CLOBBER};
      nbytes = {CLOBBER};
    }
}


mono_console_handle_async_ops ()
{
  int need_cancel.6;

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


do_console_cancel_event ()
{
  struct MonoAppDomain * D.18402;
  struct MonoImage * D.18405;
  struct MonoClassField * cancel_handler_field.7;
  struct MonoClassField * cancel_handler_field.8;
  _Bool D.18412;
  long int D.18413;
  long int D.18414;
  struct MonoDelegate * load_value.9;
  struct MonoVTable * D.18422;
  _Bool D.18423;
  long int D.18424;
  long int D.18425;
  struct MonoClass * D.18428;
  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.18402 = domain->domain;
      if (D.18402 == 0B) goto <D.18403>; else goto <D.18404>;
      <D.18403>:
      return;
      <D.18404>:
      D.18405 = mono_defaults.corlib;
      klass = mono_class_from_name (D.18405, "System", "Console");
      if (klass == 0B) goto <D.18406>; else goto <D.18407>;
      <D.18406>:
      return;
      <D.18407>:
      cancel_handler_field.7 = cancel_handler_field;
      if (cancel_handler_field.7 == 0B) goto <D.18409>; else goto <D.18410>;
      <D.18409>:
      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.18412 = cancel_handler_field.7 == 0B;
      D.18413 = (long int) D.18412;
      D.18414 = __builtin_expect (D.18413, 0);
      if (D.18414 != 0) goto <D.18415>; else goto <D.18416>;
      <D.18415>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 246, "cancel_handler_field");
      <D.18416>:
      <D.18410>:
      vtable = mono_class_vtable_full (domain, klass, 0);
      if (vtable == 0B) goto <D.18417>; else goto <D.18418>;
      <D.18417>:
      return;
      <D.18418>:
      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.18420>; else goto <D.18421>;
      <D.18420>:
      return;
      <D.18421>:
      load_value.9 = load_value;
      D.18422 = load_value.9->object.vtable;
      klass = D.18422->klass;
      method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
      D.18423 = method == 0B;
      D.18424 = (long int) D.18423;
      D.18425 = __builtin_expect (D.18424, 0);
      if (D.18425 != 0) goto <D.18426>; else goto <D.18427>;
      <D.18426>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 258, "method != NULL");
      <D.18427>:
      D.18428 = method->klass;
      im = mono_get_delegate_invoke (D.18428);
      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};
    }
}


ves_icall_System_ConsoleDriver_TtySetup (struct MonoString * keypad, struct MonoString * teardown, struct MonoArray * * control_chars, int * * size)
{
  _Bool D.18438;
  _Bool D.18439;
  _Bool D.18440;
  int D.18443;
  int cols_and_lines.10;
  struct MonoClass * D.18447;
  struct MonoDomain * D.18448;
  struct MonoArray * D.18449;
  int D.18450;
  MonoBoolean D.18453;
  unsigned int D.18454;
  unsigned int D.18455;
  unsigned int D.18456;
  unsigned int D.18457;
  int D.18458;
  struct MonoArray * D.18461;
  int setup_finished.11;
  gchar * iftmp.12;
  int atexit_called.13;
  char * teardown_str.14;
  int dims;

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

    cols = 0;
    rows = 0;
    str = monoeg_g_getenv ("COLUMNS");
    if (str != 0B) goto <D.18434>; else goto <D.18435>;
    <D.18434>:
    cols = atoi (str);
    <D.18435>:
    str = monoeg_g_getenv ("LINES");
    if (str != 0B) goto <D.18436>; else goto <D.18437>;
    <D.18436>:
    rows = atoi (str);
    <D.18437>:
    D.18438 = cols != 0;
    D.18439 = rows != 0;
    D.18440 = D.18438 & D.18439;
    if (D.18440 != 0) goto <D.18441>; else goto <D.18442>;
    <D.18441>:
    D.18443 = cols << 16;
    cols_and_lines.10 = D.18443 | rows;
    cols_and_lines = cols_and_lines.10;
    goto <D.18445>;
    <D.18442>:
    cols_and_lines = -1;
    <D.18445>:
  }
  goto <D.18446>;
  <D.18433>:
  cols_and_lines = dims;
  <D.18446>:
  *size = &cols_and_lines;
  D.18447 = mono_defaults.byte_class;
  D.18448 = mono_domain_get ();
  D.18449 = mono_array_new (D.18448, D.18447, 17);
  mono_gc_wbarrier_generic_store (control_chars, D.18449);
  D.18450 = tcgetattr (0, &initial_attr);
  if (D.18450 == -1) goto <D.18451>; else goto <D.18452>;
  <D.18451>:
  D.18453 = 0;
  return D.18453;
  <D.18452>:
  mono_attr = initial_attr;
  D.18454 = mono_attr.c_lflag;
  D.18455 = D.18454 & 4294967293;
  mono_attr.c_lflag = D.18455;
  D.18456 = mono_attr.c_iflag;
  D.18457 = D.18456 & 4294962175;
  mono_attr.c_iflag = D.18457;
  mono_attr.c_cc[6] = 1;
  mono_attr.c_cc[5] = 0;
  D.18458 = tcsetattr (0, 0, &mono_attr);
  if (D.18458 == -1) goto <D.18459>; else goto <D.18460>;
  <D.18459>:
  D.18453 = 0;
  return D.18453;
  <D.18460>:
  D.18461 = *control_chars;
  set_control_chars (D.18461, &mono_attr.c_cc);
  setup_finished.11 = setup_finished;
  if (setup_finished.11 != 0) goto <D.18463>; else goto <D.18464>;
  <D.18463>:
  D.18453 = 1;
  return D.18453;
  <D.18464>:
  if (keypad != 0B) goto <D.18466>; else goto <D.18467>;
  <D.18466>:
  iftmp.12 = mono_string_to_utf8 (keypad);
  goto <D.18468>;
  <D.18467>:
  iftmp.12 = 0B;
  <D.18468>:
  keypad_xmit_str = iftmp.12;
  console_set_signal_handlers ();
  setup_finished = 1;
  atexit_called.13 = atexit_called;
  if (atexit_called.13 == 0) goto <D.18470>; else goto <D.18471>;
  <D.18470>:
  if (teardown != 0B) goto <D.18472>; else goto <D.18473>;
  <D.18472>:
  teardown_str.14 = mono_string_to_utf8 (teardown);
  teardown_str = teardown_str.14;
  <D.18473>:
  atexit (tty_teardown);
  <D.18471>:
  D.18453 = 1;
  return D.18453;
}


tty_teardown ()
{
  int setup_finished.15;
  gchar * teardown_str.16;
  long unsigned int D.18482;
  long int D.18483;
  int unused;

  setup_finished.15 = setup_finished;
  if (setup_finished.15 == 0) goto <D.18477>; else goto <D.18478>;
  <D.18477>:
  return;
  <D.18478>:
  teardown_str.16 = teardown_str;
  if (teardown_str.16 != 0B) goto <D.18480>; else goto <D.18481>;
  <D.18480>:
  teardown_str.16 = teardown_str;
  D.18482 = strlen (teardown_str.16);
  teardown_str.16 = teardown_str;
  D.18483 = write (1, teardown_str.16, D.18482);
  unused = (int) D.18483;
  teardown_str.16 = teardown_str;
  monoeg_g_free (teardown_str.16);
  teardown_str = 0B;
  <D.18481>:
  tcflush (0, 0);
  tcsetattr (0, 0, &initial_attr);
  set_property (8, 1);
  setup_finished = 0;
}


terminal_get_dimensions ()
{
  int * D.18485;
  int D.18486;
  short unsigned int D.18489;
  int D.18490;
  int D.18491;
  short unsigned int D.18492;
  int D.18493;
  int D.18494;
  struct winsize ws;
  int ret;
  int save_errno;

  try
    {
      D.18485 = __errno_location ();
      save_errno = *D.18485;
      D.18486 = ioctl (0, 21523, &ws);
      if (D.18486 == 0) goto <D.18487>; else goto <D.18488>;
      <D.18487>:
      D.18489 = ws.ws_col;
      D.18490 = (int) D.18489;
      D.18491 = D.18490 << 16;
      D.18492 = ws.ws_row;
      D.18493 = (int) D.18492;
      ret = D.18491 | D.18493;
      D.18485 = __errno_location ();
      *D.18485 = save_errno;
      D.18494 = ret;
      return D.18494;
      <D.18488>:
      D.18494 = -1;
      return D.18494;
    }
  finally
    {
      ws = {CLOBBER};
    }
}


atoi (const char * __nptr)
{
  int D.18497;
  long int D.18498;

  D.18498 = strtol (__nptr, 0B, 10);
  D.18497 = (int) D.18498;
  return D.18497;
}


set_control_chars (struct MonoArray * control_chars, const guchar * cc)
{
  unsigned char D.18500;
  char D.18501;
  const guchar * D.18502;
  unsigned char D.18503;
  char D.18504;
  const guchar * D.18505;
  unsigned char D.18506;
  char D.18507;
  const guchar * D.18508;
  unsigned char D.18509;
  char D.18510;
  const guchar * D.18511;
  unsigned char D.18512;
  char D.18513;
  const guchar * D.18514;
  unsigned char D.18515;
  char D.18516;
  const guchar * D.18517;
  unsigned char D.18518;
  char D.18519;
  const guchar * D.18520;
  unsigned char D.18521;
  char D.18522;
  const guchar * D.18523;
  unsigned char D.18524;
  char D.18525;
  const guchar * D.18526;
  unsigned char D.18527;
  char D.18528;
  const guchar * D.18529;
  unsigned char D.18530;
  char D.18531;
  const guchar * D.18532;
  unsigned char D.18533;
  char D.18534;
  const guchar * D.18535;
  unsigned char D.18536;
  char D.18537;
  const guchar * D.18538;
  unsigned char D.18539;
  char D.18540;
  const guchar * D.18541;
  unsigned char D.18542;
  char D.18543;
  const guchar * D.18544;
  unsigned char D.18545;
  char D.18546;
  const guchar * D.18547;
  unsigned char D.18548;
  char D.18549;

  {
    gchar * __p;

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

    __p = mono_array_addr_with_size (control_chars, 1, 1);
    D.18502 = cc + 1;
    D.18503 = *D.18502;
    D.18504 = (char) D.18503;
    *__p = D.18504;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 2);
    D.18505 = cc + 2;
    D.18506 = *D.18505;
    D.18507 = (char) D.18506;
    *__p = D.18507;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 3);
    D.18508 = cc + 3;
    D.18509 = *D.18508;
    D.18510 = (char) D.18509;
    *__p = D.18510;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 4);
    D.18511 = cc + 4;
    D.18512 = *D.18511;
    D.18513 = (char) D.18512;
    *__p = D.18513;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 5);
    D.18514 = cc + 5;
    D.18515 = *D.18514;
    D.18516 = (char) D.18515;
    *__p = D.18516;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 6);
    D.18517 = cc + 6;
    D.18518 = *D.18517;
    D.18519 = (char) D.18518;
    *__p = D.18519;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 7);
    D.18520 = cc + 7;
    D.18521 = *D.18520;
    D.18522 = (char) D.18521;
    *__p = D.18522;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 8);
    D.18523 = cc + 8;
    D.18524 = *D.18523;
    D.18525 = (char) D.18524;
    *__p = D.18525;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 9);
    D.18526 = cc + 9;
    D.18527 = *D.18526;
    D.18528 = (char) D.18527;
    *__p = D.18528;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 10);
    D.18529 = cc + 10;
    D.18530 = *D.18529;
    D.18531 = (char) D.18530;
    *__p = D.18531;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 11);
    D.18532 = cc + 11;
    D.18533 = *D.18532;
    D.18534 = (char) D.18533;
    *__p = D.18534;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 12);
    D.18535 = cc + 12;
    D.18536 = *D.18535;
    D.18537 = (char) D.18536;
    *__p = D.18537;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 13);
    D.18538 = cc + 13;
    D.18539 = *D.18538;
    D.18540 = (char) D.18539;
    *__p = D.18540;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 14);
    D.18541 = cc + 14;
    D.18542 = *D.18541;
    D.18543 = (char) D.18542;
    *__p = D.18543;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 15);
    D.18544 = cc + 15;
    D.18545 = *D.18544;
    D.18546 = (char) D.18545;
    *__p = D.18546;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 16);
    D.18547 = cc + 16;
    D.18548 = *D.18547;
    D.18549 = (char) D.18548;
    *__p = D.18549;
  }
}


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 (*<Tf91>) (int, struct siginfo_t *, void *) D.18552;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims != -1) goto <D.18550>; else goto <D.18551>;
  <D.18550>:
  cols_and_lines = dims;
  <D.18551>:
  D.18552 = save_sigwinch.__sigaction_handler.sa_sigaction;
  if (D.18552 > 1B) goto <D.18553>; else goto <D.18554>;
  <D.18553>:
  D.18552 = save_sigwinch.__sigaction_handler.sa_sigaction;
  D.18552 (signo, the_siginfo, data);
  <D.18554>:
}


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

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


sigcont_handler (int signo, void * the_siginfo, void * data)
{
  gchar * keypad_xmit_str.18;
  long unsigned int D.18563;
  long int D.18564;
  void (*<Tf91>) (int, struct siginfo_t *, void *) D.18565;
  int unused;

  tcsetattr (0, 0, &mono_attr);
  keypad_xmit_str.18 = keypad_xmit_str;
  if (keypad_xmit_str.18 != 0B) goto <D.18561>; else goto <D.18562>;
  <D.18561>:
  keypad_xmit_str.18 = keypad_xmit_str;
  D.18563 = strlen (keypad_xmit_str.18);
  keypad_xmit_str.18 = keypad_xmit_str;
  D.18564 = write (1, keypad_xmit_str.18, D.18563);
  unused = (int) D.18564;
  <D.18562>:
  D.18565 = save_sigcont.__sigaction_handler.sa_sigaction;
  if (D.18565 > 1B) goto <D.18566>; else goto <D.18567>;
  <D.18566>:
  D.18565 = save_sigcont.__sigaction_handler.sa_sigaction;
  D.18565 (signo, the_siginfo, data);
  <D.18567>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.18570;
  int D.18575;
  void * D.18577;
  long unsigned int D.18578;

  D.18570 = __builtin_constant_p (__len);
  if (D.18570 != 0) goto <D.18571>; else goto <D.18572>;
  <D.18571>:
  if (__len == 0) goto <D.18573>; else goto <D.18574>;
  <D.18573>:
  D.18575 = __builtin_constant_p (__ch);
  if (D.18575 == 0) goto <D.18568>; else goto <D.18576>;
  <D.18576>:
  if (__ch != 0) goto <D.18568>; else goto <D.18569>;
  <D.18568>:
  __warn_memset_zero_len ();
  D.18577 = __dest;
  return D.18577;
  <D.18569>:
  <D.18574>:
  <D.18572>:
  D.18578 = __builtin_object_size (__dest, 0);
  D.18577 = __builtin___memset_chk (__dest, __ch, __len, D.18578);
  return D.18577;
}


