//------------------------------------------------------------------------------
// File: Main.cpp
//
// Desc: DirectShow sample code - simple movie player console application.
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------


//
//   This program uses the PlayCutscene() function provided in cutscene.cpp.  
//   It is only necessary to provide the name of a file and the application's 
//   instance handle.
//
//   If the file was played to the end, PlayCutscene returns S_OK.
//   If the user interrupted playback, PlayCutscene returns S_FALSE.
//   Otherwise, PlayCutscene will return an HRESULT error code.
//
//   Usage: cutscene <required file name>
//

#include <windows.h>

#include "cutscene.h"

#define USAGE \
        TEXT("Cutscene is a console application that demonstrates\r\n")      \
        TEXT("playing a movie at the beginning of your game.\r\n\r\n")       \
        TEXT("Please provide a valid filename on the command line.\r\n")     \
        TEXT("\r\n            Usage: cutscene <filename>\r\n")               \


//
// Main program code
//
int APIENTRY WinMain (
         HINSTANCE hInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpszMovie,
         int nCmdShow
         )
{
    HRESULT hr;
    TCHAR szMovieName[MAX_PATH];

    // Prevent C4100: unreferenced formal parameter
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(nCmdShow);

#ifdef UNICODE
    UNREFERENCED_PARAMETER(lpszMovie);

    // Get the UNICODE command line.  This is necessary for UNICODE apps
    // because the standard WinMain only passes in an LPSTR for command line.
    TCHAR szCommandLine[MAX_PATH], *pstrCommandLine=NULL;

    lstrcpyn(szCommandLine, GetCommandLine(), MAX_PATH-1);
    szCommandLine[MAX_PATH-1] = 0;      // Ensure null-termination

    pstrCommandLine = szCommandLine;

    // Skip the first part of the command line, which is the full path 
    // to the exe.  If the path contains spaces, it will be contained in quotes,
    // so the leading and trailing quotes need to be removed.
    if (*pstrCommandLine == TEXT('\"'))
    {
        // Remove the leading quotes
        pstrCommandLine++;

        // Skip characters until we reach the trailing quotes
        while (*pstrCommandLine != TEXT('\0') && *pstrCommandLine != TEXT('\"'))
            pstrCommandLine++;

        // Strip trailing quotes from executable name
        if( *pstrCommandLine == TEXT('\"'))
            pstrCommandLine++;
    }
    else
    {
        // Executable name isn't encased in quotes, so just search for the
        // first space, which indicates the end of the executable name.
        while (*pstrCommandLine != TEXT('\0') && *pstrCommandLine != TEXT(' '))
            pstrCommandLine++;
    }

    // Strip all leading spaces on file name
    while( *pstrCommandLine == TEXT(' '))
        pstrCommandLine++;

    // Finally, get the name of the media file to play
    lstrcpyn(szMovieName, pstrCommandLine, MAX_PATH);

#else
    lstrcpyn(szMovieName, lpszMovie, MAX_PATH);
#endif

    // If no filename is specified, show an error message and exit
    if (szMovieName[0] == TEXT('\0'))
    {
        MessageBox(NULL, USAGE, TEXT("Cutscene Error"), MB_OK | MB_ICONERROR);
        exit(1);
    }

    // Play movie
    hr = PlayCutscene(szMovieName, hInstance);

    return hr;
}


