Subversion Repositories spk

Rev

Rev 331 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 331 Rev 341
Line 32... Line 32...
32
	}
32
	}
33
 
33
 
34
	void Finish(bool newline = true)
34
	void Finish(bool newline = true)
35
	{
35
	{
36
		for ( int i = m_iCount; i < 20; i++ )
36
		for ( int i = m_iCount; i < 20; i++ )
37
			printf ( "*" );
37
			wprintf(L"*" );
38
		if ( newline )
38
		if ( newline )
39
			printf ( "\n");
39
			wprintf(L"\n");
40
		m_fNextPercent = 0.0f;
40
		m_fNextPercent = 0.0f;
41
		m_iCount = 0;
41
		m_iCount = 0;
42
	}
42
	}
43
 
43
 
44
protected:
44
protected:
Line 53... Line 53...
53
			else if ( percent > 50.0f )
53
			else if ( percent > 50.0f )
54
				percent = 50.0f;
54
				percent = 50.0f;
55
		}
55
		}
56
		if ( (percent - m_fNextPercent) >= 5.0f )
56
		if ( (percent - m_fNextPercent) >= 5.0f )
57
		{
57
		{
58
			printf ( "*" );
58
			wprintf(L"*");
59
			m_fNextPercent += 5.0f;
59
			m_fNextPercent += 5.0f;
60
			++m_iCount;
60
			++m_iCount;
61
		}
61
		}
62
	}
62
	}
63
	virtual void DoingFile ( C_File *file )
63
	virtual void DoingFile ( C_File *file )
Line 187... Line 187...
187
{
187
{
188
	Utils::WString version = p->version();
188
	Utils::WString version = p->version();
189
	if ( version.lower()[0] != 'v' )
189
	if ( version.lower()[0] != 'v' )
190
		version.prepend(L"v");
190
		version.prepend(L"v");
191
 
191
 
192
	printf ( "  [%5d] ", p->GetNum() + 1 );
192
	wprintf(L"  [%5d] ", p->GetNum() + 1 );
193
 
193
 
194
	if ( indent > g_indent )
194
	if ( indent > g_indent )
195
	{
-
 
196
		printf (" \\->");
195
		wprintf(L" \\->");
197
	}
-
 
198
	for ( int i = 0; i < indent; i++ )
196
	for ( int i = 0; i < indent; i++ )
199
		printf("\t");
197
		wprintf(L"\t");
200
 
198
 
201
	g_indent = indent;
199
	g_indent = indent;
202
 
200
 
203
	if ( !p->IsEnabled() )
201
	if ( !p->IsEnabled() )
204
		printf("[D] ");
202
		wprintf(L"[D] ");
205
 
203
 
206
	wprintf(L"%s %s by %s", p->name(language).c_str(), version.c_str(), p->author().c_str());
204
	wprintf(L"%s %s by %s", p->name(language).c_str(), version.c_str(), p->author().c_str());
207
 
205
 
208
	switch (p->GetType())
206
	switch (p->GetType())
209
	{
207
	{
Line 274... Line 272...
274
	return argList->size();
272
	return argList->size();
275
}
273
}
276
 
274
 
277
bool GetAllFiles(const Utils::CommandLine& cmd, int start, Utils::WStringList &files, const Utils::WString &ext, bool showError)
275
bool GetAllFiles(const Utils::CommandLine& cmd, int start, Utils::WStringList &files, const Utils::WString &ext, bool showError)
278
{
276
{
279
	for (int i = start; i < cmd.argCount(); i++)
277
	for (size_t i = start; i < cmd.argCount(); i++)
280
	{
278
	{
281
		if (cmd.arg(i).containsAny(L"?*"))
279
		if (cmd.arg(i).containsAny(L"?*"))
282
		{
280
		{
283
			CFileIO File(cmd.fullFilename(cmd.arg(i)));
281
			CFileIO File(cmd.fullFilename(cmd.arg(i)));
284
			if (File.dirIO().exists())
282
			if (File.dirIO().exists())
Line 368... Line 366...
368
		// multi packages
366
		// multi packages
369
		if ( !package && error == INSTALLERR_NOMULTI )
367
		if ( !package && error == INSTALLERR_NOMULTI )
370
		{
368
		{
371
			if ( !packages->openMultiPackage(spkFile.fullFilename(), &lPackageList, &error, &progress))
369
			if ( !packages->openMultiPackage(spkFile.fullFilename(), &lPackageList, &error, &progress))
372
			{
370
			{
373
				printf ( "Error!\n");
371
				wprintf(L"Error!\n");
374
				continue;
372
				continue;
375
			}
373
			}
376
			progress.Finish();
374
			progress.Finish();
377
		}
375
		}
378
		else if ( package )
376
		else if ( package )
Line 380... Line 378...
380
			progress.Finish();
378
			progress.Finish();
381
			lPackageList.push_back(package);
379
			lPackageList.push_back(package);
382
		}
380
		}
383
		else
381
		else
384
		{
382
		{
385
			printf ( "ERROR!  " );
383
			wprintf(L"ERROR!  " );
386
			switch ( error )
384
			switch ( error )
387
			{
385
			{
388
				case INSTALLERR_OLD:
386
				case INSTALLERR_OLD:
389
					printf ( "File is in old format no longer supported" );
387
					wprintf(L"File is in old format no longer supported" );
390
					break;
388
					break;
391
				case INSTALLERR_NOEXIST:
389
				case INSTALLERR_NOEXIST:
392
					printf ( "file doesn't exist" );
390
					wprintf(L"file doesn't exist" );
393
					break;
391
					break;
394
				case INSTALLERR_INVALID:
392
				case INSTALLERR_INVALID:
395
					printf ( "Invalid package file" );
393
					wprintf(L"Invalid package file" );
396
					break;
394
					break;
397
				case INSTALLERR_NOSHIP:
395
				case INSTALLERR_NOSHIP:
398
					printf ( "Ship Packages are currently not supported" );
396
					wprintf(L"Ship Packages are currently not supported" );
399
					break;
397
					break;
400
				case INSTALLERR_VERSION:
398
				case INSTALLERR_VERSION:
401
					printf ( "Package file was created in a newer version, unable to open" );
399
					wprintf(L"Package file was created in a newer version, unable to open" );
402
					break;
400
					break;
403
			}
401
			}
404
			printf ( "\n");
402
			wprintf(L"\n");
405
			continue;
403
			continue;
406
		}
404
		}
407
 
405
 
408
		for ( CListNode<CBaseFile> *pNode = lPackageList.Front(); pNode; pNode = pNode->next() )
406
		for ( CListNode<CBaseFile> *pNode = lPackageList.Front(); pNode; pNode = pNode->next() )
409
		{
407
		{
Line 419... Line 417...
419
			{
417
			{
420
				case INSTALLCHECK_OLDVERSION:
418
				case INSTALLCHECK_OLDVERSION:
421
					wprintf(L"Newer version of \"%s\" already installed", packageName.c_str() );
419
					wprintf(L"Newer version of \"%s\" already installed", packageName.c_str() );
422
					if ( !g_force )
420
					if ( !g_force )
423
					{
421
					{
424
						printf ( ", Unable to install older, use -o to force installation\n" );
422
						wprintf(L", Unable to install older, use -o to force installation\n" );
425
						continue;
423
						continue;
426
					}
424
					}
427
					else
425
					else
428
					{
426
					{
429
						printf ( ", Overriding install\n" );
427
						wprintf(L", Overriding install\n" );
430
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
428
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
431
							continue;
429
							continue;
432
						break;
430
						break;
433
					}
431
					}
434
					break;
432
					break;
435
					// wait for the rest to be added
433
					// wait for the rest to be added
436
				case INSTALLCHECK_WRONGGAME:
434
				case INSTALLCHECK_WRONGGAME:
437
					wprintf ( L"ERROR! \"%s\" Wrong Game (Requires: %s)", packageName.c_str(), packages->getGameTypesString(package, false).c_str() );
435
					wprintf ( L"ERROR! \"%s\" Wrong Game (Requires: %s)", packageName.c_str(), packages->getGameTypesString(package, false).c_str() );
438
					if ( g_force )
436
					if ( g_force )
439
					{
437
					{
440
						printf ( " [FORCED]\n" );
438
						wprintf(L" [FORCED]\n" );
441
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
439
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
442
							continue;
440
							continue;
443
					}
441
					}
444
					else
442
					else
445
					{
443
					{
446
						printf("\n");
444
						wprintf(L"\n");
447
						continue;
445
						continue;
448
					}
446
					}
449
					break;
447
					break;
450
 
448
 
451
				case INSTALLCHECK_WRONGVERSION:
449
				case INSTALLCHECK_WRONGVERSION:
452
					wprintf ( L"ERROR! \"%s\" Wrong Game Version (Requires: %s)\n", packageName.c_str(), packages->getGameVersionString(package).c_str() );
450
					wprintf ( L"ERROR! \"%s\" Wrong Game Version (Requires: %s)\n", packageName.c_str(), packages->getGameVersionString(package).c_str() );
453
					if ( g_force )
451
					if ( g_force )
454
					{
452
					{
455
						printf ( " [FORCED]\n" );
453
						wprintf(L" [FORCED]\n" );
456
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
454
						if ( packages->PrepareInstallPackage(package, disabled, true) != INSTALLCHECK_OK )
457
							continue;
455
							continue;
458
					}
456
					}
459
					else
457
					else
460
					{
458
					{
461
						printf("\n");
459
						wprintf(L"\n");
462
						continue;
460
						continue;
463
					}
461
					}
464
					break;
462
					break;
465
			}
463
			}
466
 
464
 
Line 469... Line 467...
469
				Utils::WString installtext = packages->getInstallBeforeText(package);
467
				Utils::WString installtext = packages->getInstallBeforeText(package);
470
				if ( !installtext.empty() )
468
				if ( !installtext.empty() )
471
				{
469
				{
472
					installtext = installtext.stripHtml();
470
					installtext = installtext.stripHtml();
473
					wprintf(L"Installing %s: %s\n", packageName.c_str(), installtext.c_str() );
471
					wprintf(L"Installing %s: %s\n", packageName.c_str(), installtext.c_str() );
474
					printf ( "Do you want to continue with the install? " );
472
					wprintf(L"Do you want to continue with the install? " );
475
 
473
 
476
					if ( g_force )
474
					if ( g_force )
477
						printf ( "(FORCED)\n" );
475
						wprintf(L"(FORCED)\n" );
478
					else
476
					else
479
					{
477
					{
480
						Utils::WString input = GetInput().lower();
478
						Utils::WString input = GetInput().lower();
481
 
479
 
482
						if ( input != "y" && input != "yes" )
480
						if ( input != "y" && input != "yes" )
483
						{
481
						{
484
							printf ( "\nInstallion aborted!!\n\n" );
482
							wprintf(L"\nInstallion aborted!!\n\n" );
485
							packages->RemovePreparedInstall(package);
483
							packages->RemovePreparedInstall(package);
486
							continue;
484
							continue;
487
						}
485
						}
488
					}
486
					}
489
				}
487
				}
Line 495... Line 493...
495
 
493
 
496
	// is there any that couldn't install
494
	// is there any that couldn't install
497
	CLinkList<CBaseFile> lCheckPackages;
495
	CLinkList<CBaseFile> lCheckPackages;
498
	if ( packages->CheckPreparedInstallRequired(&lCheckPackages) )
496
	if ( packages->CheckPreparedInstallRequired(&lCheckPackages) )
499
	{
497
	{
500
		printf ( "\nError! Some packages are missing dependacies:\n" );
498
		wprintf(L"\nError! Some packages are missing dependacies:\n" );
501
		for ( CListNode<CBaseFile> *pNode = lCheckPackages.Front(); pNode; pNode = pNode->next() )
499
		for ( CListNode<CBaseFile> *pNode = lCheckPackages.Front(); pNode; pNode = pNode->next() )
502
		{
500
		{
503
			CSpkFile *spk = (CSpkFile *)pNode->Data();
501
			CSpkFile *spk = (CSpkFile *)pNode->Data();
504
			wprintf(L"\t%s V%s by %s, Requires:\n", spk->name(packages->GetLanguage()).c_str(), spk->version().c_str(), spk->author().c_str());
502
			wprintf(L"\t%s V%s by %s, Requires:\n", spk->name(packages->GetLanguage()).c_str(), spk->version().c_str(), spk->author().c_str());
505
			if(!spk->otherName().empty())
503
			if(!spk->otherName().empty())
Line 512... Line 510...
512
	// no packages will be installed
510
	// no packages will be installed
513
	if ( packages->GetNumPackagesInQueue() < 1 )
511
	if ( packages->GetNumPackagesInQueue() < 1 )
514
		return Utils::WString::Null();
512
		return Utils::WString::Null();
515
 
513
 
516
	// install the package file
514
	// install the package file
517
	printf ( "  - Installing                     " );
515
	wprintf(L"  - Installing                     " );
518
	CLinkList<CBaseFile> erroredPackages;
516
	CLinkList<CBaseFile> erroredPackages;
519
	if ( packages->installPreparedPackages(errors, &progress, &erroredPackages) )
517
	if ( packages->installPreparedPackages(errors, &progress, &erroredPackages) )
520
		progress.Finish();
518
		progress.Finish();
521
	else
519
	else
522
	{
520
	{
523
		printf ( "ERROR!\n" );
521
		wprintf(L"ERROR!\n" );
524
		CloseDestination(cmd, false);
522
		CloseDestination(cmd, false);
525
		return Utils::WString::Null();
523
		return Utils::WString::Null();
526
	}
524
	}
527
 
525
 
528
	// delete any errored packages
526
	// delete any errored packages
Line 577... Line 575...
577
	// lets check for the uninstall text
575
	// lets check for the uninstall text
578
	Utils::WString uText = packages->getUninstallBeforeText(p).stripHtml();
576
	Utils::WString uText = packages->getUninstallBeforeText(p).stripHtml();
579
	if (!uText.empty())
577
	if (!uText.empty())
580
	{
578
	{
581
		wprintf(L"Uninstalling: %s\n", uText.c_str() );
579
		wprintf(L"Uninstalling: %s\n", uText.c_str() );
582
		printf ( "Do you wish to continue with the uninstall? " );
580
		wprintf(L"Do you wish to continue with the uninstall? " );
583
		if ( g_force )
581
		if ( g_force )
584
			printf ( "(FORCED)\n" );
582
			wprintf(L"(FORCED)\n" );
585
		else
583
		else
586
		{
584
		{
587
			Utils::WString input = GetInput().lower();
585
			Utils::WString input = GetInput().lower();
588
			if ( input != "y" && input != "yes" )
586
			if ( input != "y" && input != "yes" )
589
			{
587
			{
590
				printf ( "\nUninstallation has been aborted!!\n" );
588
				wprintf(L"\nUninstallation has been aborted!!\n" );
591
				return false;
589
				return false;
592
			}
590
			}
593
		}
591
		}
594
	}
592
	}
595
 
593
 
Line 603... Line 601...
603
		endMessage += L"\n\n";
601
		endMessage += L"\n\n";
604
		endMessage += uText;
602
		endMessage += uText;
605
		endMessage += L"\n";
603
		endMessage += L"\n";
606
	}
604
	}
607
 
605
 
608
	printf ( "  - Unistalling                    " );
606
	wprintf(L"  - Unistalling                    " );
609
	packages->PrepareUninstallPackage(p);
607
	packages->PrepareUninstallPackage(p);
610
	if ( packages->uninstallPreparedPackages(errors, &progress) )
608
	if ( packages->uninstallPreparedPackages(errors, &progress) )
611
	{
609
	{
612
		progress.Finish();
610
		progress.Finish();
613
	}
611
	}
614
	else
612
	else
615
	{
613
	{
616
		endMessage = L"";
614
		endMessage = L"";
617
		printf ( "ERROR!\n" );
615
		wprintf(L"ERROR!\n" );
618
		return false;
616
		return false;
619
	}
617
	}
620
 
618
 
621
 
619
 
622
	return true;
620
	return true;
Line 630... Line 628...
630
 
628
 
631
	CProgressConsole progress;
629
	CProgressConsole progress;
632
 
630
 
633
	endMessage = L"Enabled: " + p->getFullPackageName(packages->GetLanguage());
631
	endMessage = L"Enabled: " + p->getFullPackageName(packages->GetLanguage());
634
 
632
 
635
	printf ( "  - Enabling                       " );
633
	wprintf(L"  - Enabling                       " );
636
	if ( packages->enablePackage(p, errors, &progress) )
634
	if ( packages->enablePackage(p, errors, &progress) )
637
	{
635
	{
638
		progress.Finish();
636
		progress.Finish();
639
	}
637
	}
640
	else
638
	else
641
	{
639
	{
642
		int error = packages->GetError();
640
		int error = packages->GetError();
643
		endMessage = "";
641
		endMessage = "";
644
		printf ( "ERROR! " );
642
		wprintf(L"ERROR! " );
645
		if ( error == PKERR_NOPARENT )
643
		if ( error == PKERR_NOPARENT )
646
			printf ( "Parent package is disabled" );
644
			wprintf(L"Parent package is disabled" );
647
		printf ( "\n" );
645
		wprintf(L"\n" );
648
		return false;
646
		return false;
649
	}
647
	}
650
	return true;
648
	return true;
651
}
649
}
652
 
650
 
Line 658... Line 656...
658
 
656
 
659
	CProgressConsole progress;
657
	CProgressConsole progress;
660
 
658
 
661
	endMessage = L"Disabled: " + p->getFullPackageName(packages->GetLanguage());
659
	endMessage = L"Disabled: " + p->getFullPackageName(packages->GetLanguage());
662
 
660
 
663
	printf ( "  - Disabling                      " );
661
	wprintf(L"  - Disabling                      " );
664
	if ( packages->disablePackage(p, errors, &progress) )
662
	if ( packages->disablePackage(p, errors, &progress) )
665
	{
663
	{
666
		progress.Finish();
664
		progress.Finish();
667
	}
665
	}
668
	else
666
	else
669
	{
667
	{
670
		endMessage = L"";
668
		endMessage = L"";
671
		printf ( "ERROR!\n" );
669
		wprintf(L"ERROR!\n" );
672
		return false;
670
		return false;
673
	}
671
	}
674
	return true;
672
	return true;
675
}
673
}
676
 
674
 
677
void RemoveUninstallScripts(CPackages *packages, Utils::WStringList *errors)
675
void RemoveUninstallScripts(CPackages *packages, Utils::WStringList *errors)
678
{
676
{
679
	CProgressConsole progress;
677
	CProgressConsole progress;
680
	printf ( "  - Removing uninstall scripts     " );
678
	wprintf(L"  - Removing uninstall scripts     " );
681
	packages->removeUninstallScripts(errors, &progress);
679
	packages->removeUninstallScripts(errors, &progress);
682
	progress.Finish();
680
	progress.Finish();
683
}
681
}
684
 
682
 
685
void RemoveUnusedShared(CPackages *packages, Utils::WStringList *errors)
683
void RemoveUnusedShared(CPackages *packages, Utils::WStringList *errors)
686
{
684
{
687
	CProgressConsole progress;
685
	CProgressConsole progress;
688
	printf ( "  - Removing unused shared files   " );
686
	wprintf(L"  - Removing unused shared files   " );
689
	packages->removeUnusedSharedFiles(errors, &progress);
687
	packages->removeUnusedSharedFiles(errors, &progress);
690
	progress.Finish();
688
	progress.Finish();
691
}
689
}
692
 
690
 
693
 
691
 
Line 695... Line 693...
695
{
693
{
696
	if ( !g_debug )
694
	if ( !g_debug )
697
		return;
695
		return;
698
 
696
 
699
	if (errors && errors->size())
697
	if (errors && errors->size())
700
		printf ( "\n");
698
		wprintf(L"\n");
701
 
699
 
702
	for(auto itr = errors->begin(); itr != errors->end(); itr++)
700
	for(auto itr = errors->begin(); itr != errors->end(); itr++)
703
	{
701
	{
704
		int errornum = (*itr)->data.toInt();
702
		int errornum = (*itr)->data.toInt();
705
		//Check this?
703
		//Check this?
Line 709... Line 707...
709
		Utils::WString err = FormatErrorString(errornum, rest);
707
		Utils::WString err = FormatErrorString(errornum, rest);
710
		wprintf(L"  * %s\n", err.c_str());
708
		wprintf(L"  * %s\n", err.c_str());
711
	}
709
	}
712
 
710
 
713
	if (errors && errors->size())
711
	if (errors && errors->size())
714
		printf ( "\n");
712
		wprintf(L"\n");
715
}
713
}
716
 
714
 
717
void ShowInfo(const Utils::CommandLine& cmd)
715
void ShowInfo(const Utils::CommandLine& cmd)
718
{
716
{
719
	int package = Utils::WString(cmd.arg(1)).toInt();
717
	int package = Utils::WString(cmd.arg(1)).toInt();
Line 806... Line 804...
806
	Main entry point to program
804
	Main entry point to program
807
*/
805
*/
808
int main ( int argc, char **argv )
806
int main ( int argc, char **argv )
809
{
807
{
810
 	// display program header to command prompt
808
 	// display program header to command prompt
811
	printf ( "\nSPKInstall V1.00 (SPK Library Version %.2f) 31/05/2025 Created by Cycrow\n\n", GetLibraryVersion() );
809
	wprintf(L"\nSPKInstall V1.00 (SPK Library Version %.2f) 31/05/2025 Created by Cycrow\n\n", GetLibraryVersion() );
812
 
810
 
813
	Utils::CommandLine cmd(argc, argv, true);
811
	Utils::CommandLine cmd(argc, argv, true);
814
 
812
 
815
	// not enough arguments, display the syntax and exit
813
	// not enough arguments, display the syntax and exit
816
	if (cmd.argCount() < 1 )
814
	if (cmd.argCount() < 1 )
Line 1025... Line 1023...
1025
				progress.Finish(false);
1023
				progress.Finish(false);
1026
 
1024
 
1027
				Utils::WString gameName = packages.getGameName();
1025
				Utils::WString gameName = packages.getGameName();
1028
				if ( packages.GetLanguage() || !gameName.empty())
1026
				if ( packages.GetLanguage() || !gameName.empty())
1029
				{
1027
				{
1030
					printf ( "\n\t" );
1028
					wprintf(L"\n\t" );
1031
					if ( !gameName.empty() )
1029
					if ( !gameName.empty() )
1032
						wprintf ( L"Game: %s ", gameName.c_str());
1030
						wprintf ( L"Game: %s ", gameName.c_str());
1033
					if ( packages.GetLanguage() )
1031
					if ( packages.GetLanguage() )
1034
						printf ( "(Language: %d)", packages.GetLanguage() );
1032
						wprintf(L"(Language: %d)", packages.GetLanguage() );
1035
				}
1033
				}
1036
				printf ( "\n" );
1034
				wprintf(L"\n" );
1037
			}
1035
			}
1038
			else
1036
			else
1039
			{
1037
			{
1040
				printf ( "ERROR!\n" );
1038
				wprintf(L"ERROR!\n" );
1041
				exit(1);
1039
				exit(1);
1042
			}
1040
			}
1043
 
1041
 
1044
			bool prepare = false;
1042
			bool prepare = false;
1045
 
1043
 
Line 1097... Line 1095...
1097
			}
1095
			}
1098
 
1096
 
1099
			if ( prepare )
1097
			if ( prepare )
1100
			{
1098
			{
1101
				lErrors.clear();
1099
				lErrors.clear();
1102
				printf ( "  - Preparing game directory       " );
1100
				wprintf(L"  - Preparing game directory       " );
1103
				if ( packages.closeDir(&lErrors, &progress, true) )
1101
				if ( packages.closeDir(&lErrors, &progress, true) )
1104
					progress.Finish();
1102
					progress.Finish();
1105
				else
1103
				else
1106
				{
1104
				{
1107
					printf ( "ERROR!\n" );
1105
					wprintf(L"ERROR!\n" );
1108
					Pause();
1106
					Pause();
1109
					exit(1);
1107
					exit(1);
1110
				}
1108
				}
1111
 
1109
 
1112
				PrintDebug(&lErrors);
1110
				PrintDebug(&lErrors);
1113
			}
1111
			}
1114
			else
1112
			else
1115
				packages.RestoreFakePatch();
1113
				packages.RestoreFakePatch();
1116
 
1114
 
1117
			printf ( "\nDone!\n" );
1115
			wprintf(L"\nDone!\n" );
1118
			if ( !endMessage.empty() )
1116
			if ( !endMessage.empty() )
1119
				wprintf(L"\n%s\n", endMessage.c_str() );
1117
				wprintf(L"\n%s\n", endMessage.c_str() );
1120
		}
1118
		}
1121
		else
1119
		else
1122
			printf ( "Unknown Command: %c\n", c );
1120
			wprintf(L"Unknown Command: %c\n", c );
1123
	}
1121
	}
1124
 
1122
 
1125
	Pause();
1123
	Pause();
1126
 
1124
 
1127
	return 0;
1125
	return 0;