#include "stdafx.h"
#include <ver.h>
#include <stdlib.h>
#include <stdio.h>
#include "getver.h"

extern void GetVerName(LPSTR vstr, LPSTR vAppName)
{

    VS_FIXEDFILEINFO* verinfo;
    DWORD handle;
	BOOL check;
    DWORD dwSize;
	DWORD* lpResult;

    char path_buffer[_MAX_PATH] = {0};
    char drive[_MAX_DRIVE] = {0};
    char dir[_MAX_DIR] = {0};
    char fname[_MAX_FNAME] = {0};
    char ext[_MAX_EXT] = {0};
    BYTE abData[1024] = {0};
	char szName[256] = {0};


    strcpy( path_buffer, AfxGetApp()->m_pszHelpFilePath);
    _splitpath( path_buffer, drive, dir, fname, ext );
    strcpy(fname, AfxGetApp()->m_pszExeName);
    strcpy( ext, ".EXE");
    _makepath(	path_buffer, drive, dir, fname, ext );
 


		
    dwSize = GetFileVersionInfoSize(path_buffer, &handle);
    if( 0 == dwSize ){
	    wsprintf( vstr, "0.0");
	    vAppName = NULL;
	    return;
    }

    GetFileVersionInfo(path_buffer, handle, dwSize, abData);
    

    VerQueryValue(abData, "\\", (void**)&verinfo, (UINT*)&dwSize);


    int v0, v1, v2, v3;
    v0 = (int)(verinfo->dwProductVersionMS >> 16) & 0xFF;
    v1 = (int)(verinfo->dwProductVersionMS >>  0) & 0xFF;
    v2 = (int)(verinfo->dwProductVersionLS >> 16) & 0xFF;
    v3 = (int)(verinfo->dwProductVersionLS >>  0) & 0xFF;

    if (v0 == 0)
    {
	    if (v1 <= 5)
	    {
		    wsprintf(vstr,"0.%d.%03d alpha", v1, v2 * 256 + v3);
	    }
	    else
	    {
		    wsprintf(vstr,"0.%d.%03d beta", v1, v2 * 256 + v3);
	    }
    }
    else
    {
	    wsprintf(vstr,"%d.%02d", v0, v3);
    }



    check = VerQueryValue(abData, "\\VarFileInfo\\Translation", 
                  (void**)&lpResult, 
                  (UINT*)&dwSize);


    if (dwSize!=0) {
		wsprintf(szName, "\\StringFileInfo\\%04hX%04hX\\InternalName", 
                          LOWORD(*lpResult),
                          HIWORD(*lpResult));
                          
        check = VerQueryValue(abData, szName, (void**)&lpResult, (UINT*)&dwSize);
		if( check ){
			strcpy(vAppName, (char *)lpResult);
		}
    }



    if( 0 == dwSize ){
	    vAppName = NULL;
	    return;
    }

	
}	
