/*
 * Dummy function definitions
 */

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

long WINAPI stub_GDI_379(void) { FIXME(relay, "STARTPAGE: stub\n"); return 1; }
long WINAPI stub_GDI_380(void) { FIXME(relay, "ENDPAGE: 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; }
