Files
Work/mediapak/MAIN.CPP
2024-08-07 09:16:27 -04:00

179 lines
4.8 KiB
C++

#include <iostream.h>
#include <common/windows.hpp>
#include <common/openfile.hpp>
#include <mediapak/pakentry.hpp>
#include <mediapak/mediapak.hpp>
#include <mediapak/entryinf.hpp>
#include <sample/wave.hpp>
#include <sample/purewave.hpp>
// create(mediapakfilename)
// add(mediapak,filename,type,id)
// remove(mediapak,id)
// display(mediapakfilename)
void displayUsage(void);
BOOL handleAdd(const String &strCommand);
BOOL handleRemove(const String &strCommand);
BOOL handleList(const String &strCommand);
BOOL handleCreate(const String &strCommand);
//int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
void main(int argc,char **argv)
{
MediaPak mediaPak;
Array<EntryInfo> entryInfoArray;
String strDebug;
if(!mediaPak.open("mediapak.pak",MediaPak::OpenAlways))return;
// mediaPak.add("c:\\work\\scene\\media\\bmp\\tie1.bmp");
::sprintf(strDebug,"%d\n",mediaPak.entries());
::OutputDebugString(strDebug);
mediaPak.getInfo(entryInfoArray);
for(int index=0;index<entryInfoArray.size();index++)
{
::OutputDebugString(entryInfoArray[index].name()+String("\n"));
}
#if 0
String strCommandLine;
String strCommand;
if(1==argc){displayUsage();return;}
strCommandLine=argv[1];
strCommand=strCommandLine.betweenString(0,'(');
if(strCommand.isNull())strCommand=strCommandLine;
if(strCommand==String("add"))handleAdd(strCommandLine);
else if(strCommand==String("remove"))handleRemove(strCommandLine);
else if(strCommand==String("list"))handleList(strCommandLine);
else if(strCommand==String("create"))
{
if(handleCreate(strCommandLine))cout << "creation completed" << endl;
else cout << "creation failed"<< endl;
}
else displayUsage();
#endif
return;
}
BOOL handleAdd(const String &strCommand)
{
String strPathMediaPak;
String strPathFileName;
String strID;
String strType;
MediaPak mediaPak;
PakEntry pakEntry;
GlobalData<BYTE> mediaData;
FileHandle openFile;
strPathMediaPak=strCommand.betweenString('(',',');
strPathFileName=strCommand.betweenString(',',',');
strType=strCommand.betweenString(',',')').betweenString(',',',');
strID=strCommand.betweenString(',',')').betweenString(',',0).betweenString(',',0);
if(strPathMediaPak.isNull())return FALSE;
if(strPathFileName.isNull())return FALSE;
if(strID.isNull())return FALSE;
if(strType.isNull())return FALSE;
mediaPak.open(strPathMediaPak);
if(strType==String("SOUND"))pakEntry.type(PakEntry::Sound);
else if(strType==String("BITMAP"))pakEntry.type(PakEntry::Bitmap);
else pakEntry.type(PakEntry::Blob);
openFile.open(strPathFileName);
mediaData.size(openFile.size());
openFile.read((BYTE*)&mediaData[0],mediaData.size());
pakEntry.name(strPathFileName);
pakEntry.id(::atoi(strID));
pakEntry.rawData(mediaData);
mediaPak.add(pakEntry);
return TRUE;
}
BOOL handleRemove(const String &strCommand)
{
return FALSE;
}
BOOL handleList(const String &strCommand)
{
String pathMediaPak;
String strType;
MediaPak mediaPak;
PakEntry pakEntry;
pathMediaPak=strCommand.betweenString('(',')');
if(pathMediaPak.isNull())return FALSE;
if(!mediaPak.open(pathMediaPak))return FALSE;
for(int index=0;index<mediaPak.entries();index++)
{
mediaPak.getEntry(pakEntry,index);
if(PakEntry::Sound==pakEntry.type())strType="SOUND";
else if(PakEntry::Bitmap==pakEntry.type())strType="BITMAP";
else strType="BLOB";
cout << pakEntry.name() << " " << strType << " id:" << pakEntry.id() << endl;
}
return FALSE;
}
BOOL handleCreate(const String &strCommand)
{
String pathMediaPak;
MediaPak mediaPak;
pathMediaPak=strCommand.betweenString('(',')');
if(pathMediaPak.isNull())return FALSE;
return mediaPak.open(pathMediaPak,MediaPak::CreateAlways);
}
void displayUsage(void)
{
cout << "USAGE: mediapak add(pathmediapak,pathfilename,type,id) type=SOUND|BITMAP|BLOB" << endl;
cout << " delete(pathmediapak,id)" << endl;
cout << " list(pathmediapak)" << endl;
cout << " create(pathmediapak)" << endl;
return;
}
#if 0
MediaPak mediaPak;
PakEntry pakEntry;
GlobalData<BYTE> soundData;
FileHandle openFile;
WaveForm waveForm;
mediaPak.open("c:\\multimed.pak",TRUE);
pakEntry.type(PakEntry::Sound);
openFile.open("C:\\GAMES\\DOOM2\\DSTELEPT.WAV");
soundData.size(openFile.size());
openFile.read((BYTE*)soundData,soundData.size());
pakEntry.name("DSTELEPT");
pakEntry.id(0);
pakEntry.rawData(soundData);
mediaPak.add(pakEntry);
openFile.open("C:\\GAMES\\DOOM2\\DSPISTOL.WAV");
soundData.size(openFile.size());
openFile.read((BYTE*)soundData,soundData.size());
pakEntry.name("DSPISTOL");
pakEntry.id(0);
pakEntry.rawData(soundData);
mediaPak.add(pakEntry);
mediaPak.open("c:\\multimed.pak");
if(!mediaPak.getEntry(waveForm,0))return FALSE;
PureWave pureWave;
pureWave.play(waveForm,DeviceHandler::Wait);
mediaPak.close();
#endif