Subversion Repositories spk

Rev

Rev 185 | Rev 197 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 185 Rev 196
Line 249... Line 249...
249
	}
249
	}
250
	fclose ( id );
250
	fclose ( id );
251
 
251
 
252
	// check its not a new format already
252
	// check its not a new format already
253
	int check = CSpkFile::CheckFile(filename);
253
	int check = CSpkFile::CheckFile(filename);
254
	if ( check == SPKFILE_INVALID && CFileIO(filename).isFileExtension("xsp") )
254
	if ( check == SPKFILE_INVALID && CFileIO(filename).isFileExtension(L"xsp") )
255
	{
255
	{
256
		printf ( "* Converting XSP File, %s... ", filename.c_str() );
256
		printf ( "* Converting XSP File, %s... ", filename.c_str() );
257
		CXspFile xspFile;
257
		CXspFile xspFile;
258
		if ( !xspFile.ConvertOld(filename) )
258
		if ( !xspFile.ConvertOld(filename) )
259
		{
259
		{
Line 456... Line 456...
456
			return;
456
			return;
457
		}
457
		}
458
		read = true;
458
		read = true;
459
	}
459
	}
460
	// otherwise its an old ship file
460
	// otherwise its an old ship file
461
	else if ( CFileIO(filename).isFileExtension("xsp") )
461
	else if ( CFileIO(filename).isFileExtension(L"xsp") )
462
	{
462
	{
463
		printf ( "* Converting XSP File, %s...\n", filename.c_str() );
463
		printf ( "* Converting XSP File, %s...\n", filename.c_str() );
464
		pBaseFile = new CXspFile;
464
		pBaseFile = new CXspFile;
465
		if ( !((CXspFile *)pBaseFile)->ConvertOld(filename) )
465
		if ( !((CXspFile *)pBaseFile)->ConvertOld(filename) )
466
		{
466
		{
Line 1230... Line 1230...
1230
	return GetInput();
1230
	return GetInput();
1231
}
1231
}
1232
 
1232
 
1233
void GenerateUpdateList(int argc, char **argv)
1233
void GenerateUpdateList(int argc, char **argv)
1234
{
1234
{
1235
	Utils::String currentDir = CFileIO(argv[0]).dir();
1235
	Utils::WString currentDir = CFileIO(argv[0]).dir();
1236
	CDirIO Dir(currentDir);
1236
	CDirIO Dir(currentDir);
1237
 
1237
 
1238
	Utils::CStringList list;
1238
	Utils::WStringList list;
1239
	for (int i = 2; i < argc; ++i)
1239
	for (int i = 2; i < argc; ++i)
1240
	{
1240
	{
1241
		Utils::String file(argv[i]);
1241
		Utils::String file(argv[i]);
1242
		if (CFileIO::Exists(file))
1242
		if (CFileIO::Exists(file))
1243
			list.pushBack(file, "file");
1243
			list.pushBack(file, L"file");
1244
		else if (CFileIO::Exists(Dir.file(file)))
1244
		else if (CFileIO::Exists(Dir.file(file)))
1245
			list.pushBack(Dir.file(file), "file");
1245
			list.pushBack(Dir.file(file), L"file");
1246
		else if (CDirIO::Exists(file))
1246
		else if (CDirIO::Exists(file))
1247
			list.pushBack(file, "dir");
1247
			list.pushBack(file, L"dir");
1248
		else if (CDirIO::Exists(Dir.dir(file)))
1248
		else if (CDirIO::Exists(Dir.dir(file)))
1249
			list.pushBack(Dir.dir(file), "dir");
1249
			list.pushBack(Dir.dir(file), L"dir");
1250
		else
1250
		else
1251
			list.pushBack(file, "pattern");
1251
			list.pushBack(file, L"pattern");
1252
	}
1252
	}
1253
 
1253
 
1254
	if (list.empty())
1254
	if (list.empty())
1255
		printf("unable to find any packages");
1255
		printf("unable to find any packages");
1256
	else
1256
	else
1257
	{
1257
	{
1258
		Utils::CStringList fileList;
1258
		Utils::WStringList fileList;
1259
		for (auto itr = list.begin(); itr != list.end(); itr++)
1259
		for (auto itr = list.begin(); itr != list.end(); itr++)
1260
		{
1260
		{
1261
			Utils::String file = (*itr)->str;
1261
			Utils::WString file = (*itr)->str;
1262
			Utils::String data = (*itr)->data;
1262
			Utils::WString data = (*itr)->data;
1263
			if (data == "file")
1263
			if (data == L"file")
1264
				fileList.pushBack(file);
1264
				fileList.pushBack(file);
1265
			else if (data == "dir")
1265
			else if (data == L"dir")
1266
			{
1266
			{
1267
				CDirIO dir(file);
1267
				CDirIO dir(file);
1268
				Utils::CStringList d;
1268
				Utils::WStringList d;
1269
				if (dir.dirList(d))
1269
				if (dir.dirList(d))
1270
				{
1270
				{
1271
					for (auto itr2 = d.begin(); itr2 != d.end(); itr2++)
1271
					for (auto itr2 = d.begin(); itr2 != d.end(); itr2++)
1272
					{
1272
					{
1273
						Utils::String ext = CFileIO((*itr2)->str).extension().lower();
1273
						Utils::WString ext = CFileIO((*itr2)->str).extension().lower();
1274
						if(ext == "xsp" || ext == "spk")
1274
						if(ext == L"xsp" || ext == L"spk")
1275
							fileList.pushBack(dir.file((*itr2)->str));
1275
							fileList.pushBack(dir.file((*itr2)->str));
1276
					}
1276
					}
1277
				}
1277
				}
1278
			}
1278
			}
1279
			else if (data == "pattern")
1279
			else if (data == "pattern")
1280
			{				
1280
			{				
1281
				CFileIO f(file);
1281
				CFileIO f(file);
1282
				CDirIO dir(f.dir());
1282
				CDirIO dir(f.dir());
1283
 
1283
 
1284
				if (!dir.exists())
1284
				if (!dir.exists())
1285
					dir = CDirIO(Dir.dir(dir.dir()));
1285
					dir = CDirIO(Dir.dir(dir.dir()));
1286
 
1286
 
1287
				Utils::CStringList d;
1287
				Utils::WStringList d;
1288
				if (dir.dirList(d, Utils::String::Null(), f.filename()))
1288
				if (dir.dirList(d, Utils::WString::Null(), f.filename()))
1289
				{
1289
				{
1290
					for (auto itr2 = d.begin(); itr2 != d.end(); itr2++)
1290
					for (auto itr2 = d.begin(); itr2 != d.end(); itr2++)
1291
					{
1291
					{
1292
						Utils::String ext = CFileIO((*itr2)->str).extension().lower();
1292
						Utils::WString ext = CFileIO((*itr2)->str).extension().lower();
1293
						if (ext == "xsp" || ext == "spk")
1293
						if (ext == L"xsp" || ext == L"spk")
1294
							fileList.pushBack(dir.file((*itr2)->str));
1294
							fileList.pushBack(dir.file((*itr2)->str));
1295
					}
1295
					}
1296
				}
1296
				}
1297
			}
1297
			}
1298
		}
1298
		}
Line 1303... Line 1303...
1303
		{
1303
		{
1304
			CPackages packages;
1304
			CPackages packages;
1305
 
1305
 
1306
			Utils::CStringList filedata;
1306
			Utils::CStringList filedata;
1307
			for (auto itr = fileList.begin(); itr != fileList.end(); itr++)
1307
			for (auto itr = fileList.begin(); itr != fileList.end(); itr++)
1308
			{
1308
			{
1309
				printf("Reading file: %s\n", (*itr)->str.c_str());
1309
				wprintf(L"Reading file: %s\n", (*itr)->str.c_str());
1310
 
1310
 
1311
				int error = 0;
1311
				int error = 0;
1312
				CBaseFile *p = packages.openPackage((*itr)->str, &error, 0, SPKREAD_NODATA);
1312
				CBaseFile *p = packages.openPackage((*itr)->str.toString(), &error, 0, SPKREAD_NODATA);
1313
				if (!p)
1313
				if (!p)
1314
				{
1314
				{
1315
					printf("\tERROR!\n");
1315
					printf("\tERROR!\n");
1316
					continue;
1316
					continue;
1317
				}
1317
				}
Line 1327... Line 1327...
1327
 
1327
 
1328
			if (filedata.empty())
1328
			if (filedata.empty())
1329
				printf("unable to find any packages");
1329
				printf("unable to find any packages");
1330
			else				
1330
			else				
1331
			{
1331
			{
1332
				Utils::String dest = Dir.file("xpackagedata.dat");
1332
				Utils::WString dest = Dir.file("xpackagedata.dat");
1333
				if (CFileIO(dest).writeFile(&filedata))
1333
				if (CFileIO(dest).writeFile(&filedata))
1334
					printf("web update file, xpackagedata.dat, generated");
1334
					printf("web update file, xpackagedata.dat, generated");
1335
				else
1335
				else
1336
					printf("unable to write update file");
1336
					printf("unable to write update file");
1337
			}
1337
			}
1338
		}
1338
		}
1339
	}
1339
	}
1340
}
1340
}
1341
 
1341
 
1342
void GenerateUpdateFile(const Utils::String &spkfile)
1342
void GenerateUpdateFile(const Utils::WString &spkfile)
1343
{
1343
{
1344
	if (!CFileIO::Exists(spkfile))
1344
	if (!CFileIO::Exists(spkfile))
1345
	{
1345
	{
1346
		printf("Error: The package file, %s, does not exist", spkfile.c_str());
1346
		wprintf(L"Error: The package file, %s, does not exist", spkfile.c_str());
1347
		return;
1347
		return;
1348
	}
1348
	}
1349
 
1349
 
1350
	int check = CSpkFile::CheckFile(spkfile);
1350
	int check = CSpkFile::CheckFile(spkfile.toString());
1351
	if ( check == SPKFILE_MULTI )
1351
	if ( check == SPKFILE_MULTI )
1352
	{
1352
	{
1353
		printf("Error: Multi-Package files currently not supported\n");
1353
		printf("Error: Multi-Package files currently not supported\n");
1354
		return;
1354
		return;
1355
	}
1355
	}
1356
	else if ( check == SPKFILE_OLD )
1356
	else if ( check == SPKFILE_OLD )
1357
	{
1357
	{
1358
		printf("Error: unable to read old format spk file, try spkconvert first\n");
1358
		printf("Error: unable to read old format spk file, try spkconvert first\n");
1359
		return;
1359
		return;
1360
	}
1360
	}
1361
	else if ( check == SPKFILE_INVALID )
1361
	else if ( check == SPKFILE_INVALID )
1362
	{
1362
	{
1363
		printf("Error: %s doesn't appear to be a valid package file\n", spkfile.c_str());
1363
		wprintf(L"Error: %s doesn't appear to be a valid package file\n", spkfile.c_str());
1364
		return;
1364
		return;
1365
	}
1365
	}
1366
 
1366
 
1367
	CPackages p;
1367
	CPackages p;
1368
	int error;
1368
	int error;
1369
	CBaseFile *package = p.openPackage(spkfile, &error, 0, SPKREAD_NODATA);
1369
	CBaseFile *package = p.openPackage(spkfile.toString(), &error, 0, SPKREAD_NODATA);
1370
	if ( !package )
1370
	if ( !package )
1371
	{
1371
	{
1372
		printf("Error: unable to open package file, %s, Error=%d\n", spkfile.c_str(), error);
1372
		wprintf(L"Error: unable to open package file, %s, Error=%d\n", spkfile.c_str(), error);
1373
		return;
1373
		return;
1374
	}
1374
	}
1375
 
1375
 
1376
	Utils::String file = package->createUpdateFile(CFileIO(spkfile).dir());
1376
	Utils::WString file = package->createUpdateFile(CFileIO(spkfile).dir());
1377
	if ( file.empty() )
1377
	if ( file.empty() )
1378
		printf("Error: unable to create update file for: %s, Directory=%s\n", spkfile.c_str(), CFileIO(spkfile).dir().c_str());
1378
		wprintf(L"Error: unable to create update file for: %s, Directory=%s\n", spkfile.c_str(), CFileIO(spkfile).dir().c_str());
1379
	else
1379
	else
1380
		printf("Update file: %s has been created for package, %s\n", file.c_str(), spkfile.c_str());
1380
		wprintf(L"Update file: %s has been created for package, %s\n", file.c_str(), spkfile.c_str());
1381
 
1381
 
1382
	delete package;
1382
	delete package;
1383
 
1383
 
1384
}
1384
}
1385
 
1385
 
Line 1424... Line 1424...
1424
		printf("Error: Unable to generate packager script\n");
1424
		printf("Error: Unable to generate packager script\n");
1425
		return;
1425
		return;
1426
	}
1426
	}
1427
 
1427
 
1428
	if ( toFile.Empty() )
1428
	if ( toFile.Empty() )
1429
		toFile = CFileIO(spkfile).GetDirIO().file(package->name() + "_" + package->author() + ".sps");
1429
		toFile = CFileIO(spkfile).GetDirIO().file(package->name() + "_" + package->author() + ".sps").toString();
1430
 
1430
 
1431
	// save package file
1431
	// save package file
1432
	if ( CFileIO(toFile.ToString()).writeFile(&list) )
1432
	if ( CFileIO(toFile.ToString()).writeFile(&list) )
1433
		printf("Packager script, %s, has been geenrated\n", toFile.c_str());
1433
		printf("Packager script, %s, has been geenrated\n", toFile.c_str());
1434
	else
1434
	else
Line 1464... Line 1464...
1464
 
1464
 
1465
	CPackages p;
1465
	CPackages p;
1466
	p.startup(".", ".", myDoc);
1466
	p.startup(".", ".", myDoc);
1467
	Utils::CStringList malformed, unknown;
1467
	Utils::CStringList malformed, unknown;
1468
 
1468
 
1469
	Utils::String curDir = CFileIO(filename).dir();
1469
	Utils::String curDir = CFileIO(filename).dir().toString();
1470
	if ( curDir.empty() ) curDir = "./";
1470
	if ( curDir.empty() ) curDir = L"./";
1471
 
1471
 
1472
	Utils::CStringList variables;
1472
	Utils::CStringList variables;
1473
	variables.pushBack("$PATH", curDir);
1473
	variables.pushBack("$PATH", curDir);
1474
 
1474
 
1475
	CFileProgress info(&p, NULL, "Adding File");
1475
	CFileProgress info(&p, NULL, "Adding File");
Line 1509... Line 1509...
1509
		saveto = saveto.findReplace("//", "/");
1509
		saveto = saveto.findReplace("//", "/");
1510
		if ( !saveto.right(4).Compare(".spk") && package->GetType() != TYPE_XSP )
1510
		if ( !saveto.right(4).Compare(".spk") && package->GetType() != TYPE_XSP )
1511
			saveto += ".spk";
1511
			saveto += ".spk";
1512
		else if ( !saveto.right(4).Compare(".xsp") && package->GetType() == TYPE_XSP )
1512
		else if ( !saveto.right(4).Compare(".xsp") && package->GetType() == TYPE_XSP )
1513
			saveto += ".xsp";
1513
			saveto += ".xsp";
1514
		printf("Saving file to: %s\n", CFileIO(saveto).fullFilename().c_str());
1514
		wprintf(L"Saving file to: %s\n", CFileIO(saveto).fullFilename().c_str());
1515
		if ( verify )
1515
		if ( verify )
1516
			printf("Package can be created from this script\n");
1516
			printf("Package can be created from this script\n");
1517
		else
1517
		else
1518
		{
1518
		{
1519
			// write script
1519
			// write script
Line 1531... Line 1531...
1531
		if ( !saveto.empty() ) {
1531
		if ( !saveto.empty() ) {
1532
			saveto = saveto.findReplace("$DEFAULTDIR", curDir + "/");
1532
			saveto = saveto.findReplace("$DEFAULTDIR", curDir + "/");
1533
			saveto = saveto.findReplace("$PATH", curDir);
1533
			saveto = saveto.findReplace("$PATH", curDir);
1534
			saveto = saveto.findReplace("\\", "/");
1534
			saveto = saveto.findReplace("\\", "/");
1535
			saveto = saveto.findReplace("//", "/");
1535
			saveto = saveto.findReplace("//", "/");
1536
			printf("Exporting file to: %s\n", CFileIO(saveto).fullFilename().c_str());
1536
			wprintf(L"Exporting file to: %s\n", CFileIO(saveto).fullFilename().c_str());
1537
			if ( verify )
1537
			if ( verify )
1538
				printf("Package can be exported from this script\n");
1538
				printf("Package can be exported from this script\n");
1539
			else
1539
			else
1540
			{
1540
			{
1541
				// export
1541
				// export
1542
				if ( package->saveToArchive(saveto, 0, p.GetGameExe()) ) {
1542
				if ( package->saveToArchive(saveto, 0, p.GetGameExe()) ) {
1543
					if ( package->IsAnyGameInPackage() ) {
1543
					if ( package->IsAnyGameInPackage() ) {
1544
						for ( int i = 0; i < p.GetGameExe()->GetNumGames(); i++ ) {
1544
						for ( int i = 0; i < p.GetGameExe()->GetNumGames(); i++ ) {
1545
							if ( package->IsGameInPackage(i + 1) ) {								
1545
							if ( package->IsGameInPackage(i + 1) ) {								
1546
								Utils::String exportFile = CFileIO(saveto).dir() + "/" + CFileIO(saveto).baseName() + "_" + CBaseFile::ConvertGameToString(i + 1) + "." + CFileIO(saveto).extension();
1546
								Utils::WString exportFile = CFileIO(saveto).dir() + L"/" + CFileIO(saveto).baseName() + L"_" + CBaseFile::ConvertGameToString(i + 1).toWString() + L"." + CFileIO(saveto).extension();
1547
								package->saveToArchive(exportFile, i + 1, p.GetGameExe());
1547
								package->saveToArchive(exportFile.toString(), i + 1, p.GetGameExe());
1548
							}
1548
							}
1549
						}
1549
						}
1550
					}
1550
					}
1551
					printf("Package: %s was exported\n", saveto.c_str());
1551
					printf("Package: %s was exported\n", saveto.c_str());
1552
				}
1552
				}