157 lines
4.3 KiB
C++
157 lines
4.3 KiB
C++
#include <iostream.h>
|
|
#include <common/windows.hpp>
|
|
#include <common/openfile.hpp>
|
|
#include <proto/pakentry.hpp>
|
|
#include <proto/mediapak.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)
|
|
{
|
|
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();
|
|
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,TRUE);
|
|
}
|
|
|
|
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
|