supportw_register_delegate (const char * function_name, void * fnptr)
{
  _Bool D.11157;
  _Bool D.11158;
  _Bool D.11159;
  gboolean D.11162;
  struct FnPtr * ptr;

  D.11157 = function_name == 0B;
  D.11158 = fnptr == 0B;
  D.11159 = D.11157 | D.11158;
  if (D.11159 != 0) goto <D.11160>; else goto <D.11161>;
  <D.11160>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "supportw.c", 68, "function_name && fnptr");
  D.11162 = 0;
  return D.11162;
  <D.11161>:
  ptr = bsearch (function_name, &functions, 1, 16, compare_names);
  if (ptr == 0B) goto <D.11163>; else goto <D.11164>;
  <D.11163>:
  monoeg_g_log (0B, 16, "Function \'%s\' not supported.", function_name);
  D.11162 = 0;
  return D.11162;
  <D.11164>:
  ptr->fnptr = fnptr;
  D.11162 = 1;
  return D.11162;
}


compare_names (const void * key, const void * p)
{
  int D.11166;
  int D.11104;
  const char * D.11167;
  struct FnPtr * ptr;

  ptr = p;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.11167 = ptr->fname;
    D.11104 = __builtin_strcmp (key, D.11167);
  }
  D.11166 = D.11104;
  return D.11166;
}


bsearch (const void * __key, const void * __base, size_t __nmemb, size_t __size, int (*__compar_fn_t) (const void *, const void *) __compar)
{
  long unsigned int D.11169;
  long unsigned int D.11170;
  void * D.11177;
  size_t __l;
  size_t __u;
  size_t __idx;
  const void * __p;
  int __comparison;

  __l = 0;
  __u = __nmemb;
  goto <D.2327>;
  <D.2326>:
  D.11169 = __l + __u;
  __idx = D.11169 / 2;
  D.11170 = __idx * __size;
  __p = __base + D.11170;
  __comparison = __compar (__key, __p);
  if (__comparison < 0) goto <D.11171>; else goto <D.11172>;
  <D.11171>:
  __u = __idx;
  goto <D.11173>;
  <D.11172>:
  if (__comparison > 0) goto <D.11174>; else goto <D.11175>;
  <D.11174>:
  __l = __idx + 1;
  goto <D.11176>;
  <D.11175>:
  D.11177 = __p;
  return D.11177;
  <D.11176>:
  <D.11173>:
  <D.2327>:
  if (__l < __u) goto <D.2326>; else goto <D.2328>;
  <D.2328>:
  D.11177 = 0B;
  return D.11177;
}


supportw_test_all ()
{
  void * D.11179;
  const char * D.11182;
  int i;

  register_assembly ("System.Windows.Forms", &swf_registered);
  i = 0;
  goto <D.11123>;
  <D.11122>:
  {
    struct FnPtr * ptr;

    ptr = &functions[i];
    D.11179 = ptr->fnptr;
    if (D.11179 == 0B) goto <D.11180>; else goto <D.11181>;
    <D.11180>:
    D.11182 = ptr->fname;
    monoeg_g_log (0B, 16, "%s wasn\'t registered.", D.11182);
    <D.11181>:
  }
  i = i + 1;
  <D.11123>:
  if (i == 0) goto <D.11122>; else goto <D.11124>;
  <D.11124>:
}


register_assembly (const char * name, int * registered)
{
  gboolean D.11183;

  D.11183 = 0;
  return D.11183;
}


FindWindowExW (void * hwndParent, void * hwndChildAfter, const char * classw, const char * window)
{
  int D.11185;
  void * D.11188;
  void * (*<T198b>) (void *, void *, const char *, const char *) func.0;
  void * D.11192;
  void * (*<T198b>) (void *, void *, const char *, const char *) func.1;
  typedef void * (*func_type) (void *, void *, const char *, const char *) func_type;
  static void * (*func_type) (void *, void *, const char *, const char *) func;

  D.11185 = register_assembly ("System.Windows.Forms", &swf_registered);
  if (D.11185 == 0) goto <D.11186>; else goto <D.11187>;
  <D.11186>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "supportw.c", 154, "register_assembly (\"System.Windows.Forms\", &swf_registered)");
  D.11188 = 0B;
  return D.11188;
  <D.11187>:
  func.0 = func;
  if (func.0 == 0B) goto <D.11190>; else goto <D.11191>;
  <D.11190>:
  D.11192 = get_function ("FindWindowExW");
  func.1 = (void * (*<T198b>) (void *, void *, const char *, const char *)) D.11192;
  func = func.1;
  <D.11191>:
  func.0 = func;
  D.11188 = func.0 (hwndParent, hwndChildAfter, classw, window);
  return D.11188;
}


get_function (const char * name)
{
  void * D.11197;
  struct FnPtr * ptr;

  ptr = bsearch (name, &functions, 1, 16, compare_names);
  if (ptr == 0B) goto <D.11195>; else goto <D.11196>;
  <D.11195>:
  monoeg_g_log (0B, 16, "Function \'%s\' not not found.", name);
  D.11197 = 0B;
  return D.11197;
  <D.11196>:
  D.11197 = ptr->fnptr;
  return D.11197;
}


SetWindowPos (void * hwnd, void * hwndInsertAfter, int x, int y, int cx, int cy, unsigned int flags)
{
  struct _IO_FILE * stderr.2;
  int D.11200;

  stderr.2 = stderr;
  fprintf (stderr.2, "SetWindowPos %p %p to [%d,%dx%d,%d] %d\n", hwnd, hwndInsertAfter, x, y, cx, cy, flags);
  D.11200 = 1;
  return D.11200;
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.11202;

  D.11202 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.11202;
}


SendMessageA (void * hwnd, unsigned int msg, void * wparam, void * lparam)
{
  long int hwnd.3;
  int D.11205;
  struct _IO_FILE * stderr.4;
  int D.11207;

  hwnd.3 = (long int) hwnd;
  D.11205 = (int) hwnd.3;
  stderr.4 = stderr;
  fprintf (stderr.4, "SendMessage (%d, 0x%x, %p, %p)\n", D.11205, msg, wparam, lparam);
  D.11207 = 0;
  return D.11207;
}


GetWindowLongA (void * hwnd, int a)
{
  int D.11209;

  D.11209 = 0;
  return D.11209;
}


