/*
 * Dummy function definitions
 */

#include "wintypes.h"
#include "debug.h"

long WINAPI stub_GDI_379(HDC16 hdc) { FIXME(relay, "STARTPAGE: stub\n"); return 1; }
long WINAPI stub_GDI_381(HDC16 hdc, SEGPTR proc) { FIXME(relay, "SETABORTPROC: stub\n"); return 1; }
long WINAPI stub_GDI_382(void) { FIXME(relay, "ABORTPROC: stub\n"); return 1; }
long WINAPI stub_GDI_530(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_531(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_532(LPINT16 buffer, INT16 xx) { 
      FIXME(relay, "(%p, %hd): stub\n",buffer,xx); 
      return 0; 
}
long WINAPI stub_GDI_536(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_538(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_540(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_543(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_555(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_560(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_561(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_564(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_565(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_566(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_571(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_572(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_573(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_556(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_558(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_GDI_569(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_489(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_490(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_492(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_496(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_902(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_905(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_906(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_907(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_909(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_910(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_911(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_912(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_913(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_914(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_915(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_916(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_918(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_919(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_920(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_922(void) { FIXME(relay, "stub\n"); return 0; }
long WINAPI stub_USER_923(void) { FIXME(relay, "stub\n"); return 0; }
