示例#1
0
文件: system.cpp 项目: doveiya/isilme
void CALL HGE_Impl::System_SetStateString(hgeStringState state, const char *value)
{
	FILE *hf;
	
	switch(state)
	{
		case HGE_ICON:			szIcon=value;
								if(pHGE->hwnd) SetClassLong(pHGE->hwnd, GCL_HICON, (LONG)LoadIcon(pHGE->hInstance, szIcon));
								break;
		case HGE_TITLE:			strcpy(szWinTitle,value);
								if(pHGE->hwnd) SetWindowText(pHGE->hwnd, szWinTitle);
								break;
		case HGE_INIFILE:		if(value) strcpy(szIniFile,Resource_MakePath(value));
								else szIniFile[0]=0;
								break;
		case HGE_LOGFILE:		if(value)
								{
									strcpy(szLogFile,Resource_MakePath(value));
									hf=fopen(szLogFile, "w");
									if(!hf) szLogFile[0]=0;
									else fclose(hf);
								}
								else szLogFile[0]=0;
								break;
	}
}
示例#2
0
文件: system.cpp 项目: doveiya/isilme
void CALL HGE_Impl::System_Snapshot(const char *filename)
{
	LPDIRECT3DSURFACE9 pSurf;
	char *shotname, tempname[_MAX_PATH];
	int i;

	if(!filename)
	{
		i=0;
		shotname=Resource_EnumFiles("shot???.bmp");
		while(shotname)
		{
			i++;
			shotname=Resource_EnumFiles();
		}
		sprintf(tempname, "shot%03d.bmp", i);
		filename=Resource_MakePath(tempname);
	}

	if(pD3DDevice)
	{
		pD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurf);
		D3DXSaveSurfaceToFile(filename, D3DXIFF_BMP, pSurf, NULL, NULL);
		pSurf->Release();
	}
}
示例#3
0
文件: resource.cpp 项目: kvakvs/hge
char* HGE_CALL HGE_Impl::Resource_EnumFolders(const char* wildcard) {
    if (wildcard) {
        if (h_search_) {
            FindClose(h_search_);
            h_search_ = nullptr;
        }
        h_search_ = FindFirstFile(Resource_MakePath(wildcard), &search_data_);
        if (h_search_ == INVALID_HANDLE_VALUE) {
            h_search_ = nullptr;
            return nullptr;
        }

        if ((search_data_.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
            strcmp(search_data_.cFileName, ".") && strcmp(search_data_.cFileName, "..")) {
            return search_data_.cFileName;
        }
        return Resource_EnumFolders();
    }
    if (!h_search_) {
        return nullptr;
    }
    for (;;) {
        if (!FindNextFile(h_search_, &search_data_)) {
            FindClose(h_search_);
            h_search_ = nullptr;
            return nullptr;
        }
        if ((search_data_.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
            strcmp(search_data_.cFileName, ".") && strcmp(search_data_.cFileName, "..")) {
            return search_data_.cFileName;
        }
    }
}
示例#4
0
bool CALL HGE_Impl::Resource_AttachPack(const char *filename, const char *password)
{
	char *szName;
	CResourceList *resItem=res;
	unzFile zip;

	szName=Resource_MakePath(filename);

	while(resItem)
	{
		if(!strcmp(szName,resItem->filename)) return false;
		resItem=resItem->next;
	}

	zip=unzOpen(szName);
	if(!zip) {
		System_Log("Unable to unzip: %s", szName);
		return false;
	}
	unzClose(zip);

	resItem=new CResourceList;
	strcpy(resItem->filename, szName);
	if(password) strcpy(resItem->password, password);
	else resItem->password[0]=0;
	resItem->next=res;
	res=resItem;

	return true;
}
示例#5
0
void HGE_CALL HGE_Impl::Resource_RemovePack(const char *filename)
{
    char *szName;
    //resource_packs_item_t *resItem = m_resources, *resPrev = 0;

    szName = Resource_MakePath(filename);
    strupr(szName);

// 	while (resItem)
// 	{
// 		if (!strcmp(szName, resItem->filename))
// 		{
// 			if (resPrev)
// 				resPrev->next = resItem->next;
// 			else
// 				m_resources = resItem->next;
// 			delete resItem;
// 			break;
// 		}
//
// 		resPrev = resItem;
// 		resItem = resItem->next;
// 	}
    auto itr = m_resources.find( szName );
    if ( itr != m_resources.end() ) {
        m_resources.erase( szName );
    }
}
示例#6
0
文件: resource.cpp 项目: kvakvs/hge
bool HGE_CALL HGE_Impl::Resource_AttachPack(const char* filename, const char* password) {
    auto res_item = res_list_;

    const auto sz_name = Resource_MakePath(filename);
    strupr(sz_name);

    while (res_item) {
        if (!strcmp(sz_name, res_item->filename)) {
            return false;
        }
        res_item = res_item->next;
    }

    const auto zip = unzOpen(sz_name);
    if (!zip) {
        return false;
    }
    unzClose(zip);

    res_item = new CResourceList;
    strcpy(res_item->filename, sz_name);
    if (password) {
        strcpy(res_item->password, password);
    }
    else {
        res_item->password[0] = 0;
    }
    res_item->next = res_list_;
    res_list_ = res_item;

    return true;
}
char* CALL HGE_Impl::Resource_EnumFolders(const char *wildcard)
{
	if(wildcard)
	{
		if(hSearch) { FindClose(hSearch); hSearch=0; }
		hSearch=FindFirstFile(Resource_MakePath(wildcard), &SearchData);
		if(hSearch==INVALID_HANDLE_VALUE) { hSearch=0; return 0; }

		if((SearchData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
		   strcmp(SearchData.cFileName,".") && strcmp(SearchData.cFileName,".."))
				return SearchData.cFileName;
		else return Resource_EnumFolders();
	}
	else
	{
		if(!hSearch) return 0;
		for(;;)
		{
			if(!FindNextFile(hSearch, &SearchData))	{ FindClose(hSearch); hSearch=0; return 0; }
			if((SearchData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
			   strcmp(SearchData.cFileName,".") && strcmp(SearchData.cFileName,".."))
					return SearchData.cFileName;
		}
	}
}
示例#8
0
bool HGE_CALL HGE_Impl::Resource_AttachPack(const char *filename, const char *password)
{
    char *szName;
    CResourceList *resItem=res;
    unzFile zip;

    szName=Resource_MakePath(filename);
    strupr(szName);

    while(resItem) {
        if(!strcmp(szName,resItem->filename)) {
            return false;
        }
        resItem=resItem->next;
    }

    zip=unzOpen(szName);
    if(!zip) {
        return false;
    }
    unzClose(zip);

    resItem=new CResourceList;
    strcpy(resItem->filename, szName);
    if(password) {
        strcpy(resItem->password, password);
    } else {
        resItem->password[0]=0;
    }
    resItem->next=res;
    res=resItem;

    return true;
}
示例#9
0
void CALL HGE_Impl::Resource_RemovePack(const char *filename)
{
	char *szName;
	CResourceList *resItem=res, *resPrev=0;

	szName=Resource_MakePath(filename);

	while(resItem)
	{
		if(!strcmp(szName,resItem->filename))
		{
			if(resPrev) resPrev->next=resItem->next;
			else res=resItem->next;
			delete resItem;
			break;
		}

		resPrev=resItem;
		resItem=resItem->next;
	}
}
示例#10
0
bool HGE_Impl::_PrepareFileEnum(const char *wildcard)
{
	if(hSearch) { closedir(hSearch); hSearch=0; }
	char *madepath = Resource_MakePath(wildcard);
	const char *fname = strrchr(madepath, '/');
	const char *dir = NULL;
	if (fname == NULL) {
		dir = ".";
		fname = madepath;
	} else {
		dir = madepath;
		char *ptr = (char *) fname;
		*ptr = '\0';  // split dir and filename.
		fname++;
	}

	strcpy(szSearchDir, dir);
	strcpy(szSearchWildcard, fname);

	hSearch=opendir(dir);
	return (hSearch!=0);
}
示例#11
0
char* HGE_CALL HGE_Impl::Resource_EnumFiles(const char *wildcard)
{
    if (wildcard)
    {
        if (m_hsearch)
        {
            FindClose(m_hsearch);
            m_hsearch = 0;
        }
        m_hsearch = FindFirstFile(Resource_MakePath(wildcard), &m_search_data);
        if (m_hsearch == INVALID_HANDLE_VALUE)
        {
            m_hsearch = 0;
            return 0;
        }

        if (!(m_search_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            return m_search_data.cFileName;
        else
            return Resource_EnumFiles();
    }
    else
    {
        if (!m_hsearch)
            return 0;
        for (;;)
        {
            if (!FindNextFile(m_hsearch, &m_search_data))
            {
                FindClose(m_hsearch);
                m_hsearch = 0;
                return 0;
            }
            if (!(m_search_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                return m_search_data.cFileName;
        }
    }
}
示例#12
0
文件: resource.cpp 项目: kvakvs/hge
void HGE_CALL HGE_Impl::Resource_RemovePack(const char* filename) {
    auto res_item = res_list_;
    CResourceList* res_prev = nullptr;

    const auto sz_name = Resource_MakePath(filename);
    strupr(sz_name);

    while (res_item) {
        if (!strcmp(sz_name, res_item->filename)) {
            if (res_prev) {
                res_prev->next = res_item->next;
            }
            else {
                res_list_ = res_item->next;
            }
            delete res_item;
            break;
        }

        res_prev = res_item;
        res_item = res_item->next;
    }
}
示例#13
0
void* CALL HGE_Impl::Resource_Load(const char *filename, DWORD *size)
{
	const char *res_err="Can't load resource: %s";

	CResourceList *resItem=res;
	char szName[_MAX_PATH];
	char szZipName[_MAX_PATH];
	unzFile zip;
	unz_file_info file_info;
	int done, i;
	void *ptr;
	FILE *hF;

	if(filename[0]=='\\' || filename[0]=='/' || filename[1]==':') goto _fromfile; // skip absolute paths

	// Load from pack

	strcpy(szName,filename);
	for(i=0; szName[i]; i++) { if(szName[i]=='/') szName[i]='\\'; }

	while(resItem)
	{
		zip=unzOpen(resItem->filename);
		done=unzGoToFirstFile(zip);
		while(done==UNZ_OK)
		{
			unzGetCurrentFileInfo(zip, &file_info, szZipName, sizeof(szZipName), NULL, 0, NULL, 0);
			for(i=0; szZipName[i]; i++)	{ if(szZipName[i]=='/') szZipName[i]='\\'; }
			if(!strcmp(szName,szZipName))
			{
				if(unzOpenCurrentFilePassword(zip, resItem->password[0] ? resItem->password : 0) != UNZ_OK)
				{
					unzClose(zip);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}

				ptr = malloc(file_info.uncompressed_size);
				if(!ptr)
				{
					unzCloseCurrentFile(zip);
					unzClose(zip);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}

				if(unzReadCurrentFile(zip, ptr, file_info.uncompressed_size) < 0)
				{
					unzCloseCurrentFile(zip);
					unzClose(zip);
					free(ptr);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}
				unzCloseCurrentFile(zip);
				unzClose(zip);
				if(size) *size=file_info.uncompressed_size;
				return ptr;
			}

			done=unzGoToNextFile(zip);
		}

		unzClose(zip);
		resItem=resItem->next;
	}

	// Load from file
_fromfile:

	hF = fopen(Resource_MakePath(filename), "rb");
	if(hF == NULL)
	{
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}

	struct stat statbuf;
	if (fstat(fileno(hF), &statbuf) == -1)
	{
		fclose(hF);
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}

	file_info.uncompressed_size = statbuf.st_size;
	ptr = malloc(file_info.uncompressed_size);
	if(!ptr)
	{
		fclose(hF);
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}
	if(fread(ptr, file_info.uncompressed_size, 1, hF) != 1)
	{
		fclose(hF);
		free(ptr);
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}

	fclose(hF);

	if(size) *size=file_info.uncompressed_size;
	return ptr;
}
示例#14
0
文件: resource.cpp 项目: kvakvs/hge
void* HGE_CALL HGE_Impl::Resource_Load(const char* filename, uint32_t* size) {
    static char* res_err = "Can't load resource: %s";

    auto res_item = res_list_;
    char sz_name[_MAX_PATH];
    char sz_zip_name[_MAX_PATH];
    unz_file_info file_info;
    int i;
    void* ptr;

    if (filename[0] == '\\' || filename[0] == '/' || filename[1] == ':') {
        goto _fromfile; // skip absolute paths
    }

    // Load from pack

    strcpy(sz_name, filename);
    strupr(sz_name);
    for (i = 0; sz_name[i]; i++) {
        if (sz_name[i] == '/') {
            sz_name[i] = '\\';
        }
    }

    while (res_item) {
        const auto zip = unzOpen(res_item->filename);
        auto done = unzGoToFirstFile(zip);
        while (done == UNZ_OK) {
            unzGetCurrentFileInfo(zip, &file_info, sz_zip_name, sizeof(sz_zip_name), nullptr, 0,
                                  nullptr, 0);
            strupr(sz_zip_name);
            for (i = 0; sz_zip_name[i]; i++) {
                if (sz_zip_name[i] == '/') {
                    sz_zip_name[i] = '\\';
                }
            }
            if (!strcmp(sz_name, sz_zip_name)) {
                if (unzOpenCurrentFilePassword(zip, res_item->password[0] ? res_item->password : 0)
                    !=
                    UNZ_OK) {
                    unzClose(zip);
                    sprintf(sz_name, res_err, filename);
                    post_error(sz_name);
                    return nullptr;
                }

                ptr = malloc(file_info.uncompressed_size);
                if (!ptr) {
                    unzCloseCurrentFile(zip);
                    unzClose(zip);
                    sprintf(sz_name, res_err, filename);
                    post_error(sz_name);
                    return nullptr;
                }

                if (unzReadCurrentFile(zip, ptr, file_info.uncompressed_size) < 0) {
                    unzCloseCurrentFile(zip);
                    unzClose(zip);
                    free(ptr);
                    sprintf(sz_name, res_err, filename);
                    post_error(sz_name);
                    return nullptr;
                }
                unzCloseCurrentFile(zip);
                unzClose(zip);
                if (size) {
                    *size = file_info.uncompressed_size;
                }
                return ptr;
            }

            done = unzGoToNextFile(zip);
        }

        unzClose(zip);
        res_item = res_item->next;
    }

    // Load from file
_fromfile:
    const auto h_f = CreateFile(Resource_MakePath(filename), GENERIC_READ,
                                FILE_SHARE_READ, nullptr, OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,
                                nullptr);
    if (h_f == INVALID_HANDLE_VALUE) {
        sprintf(sz_name, res_err, filename);
        post_error(sz_name);
        return nullptr;
    }
    file_info.uncompressed_size = GetFileSize(h_f, nullptr);
    ptr = malloc(file_info.uncompressed_size);
    if (!ptr) {
        CloseHandle(h_f);
        sprintf(sz_name, res_err, filename);
        post_error(sz_name);
        return nullptr;
    }
    if (ReadFile(h_f, ptr, file_info.uncompressed_size, &file_info.uncompressed_size,
                 nullptr) == 0) {
        CloseHandle(h_f);
        free(ptr);
        sprintf(sz_name, res_err, filename);
        post_error(sz_name);
        return nullptr;
    }

    CloseHandle(h_f);
    if (size) {
        *size = file_info.uncompressed_size;
    }
    return ptr;
}
示例#15
0
bytes_t HGE_CALL HGE_Impl::Resource_Load(const char *filename, uint32_t *size)
{
    static char *res_err = "Can't load resource: %s";

    //resource_packs_item_t *resItem = m_resources;
    char szName[_MAX_PATH];
    char szZipName[_MAX_PATH];
    unzFile zip;
    unz_file_info file_info;
    int done, i;
    void * ptr;
    HANDLE hF;

    if (filename[0] == '\\' || filename[0] == '/' || filename[1] == ':')
        goto _fromfile; // skip absolute paths

    // Load from pack

    strcpy(szName, filename);
    strupr(szName);
    for (i = 0; szName[i]; i++)
    {
        if (szName[i] == '/')
            szName[i] = '\\';
    }

    //while (resItem)
    // TODO: optimize this reopening shit out
    for( auto itr = m_resources.begin(); itr != m_resources.end(); ++itr )
    {
        resource_packs_item_t & resItem = itr->second;

        zip = unzOpen(resItem.filename.c_str());
        done = unzGoToFirstFile(zip);
        while (done == UNZ_OK)
        {
            unzGetCurrentFileInfo(zip, &file_info, szZipName, sizeof(szZipName), NULL, 0, NULL, 0);
            strupr(szZipName);
            for (i = 0; szZipName[i]; i++)
            {
                if (szZipName[i] == '/')
                    szZipName[i] = '\\';
            }
            if (!strcmp(szName, szZipName))
            {
                if (unzOpenCurrentFilePassword( zip, resItem.password.empty()
                                                ? resItem.password.c_str()
                                                : nullptr ) != UNZ_OK)
                {
                    unzClose(zip);
                    sprintf(szName, res_err, filename);
                    _PostError(szName);
                    return nullptr;
                }

                ptr = malloc(file_info.uncompressed_size);
                if (!ptr)
                {
                    unzCloseCurrentFile(zip);
                    unzClose(zip);
                    sprintf(szName, res_err, filename);
                    _PostError(szName);
                    return nullptr;
                }

                if (unzReadCurrentFile(zip, ptr, file_info.uncompressed_size) < 0)
                {
                    unzCloseCurrentFile(zip);
                    unzClose(zip);
                    free(ptr);
                    sprintf(szName, res_err, filename);
                    _PostError(szName);
                    return nullptr;
                }
                unzCloseCurrentFile(zip);
                unzClose(zip);
                if (size)
                    *size = file_info.uncompressed_size;
                return bytes_t( (char*)ptr );
            }

            done = unzGoToNextFile(zip);
        }

        unzClose(zip);
        //resItem = resItem->next;
    }

    // Load from file
_fromfile:

    hF = CreateFile(Resource_MakePath(filename), GENERIC_READ, FILE_SHARE_READ, NULL,
                    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
    if (hF == INVALID_HANDLE_VALUE)
    {
        sprintf(szName, res_err, filename);
        _PostError(szName);
        return nullptr;
    }
    file_info.uncompressed_size = GetFileSize(hF, NULL);
    ptr = malloc(file_info.uncompressed_size);
    if (!ptr)
    {
        CloseHandle(hF);
        sprintf(szName, res_err, filename);
        _PostError(szName);
        return nullptr;
    }
    if (ReadFile(hF, ptr, file_info.uncompressed_size, &file_info.uncompressed_size, NULL ) == 0)
    {
        CloseHandle(hF);
        free(ptr);
        sprintf(szName, res_err, filename);
        _PostError(szName);
        return nullptr;
    }

    CloseHandle(hF);
    if (size)
        *size = file_info.uncompressed_size;
    return bytes_t( (char*)ptr);
}
void* CALL HGE_Impl::Resource_Load(const char *filename, DWORD *size)
{
	static char *res_err="Can't load resource: %s";

	CResourceList *resItem=res;
	char szName[_MAX_PATH];
	char szZipName[_MAX_PATH];
	unzFile zip;
	unz_file_info file_info;
	int done, i;
	void *ptr;
	HANDLE hF;

	if(filename[0]=='\\' || filename[0]=='/' || filename[1]==':') goto _fromfile; // skip absolute paths

	// Load from pack
 
	strcpy(szName,filename);
	strupr(szName);
	for(i=0; szName[i]; i++) { if(szName[i]=='/') szName[i]='\\'; }

	while(resItem)
	{
		zip=unzOpen(resItem->filename);
		done=unzGoToFirstFile(zip);
		while(done==UNZ_OK)
		{
			unzGetCurrentFileInfo(zip, &file_info, szZipName, sizeof(szZipName), NULL, 0, NULL, 0);
			strupr(szZipName);
			for(i=0; szZipName[i]; i++)	{ if(szZipName[i]=='/') szZipName[i]='\\'; }
			if(!strcmp(szName,szZipName))
			{
				if(unzOpenCurrentFilePassword(zip, resItem->password[0] ? resItem->password : 0) != UNZ_OK)
				{
					unzClose(zip);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}

				ptr = malloc(file_info.uncompressed_size);
				if(!ptr)
				{
					unzCloseCurrentFile(zip);
					unzClose(zip);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}

				if(unzReadCurrentFile(zip, ptr, file_info.uncompressed_size) < 0)
				{
					unzCloseCurrentFile(zip);
					unzClose(zip);
					free(ptr);
					sprintf(szName, res_err, filename);
					_PostError(szName);
					return 0;
				}
				unzCloseCurrentFile(zip);
				unzClose(zip);
				if(size) *size=file_info.uncompressed_size;
				return ptr;
			}
			
			done=unzGoToNextFile(zip);
		}
		
		unzClose(zip);
		resItem=resItem->next;
	}

	// Load from file
_fromfile:

	hF = CreateFile(Resource_MakePath(filename), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
	if(hF == INVALID_HANDLE_VALUE)
	{
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}
	file_info.uncompressed_size = GetFileSize(hF, NULL);
	ptr = malloc(file_info.uncompressed_size);
	if(!ptr)
	{
		CloseHandle(hF);
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}
	if(ReadFile(hF, ptr, file_info.uncompressed_size, &file_info.uncompressed_size, NULL ) == 0)
	{
		CloseHandle(hF);
		free(ptr);
		sprintf(szName, res_err, filename);
		_PostError(szName);
		return 0;
	}
	
	CloseHandle(hF);
	if(size) *size=file_info.uncompressed_size;
	return ptr;
}