// ### OpenGTA3 ###
// streaming

//=============================================================================
// общая работа с потоками (.img и аудио)
// TODO: написано ужасно, поэтому должно быть полностью переписано, после того
//		как будут разобраны все сопряженные части

#pragma pack(push,1)
struct CStream {	// size = 0x30
	LONG	nSectorOffset;
	LONG	nSectorsToRead;
	PVOID	lpBuffer;
	BYTE	_fC;
	BYTE	bLocked;
	BYTE	bInUse;
	BYTE	_fF;
	DWORD	dwStatus;
	HANDLE	hSemaphore;
	HANDLE	hFile;
	OVERLAPPED	overlapped;
};
#pragma pack(pop)

#define STREAM_COUNT	32

void initializeStreaming ();	// >> 406B70 (1:Initialize);
void terminateStreaming (); // >> 406370 (1:Terminate)

DWORD openStream (char * name, bool unused); // >> 4067B0 (5)
DWORD closeStream (int streamNum);	// >> 406460 (5)
void closeAllStreams ();	// >> 406690 (1/2)
bool readStream (int streamNum, BYTE * buf, DWORD streamHandle, DWORD sectorCount); // >> 406A20 (6)
DWORD getStreamStatus (int streamNum); // >> 4063E0 (7)
DWORD getLastStreamIndex (); // 406450 (1)	WTF?
//=============================================================================
// работа с .img

#pragma pack(push,1)
struct CImgDescriptor {
	char	name[40];			// file name
	BYTE	notPlayerFile;		// true for all files except 'player.img'
	BYTE	__align;
	DWORD	streamHandle;		// handle from openStream
};

#define IMG_COUNT 8
extern CImgDescriptor * imgs;	// >> 8E48D8 TODO: CImgDescriptor imgs[IMG_COUNT];
#pragma pack(pop)

int openImgFile (TCHAR * filename, bool notPlayerFile); // >> 407610 (2)