Index: scumm/dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.49
diff -u -r1.49 dialogs.cpp
--- scumm/dialogs.cpp	28 May 2003 00:07:56 -0000	1.49
+++ scumm/dialogs.cpp	1 Jun 2003 05:51:08 -0000
@@ -25,6 +25,7 @@
 #include "scumm.h"
 #include "imuse.h"
 #include "verbs.h"
+#include "help.h"
 
 #include "gui/newgui.h"
 #include "gui/ListWidget.h"
@@ -78,7 +79,8 @@
 	"Map",												//24
 	"Choose an action to map",							//25
 	"Press the key to associate",						//26
-	"Please select an action"							//27
+	"Please select an action",							//27
+	"Help"										//28
 };
 
 #ifdef __PALM_OS__
@@ -219,7 +221,8 @@
 	kLoadCmd = 'LOAD',
 	kPlayCmd = 'PLAY',
 	kOptionsCmd = 'OPTN',
-	kQuitCmd = 'QUIT'
+	kQuitCmd = 'QUIT',
+	kHelpCmd = 'HELP',
 };
 
 SaveLoadDialog::SaveLoadDialog(NewGui *gui, Scumm *scumm)
@@ -234,10 +237,17 @@
 	_loadButton = addPushButton(x, 40, queryResString(5), kLoadCmd, 'L');
 	addButton(x, 60, queryResString(6), kPlayCmd, 'P');	// Play
 	addButton(x, 80, queryCustomString(17), kOptionsCmd, 'O');	// Options
-	addButton(x, 100, queryResString(8), kQuitCmd, 'Q');	// Quit
+	addButton(x, 100, queryCustomString(28), kHelpCmd, 'H');	// Help
+	addButton(x, 120, queryResString(8), kQuitCmd, 'Q');	// Quit
 
 	// The save game list
 	_savegameList = new ListWidget(this, 8, 20, x - 14, 134);
+
+	_helpDialog = new HelpDialog(gui, scumm);
+}
+
+SaveLoadDialog::~SaveLoadDialog() {
+	delete _helpDialog;
 }
 
 void SaveLoadDialog::open() {
@@ -296,6 +306,9 @@
 	case kOptionsCmd:
 		_scumm->optionsDialog();
 		break;
+	case kHelpCmd:
+		_helpDialog->runModal();
+		break;
 	case kQuitCmd:
 #ifdef __PALM_OS__
 		close();
@@ -553,6 +566,78 @@
 	new StaticTextWidget(this, 10, 50, 240, 16, "All games (c) LucasArts", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 64, 240, 16, "Except", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 78, 240, 16, "Simon the Sorcerer (c) Adventuresoft", kTextAlignCenter);
+}
+
+#pragma mark -
+
+enum {
+	kNextCmd = 'NEXT',
+	kPrevCmd = 'PREV'
+};
+
+HelpDialog::HelpDialog(NewGui *gui, Scumm *scumm)
+	: ScummDialog(gui, scumm, 20, 10, 280, 184) {
+
+	_page = 1;
+	_gameId = scumm->_gameId;
+	_numPages = ScummHelp::numPages(_gameId);
+
+	_prevButton = addPushButton(10, 160, "Previous", kPrevCmd, 'P');
+	_nextButton = addPushButton(90, 160, "Next", kNextCmd, 'N');
+	addButton(200, 160, "Close", kCloseCmd, 'C');
+	_prevButton->clearFlags(WIDGET_ENABLED);
+
+	_title = new StaticTextWidget(this, 10, 5, 260, 16, "", kTextAlignCenter);
+	for (int i = 0; i < HELP_NUM_LINES; i++) {
+		_key[i] = new StaticTextWidget(this, 10, 20 + (10 * i), 70, 16, "", kTextAlignLeft);
+		_dsc[i] = new StaticTextWidget(this, 80, 20 + (10 * i), 190, 16, "", kTextAlignLeft);
+	}
+
+	displayKeyBindings();
+}
+
+void HelpDialog::displayKeyBindings() {
+	String titleStr, *keyStr, *dscStr;
+
+	ScummHelp::updateStrings(_gameId, _page, titleStr, keyStr, dscStr);
+
+	_title->setLabel(titleStr);
+	for (int i = 0; i < HELP_NUM_LINES; i++) {
+		_key[i]->setLabel(keyStr[i]);
+		_dsc[i]->setLabel(dscStr[i]);
+	}
+
+	delete [] keyStr;
+	delete [] dscStr;
+}
+
+void HelpDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+	switch (cmd) {
+	case kNextCmd:
+		_page++;
+		if (_page >= _numPages) {
+			_nextButton->clearFlags(WIDGET_ENABLED);
+		}
+		if (_page >= 2) {
+			_prevButton->setFlags(WIDGET_ENABLED);
+		}
+		displayKeyBindings();
+		draw();
+		break;
+	case kPrevCmd:
+		_page--;
+		if (_page <= _numPages) {
+			_nextButton->setFlags(WIDGET_ENABLED);
+		}
+		if (_page <= 1) {
+			_prevButton->clearFlags(WIDGET_ENABLED);
+		}
+		displayKeyBindings();
+		draw();
+		break;
+	default:
+		ScummDialog::handleCommand(sender, cmd, data);
+	}
 }
 
 #pragma mark -
Index: scumm/dialogs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.h,v
retrieving revision 1.17
diff -u -r1.17 dialogs.h
--- scumm/dialogs.h	25 Mar 2003 15:32:36 -0000	1.17
+++ scumm/dialogs.h	1 Jun 2003 05:51:08 -0000
@@ -23,6 +23,7 @@
 
 #include "common/str.h"
 #include "gui/dialog.h"
+#include "help.h"
 
 class ListWidget;
 class Scumm;
@@ -37,6 +38,8 @@
 
 	Scumm *_scumm;
 
+	Dialog *_helpDialog;
+
 	void addResText(int x, int y, int w, int h, int resID);
 
 	// Query a string from the resources
@@ -50,12 +53,13 @@
 class SaveLoadDialog : public ScummDialog {
 public:
 	SaveLoadDialog(NewGui *gui, Scumm *scumm);
+	~SaveLoadDialog();
 	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
 	virtual void open();	
 	virtual void close();
 
 protected:
-	ListWidget       *_savegameList;
+	ListWidget	 *_savegameList;
 
 	PushButtonWidget *_saveButton;
 	PushButtonWidget *_loadButton;
@@ -72,6 +76,29 @@
 class AboutDialog : public ScummDialog {
 public:
 	AboutDialog(NewGui *gui, Scumm *scumm);
+};
+
+class HelpDialog : public ScummDialog {
+public:
+	HelpDialog(NewGui *gui, Scumm *scumm);
+	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+
+protected:
+	typedef ScummVM::String String;
+
+	PushButtonWidget *_nextButton;
+	PushButtonWidget *_prevButton;
+
+	StaticTextWidget *_title;
+	StaticTextWidget *_key[HELP_NUM_LINES];
+	StaticTextWidget *_dsc[HELP_NUM_LINES];
+
+	int _page;
+	int _numPages;
+
+	byte _gameId;
+
+	void displayKeyBindings();
 };
 
 class OptionsDialog : public ScummDialog {
Index: scumm/module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/module.mk,v
retrieving revision 1.18
diff -u -r1.18 module.mk
--- scumm/module.mk	30 May 2003 19:00:31 -0000	1.18
+++ scumm/module.mk	1 Jun 2003 05:51:08 -0000
@@ -17,6 +17,7 @@
 	scumm/imuse_digi.o \
 	scumm/imuse_player.o \
 	scumm/instrument.o \
+	scumm/help.o \
 	scumm/nut_renderer.o \
 	scumm/object.o \
 	scumm/player_v2.o\
Index: gui/newgui.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/newgui.cpp,v
retrieving revision 1.46
diff -u -r1.46 newgui.cpp
--- gui/newgui.cpp	5 May 2003 16:10:19 -0000	1.46
+++ gui/newgui.cpp	1 Jun 2003 05:51:08 -0000
@@ -55,7 +55,7 @@
 // Built-in font
 static byte guifont[] = {
 0,0,99,1,226,8,4,8,6,8,6,0,0,0,0,0,0,0,0,0,0,0,8,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,4,3,7,8,7,7,8,4,5,5,8,7,4,7,3,8,7,7,7,7,8,7,7,7,7,7,3,4,7,5,7,7,8,7,7,7,7,7,7,7,7,5,7,7,
-7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,0,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0,
+7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,7,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0,
 0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,1,3,6,12,
 24,62,3,0,128,192,96,48,24,124,192,0,0,3,62,24,12,6,3,1,0,192,124,24,48,96,192,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,74,72,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,60,66,153,161,161,153,66,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -69,7 +69,7 @@
 96,192,0,120,24,24,24,24,24,120,0,0,0,0,0,0,219,219,0,0,0,0,0,0,0,0,255,102,102,102,0,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,14,24,62,24,24,
 24,0,0,0,62,102,102,62,6,124,0,96,96,124,102,102,102,0,0,48,0,112,48,48,120,0,0,12,0,12,12,12,12,120,0,96,96,108,120,108,102,0,0,112,48,48,48,48,120,0,0,0,102,127,127,107,99,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96,
 96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102,102,102,62,12,120,0,0,126,12,24,48,126,0,
-24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,0,0,0,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48,
+24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,97,153,134,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48,
 24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,60,96,96,96,60,24,56,24,36,60,102,126,96,60,0,102,0,60,102,126,96,60,0,48,24,60,102,126,96,60,0,0,216,0,112,48,48,120,0,48,72,0,112,48,48,120,0,96,48,0,112,48,48,120,0,102,24,60,102,126,102,102,0,0,0,
 0,0,0,0,0,0,24,48,124,96,120,96,124,0,0,0,108,26,126,216,110,0,30,40,40,126,72,136,142,0,24,36,60,102,102,102,60,0,102,0,60,102,102,102,60,0,48,24,60,102,102,102,60,0,24,36,0,102,102,102,62,0,48,24,102,102,102,102,62,0,0,0,0,0,0,0,0,0,102,60,102,
 102,102,102,60,0,102,0,102,102,102,102,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
Index: scumm.dsp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm.dsp,v
retrieving revision 1.41
diff -u -r1.41 scumm.dsp
--- scumm.dsp	30 May 2003 22:14:29 -0000	1.41
+++ scumm.dsp	1 Jun 2003 05:51:09 -0000
@@ -299,6 +299,14 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\scumm\help.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\scumm\help.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\scumm\imuse.cpp
 # End Source File
 # Begin Source File
Index: gui/newgui.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/newgui.cpp,v
retrieving revision 1.46
diff -u -r1.46 newgui.cpp
--- gui/newgui.cpp	5 May 2003 16:10:19 -0000	1.46
+++ gui/newgui.cpp	2 Jun 2003 17:13:05 -0000
@@ -55,7 +55,7 @@
 // Built-in font
 static byte guifont[] = {
 0,0,99,1,226,8,4,8,6,8,6,0,0,0,0,0,0,0,0,0,0,0,8,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,4,3,7,8,7,7,8,4,5,5,8,7,4,7,3,8,7,7,7,7,8,7,7,7,7,7,3,4,7,5,7,7,8,7,7,7,7,7,7,7,7,5,7,7,
-7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,0,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0,
+7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,7,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0,
 0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,1,3,6,12,
 24,62,3,0,128,192,96,48,24,124,192,0,0,3,62,24,12,6,3,1,0,192,124,24,48,96,192,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,74,72,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,60,66,153,161,161,153,66,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -69,7 +69,7 @@
 96,192,0,120,24,24,24,24,24,120,0,0,0,0,0,0,219,219,0,0,0,0,0,0,0,0,255,102,102,102,0,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,14,24,62,24,24,
 24,0,0,0,62,102,102,62,6,124,0,96,96,124,102,102,102,0,0,48,0,112,48,48,120,0,0,12,0,12,12,12,12,120,0,96,96,108,120,108,102,0,0,112,48,48,48,48,120,0,0,0,102,127,127,107,99,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96,
 96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102,102,102,62,12,120,0,0,126,12,24,48,126,0,
-24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,0,0,0,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48,
+24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,97,153,134,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48,
 24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,60,96,96,96,60,24,56,24,36,60,102,126,96,60,0,102,0,60,102,126,96,60,0,48,24,60,102,126,96,60,0,0,216,0,112,48,48,120,0,48,72,0,112,48,48,120,0,96,48,0,112,48,48,120,0,102,24,60,102,126,102,102,0,0,0,
 0,0,0,0,0,0,24,48,124,96,120,96,124,0,0,0,108,26,126,216,110,0,30,40,40,126,72,136,142,0,24,36,60,102,102,102,60,0,102,0,60,102,102,102,60,0,48,24,60,102,102,102,60,0,24,36,0,102,102,102,62,0,48,24,102,102,102,102,62,0,0,0,0,0,0,0,0,0,102,60,102,
 102,102,102,60,0,102,0,102,102,102,102,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
Index: scumm/dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.50
diff -u -r1.50 dialogs.cpp
--- scumm/dialogs.cpp	1 Jun 2003 16:41:25 -0000	1.50
+++ scumm/dialogs.cpp	2 Jun 2003 17:13:05 -0000
@@ -26,6 +26,7 @@
 #include "imuse.h"
 #include "player_v2.h"
 #include "verbs.h"
+#include "help.h"
 
 #include "gui/newgui.h"
 #include "gui/ListWidget.h"
@@ -79,7 +80,8 @@
 	"Map",												//24
 	"Choose an action to map",							//25
 	"Press the key to associate",						//26
-	"Please select an action"							//27
+	"Please select an action",							//27
+	"Help"										//28
 };
 
 #ifdef __PALM_OS__
@@ -220,7 +222,8 @@
 	kLoadCmd = 'LOAD',
 	kPlayCmd = 'PLAY',
 	kOptionsCmd = 'OPTN',
-	kQuitCmd = 'QUIT'
+	kQuitCmd = 'QUIT',
+	kHelpCmd = 'HELP',
 };
 
 SaveLoadDialog::SaveLoadDialog(NewGui *gui, Scumm *scumm)
@@ -235,10 +238,17 @@
 	_loadButton = addPushButton(x, 40, queryResString(5), kLoadCmd, 'L');
 	addButton(x, 60, queryResString(6), kPlayCmd, 'P');	// Play
 	addButton(x, 80, queryCustomString(17), kOptionsCmd, 'O');	// Options
-	addButton(x, 100, queryResString(8), kQuitCmd, 'Q');	// Quit
+	addButton(x, 100, queryCustomString(28), kHelpCmd, 'H');	// Help
+	addButton(x, 120, queryResString(8), kQuitCmd, 'Q');	// Quit
 
 	// The save game list
 	_savegameList = new ListWidget(this, 8, 20, x - 14, 134);
+
+	_helpDialog = new HelpDialog(gui, scumm);
+}
+
+SaveLoadDialog::~SaveLoadDialog() {
+	delete _helpDialog;
 }
 
 void SaveLoadDialog::open() {
@@ -297,6 +307,9 @@
 	case kOptionsCmd:
 		_scumm->optionsDialog();
 		break;
+	case kHelpCmd:
+		_helpDialog->runModal();
+		break;
 	case kQuitCmd:
 #ifdef __PALM_OS__
 		close();
@@ -557,6 +570,78 @@
 	new StaticTextWidget(this, 10, 50, 240, 16, "All games (c) LucasArts", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 64, 240, 16, "Except", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 78, 240, 16, "Simon the Sorcerer (c) Adventuresoft", kTextAlignCenter);
+}
+
+#pragma mark -
+
+enum {
+	kNextCmd = 'NEXT',
+	kPrevCmd = 'PREV'
+};
+
+HelpDialog::HelpDialog(NewGui *gui, Scumm *scumm)
+	: ScummDialog(gui, scumm, 15, 10, 290, 184) {
+
+	_page = 1;
+	_gameId = scumm->_gameId;
+	_numPages = ScummHelp::numPages(_gameId);
+
+	_prevButton = addPushButton(10, 160, "Previous", kPrevCmd, 'P');
+	_nextButton = addPushButton(90, 160, "Next", kNextCmd, 'N');
+	addButton(210, 160, "Close", kCloseCmd, 'C');
+	_prevButton->clearFlags(WIDGET_ENABLED);
+
+	_title = new StaticTextWidget(this, 10, 5, 270, 16, "", kTextAlignCenter);
+	for (int i = 0; i < HELP_NUM_LINES; i++) {
+		_key[i] = new StaticTextWidget(this, 10, 20 + (10 * i), 80, 16, "", kTextAlignLeft);
+		_dsc[i] = new StaticTextWidget(this, 90, 20 + (10 * i), 190, 16, "", kTextAlignLeft);
+	}
+
+	displayKeyBindings();
+}
+
+void HelpDialog::displayKeyBindings() {
+	String titleStr, *keyStr, *dscStr;
+
+	ScummHelp::updateStrings(_gameId, _page, titleStr, keyStr, dscStr);
+
+	_title->setLabel(titleStr);
+	for (int i = 0; i < HELP_NUM_LINES; i++) {
+		_key[i]->setLabel(keyStr[i]);
+		_dsc[i]->setLabel(dscStr[i]);
+	}
+
+	delete [] keyStr;
+	delete [] dscStr;
+}
+
+void HelpDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+	switch (cmd) {
+	case kNextCmd:
+		_page++;
+		if (_page >= _numPages) {
+			_nextButton->clearFlags(WIDGET_ENABLED);
+		}
+		if (_page >= 2) {
+			_prevButton->setFlags(WIDGET_ENABLED);
+		}
+		displayKeyBindings();
+		draw();
+		break;
+	case kPrevCmd:
+		_page--;
+		if (_page <= _numPages) {
+			_nextButton->setFlags(WIDGET_ENABLED);
+		}
+		if (_page <= 1) {
+			_prevButton->clearFlags(WIDGET_ENABLED);
+		}
+		displayKeyBindings();
+		draw();
+		break;
+	default:
+		ScummDialog::handleCommand(sender, cmd, data);
+	}
 }
 
 #pragma mark -
Index: scumm/dialogs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.h,v
retrieving revision 1.17
diff -u -r1.17 dialogs.h
--- scumm/dialogs.h	25 Mar 2003 15:32:36 -0000	1.17
+++ scumm/dialogs.h	2 Jun 2003 17:13:05 -0000
@@ -23,6 +23,7 @@
 
 #include "common/str.h"
 #include "gui/dialog.h"
+#include "help.h"
 
 class ListWidget;
 class Scumm;
@@ -37,6 +38,8 @@
 
 	Scumm *_scumm;
 
+	Dialog *_helpDialog;
+
 	void addResText(int x, int y, int w, int h, int resID);
 
 	// Query a string from the resources
@@ -50,12 +53,13 @@
 class SaveLoadDialog : public ScummDialog {
 public:
 	SaveLoadDialog(NewGui *gui, Scumm *scumm);
+	~SaveLoadDialog();
 	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
 	virtual void open();	
 	virtual void close();
 
 protected:
-	ListWidget       *_savegameList;
+	ListWidget	 *_savegameList;
 
 	PushButtonWidget *_saveButton;
 	PushButtonWidget *_loadButton;
@@ -72,6 +76,29 @@
 class AboutDialog : public ScummDialog {
 public:
 	AboutDialog(NewGui *gui, Scumm *scumm);
+};
+
+class HelpDialog : public ScummDialog {
+public:
+	HelpDialog(NewGui *gui, Scumm *scumm);
+	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+
+protected:
+	typedef ScummVM::String String;
+
+	PushButtonWidget *_nextButton;
+	PushButtonWidget *_prevButton;
+
+	StaticTextWidget *_title;
+	StaticTextWidget *_key[HELP_NUM_LINES];
+	StaticTextWidget *_dsc[HELP_NUM_LINES];
+
+	int _page;
+	int _numPages;
+
+	byte _gameId;
+
+	void displayKeyBindings();
 };
 
 class OptionsDialog : public ScummDialog {
Index: scumm/module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/module.mk,v
retrieving revision 1.18
diff -u -r1.18 module.mk
--- scumm/module.mk	30 May 2003 19:00:31 -0000	1.18
+++ scumm/module.mk	2 Jun 2003 17:13:05 -0000
@@ -17,6 +17,7 @@
 	scumm/imuse_digi.o \
 	scumm/imuse_player.o \
 	scumm/instrument.o \
+	scumm/help.o \
 	scumm/nut_renderer.o \
 	scumm/object.o \
 	scumm/player_v2.o\
Index: scumm.dsp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm.dsp,v
retrieving revision 1.41
diff -u -r1.41 scumm.dsp
--- scumm.dsp	30 May 2003 22:14:29 -0000	1.41
+++ scumm.dsp	2 Jun 2003 17:13:05 -0000
@@ -299,6 +299,14 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\scumm\help.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\scumm\help.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\scumm\imuse.cpp
 # End Source File
 # Begin Source File
