#define _X86_
#define WIN32_LEAN_AND_MEAN
#define _DLL
#define _MT
#define UNICODE

#include <windows.h>
#include <Shellapi.h>

#pragma optimize("gsy",on)

#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"msvcrt.lib")

#if (_MSC_VER<1300)
  #pragma comment(linker,"/RELEASE")
#endif
#pragma comment(linker, "-opt:nowin98")
#pragma comment(linker, "-entry:Main")
#pragma comment(linker, "-opt:ref")
#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-merge:.data=.text")
#pragma comment(linker, "-merge:.reloc=.text")
#pragma comment(linker, "-subsystem:console")
#pragma comment(linker,"-ignore:4078") // ignore warning about merged sections

#define OUTPUT "Hallo Welt sagt: %ws\n"

int __cdecl mainW(int argc, LPWSTR *argv)
{
  LPWSTR exe = *argv;

/*
  while(argc > 1)
  {
// Take next parameter (jumps over first)
    LPWSTR arg = *(++argv);
// Next parameter
    --argc;
// Check for the contents of the parameter here
// -> ...
  }
*/
  printf(OUTPUT, exe);
  return 0;
}

void __cdecl Main(void)
{
  int argc;
  LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
  ExitProcess(mainW(argc, argv));
}

