コード例 #1
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileExtract(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* srcFileName = luaL_checkstring(*state, 2);
	const char* destFileName = luaL_checkstring(*state, 3);
	VirtualDrive::FileEntry* entry = drive->FindFileEntry(srcFileName);
	if (!entry)
	{
		state->PushBoolean(false);
		return 1;
	}

	VirtualFile file;
    if (!file.Open(*drive, srcFileName))
	{
		state->PushBoolean(false);
		return 1;
	}

	bool ret = Copy(file, destFileName);

/*	FILETIME createTime;
	FILETIME accessTime;
	FILETIME writeTime;
	HANDLE handle = CreateFile(destFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	GetFileTime(handle, &createTime, &accessTime, &writeTime);
	writeTime.dwLowDateTime = args[ 2 ].GetInteger();
	writeTime.dwHighDateTime = args[ 3 ].GetInteger();
	SetFileTime(handle, &createTime, &accessTime, &writeTime);
	CloseHandle(handle);
*/
	state->PushBoolean(ret);
	return 1;
}
コード例 #2
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileOpen(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* fileName = NULL;
	int entryIndex = -1;
	if (args[2].IsString())
		fileName = args[2].GetString();
	else if (args[2].IsNumber())
		entryIndex = args[2].GetInteger();
	else
		luaL_error(*state, "Argument 2 is not a string or integer.");

	VirtualFileHandle* file = PushVirtualFileHandleObj(state);
	if (fileName)
	{
		if (!drive->FileOpen(fileName, *file))
			return 0;
	}
	else
	{
		if (!drive->FileOpenIndex((size_t)entryIndex, *file))
			return 0;
	}

	return 1;
}
コード例 #3
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_Pack(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
    VirtualDrive::FileOrderInfoArray fileOrder;
	if (args[2].IsTable())
	{
        VirtualDrive::FileOrderInfo info;
		LuaObject tableObj = args[2];
        int index = 1;
		while (true)
		{
			LuaObject entryNameObj = tableObj[index++];
			if (!entryNameObj.IsString())
				break;
			info.entryName = entryNameObj.GetString();

			LuaObject srcPathObj = tableObj[index++];
			if (srcPathObj.IsNil())
				break;
			info.srcPath = srcPathObj.GetString();

			info.compressionMethod = 8;
			LuaObject compressionMethodObj = tableObj[index];
			if (compressionMethodObj.IsNumber())
			{
				info.compressionMethod = compressionMethodObj.GetInteger();
				index++;
			}

            fileOrder.Add(info);
		}
	}
	state->PushBoolean(drive->Pack(&fileOrder) != 0);
	return 1;
}
コード例 #4
0
ファイル: VirtualFile.cpp プロジェクト: Luomu/workspacewhiz
BOOL VirtualFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* /*pError*/)
{
	// Open() only works if a VirtualDriveManager is present.
	VirtualDriveManager* manager = VirtualDriveManager::GetInstance();
	if (!manager)
	{
		ASSERT(0);
		return FALSE;
	}

	m_strFileName = lpszFileName;

	// Parse the incoming filename.
	CString virtualDriveName;
	CString virtualFileName;
	manager->ParseFilename(lpszFileName, virtualDriveName, virtualFileName);

	VirtualDrive* drive = manager->Open(virtualDriveName, false);
	if (!drive)
		return FALSE;

	if (nOpenFlags & modeCreate)
	{
		if (drive->m_readOnly)
			return false;

		return drive->FileCreate(virtualFileName, *this);
	}

	return drive->FileOpen(virtualFileName, *this);
}
コード例 #5
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileGetFileName(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	VirtualFileHandle* fileHandle = VirtualFileHandleHandleFromLua(state, args[2]);
	state->PushString(drive->FileGetFileName(*fileHandle));
	return 1;
}
コード例 #6
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileErase(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* fileName = luaL_checkstring(*state, 2);
	state->PushBoolean(drive->FileErase(fileName) != 0);
	return 1;
}
コード例 #7
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_Open(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* fileName = luaL_checkstring(*state, 2);
	const char* defaultPassword = luaL_optstring(*state, 3, NULL);
	state->PushBoolean(drive->Open(fileName, false, defaultPassword) != 0);
	return 1;
}
コード例 #8
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileGetLength(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	VirtualFileHandle* fileHandle = VirtualFileHandleHandleFromLua(state, args[2]);
	state->PushNumber((lua_Number)drive->FileGetLength(*fileHandle));
	return 1;
}
コード例 #9
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_GetFileEntryIndex(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);

	const char* fileName = luaL_checkstring(*state, 2);
	state->PushNumber(drive->FindFileEntryIndex(fileName));
	return 1;
}
コード例 #10
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileSetLength(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	VirtualFileHandle* fileHandle = VirtualFileHandleHandleFromLua(state, args[2]);
	long len = luaL_checklong(*state, 3);
	drive->FileSetLength(*fileHandle, len);
	return 0;
}
コード例 #11
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileCreate(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* fileName = luaL_checkstring(*state, 2);
	UINT compressionLevel = (UINT)luaL_optnumber(*state, 3, 8);
	time_t fileTime = (UINT)luaL_optnumber(*state, 4, (lua_Number)time(NULL));
    VirtualFileHandle* fileHandle = PushVirtualFileHandleObj(state);
	if (!drive->FileCreate(fileName, *fileHandle, compressionLevel, &fileTime))
		return 0;
	return 1;
}
コード例 #12
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileWrite(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	VirtualFileHandle* file = VirtualFileHandleHandleFromLua(state, args[2]);
	size_t len;
    const char* buffer = luaL_checklstring(*state, 3, &len);
	len = luaL_optlong(*state, 4, len);
	drive->FileWrite(*file, buffer, len);
	return 0;
}
コード例 #13
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FindFileEntry(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);

	const char* fileName = luaL_checkstring(*state, 2);

	VirtualDrive::FileEntry* entry = drive->FindFileEntry(fileName);

	if (!entry)
		return 0;

	BuildFileEntry(state, entry);
	return 1;
}
コード例 #14
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileRead(LuaState* state)
{
    LuaStack args(state);
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	VirtualFileHandle* fileHandle = VirtualFileHandleHandleFromLua(state, args[2]);
	long len = luaL_optlong(*state, 3, -1);
	if (len == 0)
		len = (long)drive->FileGetLength(*fileHandle);

	char* buffer = new char[len];
	UINT nr = (UINT)drive->FileRead(*fileHandle, buffer, len);
	state->PushLString(buffer, nr);
	delete[] buffer;
	return 1;
}
コード例 #15
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_GetFileEntry(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);

	int entryIndex = (int)luaL_optlong(*state, 2, -1);

	VirtualDrive::FileEntry* entry;

	entry = drive->GetFileEntry(entryIndex - 1);

	if (!entry)
		return 0;

	BuildFileEntry(state, entry);
	return 1;
}
コード例 #16
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileInsert(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	const char* srcFileName = luaL_checkstring(*state, 2);
	const char* destFileName = luaL_checkstring(*state, 3);
    int compressionMethod = (UINT)luaL_optnumber(*state, 4, VirtualDrive::COMPRESSED);

	DiskFile file;
    if (!file.Open(srcFileName, File::MODE_READONLY))
	{
		state->PushBoolean(false);
		return 1;
	}

	time_t fileTime = (UINT)luaL_optnumber(*state, 5, (lua_Number)file.GetLastWriteTime());

	state->PushBoolean(drive->FileCopy(file, destFileName, compressionMethod, &fileTime) != 0);
	return 1;
}
コード例 #17
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_GetFileEntryCount(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	state->PushNumber(drive->GetFileEntryCount());
	return 1;
}
コード例 #18
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_GetFileName(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	state->PushString(drive->GetFileName());
	return 1;
}
コード例 #19
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_FileCloseAll(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	drive->FileCloseAll();
	return 0;
}
コード例 #20
0
ファイル: vdrive.cpp プロジェクト: WeyrSDev/gamecode3
int LS_VirtualDrive_Flush(LuaState* state, LuaStackObject* args)
{
	VirtualDrive* drive = VirtualDriveFromLua(state, args[1]);
	drive->Flush();
	return 0;
}